Mercurial > mplayer.hg
annotate loader/module.c @ 36984:3f3a415d605b
Move most of TranslateFilename() back to the renderer files.
Although it would be nice to share the code (which was the reason
for r34263), most of it really doesn't belong to string.c.
author | ib |
---|---|
date | Thu, 27 Mar 2014 01:49:01 +0000 |
parents | 5d19df9dfda8 |
children |
rev | line source |
---|---|
1 | 1 /* |
2 * Modules | |
3 * | |
4 * Copyright 1995 Alexandre Julliard | |
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
13745
diff
changeset
|
5 * |
18783 | 6 * Modified for use with MPlayer, detailed changelog at |
7 * http://svn.mplayerhq.hu/mplayer/trunk/ | |
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
13745
diff
changeset
|
8 * |
1 | 9 */ |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
10 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
11 // define for quicktime debugging (verbose logging): |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
12 //#define DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
13 |
3465 | 14 #include "config.h" |
21261
a2e02e6b6379
Rename config.h --> debug.h and include config.h explicitly.
diego
parents:
18878
diff
changeset
|
15 #include "debug.h" |
1 | 16 |
33668 | 17 // define for quicktime calls debugging and/or MacOS-level emulation: |
18 #if !defined(__APPLE__) && defined(CONFIG_QTX_CODECS) | |
19 #define EMU_QTX_API | |
20 #endif /* __APPLE__ */ | |
21 | |
1 | 22 #include <assert.h> |
23 #include <errno.h> | |
24 #include <fcntl.h> | |
25 #include <stdio.h> | |
26 #include <stdlib.h> | |
27 #include <string.h> | |
28 #include <unistd.h> | |
33412
2a2e9b6551d8
configure: Convert HAVE_SYS_MMAN_H into a 0/1 definition.
diego
parents:
31944
diff
changeset
|
29 #if HAVE_SYS_MMAN_H |
1 | 30 #include <sys/mman.h> |
26105 | 31 #endif |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
32 #include <inttypes.h> |
1 | 33 |
7386 | 34 #include "wine/windef.h" |
35 #include "wine/winerror.h" | |
36 #include "wine/heap.h" | |
37 #include "wine/module.h" | |
38 #include "wine/pe_image.h" | |
39 #include "wine/debugtools.h" | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
40 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
41 #undef HAVE_LIBDL |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
42 |
2069 | 43 #ifdef HAVE_LIBDL |
44 #include <dlfcn.h> | |
7386 | 45 #include "wine/elfdll.h" |
2069 | 46 #endif |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
128
diff
changeset
|
47 #include "win32.h" |
26999
0b21ffa03b9c
Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can
diego
parents:
26105
diff
changeset
|
48 #include "drv.h" |
30901 | 49 #include "path.h" |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
50 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
51 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
52 #include "wrapper.h" |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
53 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags); |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
54 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
55 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
56 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
57 //#undef TRACE |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
58 //#define TRACE printf |
1 | 59 |
60 //WINE_MODREF *local_wm=NULL; | |
61 modref_list* local_wm=NULL; | |
62 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
63 HANDLE SegptrHeap; |
2069 | 64 |
3465 | 65 WINE_MODREF* MODULE_FindModule(LPCSTR m) |
1 | 66 { |
67 modref_list* list=local_wm; | |
8277 | 68 TRACE("FindModule: Module %s request\n", m); |
1 | 69 if(list==NULL) |
70 return NULL; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
71 // while(strcmp(m, list->wm->filename)) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
72 while(!strstr(list->wm->filename, m)) |
1 | 73 { |
128 | 74 TRACE("%s: %x\n", list->wm->filename, list->wm->module); |
1 | 75 list=list->prev; |
76 if(list==NULL) | |
77 return NULL; | |
2069 | 78 } |
1 | 79 TRACE("Resolved to %s\n", list->wm->filename); |
80 return list->wm; | |
2069 | 81 } |
1 | 82 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
128
diff
changeset
|
83 static void MODULE_RemoveFromList(WINE_MODREF *mod) |
1 | 84 { |
85 modref_list* list=local_wm; | |
86 if(list==0) | |
87 return; | |
88 if(mod==0) | |
89 return; | |
90 if((list->prev==NULL)&&(list->next==NULL)) | |
91 { | |
92 free(list); | |
93 local_wm=NULL; | |
94 // uninstall_fs(); | |
95 return; | |
96 } | |
97 for(;list;list=list->prev) | |
98 { | |
99 if(list->wm==mod) | |
100 { | |
101 if(list->prev) | |
102 list->prev->next=list->next; | |
103 if(list->next) | |
104 list->next->prev=list->prev; | |
105 if(list==local_wm) | |
106 local_wm=list->prev; | |
107 free(list); | |
108 return; | |
109 } | |
110 } | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
111 |
2069 | 112 } |
113 | |
1 | 114 WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m) |
115 { | |
116 modref_list* list=local_wm; | |
8277 | 117 TRACE("LookupHMODULE: Module %X request\n", m); |
1 | 118 if(list==NULL) |
8277 | 119 { |
120 TRACE("LookupHMODULE failed\n"); | |
1 | 121 return NULL; |
8277 | 122 } |
1 | 123 while(m!=list->wm->module) |
124 { | |
125 // printf("Checking list %X wm %X module %X\n", | |
126 // list, list->wm, list->wm->module); | |
127 list=list->prev; | |
128 if(list==NULL) | |
8277 | 129 { |
130 TRACE("LookupHMODULE failed\n"); | |
1 | 131 return NULL; |
8277 | 132 } |
2069 | 133 } |
134 TRACE("LookupHMODULE hit %p\n", list->wm); | |
1 | 135 return list->wm; |
2069 | 136 } |
1 | 137 |
138 /************************************************************************* | |
139 * MODULE_InitDll | |
140 */ | |
141 static WIN_BOOL MODULE_InitDll( WINE_MODREF *wm, DWORD type, LPVOID lpReserved ) | |
142 { | |
143 WIN_BOOL retv = TRUE; | |
144 | |
25798
c8c9b4e89fb7
Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents:
25794
diff
changeset
|
145 #ifdef DEBUG |
2069 | 146 static LPCSTR typeName[] = { "PROCESS_DETACH", "PROCESS_ATTACH", |
1 | 147 "THREAD_ATTACH", "THREAD_DETACH" }; |
25798
c8c9b4e89fb7
Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents:
25794
diff
changeset
|
148 #endif |
c8c9b4e89fb7
Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents:
25794
diff
changeset
|
149 |
1 | 150 assert( wm ); |
151 | |
152 | |
153 /* Skip calls for modules loaded with special load flags */ | |
154 | |
155 if ( ( wm->flags & WINE_MODREF_DONT_RESOLVE_REFS ) | |
156 || ( wm->flags & WINE_MODREF_LOAD_AS_DATAFILE ) ) | |
157 return TRUE; | |
158 | |
159 | |
160 TRACE("(%s,%s,%p) - CALL\n", wm->modname, typeName[type], lpReserved ); | |
161 | |
162 /* Call the initialization routine */ | |
163 switch ( wm->type ) | |
164 { | |
165 case MODULE32_PE: | |
166 retv = PE_InitDLL( wm, type, lpReserved ); | |
167 break; | |
168 | |
169 case MODULE32_ELF: | |
170 /* no need to do that, dlopen() already does */ | |
171 break; | |
172 | |
173 default: | |
174 ERR("wine_modref type %d not handled.\n", wm->type ); | |
175 retv = FALSE; | |
176 break; | |
177 } | |
178 | |
179 /* The state of the module list may have changed due to the call | |
180 to PE_InitDLL. We cannot assume that this module has not been | |
181 deleted. */ | |
182 TRACE("(%p,%s,%p) - RETURN %d\n", wm, typeName[type], lpReserved, retv ); | |
183 | |
184 return retv; | |
185 } | |
186 | |
187 /************************************************************************* | |
188 * MODULE_DllProcessAttach | |
2069 | 189 * |
1 | 190 * Send the process attach notification to all DLLs the given module |
191 * depends on (recursively). This is somewhat complicated due to the fact that | |
192 * | |
193 * - we have to respect the module dependencies, i.e. modules implicitly | |
194 * referenced by another module have to be initialized before the module | |
195 * itself can be initialized | |
2069 | 196 * |
1 | 197 * - the initialization routine of a DLL can itself call LoadLibrary, |
198 * thereby introducing a whole new set of dependencies (even involving | |
199 * the 'old' modules) at any time during the whole process | |
200 * | |
201 * (Note that this routine can be recursively entered not only directly | |
202 * from itself, but also via LoadLibrary from one of the called initialization | |
203 * routines.) | |
204 * | |
205 * Furthermore, we need to rearrange the main WINE_MODREF list to allow | |
206 * the process *detach* notifications to be sent in the correct order. | |
2069 | 207 * This must not only take into account module dependencies, but also |
1 | 208 * 'hidden' dependencies created by modules calling LoadLibrary in their |
209 * attach notification routine. | |
210 * | |
211 * The strategy is rather simple: we move a WINE_MODREF to the head of the | |
212 * list after the attach notification has returned. This implies that the | |
213 * detach notifications are called in the reverse of the sequence the attach | |
214 * notifications *returned*. | |
215 * | |
216 * NOTE: Assumes that the process critical section is held! | |
217 * | |
218 */ | |
3465 | 219 static WIN_BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved ) |
1 | 220 { |
221 WIN_BOOL retv = TRUE; | |
24382 | 222 //int i; |
1 | 223 assert( wm ); |
224 | |
225 /* prevent infinite recursion in case of cyclical dependencies */ | |
226 if ( ( wm->flags & WINE_MODREF_MARKER ) | |
227 || ( wm->flags & WINE_MODREF_PROCESS_ATTACHED ) ) | |
228 return retv; | |
229 | |
230 TRACE("(%s,%p) - START\n", wm->modname, lpReserved ); | |
231 | |
232 /* Tag current MODREF to prevent recursive loop */ | |
233 wm->flags |= WINE_MODREF_MARKER; | |
234 | |
235 /* Recursively attach all DLLs this one depends on */ | |
236 /* for ( i = 0; retv && i < wm->nDeps; i++ ) | |
237 if ( wm->deps[i] ) | |
238 retv = MODULE_DllProcessAttach( wm->deps[i], lpReserved ); | |
239 */ | |
240 /* Call DLL entry point */ | |
241 | |
242 //local_wm=wm; | |
243 if(local_wm) | |
244 { | |
30702 | 245 local_wm->next = malloc(sizeof(modref_list)); |
1 | 246 local_wm->next->prev=local_wm; |
247 local_wm->next->next=NULL; | |
248 local_wm->next->wm=wm; | |
249 local_wm=local_wm->next; | |
250 } | |
251 else | |
252 { | |
18878 | 253 local_wm = malloc(sizeof(modref_list)); |
1 | 254 local_wm->next=local_wm->prev=NULL; |
255 local_wm->wm=wm; | |
2069 | 256 } |
1 | 257 /* Remove recursion flag */ |
258 wm->flags &= ~WINE_MODREF_MARKER; | |
2069 | 259 |
1 | 260 if ( retv ) |
261 { | |
262 retv = MODULE_InitDll( wm, DLL_PROCESS_ATTACH, lpReserved ); | |
263 if ( retv ) | |
264 wm->flags |= WINE_MODREF_PROCESS_ATTACHED; | |
265 } | |
266 | |
267 | |
268 TRACE("(%s,%p) - END\n", wm->modname, lpReserved ); | |
269 | |
270 return retv; | |
271 } | |
272 | |
273 /************************************************************************* | |
274 * MODULE_DllProcessDetach | |
2069 | 275 * |
276 * Send DLL process detach notifications. See the comment about calling | |
1 | 277 * sequence at MODULE_DllProcessAttach. Unless the bForceDetach flag |
278 * is set, only DLLs with zero refcount are notified. | |
279 */ | |
3465 | 280 static void MODULE_DllProcessDetach( WINE_MODREF* wm, WIN_BOOL bForceDetach, LPVOID lpReserved ) |
1 | 281 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
282 // WINE_MODREF *wm=local_wm; |
24382 | 283 //modref_list* l = local_wm; |
1 | 284 wm->flags &= ~WINE_MODREF_PROCESS_ATTACHED; |
285 MODULE_InitDll( wm, DLL_PROCESS_DETACH, lpReserved ); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
286 /* while (l) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
287 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
288 modref_list* f = l; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
289 l = l->next; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
290 free(f); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
291 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
292 local_wm = 0;*/ |
1 | 293 } |
294 | |
3465 | 295 /*********************************************************************** |
296 * MODULE_LoadLibraryExA (internal) | |
297 * | |
298 * Load a PE style module according to the load order. | |
299 * | |
300 * The HFILE parameter is not used and marked reserved in the SDK. I can | |
301 * only guess that it should force a file to be mapped, but I rather | |
302 * ignore the parameter because it would be extremely difficult to | |
303 * integrate this with different types of module represenations. | |
304 * | |
305 */ | |
306 static WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags ) | |
307 { | |
308 DWORD err = GetLastError(); | |
309 WINE_MODREF *pwm; | |
310 // module_loadorder_t *plo; | |
311 | |
312 SetLastError( ERROR_FILE_NOT_FOUND ); | |
313 TRACE("Trying native dll '%s'\n", libname); | |
314 pwm = PE_LoadLibraryExA(libname, flags); | |
315 #ifdef HAVE_LIBDL | |
316 if(!pwm) | |
317 { | |
318 TRACE("Trying ELF dll '%s'\n", libname); | |
319 pwm=(WINE_MODREF*)ELFDLL_LoadLibraryExA(libname, flags); | |
320 } | |
321 #endif | |
322 // printf("0x%08x\n", pwm); | |
323 // break; | |
324 if(pwm) | |
325 { | |
326 /* Initialize DLL just loaded */ | |
327 TRACE("Loaded module '%s' at 0x%08x, \n", libname, pwm->module); | |
328 /* Set the refCount here so that an attach failure will */ | |
329 /* decrement the dependencies through the MODULE_FreeLibrary call. */ | |
330 pwm->refCount++; | |
331 | |
332 SetLastError( err ); /* restore last error */ | |
333 return pwm; | |
334 } | |
335 | |
336 | |
337 WARN("Failed to load module '%s'; error=0x%08lx, \n", libname, GetLastError()); | |
338 return NULL; | |
339 } | |
340 | |
341 /*********************************************************************** | |
342 * MODULE_FreeLibrary | |
343 * | |
344 * NOTE: Assumes that the process critical section is held! | |
345 */ | |
346 static WIN_BOOL MODULE_FreeLibrary( WINE_MODREF *wm ) | |
347 { | |
348 TRACE("(%s) - START\n", wm->modname ); | |
349 | |
350 /* Call process detach notifications */ | |
351 MODULE_DllProcessDetach( wm, FALSE, NULL ); | |
352 | |
353 PE_UnloadLibrary(wm); | |
354 | |
355 TRACE("END\n"); | |
356 | |
357 return TRUE; | |
358 } | |
1 | 359 |
360 /*********************************************************************** | |
361 * LoadLibraryExA (KERNEL32) | |
362 */ | |
363 HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) | |
364 { | |
2069 | 365 WINE_MODREF *wm = 0; |
30913
e1e4487b9b43
Remove /usr[/local]/lib/win32 from the list of Win32 codec search paths.
diego
parents:
30907
diff
changeset
|
366 char* listpath[] = { "", "", 0 }; |
2069 | 367 char path[512]; |
368 char checked[2000]; | |
369 int i = -1; | |
1 | 370 |
2069 | 371 checked[0] = 0; |
1 | 372 if(!libname) |
373 { | |
374 SetLastError(ERROR_INVALID_PARAMETER); | |
375 return 0; | |
376 } | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
377 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
378 wm=MODULE_FindModule(libname); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
379 if(wm) return wm->module; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
380 |
3465 | 381 // if(fs_installed==0) |
382 // install_fs(); | |
2069 | 383 |
31944
68574c0269e4
Disable loading codecs from the current directory.
reimar
parents:
31390
diff
changeset
|
384 // Do not load libraries from a path relative to the current directory |
68574c0269e4
Disable loading codecs from the current directory.
reimar
parents:
31390
diff
changeset
|
385 if (*libname != '/') |
68574c0269e4
Disable loading codecs from the current directory.
reimar
parents:
31390
diff
changeset
|
386 i++; |
68574c0269e4
Disable loading codecs from the current directory.
reimar
parents:
31390
diff
changeset
|
387 |
2069 | 388 while (wm == 0 && listpath[++i]) |
389 { | |
390 if (i < 2) | |
391 { | |
392 if (i == 0) | |
393 /* check just original file name */ | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
394 strncpy(path, libname, 511); |
2069 | 395 else |
396 /* check default user path */ | |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30901
diff
changeset
|
397 strncpy(path, codec_path, 300); |
2069 | 398 } |
30907
b32527b30d17
Get rid of pointless def_path variable; use codec_path directly instead.
diego
parents:
30901
diff
changeset
|
399 else if (strcmp(codec_path, listpath[i])) |
2069 | 400 /* path from the list */ |
401 strncpy(path, listpath[i], 300); | |
402 else | |
403 continue; | |
1 | 404 |
2069 | 405 if (i > 0) |
406 { | |
407 strcat(path, "/"); | |
408 strncat(path, libname, 100); | |
409 } | |
410 path[511] = 0; | |
411 wm = MODULE_LoadLibraryExA( path, hfile, flags ); | |
412 | |
413 if (!wm) | |
414 { | |
415 if (checked[0]) | |
416 strcat(checked, ", "); | |
417 strcat(checked, path); | |
418 checked[1500] = 0; | |
419 | |
420 } | |
421 } | |
1 | 422 if ( wm ) |
423 { | |
424 if ( !MODULE_DllProcessAttach( wm, NULL ) ) | |
425 { | |
426 WARN_(module)("Attach failed for module '%s', \n", libname); | |
427 MODULE_FreeLibrary(wm); | |
428 SetLastError(ERROR_DLL_INIT_FAILED); | |
429 MODULE_RemoveFromList(wm); | |
430 wm = NULL; | |
431 } | |
432 } | |
433 | |
25418
0cc73d213160
Stop MPlayer from complaining about bogus AviSynth DLL load failures.
diego
parents:
24382
diff
changeset
|
434 if (!wm && !strstr(checked, "avisynth.dll")) |
2069 | 435 printf("Win32 LoadLibrary failed to load: %s\n", checked); |
7386 | 436 |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
437 #define RVA(x) ((char *)wm->module+(unsigned int)(x)) |
33862
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
438 if (strstr(libname, "CFDecode2.ax") && wm) |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
439 { |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
440 if (PE_FindExportedFunction(wm, "DllGetClassObject", TRUE) == RVA(0xd00e0)) |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
441 { |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
442 // Patch some movdqa to movdqu |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
443 // It is currently unclear why this is necessary, it seems |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
444 // to be some output frame, but our frame seems correctly |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
445 // aligned |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
446 int offsets[] = {0x7318c, 0x731ba, 0x731e0, 0x731fe, 0}; |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
447 int i; |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
448 for (i = 0; offsets[i]; i++) |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
449 { |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
450 int ofs = offsets[i]; |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
451 if (RVA(ofs)[0] == 0x66 && RVA(ofs)[1] == 0x0f && |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
452 RVA(ofs)[2] == 0x7f) |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
453 RVA(ofs)[0] = 0xf3; |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
454 } |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
455 } |
5d19df9dfda8
Add some runtime patching magic required for latest Cineform decoder.
reimar
parents:
33668
diff
changeset
|
456 } |
13621
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
457 if (strstr(libname,"vp31vfw.dll") && wm) |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
458 { |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
459 int i; |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
460 |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
461 // sse hack moved from patch dll into runtime patching |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
462 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x1000)) { |
13621
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
463 fprintf(stderr, "VP3 DLL found\n"); |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
464 for (i=0;i<18;i++) RVA(0x4bd6)[i]=0x90; |
13621
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
465 } |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
466 } |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
467 |
12042 | 468 // remove a few divs in the VP codecs that make trouble |
469 if (strstr(libname,"vp5vfw.dll") && wm) | |
470 { | |
471 int i; | |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
472 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3930)) { |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
473 for (i=0;i<3;i++) RVA(0x4e86)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
474 for (i=0;i<3;i++) RVA(0x5a23)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
475 for (i=0;i<3;i++) RVA(0x5bff)[i]=0x90; |
12042 | 476 } else { |
477 fprintf(stderr, "Unsupported VP5 version\n"); | |
478 return 0; | |
479 } | |
480 } | |
481 | |
482 if (strstr(libname,"vp6vfw.dll") && wm) | |
483 { | |
484 int i; | |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
485 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3ef0)) { |
12042 | 486 // looks like VP 6.1.0.2 |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
487 for (i=0;i<6;i++) RVA(0x7268)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
488 for (i=0;i<6;i++) RVA(0x7e83)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
489 for (i=0;i<6;i++) RVA(0x806a)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
490 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x4120)) { |
12042 | 491 // looks like VP 6.2.0.10 |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
492 for (i=0;i<6;i++) RVA(0x7688)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
493 for (i=0;i<6;i++) RVA(0x82c3)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
494 for (i=0;i<6;i++) RVA(0x84aa)[i]=0x90; |
18628
ff4455b0bd7c
Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents:
18617
diff
changeset
|
495 for (i=0;i<6;i++) RVA(0x1d2cc)[i]=0x90; |
ff4455b0bd7c
Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents:
18617
diff
changeset
|
496 for (i=0;i<6;i++) RVA(0x2179d)[i]=0x90; |
ff4455b0bd7c
Nop some instructions causing the vfwvp6 dll encoder to crash.
banan
parents:
18617
diff
changeset
|
497 for (i=0;i<6;i++) RVA(0x1977f)[i]=0x90; |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
498 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==RVA(0x3e70)) { |
12422 | 499 // looks like VP 6.0.7.3 |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
500 for (i=0;i<6;i++) RVA(0x7559)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
501 for (i=0;i<6;i++) RVA(0x81c3)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
502 for (i=0;i<6;i++) RVA(0x839e)[i]=0x90; |
12042 | 503 } else { |
504 fprintf(stderr, "Unsupported VP6 version\n"); | |
505 return 0; | |
506 } | |
507 } | |
508 | |
13745
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
509 // Windows Media Video 9 Advanced |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
510 if (strstr(libname,"wmvadvd.dll") && wm) |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
511 { |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
512 // The codec calls IsRectEmpty with coords 0,0,0,0 => result is 0 |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
513 // but it really wants the rectangle to be not empty |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
514 if (PE_FindExportedFunction(wm, "CreateInstance", TRUE)==RVA(0xb812)) { |
13745
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
515 // Dll version is 10.0.0.3645 |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
516 *RVA(0x8b0f)=0xeb; // Jump always, ignoring IsRectEmpty result |
13745
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
517 } else { |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
518 fprintf(stderr, "Unsupported WMVA version\n"); |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
519 return 0; |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
520 } |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
521 } |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
522 |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
523 if (strstr(libname,"QuickTime.qts") && wm) |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
524 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
525 void** ptr; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
526 void *dispatch_addr; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
527 int i; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
528 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
529 // dispatch_addr = GetProcAddress(wm->module, "theQuickTimeDispatcher", TRUE); |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
530 dispatch_addr = PE_FindExportedFunction(wm, "theQuickTimeDispatcher", TRUE); |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
531 if (dispatch_addr == RVA(0x124c30)) |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
532 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
533 fprintf(stderr, "QuickTime5 DLLs found\n"); |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
534 ptr = (void **)RVA(0x375ca4); // dispatch_ptr |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
535 for (i=0;i<5;i++) RVA(0x19e842)[i]=0x90; // make_new_region ? |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
536 for (i=0;i<28;i++) RVA(0x19e86d)[i]=0x90; // call__call_CreateCompatibleDC ? |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
537 for (i=0;i<5;i++) RVA(0x19e898)[i]=0x90; // jmp_to_call_loadbitmap ? |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
538 for (i=0;i<9;i++) RVA(0x19e8ac)[i]=0x90; // call__calls_OLE_shit ? |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
539 for (i=0;i<106;i++) RVA(0x261b10)[i]=0x90; // disable threads |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
540 #if 0 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
541 /* CreateThread callers */ |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
542 for (i=0;i<5;i++) RVA(0x1487c5)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
543 for (i=0;i<5;i++) RVA(0x14b275)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
544 for (i=0;i<5;i++) RVA(0x1a24b1)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
545 for (i=0;i<5;i++) RVA(0x1afc5a)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
546 for (i=0;i<5;i++) RVA(0x2f799c)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
547 for (i=0;i<5;i++) RVA(0x2f7efe)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
548 for (i=0;i<5;i++) RVA(0x2fa33e)[i]=0x90; |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
549 #endif |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
550 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
551 #if 0 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
552 /* TerminateQTML fix */ |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
553 for (i=0;i<47;i++) RVA(0x2fa3b8)[i]=0x90; // terminate thread |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
554 for (i=0;i<47;i++) RVA(0x2f7f78)[i]=0x90; // terminate thread |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
555 for (i=0;i<77;i++) RVA(0x1a13d5)[i]=0x90; |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
556 RVA(0x08e0ae)[0] = 0xc3; // font/dc remover |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
557 for (i=0;i<24;i++) RVA(0x07a1ad)[i]=0x90; // destroy window |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
558 #endif |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
559 } else if (dispatch_addr == RVA(0x13b330)) |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
560 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
561 fprintf(stderr, "QuickTime6 DLLs found\n"); |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
562 ptr = (void **)RVA(0x3b9524); // dispatcher_ptr |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
563 for (i=0;i<5;i++) RVA(0x2730cc)[i]=0x90; // make_new_region |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
564 for (i=0;i<28;i++) RVA(0x2730f7)[i]=0x90; // call__call_CreateCompatibleDC |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
565 for (i=0;i<5;i++) RVA(0x273122)[i]=0x90; // jmp_to_call_loadbitmap |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
566 for (i=0;i<9;i++) RVA(0x273131)[i]=0x90; // call__calls_OLE_shit |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
567 for (i=0;i<96;i++) RVA(0x2ac852)[i]=0x90; // disable threads |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
568 } else if (dispatch_addr == RVA(0x13c3e0)) |
10795
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
569 { |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
570 fprintf(stderr, "QuickTime6.3 DLLs found\n"); |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
571 ptr = (void **)RVA(0x3ca01c); // dispatcher_ptr |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
572 for (i=0;i<5;i++) RVA(0x268f6c)[i]=0x90; // make_new_region |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
573 for (i=0;i<28;i++) RVA(0x268f97)[i]=0x90; // call__call_CreateCompatibleDC |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
574 for (i=0;i<5;i++) RVA(0x268fc2)[i]=0x90; // jmp_to_call_loadbitmap |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
575 for (i=0;i<9;i++) RVA(0x268fd1)[i]=0x90; // call__calls_OLE_shit |
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
576 for (i=0;i<96;i++) RVA(0x2b4722)[i]=0x90; // disable threads |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
577 } else |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
578 { |
8451 | 579 fprintf(stderr, "Unsupported QuickTime version (%p)\n", |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
580 dispatch_addr); |
8451 | 581 return 0; |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
582 } |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
583 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
584 fprintf(stderr,"QuickTime.qts patched!!! old entry=%p\n",ptr[0]); |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
585 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
586 #ifdef EMU_QTX_API |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
587 report_entry = report_func; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
588 report_ret = report_func_ret; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
589 wrapper_target=ptr[0]; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
590 ptr[0]=wrapper; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
591 #endif |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
592 } |
18617
8a1439ab0d51
Fix runtime-patching code to take into account the address when the codec is loaded.
reimar
parents:
15166
diff
changeset
|
593 #undef RVA |
2069 | 594 |
1 | 595 return wm ? wm->module : 0; |
596 } | |
597 | |
598 | |
599 /*********************************************************************** | |
600 * LoadLibraryA (KERNEL32) | |
601 */ | |
602 HMODULE WINAPI LoadLibraryA(LPCSTR libname) { | |
603 return LoadLibraryExA(libname,0,0); | |
604 } | |
605 | |
606 /*********************************************************************** | |
607 * FreeLibrary | |
608 */ | |
609 WIN_BOOL WINAPI FreeLibrary(HINSTANCE hLibModule) | |
610 { | |
611 WIN_BOOL retv = FALSE; | |
612 WINE_MODREF *wm; | |
613 | |
614 wm=MODULE32_LookupHMODULE(hLibModule); | |
615 | |
616 if ( !wm || !hLibModule ) | |
617 { | |
618 SetLastError( ERROR_INVALID_HANDLE ); | |
619 return 0; | |
2069 | 620 } |
1 | 621 else |
622 retv = MODULE_FreeLibrary( wm ); | |
2069 | 623 |
1 | 624 MODULE_RemoveFromList(wm); |
625 | |
128 | 626 /* garbage... */ |
627 if (local_wm == NULL) my_garbagecollection(); | |
628 | |
1 | 629 return retv; |
630 } | |
631 | |
632 /*********************************************************************** | |
633 * GetProcAddress (KERNEL32.257) | |
634 */ | |
635 FARPROC WINAPI GetProcAddress( HMODULE hModule, LPCSTR function ) | |
636 { | |
637 return MODULE_GetProcAddress( hModule, function, TRUE ); | |
638 } | |
639 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
640 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
641 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
642 /* |
13622 | 643 http://lists.apple.com/archives/quicktime-api/2003/Jan/msg00278.html |
644 */ | |
645 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
646 struct ComponentParameters { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
647 unsigned char flags; /* call modifiers: sync/async, deferred, immed, etc */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
648 unsigned char paramSize; /* size in bytes of actual parameters passed to this call */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
649 short what; /* routine selector, negative for Component management calls */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
650 long params[1]; /* actual parameters for the indicated routine */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
651 }; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
652 typedef struct ComponentParameters ComponentParameters; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
653 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
654 static char* component_func(int what){ |
13622 | 655 if (what < 0) // Range 0: Standard Component Calls |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
656 switch(what){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
657 case -1: return "kComponentOpenSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
658 case -2: return "kComponentCloseSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
659 case -3: return "kComponentCanDoSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
660 case -4: return "kComponentVersionSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
661 case -5: return "kComponentRegisterSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
662 case -6: return "kComponentTargetSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
663 case -7: return "kComponentUnregisterSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
664 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
665 |
13622 | 666 if (what >= 0 && what <= 0xff) // Range 1: Generic codecs |
667 switch(what & 0xff){ | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
668 case 0: return "kImageCodecGetCodecInfoSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
669 case 1: return "kImageCodecGetCompressionTimeSelect"; |
13622 | 670 case 2: return "kImageCodecGetMaxCompressionSizeSelect"; |
671 case 3: return "kImageCodecPreCompressSelect"; | |
672 case 4: return "kImageCodecBandCompressSelect"; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
673 case 5: return "kImageCodecPreDecompressSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
674 case 6: return "kImageCodecBandDecompressSelect"; |
13622 | 675 case 7: return "kImageCodecBusySelect"; |
676 // finish this list from the above URL | |
677 case 0x10: return "kImageCodecIsImageDescriptionEquivalentSelect"; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
678 case 0x12: return "kImageCodecDisposeMemorySelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
679 case 0x14: return "kImageCodecNewImageBufferMemorySelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
680 case 0x28: return "kImageCodecRequestGammaLevelSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
681 } |
13622 | 682 |
683 //if (what >= 0x100 && what <= 0x1ff) // Range 2: Specific to QT Photo JPEG codecs | |
684 | |
685 if (what >= 0x200 && what <= 0x2ff) // Range 3: Base Decompressor | |
686 switch(what & 0xff){ | |
687 case 0: return "Preflight"; | |
688 case 1: return "Initialize"; | |
689 case 2: return "BeginBand"; | |
690 case 3: return "DrawBand"; | |
691 case 4: return "EndBand"; | |
692 case 5: return "QueueStarting"; | |
693 case 6: return "QueueStopping"; | |
694 } | |
695 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
696 return "???"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
697 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
698 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
699 static int c_level=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
700 |
25794
2c8cdb9123b8
Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents:
25418
diff
changeset
|
701 static int dump_component(char* name, int type, void* orig, ComponentParameters *params,void** glob){ |
2c8cdb9123b8
Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents:
25418
diff
changeset
|
702 int ( *orig)(ComponentParameters *params, void** glob) = orig; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
703 int ret,i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
704 |
13622 | 705 fprintf(stderr,"%*sComponentCall: %s flags=0x%X size=%d what=0x%X %s\n",3*c_level,"",name,params->flags, params->paramSize, params->what, component_func(params->what)); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
706 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
707 for(i=0;i<params->paramSize/4;i++) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
708 fprintf(stderr,"%*s param[%d] = 0x%X\n",3*c_level,"",i,params->params[i]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
709 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
710 ++c_level; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
711 ret=orig(params,glob); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
712 --c_level; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
713 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
714 if(ret>=0x1000) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
715 fprintf(stderr,"%*s return=0x%X\n",3*c_level,"",ret); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
716 else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
717 fprintf(stderr,"%*s return=%d\n",3*c_level,"",ret); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
718 return ret; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
719 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
720 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
721 #define DECL_COMPONENT(sname,name,type) \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
722 static void* real_ ## sname = NULL; \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
723 static int fake_ ## sname(ComponentParameters *params,void** glob){ \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
724 return dump_component(name,type,real_ ## sname, params, glob); \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
725 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
726 |
31390
1edec80a4ad7
Rename loader/qt_comp.h --> loader/qt_comp_template.c.
diego
parents:
31138
diff
changeset
|
727 #include "qt_comp_template.c" |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
728 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
729 #undef DECL_COMPONENT |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
730 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
731 #include "qt_fv.h" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
732 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
733 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
734 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
735 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
736 |
30499 | 737 #ifdef __OS2__ |
738 uint32_t _System DosQueryMem(void *, uint32_t *, uint32_t *); | |
739 #endif | |
740 | |
741 static int is_invalid_ptr_handle(void *p) | |
742 { | |
743 #ifdef __OS2__ | |
744 uint32_t cb = 1; | |
745 uint32_t fl; | |
746 | |
747 if(DosQueryMem(p, &cb, &fl)) | |
748 return 1; | |
749 | |
750 // Occasionally, ptr with 'EXEC' attr is passed. | |
751 // On OS/2, however, malloc() never sets 'EXEC' attr. | |
752 // So ptr with 'EXEC' attr is invalid. | |
753 if(fl & 0x04) | |
754 return 1; | |
755 | |
756 return 0; | |
757 #else | |
758 return (uint32_t)p >= 0x60000000; | |
759 #endif | |
760 } | |
761 | |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
762 static uint32_t ret_array[4096]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
763 static int ret_i=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
764 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
765 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
766 { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
767 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
768 int i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
769 int* dptr; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
770 void* pwrapper=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
771 void* pptr=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
772 char* pname=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
773 int plen=-1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
774 // find the code: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
775 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
776 dptr=0x62b67ae0;dptr+=2*((reg->eax>>16)&255); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
777 // printf("FUNC: flag=%d ptr=%p\n",dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
778 if(dptr[0]&255){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
779 dptr=dptr[1];dptr+=4*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
780 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",dptr[1],dptr[0],dptr[2]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
781 pwrapper=dptr[1]; pptr=dptr[0]; plen=dptr[2]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
782 } else { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
783 pwrapper=0x62924910; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
784 switch(dptr[1]){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
785 case 0x629248d0: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
786 dptr=0x62b672c0;dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
787 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
788 pptr=dptr[0]; plen=dptr[1]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
789 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
790 case 0x62924e40: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
791 dptr=0x62b67c70;dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
792 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
793 pptr=dptr[0]; plen=dptr[1]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
794 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
795 case 0x62924e60: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
796 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
797 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
798 pptr=dptr[0]; plen=dptr[1]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
799 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
800 case 0x62924e80: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
801 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
802 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
803 pptr=dptr[0]; plen=dptr[1]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
804 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
805 default: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
806 printf("FUNC: unknown ptr & psize!\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
807 pwrapper=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
808 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
809 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
810 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
811 for(i=0;qt_fv_list[i].name;i++){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
812 if(qt_fv_list[i].id==reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
813 pname=qt_fv_list[i].name; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
814 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
815 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
816 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
817 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
818 printf("FUNC[%X/%s]: wrapper=%p func=%p len=%d\n",reg->eax, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
819 pname?pname:"???",pwrapper,pptr,plen); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
820 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
821 printf("FUNC: caller=%p ebx=%p\n",((uint32_t *)stack_base)[0],reg->ebx); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
822 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
823 if(pname) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
824 printf("%*sENTER(%d): %s(",ret_i*2,"",ret_i,pname); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
825 else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
826 printf("%*sENTER(%d): %X(",ret_i*2,"",ret_i,reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
827 for (i=0;i<plen/4;i++){ |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
828 unsigned int val=((uint32_t *)stack_base)[1+i]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
829 unsigned char* fcc=&val; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
830 printf("%s0x%X", i?", ":"",val); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
831 if(fcc[0]>=0x20 && fcc[0]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
832 fcc[1]>=0x20 && fcc[1]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
833 fcc[2]>=0x20 && fcc[2]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
834 fcc[3]>=0x20 && fcc[3]<128) printf("='%c%c%c%c'",fcc[3],fcc[2],fcc[1],fcc[0]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
835 else if(val>=8 && val<65536) printf("=%d",val); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
836 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
837 printf(")\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
838 fflush(stdout); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
839 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
840 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
841 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
842 // emulate some functions: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
843 switch(reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
844 // memory management: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
845 case 0x150011: //NewPtrClear |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
846 case 0x150012: //NewPtrSysClear |
30702 | 847 reg->eax = malloc(((uint32_t *)stack_base)[1]); |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
848 memset((void *)reg->eax,0,((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
849 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
850 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
851 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
852 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
853 case 0x15000F: //NewPtr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
854 case 0x150010: //NewPtrSys |
30702 | 855 reg->eax = malloc(((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
856 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
857 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
858 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
859 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
860 case 0x15002f: //DisposePtr |
30499 | 861 if(is_invalid_ptr_handle(((void **)stack_base)[1])) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
862 printf("WARNING! Invalid Ptr handle!\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
863 else |
30499 | 864 free(((void **)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
865 reg->eax=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
866 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
867 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
868 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
869 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
870 // mutexes: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
871 case 0x1d0033: //QTMLCreateMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
872 reg->eax=0xdeadbabe; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
873 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
874 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
875 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
876 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
877 case 0x1d0034: //QTMLDestroyMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
878 case 0x1d0035: //QTMLGrabMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
879 case 0x1d0036: //QTMLReturnMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
880 case 0x1d003d: //QTMLTryGrabMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
881 reg->eax=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
882 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
883 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
884 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
885 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
886 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
887 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
888 #if 0 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
889 switch(reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
890 // case 0x00010000: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
891 // printf("FUNC: ImageCodecInitialize/ImageCodecGetCodecInfo(ci=%p,&icap=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[4]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
892 // break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
893 case 0x00010003: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
894 printf("FUNC: CountComponents(&desc=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
895 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
896 case 0x00010004: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
897 printf("FUNC: FindNextComponent(prev=%p,&desc=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[2]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
898 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
899 case 0x00010007: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
900 printf("FUNC: OpenComponent(prev=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
901 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
902 case 0x0003008b: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
903 printf("FUNC: QTNewGWorldFromPtr(&pts=%p,fourcc=%.4s,&rect=%p,x1=%p,x2=%p,x3=%p,plane=%p,stride=%d)\n", |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
904 ((uint32_t *)stack_base)[1], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
905 &(((uint32_t *)stack_base)[2]), |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
906 ((uint32_t *)stack_base)[3], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
907 ((uint32_t *)stack_base)[4], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
908 ((uint32_t *)stack_base)[5], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
909 ((uint32_t *)stack_base)[6], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
910 ((uint32_t *)stack_base)[7], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
911 ((uint32_t *)stack_base)[8]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
912 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
913 case 0x001c0018: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
914 printf("FUNC: GetGWorldPixMap(gworld=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
915 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
916 case 0x00110001: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
917 printf("FUNC: Gestalt(fourcc=%.4s, &ret=%p)\n",&(((uint32_t *)stack_base)[1]),((uint32_t *)stack_base)[2]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
918 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
919 default: { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
920 int i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
921 for(i=0;qt_fv_list[i].name;i++){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
922 if(qt_fv_list[i].id==reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
923 printf("FUNC: %s\n",qt_fv_list[i].name); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
924 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
925 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
926 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
927 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
928 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
929 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
930 // print stack/reg information |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
931 printf("ENTER(%d) stack = %d bytes @ %p\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
932 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
933 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
934 "flags = 0x%08x\n", ret_i, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
935 stack_size, stack_base, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
936 reg->eax, reg->edx, reg->ebx, reg->ecx, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
937 reg->esp, reg->ebp, reg->esi, reg->edi, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
938 *flags); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
939 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
940 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
941 // save ret addr: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
942 ret_array[ret_i]=((uint32_t *)stack_base)[0]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
943 ++ret_i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
944 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
945 #if 0 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
946 // print first 7 longs in the stack (return address, arg[1], arg[2] ... ) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
947 printf("stack[] = { "); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
948 for (i=0;i<7;i++) { |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
949 printf("%08x ", ((uint32_t *)stack_base)[i]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
950 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
951 printf("}\n\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
952 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
953 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
954 // // mess with function parameters |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
955 // ((uint32_t *)stack_base)[1] = 0x66554433; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
956 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
957 // // mess with return address... |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
958 // reg->eax = 0x11223344; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
959 return 0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
960 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
961 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
962 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
963 { |
24382 | 964 //int i; |
25798
c8c9b4e89fb7
Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents:
25794
diff
changeset
|
965 #ifdef DEBUG_QTX_API |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
966 short err; |
25798
c8c9b4e89fb7
Surround variable declarations by preprocessor conditionals to avoid warnings:
diego
parents:
25794
diff
changeset
|
967 #endif |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
968 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
969 // restore ret addr: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
970 --ret_i; |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
971 ((uint32_t *)stack_base)[0]=ret_array[ret_i]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
972 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
973 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
974 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
975 #if 1 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
976 printf("%*sLEAVE(%d): 0x%X",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
977 err=reg->eax; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
978 if(err && (reg->eax>>16)==0) printf(" = %d",err); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
979 printf("\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
980 fflush(stdout); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
981 #else |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
982 // print stack/reg information |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
983 printf("LEAVE(%d) stack = %d bytes @ %p\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
984 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
985 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
986 "flags = 0x%08x\n", ret_i, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
987 stack_size, stack_base, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
988 reg->eax, reg->edx, reg->ebx, reg->ecx, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
989 reg->esp, reg->ebp, reg->esi, reg->edi, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
990 *flags); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
991 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
992 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
993 #if 0 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
994 // print first 7 longs in the stack (return address, arg[1], arg[2] ... ) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
995 printf("stack[] = { "); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
996 for (i=0;i<7;i++) { |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
997 printf("%08x ", ((uint32_t *)stack_base)[i]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
998 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
999 printf("}\n\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1000 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1001 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1002 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
1003 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26999
diff
changeset
|
1004 // // mess with function parameters |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
1005 // ((uint32_t *)stack_base)[1] = 0x66554433; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1006 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1007 // // mess with return address... |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1008 // reg->eax = 0x11223344; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1009 return 0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1010 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1011 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1012 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1013 |
1 | 1014 /*********************************************************************** |
1015 * MODULE_GetProcAddress (internal) | |
1016 */ | |
2069 | 1017 FARPROC MODULE_GetProcAddress( |
1 | 1018 HMODULE hModule, /* [in] current module handle */ |
1019 LPCSTR function, /* [in] function to be looked up */ | |
1020 WIN_BOOL snoop ) | |
1021 { | |
1022 WINE_MODREF *wm = MODULE32_LookupHMODULE( hModule ); | |
2069 | 1023 // WINE_MODREF *wm=local_wm; |
1 | 1024 FARPROC retproc; |
1025 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1026 #ifdef DEBUG_QTX_API |
1 | 1027 if (HIWORD(function)) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1028 fprintf(stderr,"XXX GetProcAddress(%08lx,%s)\n",(DWORD)hModule,function); |
1 | 1029 else |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1030 fprintf(stderr,"XXX GetProcAddress(%08lx,%p)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1031 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1032 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1033 // TRACE_(win32)("(%08lx,%s)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1034 // else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1035 // TRACE_(win32)("(%08lx,%p)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1036 |
1 | 1037 if (!wm) { |
1038 SetLastError(ERROR_INVALID_HANDLE); | |
1039 return (FARPROC)0; | |
1040 } | |
1041 switch (wm->type) | |
1042 { | |
1043 case MODULE32_PE: | |
1044 retproc = PE_FindExportedFunction( wm, function, snoop ); | |
1045 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND); | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1046 break; |
2069 | 1047 #ifdef HAVE_LIBDL |
1 | 1048 case MODULE32_ELF: |
2069 | 1049 retproc = (FARPROC) dlsym( (void*) wm->module, function); |
1 | 1050 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND); |
1051 return retproc; | |
1052 #endif | |
1053 default: | |
1054 ERR("wine_modref type %d not handled.\n",wm->type); | |
1055 SetLastError(ERROR_INVALID_HANDLE); | |
1056 return (FARPROC)0; | |
1057 } | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1058 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1059 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1060 if (HIWORD(function) && retproc){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1061 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1062 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1063 #define DECL_COMPONENT(sname,name,type) \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1064 if(!strcmp(function,name)){ \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1065 fprintf(stderr,name "dispatcher catched -> %p\n",retproc); \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1066 real_ ## sname = retproc; retproc = fake_ ## sname; \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1067 } |
31390
1edec80a4ad7
Rename loader/qt_comp.h --> loader/qt_comp_template.c.
diego
parents:
31138
diff
changeset
|
1068 #include "qt_comp_template.c" |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1069 #undef DECL_COMPONENT |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1070 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1071 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1072 if(!strcmp(function,"theQuickTimeDispatcher") |
25794
2c8cdb9123b8
Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents:
25418
diff
changeset
|
1073 // || !strcmp(function,"CallComponentFunctionWithStorage") |
2c8cdb9123b8
Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents:
25418
diff
changeset
|
1074 // || !strcmp(function,"CallComponent") |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1075 ){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1076 fprintf(stderr,"theQuickTimeDispatcher catched -> %p\n",retproc); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1077 report_entry = report_func; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1078 report_ret = report_func_ret; |
13182 | 1079 wrapper_target=(void(*)(void))retproc; |
8451 | 1080 retproc=(FARPROC)wrapper; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1081 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1082 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1083 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1084 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1085 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1086 return retproc; |
1 | 1087 } |
1088 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1089 static int acounter = 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1090 void CodecAlloc(void) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1091 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1092 acounter++; |
3465 | 1093 //printf("**************CODEC ALLOC %d\n", acounter); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1094 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1095 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1096 void CodecRelease(void) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1097 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1098 acounter--; |
3465 | 1099 //printf("**************CODEC RELEASE %d\n", acounter); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1100 if (acounter == 0) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1101 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1102 for (;;) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1103 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1104 modref_list* list = local_wm; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1105 if (!local_wm) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1106 break; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1107 //printf("CODECRELEASE %p\n", list); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1108 MODULE_FreeLibrary(list->wm); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1109 MODULE_RemoveFromList(list->wm); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1110 if (local_wm == NULL) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1111 my_garbagecollection(); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1112 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1113 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1114 } |