Mercurial > mplayer.hg
annotate loader/win32.c @ 22704:ea1ea68543ca
sync with r22637
author | gpoirier |
---|---|
date | Sun, 18 Mar 2007 17:38:09 +0000 |
parents | 50225df605b5 |
children | 15ca243429f9 |
rev | line source |
---|---|
1 | 1 /*********************************************************** |
2 | |
3465 | 3 Win32 emulation code. Functions that emulate |
4 responses from corresponding Win32 API calls. | |
5 Since we are not going to be able to load | |
6 virtually any DLL, we can only implement this | |
7 much, adding needed functions with each new codec. | |
8 | |
9 Basic principle of implementation: it's not good | |
10 for DLL to know too much about its environment. | |
1 | 11 |
12 ************************************************************/ | |
13 | |
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
14212
diff
changeset
|
14 /* |
18783 | 15 * Modified for use with MPlayer, detailed changelog at |
16 * http://svn.mplayerhq.hu/mplayer/trunk/ | |
15166
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
14212
diff
changeset
|
17 * $Id$ |
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
14212
diff
changeset
|
18 */ |
f5537cc95b02
Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents:
14212
diff
changeset
|
19 |
2069 | 20 #include "config.h" |
21368 | 21 #include "mangle.h" |
1 | 22 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
23 #ifdef MPLAYER |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
24 #ifdef USE_QTX_CODECS |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
25 #define QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
26 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
27 #define REALPLAYER |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
28 //#define LOADLIB_TRY_NATIVE |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
29 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
30 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
31 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
32 #define PSEUDO_SCREEN_WIDTH /*640*/800 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
33 #define PSEUDO_SCREEN_HEIGHT /*480*/600 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
34 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
35 |
2069 | 36 #include "wine/winbase.h" |
37 #include "wine/winreg.h" | |
38 #include "wine/winnt.h" | |
39 #include "wine/winerror.h" | |
40 #include "wine/debugtools.h" | |
41 #include "wine/module.h" | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
42 #include "wine/winuser.h" |
2139 | 43 |
44 #include <stdio.h> | |
1 | 45 #include "win32.h" |
2069 | 46 |
2139 | 47 #include "registry.h" |
48 #include "loader.h" | |
49 #include "com.h" | |
8451 | 50 #include "ext.h" |
2139 | 51 |
2069 | 52 #include <stdlib.h> |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
53 #include <assert.h> |
2139 | 54 #include <stdarg.h> |
2069 | 55 #include <ctype.h> |
1 | 56 #include <pthread.h> |
128 | 57 #include <errno.h> |
1 | 58 #ifdef HAVE_MALLOC_H |
59 #include <malloc.h> | |
60 #endif | |
61 #include <time.h> | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
62 #include <math.h> |
128 | 63 #include <unistd.h> |
64 #include <fcntl.h> | |
1 | 65 #include <sys/types.h> |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
66 #include <dirent.h> |
1 | 67 #include <sys/time.h> |
68 #include <sys/timeb.h> | |
2069 | 69 #ifdef HAVE_KSTAT |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
70 #include <kstat.h> |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
71 #endif |
1 | 72 |
21462
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
73 #include <sys/mman.h> |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
74 #include "osdep/mmap_anon.h" |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
75 |
2906
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
76 #if HAVE_VSSCANF |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
77 int vsscanf( const char *str, const char *format, va_list ap); |
2906
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
78 #else |
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
79 /* system has no vsscanf. try to provide one */ |
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
80 static int vsscanf( const char *str, const char *format, va_list ap) |
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
81 { |
3465 | 82 long p1 = va_arg(ap, long); |
83 long p2 = va_arg(ap, long); | |
84 long p3 = va_arg(ap, long); | |
85 long p4 = va_arg(ap, long); | |
86 long p5 = va_arg(ap, long); | |
87 return sscanf(str, format, p1, p2, p3, p4, p5); | |
2906
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
88 } |
2ec3ec904cd4
Try to provide a vsscanf() implementation, if the system does not have
jkeil
parents:
2780
diff
changeset
|
89 #endif |
1416 | 90 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
91 char* def_path = WIN32_PATH; |
128 | 92 |
1923
40084ad62591
do_cpuid stored the results of the cpuid instruction in the wrong place
jkeil
parents:
1679
diff
changeset
|
93 static void do_cpuid(unsigned int ax, unsigned int *regs) |
128 | 94 { |
3465 | 95 __asm__ __volatile__ |
96 ( | |
97 "pushl %%ebx; pushl %%ecx; pushl %%edx;" | |
98 ".byte 0x0f, 0xa2;" | |
99 "movl %%eax, (%2);" | |
100 "movl %%ebx, 4(%2);" | |
101 "movl %%ecx, 8(%2);" | |
102 "movl %%edx, 12(%2);" | |
103 "popl %%edx; popl %%ecx; popl %%ebx;" | |
104 : "=a" (ax) | |
105 : "0" (ax), "S" (regs) | |
2069 | 106 ); |
128 | 107 } |
108 static unsigned int c_localcount_tsc() | |
1 | 109 { |
110 int a; | |
3465 | 111 __asm__ __volatile__ |
112 ( | |
113 "rdtsc\n\t" | |
114 :"=a"(a) | |
115 : | |
116 :"edx" | |
117 ); | |
1 | 118 return a; |
119 } | |
128 | 120 static void c_longcount_tsc(long long* z) |
1 | 121 { |
3465 | 122 __asm__ __volatile__ |
123 ( | |
124 "pushl %%ebx\n\t" | |
125 "movl %%eax, %%ebx\n\t" | |
126 "rdtsc\n\t" | |
127 "movl %%eax, 0(%%ebx)\n\t" | |
128 "movl %%edx, 4(%%ebx)\n\t" | |
129 "popl %%ebx\n\t" | |
130 ::"a"(z) | |
14212
540903a59fc0
add missing registers in clobber list, fixes bug #169
reimar
parents:
13751
diff
changeset
|
131 :"edx" |
3465 | 132 ); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
133 } |
128 | 134 static unsigned int c_localcount_notsc() |
1 | 135 { |
136 struct timeval tv; | |
137 unsigned limit=~0; | |
138 limit/=1000000; | |
139 gettimeofday(&tv, 0); | |
140 return limit*tv.tv_usec; | |
141 } | |
128 | 142 static void c_longcount_notsc(long long* z) |
1 | 143 { |
144 struct timeval tv; | |
145 unsigned long long result; | |
146 unsigned limit=~0; | |
147 if(!z)return; | |
148 limit/=1000000; | |
149 gettimeofday(&tv, 0); | |
150 result=tv.tv_sec; | |
151 result<<=32; | |
152 result+=limit*tv.tv_usec; | |
153 *z=result; | |
154 } | |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
155 static unsigned int localcount_stub(void); |
2069 | 156 static void longcount_stub(long long*); |
128 | 157 static unsigned int (*localcount)()=localcount_stub; |
158 static void (*longcount)(long long*)=longcount_stub; | |
1 | 159 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
160 static pthread_mutex_t memmut; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
161 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
162 static unsigned int localcount_stub(void) |
128 | 163 { |
164 unsigned int regs[4]; | |
1923
40084ad62591
do_cpuid stored the results of the cpuid instruction in the wrong place
jkeil
parents:
1679
diff
changeset
|
165 do_cpuid(1, regs); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
166 if ((regs[3] & 0x00000010) != 0) |
128 | 167 { |
168 localcount=c_localcount_tsc; | |
169 longcount=c_longcount_tsc; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
170 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
171 else |
128 | 172 { |
3465 | 173 localcount=c_localcount_notsc; |
128 | 174 longcount=c_longcount_notsc; |
175 } | |
176 return localcount(); | |
177 } | |
178 static void longcount_stub(long long* z) | |
1 | 179 { |
128 | 180 unsigned int regs[4]; |
1923
40084ad62591
do_cpuid stored the results of the cpuid instruction in the wrong place
jkeil
parents:
1679
diff
changeset
|
181 do_cpuid(1, regs); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
182 if ((regs[3] & 0x00000010) != 0) |
128 | 183 { |
184 localcount=c_localcount_tsc; | |
185 longcount=c_longcount_tsc; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
186 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
187 else |
128 | 188 { |
3465 | 189 localcount=c_localcount_notsc; |
128 | 190 longcount=c_longcount_notsc; |
191 } | |
192 longcount(z); | |
193 } | |
2780 | 194 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
195 #ifdef MPLAYER |
17020 | 196 #include "mp_msg.h" |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
197 #endif |
2069 | 198 int LOADER_DEBUG=1; // active only if compiled with -DDETAILED_OUT |
3128 | 199 //#define DETAILED_OUT |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
200 static inline void dbgprintf(char* fmt, ...) |
128 | 201 { |
235 | 202 #ifdef DETAILED_OUT |
128 | 203 if(LOADER_DEBUG) |
204 { | |
205 FILE* f; | |
206 va_list va; | |
3465 | 207 va_start(va, fmt); |
128 | 208 f=fopen("./log", "a"); |
3134 | 209 vprintf(fmt, va); |
3465 | 210 fflush(stdout); |
211 if(f) | |
128 | 212 { |
213 vfprintf(f, fmt, va); | |
214 fsync(fileno(f)); | |
3465 | 215 fclose(f); |
128 | 216 } |
217 va_end(va); | |
218 } | |
235 | 219 #endif |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
220 #ifdef MPLAYER |
17932 | 221 if ( mp_msg_test(MSGT_WIN32,MSGL_DBG3) ) |
5740 | 222 { |
223 va_list va; | |
224 | |
225 va_start(va, fmt); | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
226 vprintf(fmt, va); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
227 // mp_dbg(MSGT_WIN32, MSGL_DBG3, fmt, va); |
5740 | 228 va_end(va); |
229 } | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
230 fflush(stdout); |
3435 | 231 #endif |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
232 } |
3128 | 233 |
234 | |
3465 | 235 char export_names[300][32]={ |
236 "name1", | |
237 //"name2", | |
238 //"name3" | |
1 | 239 }; |
240 //#define min(x,y) ((x)<(y)?(x):(y)) | |
241 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
242 void destroy_event(void* event); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
243 |
3134 | 244 struct th_list_t; |
245 typedef struct th_list_t{ | |
246 int id; | |
247 void* thread; | |
248 struct th_list_t* next; | |
249 struct th_list_t* prev; | |
250 } th_list; | |
251 | |
252 | |
253 // have to be cleared by GARBAGE COLLECTOR | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
254 static unsigned char* heap=NULL; |
1 | 255 static int heap_counter=0; |
3134 | 256 static tls_t* g_tls=NULL; |
257 static th_list* list=NULL; | |
258 | |
2069 | 259 static void test_heap(void) |
1 | 260 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
261 int offset=0; |
1 | 262 if(heap==0) |
263 return; | |
264 while(offset<heap_counter) | |
265 { | |
266 if(*(int*)(heap+offset)!=0x433476) | |
267 { | |
268 printf("Heap corruption at address %d\n", offset); | |
269 return; | |
270 } | |
271 offset+=8+*(int*)(heap+offset+4); | |
272 } | |
273 for(;offset<min(offset+1000, 20000000); offset++) | |
274 if(heap[offset]!=0xCC) | |
3465 | 275 { |
276 printf("Free heap corruption at address %d\n", offset); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
277 } |
1 | 278 } |
279 #undef MEMORY_DEBUG | |
280 | |
281 #ifdef MEMORY_DEBUG | |
282 | |
7386 | 283 static void* my_mreq(int size, int to_zero) |
1 | 284 { |
285 static int test=0; | |
286 test++; | |
287 if(test%10==0)printf("Memory: %d bytes allocated\n", heap_counter); | |
3465 | 288 // test_heap(); |
1 | 289 if(heap==NULL) |
290 { | |
291 heap=malloc(20000000); | |
292 memset(heap, 0xCC,20000000); | |
293 } | |
294 if(heap==0) | |
295 { | |
296 printf("No enough memory\n"); | |
297 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
298 } |
1 | 299 if(heap_counter+size>20000000) |
300 { | |
301 printf("No enough memory\n"); | |
302 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
303 } |
1 | 304 *(int*)(heap+heap_counter)=0x433476; |
305 heap_counter+=4; | |
306 *(int*)(heap+heap_counter)=size; | |
307 heap_counter+=4; | |
308 printf("Allocated %d bytes of memory: sys %d, user %d-%d\n", size, heap_counter-8, heap_counter, heap_counter+size); | |
309 if(to_zero) | |
3465 | 310 memset(heap+heap_counter, 0, size); |
1543 | 311 else |
2139 | 312 memset(heap+heap_counter, 0xcc, size); // make crash reproducable |
1 | 313 heap_counter+=size; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
314 return heap+heap_counter-size; |
1 | 315 } |
7386 | 316 static int my_release(char* memory) |
1 | 317 { |
3465 | 318 // test_heap(); |
1 | 319 if(memory==NULL) |
320 { | |
321 printf("ERROR: free(0)\n"); | |
322 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
323 } |
1 | 324 if(*(int*)(memory-8)!=0x433476) |
325 { | |
326 printf("MEMORY CORRUPTION !!!!!!!!!!!!!!!!!!!\n"); | |
327 return 0; | |
328 } | |
329 printf("Freed %d bytes of memory\n", *(int*)(memory-4)); | |
3465 | 330 // memset(memory-8, *(int*)(memory-4), 0xCC); |
1 | 331 return 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
332 } |
1 | 333 |
334 #else | |
128 | 335 #define GARBAGE |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
336 typedef struct alloc_header_t alloc_header; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
337 struct alloc_header_t |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
338 { |
3465 | 339 // let's keep allocated data 16 byte aligned |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
340 alloc_header* prev; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
341 alloc_header* next; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
342 long deadbeef; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
343 long size; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
344 long type; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
345 long reserved1; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
346 long reserved2; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
347 long reserved3; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
348 }; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
349 |
128 | 350 #ifdef GARBAGE |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
351 static alloc_header* last_alloc = NULL; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
352 static int alccnt = 0; |
128 | 353 #endif |
354 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
355 #define AREATYPE_CLIENT 0 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
356 #define AREATYPE_EVENT 1 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
357 #define AREATYPE_MUTEX 2 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
358 #define AREATYPE_COND 3 |
3134 | 359 #define AREATYPE_CRITSECT 4 |
360 | |
361 /* -- critical sections -- */ | |
362 struct CRITSECT | |
363 { | |
364 pthread_t id; | |
365 pthread_mutex_t mutex; | |
366 int locked; | |
6321
c254cb1c26ef
new (cleaner, nore robust) critsect code by Zdenek Kabelac <kabi@informatics.muni.cz>
arpi
parents:
5872
diff
changeset
|
367 long deadbeef; |
3134 | 368 }; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
369 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
370 void* mreq_private(int size, int to_zero, int type); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
371 void* mreq_private(int size, int to_zero, int type) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
372 { |
3465 | 373 int nsize = size + sizeof(alloc_header); |
7386 | 374 alloc_header* header = (alloc_header* ) malloc(nsize); |
3465 | 375 if (!header) |
376 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
377 if (to_zero) |
3465 | 378 memset(header, 0, nsize); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
379 #ifdef GARBAGE |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
380 if (!last_alloc) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
381 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
382 pthread_mutex_init(&memmut, NULL); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
383 pthread_mutex_lock(&memmut); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
384 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
385 else |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
386 { |
3465 | 387 pthread_mutex_lock(&memmut); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
388 last_alloc->next = header; /* set next */ |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
389 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
390 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
391 header->prev = last_alloc; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
392 header->next = 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
393 last_alloc = header; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
394 alccnt++; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
395 pthread_mutex_unlock(&memmut); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
396 #endif |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
397 header->deadbeef = 0xdeadbeef; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
398 header->size = size; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
399 header->type = type; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
400 |
3128 | 401 //if (alccnt < 40000) printf("MY_REQ: %p\t%d t:%d (cnt:%d)\n", header, size, type, alccnt); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
402 return header + 1; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
403 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
404 |
7386 | 405 static int my_release(void* memory) |
1 | 406 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
407 alloc_header* header = (alloc_header*) memory - 1; |
128 | 408 #ifdef GARBAGE |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
409 alloc_header* prevmem; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
410 alloc_header* nextmem; |
3134 | 411 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
412 if (memory == 0) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
413 return 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
414 |
7386 | 415 if (header->deadbeef != (long) 0xdeadbeef) |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
416 { |
12258
25310086fc95
Less verbosity by moving some debug messages from printf --> dbgprintf.
diego
parents:
12074
diff
changeset
|
417 dbgprintf("FATAL releasing corrupted memory! %p 0x%lx (%d)\n", header, header->deadbeef, alccnt); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
418 return 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
419 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
420 |
3128 | 421 pthread_mutex_lock(&memmut); |
422 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
423 switch(header->type) |
128 | 424 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
425 case AREATYPE_EVENT: |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
426 destroy_event(memory); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
427 break; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
428 case AREATYPE_COND: |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
429 pthread_cond_destroy((pthread_cond_t*)memory); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
430 break; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
431 case AREATYPE_MUTEX: |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
432 pthread_mutex_destroy((pthread_mutex_t*)memory); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
433 break; |
3134 | 434 case AREATYPE_CRITSECT: |
435 pthread_mutex_destroy(&((struct CRITSECT*)memory)->mutex); | |
436 break; | |
437 default: | |
438 //memset(memory, 0xcc, header->size); | |
4384 | 439 ; |
128 | 440 } |
3128 | 441 |
3465 | 442 header->deadbeef = 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
443 prevmem = header->prev; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
444 nextmem = header->next; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
445 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
446 if (prevmem) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
447 prevmem->next = nextmem; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
448 if (nextmem) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
449 nextmem->prev = prevmem; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
450 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
451 if (header == last_alloc) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
452 last_alloc = prevmem; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
453 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
454 alccnt--; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
455 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
456 if (last_alloc) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
457 pthread_mutex_unlock(&memmut); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
458 else |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
459 pthread_mutex_destroy(&memmut); |
3465 | 460 |
3128 | 461 //if (alccnt < 40000) printf("MY_RELEASE: %p\t%ld (%d)\n", header, header->size, alccnt); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
462 #else |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
463 if (memory == 0) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
464 return 0; |
128 | 465 #endif |
3465 | 466 //memset(header + 1, 0xcc, header->size); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
467 free(header); |
1 | 468 return 0; |
469 } | |
470 #endif | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
471 |
7386 | 472 static inline void* my_mreq(int size, int to_zero) |
3465 | 473 { |
474 return mreq_private(size, to_zero, AREATYPE_CLIENT); | |
475 } | |
476 | |
7386 | 477 static int my_size(void* memory) |
5234 | 478 { |
479 if(!memory) return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
480 return ((alloc_header*)memory)[-1].size; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
481 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
482 |
3465 | 483 static void* my_realloc(void* memory, int size) |
1 | 484 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
485 void *ans = memory; |
5234 | 486 int osize; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
487 if (memory == NULL) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
488 return my_mreq(size, 0); |
5234 | 489 osize = my_size(memory); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
490 if (osize < size) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
491 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
492 ans = my_mreq(size, 0); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
493 memcpy(ans, memory, osize); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
494 my_release(memory); |
2069 | 495 } |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
496 return ans; |
2069 | 497 } |
1 | 498 |
3465 | 499 /* |
500 * | |
501 * WINE API - native implementation for several win32 libraries | |
502 * | |
503 */ | |
504 | |
505 static int WINAPI ext_unknown() | |
1 | 506 { |
507 printf("Unknown func called\n"); | |
508 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
509 } |
3465 | 510 |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
511 static int WINAPI expGetVolumeInformationA( const char *root, char *label, |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
512 unsigned int label_len, unsigned int *serial, |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
513 unsigned int *filename_len,unsigned int *flags, |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
514 char *fsname, unsigned int fsname_len ) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
515 { |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
516 dbgprintf("GetVolumeInformationA( %s, 0x%x, %ld, 0x%x, 0x%x, 0x%x, 0x%x, %ld) => 1\n", |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
517 root,label,label_len,serial,filename_len,flags,fsname,fsname_len); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
518 //hack Do not return any real data - do nothing |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
519 return 1; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
520 } |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
521 |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
522 static unsigned int WINAPI expGetDriveTypeA( const char *root ) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
523 { |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
524 dbgprintf("GetDriveTypeA( %s ) => %d\n",root,DRIVE_FIXED); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
525 // hack return as Fixed Drive Type |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
526 return DRIVE_FIXED; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
527 } |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
528 |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
529 static unsigned int WINAPI expGetLogicalDriveStringsA( unsigned int len, char *buffer ) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
530 { |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
531 dbgprintf("GetLogicalDriveStringsA(%d, 0x%x) => 4\n",len,buffer); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
532 // hack only have one drive c:\ in this hack |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
533 *buffer++='c'; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
534 *buffer++=':'; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
535 *buffer++='\\'; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
536 *buffer++='\0'; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
537 *buffer= '\0'; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
538 return 4; // 1 drive * 4 bytes (includes null) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
539 } |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
540 |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
541 |
3465 | 542 static int WINAPI expIsBadWritePtr(void* ptr, unsigned int count) |
1 | 543 { |
3465 | 544 int result = (count == 0 || ptr != 0) ? 0 : 1; |
128 | 545 dbgprintf("IsBadWritePtr(0x%x, 0x%x) => %d\n", ptr, count, result); |
546 return result; | |
1 | 547 } |
3465 | 548 static int WINAPI expIsBadReadPtr(void* ptr, unsigned int count) |
1 | 549 { |
3465 | 550 int result = (count == 0 || ptr != 0) ? 0 : 1; |
128 | 551 dbgprintf("IsBadReadPtr(0x%x, 0x%x) => %d\n", ptr, count, result); |
552 return result; | |
1 | 553 } |
3465 | 554 static int WINAPI expDisableThreadLibraryCalls(int module) |
1 | 555 { |
128 | 556 dbgprintf("DisableThreadLibraryCalls(0x%x) => 0\n", module); |
1 | 557 return 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
558 } |
3465 | 559 |
560 static HMODULE WINAPI expGetDriverModuleHandle(DRVR* pdrv) | |
1 | 561 { |
2069 | 562 HMODULE result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
563 if (pdrv==NULL) |
2069 | 564 result=0; |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
565 else |
3465 | 566 result=pdrv->hDriverModule; |
2069 | 567 dbgprintf("GetDriverModuleHandle(%p) => %p\n", pdrv, result); |
128 | 568 return result; |
1 | 569 } |
570 | |
2069 | 571 #define MODULE_HANDLE_kernel32 ((HMODULE)0x120) |
5234 | 572 #define MODULE_HANDLE_user32 ((HMODULE)0x121) |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
573 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
574 #define MODULE_HANDLE_wininet ((HMODULE)0x122) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
575 #define MODULE_HANDLE_ddraw ((HMODULE)0x123) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
576 #define MODULE_HANDLE_advapi32 ((HMODULE)0x124) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
577 #endif |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
578 #define MODULE_HANDLE_comdlg32 ((HMODULE)0x125) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
579 #define MODULE_HANDLE_msvcrt ((HMODULE)0x126) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
580 #define MODULE_HANDLE_ole32 ((HMODULE)0x127) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
581 #define MODULE_HANDLE_winmm ((HMODULE)0x128) |
2069 | 582 |
3465 | 583 static HMODULE WINAPI expGetModuleHandleA(const char* name) |
1 | 584 { |
3465 | 585 WINE_MODREF* wm; |
586 HMODULE result; | |
587 if(!name) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
588 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
589 result=1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
590 #else |
3465 | 591 result=0; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
592 #endif |
3465 | 593 else |
594 { | |
595 wm=MODULE_FindModule(name); | |
596 if(wm==0)result=0; | |
128 | 597 else |
3465 | 598 result=(HMODULE)(wm->module); |
599 } | |
600 if(!result) | |
601 { | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
602 if(name && (strcasecmp(name, "kernel32")==0 || !strcasecmp(name, "kernel32.dll"))) |
3465 | 603 result=MODULE_HANDLE_kernel32; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
604 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
605 if(name && strcasecmp(name, "user32")==0) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
606 result=MODULE_HANDLE_user32; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
607 #endif |
3465 | 608 } |
609 dbgprintf("GetModuleHandleA('%s') => 0x%x\n", name, result); | |
610 return result; | |
1 | 611 } |
128 | 612 |
3465 | 613 static void* WINAPI expCreateThread(void* pSecAttr, long dwStackSize, |
614 void* lpStartAddress, void* lpParameter, | |
615 long dwFlags, long* dwThreadId) | |
1 | 616 { |
617 pthread_t *pth; | |
3465 | 618 // printf("CreateThread:"); |
7386 | 619 pth = (pthread_t*) my_mreq(sizeof(pthread_t), 0); |
1 | 620 pthread_create(pth, NULL, (void*(*)(void*))lpStartAddress, lpParameter); |
621 if(dwFlags) | |
128 | 622 printf( "WARNING: CreateThread flags not supported\n"); |
1 | 623 if(dwThreadId) |
624 *dwThreadId=(long)pth; | |
625 if(list==NULL) | |
626 { | |
627 list=my_mreq(sizeof(th_list), 1); | |
628 list->next=list->prev=NULL; | |
629 } | |
630 else | |
631 { | |
632 list->next=my_mreq(sizeof(th_list), 0); | |
633 list->next->prev=list; | |
634 list->next->next=NULL; | |
635 list=list->next; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
636 } |
1 | 637 list->thread=pth; |
128 | 638 dbgprintf("CreateThread(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x) => 0x%x\n", |
3465 | 639 pSecAttr, dwStackSize, lpStartAddress, lpParameter, dwFlags, dwThreadId, pth); |
1 | 640 return pth; |
641 } | |
642 | |
643 struct mutex_list_t; | |
644 | |
645 struct mutex_list_t | |
646 { | |
128 | 647 char type; |
1 | 648 pthread_mutex_t *pm; |
128 | 649 pthread_cond_t *pc; |
650 char state; | |
651 char reset; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
652 char name[128]; |
128 | 653 int semaphore; |
1 | 654 struct mutex_list_t* next; |
655 struct mutex_list_t* prev; | |
656 }; | |
657 typedef struct mutex_list_t mutex_list; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
658 static mutex_list* mlist=NULL; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
659 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
660 void destroy_event(void* event) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
661 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
662 mutex_list* pp=mlist; |
3465 | 663 // printf("garbage collector: destroy_event(%x)\n", event); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
664 while(pp) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
665 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
666 if(pp==(mutex_list*)event) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
667 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
668 if(pp->next) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
669 pp->next->prev=pp->prev; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
670 if(pp->prev) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
671 pp->prev->next=pp->next; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
672 if(mlist==(mutex_list*)event) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
673 mlist=mlist->prev; |
3465 | 674 /* |
675 pp=mlist; | |
676 while(pp) | |
677 { | |
678 printf("%x => ", pp); | |
679 pp=pp->prev; | |
680 } | |
681 printf("0\n"); | |
682 */ | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
683 return; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
684 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
685 pp=pp->prev; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
686 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
687 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
688 |
3465 | 689 static void* WINAPI expCreateEventA(void* pSecAttr, char bManualReset, |
690 char bInitialState, const char* name) | |
1 | 691 { |
692 pthread_mutex_t *pm; | |
128 | 693 pthread_cond_t *pc; |
3465 | 694 /* |
695 mutex_list* pp; | |
696 pp=mlist; | |
697 while(pp) | |
698 { | |
699 printf("%x => ", pp); | |
700 pp=pp->prev; | |
701 } | |
702 printf("0\n"); | |
703 */ | |
1 | 704 if(mlist!=NULL) |
705 { | |
706 mutex_list* pp=mlist; | |
707 if(name!=NULL) | |
3465 | 708 do |
1 | 709 { |
128 | 710 if((strcmp(pp->name, name)==0) && (pp->type==0)) |
711 { | |
712 dbgprintf("CreateEventA(0x%x, 0x%x, 0x%x, 0x%x='%s') => 0x%x\n", | |
3465 | 713 pSecAttr, bManualReset, bInitialState, name, name, pp->pm); |
1 | 714 return pp->pm; |
128 | 715 } |
2069 | 716 }while((pp=pp->prev) != NULL); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
717 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
718 pm=mreq_private(sizeof(pthread_mutex_t), 0, AREATYPE_MUTEX); |
1 | 719 pthread_mutex_init(pm, NULL); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
720 pc=mreq_private(sizeof(pthread_cond_t), 0, AREATYPE_COND); |
128 | 721 pthread_cond_init(pc, NULL); |
1 | 722 if(mlist==NULL) |
723 { | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
724 mlist=mreq_private(sizeof(mutex_list), 00, AREATYPE_EVENT); |
1 | 725 mlist->next=mlist->prev=NULL; |
726 } | |
727 else | |
728 { | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
729 mlist->next=mreq_private(sizeof(mutex_list), 00, AREATYPE_EVENT); |
128 | 730 mlist->next->prev=mlist; |
1 | 731 mlist->next->next=NULL; |
732 mlist=mlist->next; | |
733 } | |
128 | 734 mlist->type=0; /* Type Event */ |
1 | 735 mlist->pm=pm; |
128 | 736 mlist->pc=pc; |
737 mlist->state=bInitialState; | |
738 mlist->reset=bManualReset; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
739 if(name) |
3465 | 740 strncpy(mlist->name, name, 127); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
741 else |
1 | 742 mlist->name[0]=0; |
743 if(pm==NULL) | |
744 dbgprintf("ERROR::: CreateEventA failure\n"); | |
3465 | 745 /* |
746 if(bInitialState) | |
747 pthread_mutex_lock(pm); | |
748 */ | |
128 | 749 if(name) |
3465 | 750 dbgprintf("CreateEventA(0x%x, 0x%x, 0x%x, 0x%x='%s') => 0x%x\n", |
751 pSecAttr, bManualReset, bInitialState, name, name, mlist); | |
128 | 752 else |
3465 | 753 dbgprintf("CreateEventA(0x%x, 0x%x, 0x%x, NULL) => 0x%x\n", |
754 pSecAttr, bManualReset, bInitialState, mlist); | |
128 | 755 return mlist; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
756 } |
1 | 757 |
3465 | 758 static void* WINAPI expSetEvent(void* event) |
1 | 759 { |
128 | 760 mutex_list *ml = (mutex_list *)event; |
761 dbgprintf("SetEvent(%x) => 0x1\n", event); | |
762 pthread_mutex_lock(ml->pm); | |
763 if (ml->state == 0) { | |
764 ml->state = 1; | |
765 pthread_cond_signal(ml->pc); | |
766 } | |
767 pthread_mutex_unlock(ml->pm); | |
768 | |
769 return (void *)1; | |
1 | 770 } |
3465 | 771 static void* WINAPI expResetEvent(void* event) |
1 | 772 { |
128 | 773 mutex_list *ml = (mutex_list *)event; |
774 dbgprintf("ResetEvent(0x%x) => 0x1\n", event); | |
775 pthread_mutex_lock(ml->pm); | |
776 ml->state = 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
777 pthread_mutex_unlock(ml->pm); |
128 | 778 |
779 return (void *)1; | |
1 | 780 } |
781 | |
3465 | 782 static void* WINAPI expWaitForSingleObject(void* object, int duration) |
1 | 783 { |
128 | 784 mutex_list *ml = (mutex_list *)object; |
2069 | 785 // FIXME FIXME FIXME - this value is sometime unititialize !!! |
786 int ret = WAIT_FAILED; | |
128 | 787 mutex_list* pp=mlist; |
2779 | 788 if(object == (void*)0xcfcf9898) |
789 { | |
3465 | 790 /** |
791 From GetCurrentThread() documentation: | |
792 A pseudo handle is a special constant that is interpreted as the current thread handle. The calling thread can use this handle to specify itself whenever a thread handle is required. Pseudo handles are not inherited by child processes. | |
793 | |
794 This handle has the maximum possible access to the thread object. For systems that support security descriptors, this is the maximum access allowed by the security descriptor for the calling process. For systems that do not support security descriptors, this is THREAD_ALL_ACCESS. | |
795 | |
796 The function cannot be used by one thread to create a handle that can be used by other threads to refer to the first thread. The handle is always interpreted as referring to the thread that is using it. A thread can create a "real" handle to itself that can be used by other threads, or inherited by other processes, by specifying the pseudo handle as the source handle in a call to the DuplicateHandle function. | |
797 **/ | |
2779 | 798 dbgprintf("WaitForSingleObject(thread_handle) called\n"); |
3128 | 799 return (void*)WAIT_FAILED; |
2779 | 800 } |
2069 | 801 dbgprintf("WaitForSingleObject(0x%x, duration %d) =>\n",object, duration); |
802 | |
718 | 803 // loop below was slightly fixed - its used just for checking if |
804 // this object really exists in our list | |
805 if (!ml) | |
3465 | 806 return (void*) ret; |
718 | 807 while (pp && (pp->pm != ml->pm)) |
2069 | 808 pp = pp->prev; |
718 | 809 if (!pp) { |
2069 | 810 dbgprintf("WaitForSingleObject: NotFound\n"); |
811 return (void*)ret; | |
718 | 812 } |
128 | 813 |
814 pthread_mutex_lock(ml->pm); | |
815 | |
816 switch(ml->type) { | |
3465 | 817 case 0: /* Event */ |
128 | 818 if (duration == 0) { /* Check Only */ |
3465 | 819 if (ml->state == 1) ret = WAIT_FAILED; |
820 else ret = WAIT_OBJECT_0; | |
128 | 821 } |
822 if (duration == -1) { /* INFINITE */ | |
3465 | 823 if (ml->state == 0) |
824 pthread_cond_wait(ml->pc,ml->pm); | |
825 if (ml->reset) | |
826 ml->state = 0; | |
827 ret = WAIT_OBJECT_0; | |
128 | 828 } |
829 if (duration > 0) { /* Timed Wait */ | |
3465 | 830 struct timespec abstime; |
831 struct timeval now; | |
832 gettimeofday(&now, 0); | |
833 abstime.tv_sec = now.tv_sec + (now.tv_usec+duration)/1000000; | |
834 abstime.tv_nsec = ((now.tv_usec+duration)%1000000)*1000; | |
835 if (ml->state == 0) | |
836 ret=pthread_cond_timedwait(ml->pc,ml->pm,&abstime); | |
837 if (ret == ETIMEDOUT) ret = WAIT_TIMEOUT; | |
838 else ret = WAIT_OBJECT_0; | |
839 if (ml->reset) | |
840 ml->state = 0; | |
128 | 841 } |
3465 | 842 break; |
843 case 1: /* Semaphore */ | |
844 if (duration == 0) { | |
845 if(ml->semaphore==0) ret = WAIT_FAILED; | |
846 else { | |
847 ml->semaphore++; | |
848 ret = WAIT_OBJECT_0; | |
849 } | |
850 } | |
128 | 851 if (duration == -1) { |
3465 | 852 if (ml->semaphore==0) |
853 pthread_cond_wait(ml->pc,ml->pm); | |
854 ml->semaphore--; | |
128 | 855 } |
3465 | 856 break; |
128 | 857 } |
858 pthread_mutex_unlock(ml->pm); | |
859 | |
860 dbgprintf("WaitForSingleObject(0x%x, %d): 0x%x => 0x%x \n",object,duration,ml,ret); | |
861 return (void *)ret; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
862 } |
1 | 863 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
864 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
865 static void* WINAPI expWaitForMultipleObjects(int count, const void** objects, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
866 int WaitAll, int duration) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
867 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
868 int i; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
869 void *object; |
8451 | 870 void *ret; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
871 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
872 dbgprintf("WaitForMultipleObjects(%d, 0x%x, %d, duration %d) =>\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
873 count, objects, WaitAll, duration); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
874 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
875 for (i = 0; i < count; i++) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
876 { |
13182 | 877 object = (void *)objects[i]; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
878 ret = expWaitForSingleObject(object, duration); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
879 if (WaitAll) |
8285 | 880 dbgprintf("WaitAll flag not yet supported...\n"); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
881 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
882 return ret; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
883 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
884 return NULL; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
885 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
886 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
887 static void WINAPI expExitThread(int retcode) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
888 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
889 dbgprintf("ExitThread(%d)\n", retcode); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
890 pthread_exit(&retcode); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
891 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
892 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
893 static HANDLE WINAPI expCreateMutexA(void *pSecAttr, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
894 char bInitialOwner, const char *name) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
895 { |
8451 | 896 HANDLE mlist = (HANDLE)expCreateEventA(pSecAttr, 0, 0, name); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
897 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
898 if (name) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
899 dbgprintf("CreateMutexA(0x%x, %d, '%s') => 0x%x\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
900 pSecAttr, bInitialOwner, name, mlist); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
901 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
902 dbgprintf("CreateMutexA(0x%x, %d, NULL) => 0x%x\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
903 pSecAttr, bInitialOwner, mlist); |
8281 | 904 #ifndef QTX |
905 /* 10l to QTX, if CreateMutex returns a real mutex, WaitForSingleObject | |
906 waits for ever, else it works ;) */ | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
907 return mlist; |
8281 | 908 #endif |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
909 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
910 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
911 static int WINAPI expReleaseMutex(HANDLE hMutex) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
912 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
913 dbgprintf("ReleaseMutex(%x) => 1\n", hMutex); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
914 /* FIXME:XXX !! not yet implemented */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
915 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
916 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
917 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
918 |
5800
f2136a17b451
workaround: force PF table setup in IsProcessorFeaturePresent
alex
parents:
5770
diff
changeset
|
919 static int pf_set = 0; |
1 | 920 static BYTE PF[64] = {0,}; |
921 | |
128 | 922 static void DumpSystemInfo(const SYSTEM_INFO* si) |
923 { | |
924 dbgprintf(" Processor architecture %d\n", si->u.s.wProcessorArchitecture); | |
925 dbgprintf(" Page size: %d\n", si->dwPageSize); | |
926 dbgprintf(" Minimum app address: %d\n", si->lpMinimumApplicationAddress); | |
927 dbgprintf(" Maximum app address: %d\n", si->lpMaximumApplicationAddress); | |
928 dbgprintf(" Active processor mask: 0x%x\n", si->dwActiveProcessorMask); | |
929 dbgprintf(" Number of processors: %d\n", si->dwNumberOfProcessors); | |
930 dbgprintf(" Processor type: 0x%x\n", si->dwProcessorType); | |
931 dbgprintf(" Allocation granularity: 0x%x\n", si->dwAllocationGranularity); | |
932 dbgprintf(" Processor level: 0x%x\n", si->wProcessorLevel); | |
933 dbgprintf(" Processor revision: 0x%x\n", si->wProcessorRevision); | |
934 } | |
935 | |
3465 | 936 static void WINAPI expGetSystemInfo(SYSTEM_INFO* si) |
1 | 937 { |
3465 | 938 /* FIXME: better values for the two entries below... */ |
939 static int cache = 0; | |
940 static SYSTEM_INFO cachedsi; | |
941 unsigned int regs[4]; | |
942 dbgprintf("GetSystemInfo(%p) =>\n", si); | |
943 | |
944 if (cache) { | |
16650
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
945 goto exit; |
3465 | 946 } |
947 memset(PF,0,sizeof(PF)); | |
5800
f2136a17b451
workaround: force PF table setup in IsProcessorFeaturePresent
alex
parents:
5770
diff
changeset
|
948 pf_set = 1; |
3465 | 949 |
950 cachedsi.u.s.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL; | |
951 cachedsi.dwPageSize = getpagesize(); | |
952 | |
953 /* FIXME: better values for the two entries below... */ | |
954 cachedsi.lpMinimumApplicationAddress = (void *)0x00000000; | |
955 cachedsi.lpMaximumApplicationAddress = (void *)0x7FFFFFFF; | |
956 cachedsi.dwActiveProcessorMask = 1; | |
957 cachedsi.dwNumberOfProcessors = 1; | |
958 cachedsi.dwProcessorType = PROCESSOR_INTEL_386; | |
959 cachedsi.dwAllocationGranularity = 0x10000; | |
960 cachedsi.wProcessorLevel = 5; /* pentium */ | |
961 cachedsi.wProcessorRevision = 0x0101; | |
962 | |
963 #ifdef MPLAYER | |
964 /* mplayer's way to detect PF's */ | |
965 { | |
17020 | 966 #include "cpudetect.h" |
3465 | 967 extern CpuCaps gCpuCaps; |
968 | |
969 if (gCpuCaps.hasMMX) | |
970 PF[PF_MMX_INSTRUCTIONS_AVAILABLE] = TRUE; | |
971 if (gCpuCaps.hasSSE) | |
972 PF[PF_XMMI_INSTRUCTIONS_AVAILABLE] = TRUE; | |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
973 if (gCpuCaps.hasSSE2) |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
974 PF[PF_XMMI64_INSTRUCTIONS_AVAILABLE] = TRUE; |
3465 | 975 if (gCpuCaps.has3DNow) |
976 PF[PF_AMD3D_INSTRUCTIONS_AVAILABLE] = TRUE; | |
3404 | 977 |
10013 | 978 if (gCpuCaps.cpuType == 4) |
979 { | |
980 cachedsi.dwProcessorType = PROCESSOR_INTEL_486; | |
981 cachedsi.wProcessorLevel = 4; | |
982 } | |
10139
8ac4502b7b3d
10l by me, noticed by a guy with a transmeta cpu, but forgot his name, sorry
alex
parents:
10013
diff
changeset
|
983 else if (gCpuCaps.cpuType >= 5) |
3404 | 984 { |
10013 | 985 cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; |
986 cachedsi.wProcessorLevel = 5; | |
987 } | |
988 else | |
989 { | |
990 cachedsi.dwProcessorType = PROCESSOR_INTEL_386; | |
991 cachedsi.wProcessorLevel = 3; | |
3404 | 992 } |
993 cachedsi.wProcessorRevision = gCpuCaps.cpuStepping; | |
994 cachedsi.dwNumberOfProcessors = 1; /* hardcoded */ | |
3465 | 995 } |
3405 | 996 #endif |
3128 | 997 |
3404 | 998 /* disable cpuid based detection (mplayer's cpudetect.c does this - see above) */ |
3465 | 999 #ifndef MPLAYER |
15566 | 1000 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__svr4__) || defined(__DragonFly__) |
3465 | 1001 do_cpuid(1, regs); |
1002 switch ((regs[0] >> 8) & 0xf) { // cpu family | |
1003 case 3: cachedsi.dwProcessorType = PROCESSOR_INTEL_386; | |
1004 cachedsi.wProcessorLevel= 3; | |
1005 break; | |
1006 case 4: cachedsi.dwProcessorType = PROCESSOR_INTEL_486; | |
1007 cachedsi.wProcessorLevel= 4; | |
1008 break; | |
1009 case 5: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1010 cachedsi.wProcessorLevel= 5; | |
1011 break; | |
1012 case 6: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1013 cachedsi.wProcessorLevel= 5; | |
1014 break; | |
1015 default:cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1016 cachedsi.wProcessorLevel= 5; | |
1017 break; | |
1018 } | |
1019 cachedsi.wProcessorRevision = regs[0] & 0xf; // stepping | |
1020 if (regs[3] & (1 << 8)) | |
1021 PF[PF_COMPARE_EXCHANGE_DOUBLE] = TRUE; | |
1022 if (regs[3] & (1 << 23)) | |
1023 PF[PF_MMX_INSTRUCTIONS_AVAILABLE] = TRUE; | |
1024 if (regs[3] & (1 << 25)) | |
1025 PF[PF_XMMI_INSTRUCTIONS_AVAILABLE] = TRUE; | |
1026 if (regs[3] & (1 << 31)) | |
1027 PF[PF_AMD3D_INSTRUCTIONS_AVAILABLE] = TRUE; | |
1028 cachedsi.dwNumberOfProcessors=1; | |
3404 | 1029 #endif |
3465 | 1030 #endif /* MPLAYER */ |
3404 | 1031 |
3405 | 1032 /* MPlayer: linux detection enabled (based on proc/cpuinfo) for checking |
1033 fdiv_bug and fpu emulation flags -- alex/MPlayer */ | |
3404 | 1034 #ifdef __linux__ |
3465 | 1035 { |
1 | 1036 char buf[20]; |
1037 char line[200]; | |
1038 FILE *f = fopen ("/proc/cpuinfo", "r"); | |
1039 | |
1040 if (!f) | |
16650
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1041 { |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1042 #ifdef MPLAYER |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1043 mp_msg(MSGT_WIN32, MSGL_WARN, "expGetSystemInfo: " |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1044 "/proc/cpuinfo not readable! " |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1045 "Expect bad performance and/or weird behaviour\n"); |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1046 #endif |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1047 goto exit; |
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1048 } |
1 | 1049 while (fgets(line,200,f)!=NULL) { |
3465 | 1050 char *s,*value; |
1051 | |
1052 /* NOTE: the ':' is the only character we can rely on */ | |
1053 if (!(value = strchr(line,':'))) | |
1054 continue; | |
1055 /* terminate the valuename */ | |
1056 *value++ = '\0'; | |
1057 /* skip any leading spaces */ | |
1058 while (*value==' ') value++; | |
1059 if ((s=strchr(value,'\n'))) | |
1060 *s='\0'; | |
1061 | |
1062 /* 2.1 method */ | |
1063 if (!lstrncmpiA(line, "cpu family",strlen("cpu family"))) { | |
1064 if (isdigit (value[0])) { | |
1065 switch (value[0] - '0') { | |
1066 case 3: cachedsi.dwProcessorType = PROCESSOR_INTEL_386; | |
1067 cachedsi.wProcessorLevel= 3; | |
1068 break; | |
1069 case 4: cachedsi.dwProcessorType = PROCESSOR_INTEL_486; | |
1070 cachedsi.wProcessorLevel= 4; | |
1071 break; | |
1072 case 5: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1073 cachedsi.wProcessorLevel= 5; | |
1074 break; | |
1075 case 6: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1076 cachedsi.wProcessorLevel= 5; | |
1077 break; | |
1078 default:cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1079 cachedsi.wProcessorLevel= 5; | |
1080 break; | |
1081 } | |
1 | 1082 } |
3465 | 1083 /* set the CPU type of the current processor */ |
1084 sprintf(buf,"CPU %ld",cachedsi.dwProcessorType); | |
1085 continue; | |
1086 } | |
1087 /* old 2.0 method */ | |
1088 if (!lstrncmpiA(line, "cpu",strlen("cpu"))) { | |
1089 if ( isdigit (value[0]) && value[1] == '8' && | |
1090 value[2] == '6' && value[3] == 0 | |
1091 ) { | |
1092 switch (value[0] - '0') { | |
1093 case 3: cachedsi.dwProcessorType = PROCESSOR_INTEL_386; | |
1094 cachedsi.wProcessorLevel= 3; | |
1095 break; | |
1096 case 4: cachedsi.dwProcessorType = PROCESSOR_INTEL_486; | |
1097 cachedsi.wProcessorLevel= 4; | |
1098 break; | |
1099 case 5: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1100 cachedsi.wProcessorLevel= 5; | |
1101 break; | |
1102 case 6: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1103 cachedsi.wProcessorLevel= 5; | |
1104 break; | |
1105 default:cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM; | |
1106 cachedsi.wProcessorLevel= 5; | |
1107 break; | |
1108 } | |
1 | 1109 } |
3465 | 1110 /* set the CPU type of the current processor */ |
1111 sprintf(buf,"CPU %ld",cachedsi.dwProcessorType); | |
1112 continue; | |
1113 } | |
1114 if (!lstrncmpiA(line,"fdiv_bug",strlen("fdiv_bug"))) { | |
1115 if (!lstrncmpiA(value,"yes",3)) | |
1116 PF[PF_FLOATING_POINT_PRECISION_ERRATA] = TRUE; | |
1117 | |
1118 continue; | |
1119 } | |
1120 if (!lstrncmpiA(line,"fpu",strlen("fpu"))) { | |
1121 if (!lstrncmpiA(value,"no",2)) | |
1122 PF[PF_FLOATING_POINT_EMULATED] = TRUE; | |
1123 | |
1124 continue; | |
1125 } | |
1126 if (!lstrncmpiA(line,"processor",strlen("processor"))) { | |
1127 /* processor number counts up...*/ | |
7386 | 1128 unsigned int x; |
3465 | 1129 |
1130 if (sscanf(value,"%d",&x)) | |
1131 if (x+1>cachedsi.dwNumberOfProcessors) | |
1132 cachedsi.dwNumberOfProcessors=x+1; | |
1133 | |
1134 /* Create a new processor subkey on a multiprocessor | |
1135 * system | |
1136 */ | |
1137 sprintf(buf,"%d",x); | |
1138 } | |
1139 if (!lstrncmpiA(line,"stepping",strlen("stepping"))) { | |
1140 int x; | |
1141 | |
1142 if (sscanf(value,"%d",&x)) | |
1143 cachedsi.wProcessorRevision = x; | |
1144 } | |
1145 if | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1146 ( (!lstrncmpiA(line,"flags",strlen("flags"))) |
3465 | 1147 || (!lstrncmpiA(line,"features",strlen("features"))) ) |
1148 { | |
1149 if (strstr(value,"cx8")) | |
1150 PF[PF_COMPARE_EXCHANGE_DOUBLE] = TRUE; | |
1151 if (strstr(value,"mmx")) | |
1152 PF[PF_MMX_INSTRUCTIONS_AVAILABLE] = TRUE; | |
1153 if (strstr(value,"tsc")) | |
1154 PF[PF_RDTSC_INSTRUCTION_AVAILABLE] = TRUE; | |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
1155 if (strstr(value,"xmm") || strstr(value,"sse")) |
3465 | 1156 PF[PF_XMMI_INSTRUCTIONS_AVAILABLE] = TRUE; |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
1157 if (strstr(value,"sse2")) |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
1158 PF[PF_XMMI64_INSTRUCTIONS_AVAILABLE] = TRUE; |
3465 | 1159 if (strstr(value,"3dnow")) |
1160 PF[PF_AMD3D_INSTRUCTIONS_AVAILABLE] = TRUE; | |
1161 } | |
1 | 1162 } |
1163 fclose (f); | |
3465 | 1164 /* |
1165 * ad hoc fix for smp machines. | |
1166 * some problems on WaitForSingleObject,CreateEvent,SetEvent | |
1167 * CreateThread ...etc.. | |
1168 * | |
1169 */ | |
1170 cachedsi.dwNumberOfProcessors=1; | |
1171 } | |
3404 | 1172 #endif /* __linux__ */ |
3465 | 1173 cache = 1; |
16650
831cdc896c4c
expGetSystemInfo should not leave SYSTEM_INFO unitialized, even when
reimar
parents:
16632
diff
changeset
|
1174 exit: |
3465 | 1175 memcpy(si,&cachedsi,sizeof(*si)); |
1176 DumpSystemInfo(si); | |
1 | 1177 } |
1178 | |
7386 | 1179 // avoid undefined expGetSystemInfo |
1180 static WIN_BOOL WINAPI expIsProcessorFeaturePresent(DWORD v) | |
1181 { | |
1182 WIN_BOOL result = 0; | |
1183 if (!pf_set) | |
1184 { | |
1185 SYSTEM_INFO si; | |
1186 expGetSystemInfo(&si); | |
1187 } | |
1188 if(v<64) result=PF[v]; | |
1189 dbgprintf("IsProcessorFeaturePresent(0x%x) => 0x%x\n", v, result); | |
1190 return result; | |
1191 } | |
1192 | |
1193 | |
3465 | 1194 static long WINAPI expGetVersion() |
1 | 1195 { |
128 | 1196 dbgprintf("GetVersion() => 0xC0000004\n"); |
1197 return 0xC0000004;//Windows 95 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1198 } |
1 | 1199 |
3465 | 1200 static HANDLE WINAPI expHeapCreate(long flags, long init_size, long max_size) |
1 | 1201 { |
3465 | 1202 // printf("HeapCreate:"); |
128 | 1203 HANDLE result; |
1 | 1204 if(init_size==0) |
3465 | 1205 result=(HANDLE)my_mreq(0x110000, 0); |
1 | 1206 else |
3465 | 1207 result=(HANDLE)my_mreq((init_size + 0xfff) & 0x7ffff000 , 0); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1208 dbgprintf("HeapCreate(flags 0x%x, initial size %d, maximum size %d) => 0x%x\n", flags, init_size, max_size, result); |
128 | 1209 return result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1210 } |
3128 | 1211 |
1212 // this is another dirty hack | |
3465 | 1213 // VP31 is releasing one allocated Heap chunk twice |
3128 | 1214 // we will silently ignore this second call... |
1215 static void* heapfreehack = 0; | |
1216 static int heapfreehackshown = 0; | |
3465 | 1217 //extern void trapbug(void); |
1218 static void* WINAPI expHeapAlloc(HANDLE heap, int flags, int size) | |
1 | 1219 { |
1220 void* z; | |
3465 | 1221 /** |
1222 Morgan's m3jpeg32.dll v. 2.0 encoder expects that request for | |
1223 HeapAlloc returns area larger than size argument :-/ | |
1224 | |
1225 actually according to M$ Doc HeapCreate size should be rounded | |
1226 to page boundaries thus we should simulate this | |
1227 **/ | |
1228 //if (size == 22276) trapbug(); | |
1229 z=my_mreq((size + 0xfff) & 0x7ffff000, (flags & HEAP_ZERO_MEMORY)); | |
1 | 1230 if(z==0) |
1231 printf("HeapAlloc failure\n"); | |
3465 | 1232 dbgprintf("HeapAlloc(heap 0x%x, flags 0x%x, size %d) => 0x%x\n", heap, flags, size, z); |
3128 | 1233 heapfreehack = 0; // reset |
1 | 1234 return z; |
1235 } | |
3465 | 1236 static long WINAPI expHeapDestroy(void* heap) |
1 | 1237 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1238 dbgprintf("HeapDestroy(heap 0x%x) => 1\n", heap); |
1 | 1239 my_release(heap); |
1240 return 1; | |
1241 } | |
1242 | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1243 static long WINAPI expHeapFree(HANDLE heap, DWORD dwFlags, LPVOID lpMem) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1244 { |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1245 dbgprintf("HeapFree(0x%x, 0x%x, pointer 0x%x) => 1\n", heap, dwFlags, lpMem); |
7386 | 1246 if (heapfreehack != lpMem && lpMem != (void*)0xffffffff |
1247 && lpMem != (void*)0xbdbdbdbd) | |
1248 // 0xbdbdbdbd is for i263_drv.drv && libefence | |
1249 // it seems to be reading from relased memory | |
1250 // EF_PROTECT_FREE doens't show any probleme | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1251 my_release(lpMem); |
3128 | 1252 else |
1253 { | |
3465 | 1254 if (!heapfreehackshown++) |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1255 printf("Info: HeapFree deallocating same memory twice! (%p)\n", lpMem); |
3128 | 1256 } |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1257 heapfreehack = lpMem; |
1 | 1258 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1259 } |
3465 | 1260 static long WINAPI expHeapSize(int heap, int flags, void* pointer) |
1 | 1261 { |
128 | 1262 long result=my_size(pointer); |
1263 dbgprintf("HeapSize(heap 0x%x, flags 0x%x, pointer 0x%x) => %d\n", heap, flags, pointer, result); | |
1264 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1265 } |
3465 | 1266 static void* WINAPI expHeapReAlloc(HANDLE heap,int flags,void *lpMem,int size) |
2069 | 1267 { |
3465 | 1268 long orgsize = my_size(lpMem); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1269 dbgprintf("HeapReAlloc() Size %ld org %d\n",orgsize,size); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1270 return my_realloc(lpMem, size); |
2069 | 1271 } |
3465 | 1272 static long WINAPI expGetProcessHeap(void) |
1 | 1273 { |
128 | 1274 dbgprintf("GetProcessHeap() => 1\n"); |
1 | 1275 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1276 } |
3465 | 1277 static void* WINAPI expVirtualAlloc(void* v1, long v2, long v3, long v4) |
1 | 1278 { |
3465 | 1279 void* z = VirtualAlloc(v1, v2, v3, v4); |
1 | 1280 if(z==0) |
1281 printf("VirtualAlloc failure\n"); | |
128 | 1282 dbgprintf("VirtualAlloc(0x%x, %d, %d, %d) => 0x%x \n",v1,v2,v3,v4, z); |
1 | 1283 return z; |
1284 } | |
3465 | 1285 static int WINAPI expVirtualFree(void* v1, int v2, int v3) |
1 | 1286 { |
3465 | 1287 int result = VirtualFree(v1,v2,v3); |
128 | 1288 dbgprintf("VirtualFree(0x%x, %d, %d) => %d\n",v1,v2,v3, result); |
1289 return result; | |
3128 | 1290 } |
2579 | 1291 |
1292 /* we're building a table of critical sections. cs_win pointer uses the DLL | |
3465 | 1293 cs_unix is the real structure, we're using cs_win only to identifying cs_unix */ |
2579 | 1294 struct critsecs_list_t |
1295 { | |
1296 CRITICAL_SECTION *cs_win; | |
1297 struct CRITSECT *cs_unix; | |
1298 }; | |
1299 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1300 /* 'NEWTYPE' is working with VIVO, 3ivX and QTX dll (no more segfaults) -- alex */ |
8393
08e71f6a7531
it seems that old CS is working better than newtype now... :)
arpi
parents:
8391
diff
changeset
|
1301 #undef CRITSECS_NEWTYPE |
08e71f6a7531
it seems that old CS is working better than newtype now... :)
arpi
parents:
8391
diff
changeset
|
1302 //#define CRITSECS_NEWTYPE 1 |
3128 | 1303 |
1304 #ifdef CRITSECS_NEWTYPE | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1305 /* increased due to ucod needs more than 32 entries */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1306 /* and 64 should be enough for everything */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1307 #define CRITSECS_LIST_MAX 64 |
2579 | 1308 static struct critsecs_list_t critsecs_list[CRITSECS_LIST_MAX]; |
1309 | |
3465 | 1310 static int critsecs_get_pos(CRITICAL_SECTION *cs_win) |
2579 | 1311 { |
1312 int i; | |
3128 | 1313 |
2579 | 1314 for (i=0; i < CRITSECS_LIST_MAX; i++) |
1315 if (critsecs_list[i].cs_win == cs_win) | |
1316 return(i); | |
1317 return(-1); | |
1318 } | |
1319 | |
3465 | 1320 static int critsecs_get_unused(void) |
2579 | 1321 { |
1322 int i; | |
3128 | 1323 |
2579 | 1324 for (i=0; i < CRITSECS_LIST_MAX; i++) |
1325 if (critsecs_list[i].cs_win == NULL) | |
1326 return(i); | |
1327 return(-1); | |
1328 } | |
1329 | |
1330 struct CRITSECT *critsecs_get_unix(CRITICAL_SECTION *cs_win) | |
1331 { | |
1332 int i; | |
3128 | 1333 |
2579 | 1334 for (i=0; i < CRITSECS_LIST_MAX; i++) |
2670 | 1335 if (critsecs_list[i].cs_win == cs_win && critsecs_list[i].cs_unix) |
2579 | 1336 return(critsecs_list[i].cs_unix); |
1337 return(NULL); | |
1338 } | |
1339 #endif | |
1340 | |
3465 | 1341 static void WINAPI expInitializeCriticalSection(CRITICAL_SECTION* c) |
1 | 1342 { |
128 | 1343 dbgprintf("InitializeCriticalSection(0x%x)\n", c); |
3465 | 1344 /* if(sizeof(pthread_mutex_t)>sizeof(CRITICAL_SECTION)) |
1345 { | |
1346 printf(" ERROR:::: sizeof(pthread_mutex_t) is %d, expected <=%d!\n", | |
1347 sizeof(pthread_mutex_t), sizeof(CRITICAL_SECTION)); | |
1348 return; | |
1349 }*/ | |
1350 /* pthread_mutex_init((pthread_mutex_t*)c, NULL); */ | |
2579 | 1351 #ifdef CRITSECS_NEWTYPE |
1352 { | |
3465 | 1353 struct CRITSECT *cs; |
1354 int i = critsecs_get_unused(); | |
1355 | |
1356 if (i < 0) | |
1357 { | |
1358 printf("InitializeCriticalSection(%p) - no more space in list\n", c); | |
1359 return; | |
1360 } | |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
1361 dbgprintf("got unused space at %d\n", i); |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
1362 cs = malloc(sizeof(struct CRITSECT)); |
3465 | 1363 if (!cs) |
1364 { | |
1365 printf("InitializeCriticalSection(%p) - out of memory\n", c); | |
1366 return; | |
1367 } | |
1368 pthread_mutex_init(&cs->mutex, NULL); | |
1369 cs->locked = 0; | |
1370 critsecs_list[i].cs_win = c; | |
1371 critsecs_list[i].cs_unix = cs; | |
1372 dbgprintf("InitializeCriticalSection -> itemno=%d, cs_win=%p, cs_unix=%p\n", | |
1373 i, c, cs); | |
2579 | 1374 } |
3465 | 1375 #else |
2670 | 1376 { |
6321
c254cb1c26ef
new (cleaner, nore robust) critsect code by Zdenek Kabelac <kabi@informatics.muni.cz>
arpi
parents:
5872
diff
changeset
|
1377 struct CRITSECT* cs = mreq_private(sizeof(struct CRITSECT) + sizeof(CRITICAL_SECTION), |
c254cb1c26ef
new (cleaner, nore robust) critsect code by Zdenek Kabelac <kabi@informatics.muni.cz>
arpi
parents:
5872
diff
changeset
|
1378 0, AREATYPE_CRITSECT); |
3465 | 1379 pthread_mutex_init(&cs->mutex, NULL); |
1380 cs->locked=0; | |
6321
c254cb1c26ef
new (cleaner, nore robust) critsect code by Zdenek Kabelac <kabi@informatics.muni.cz>
arpi
parents:
5872
diff
changeset
|
1381 cs->deadbeef = 0xdeadbeef; |
7718 | 1382 *(void**)c = cs; |
2670 | 1383 } |
2579 | 1384 #endif |
1 | 1385 return; |
2579 | 1386 } |
1387 | |
3465 | 1388 static void WINAPI expEnterCriticalSection(CRITICAL_SECTION* c) |
1 | 1389 { |
2579 | 1390 #ifdef CRITSECS_NEWTYPE |
1391 struct CRITSECT* cs = critsecs_get_unix(c); | |
1392 #else | |
7718 | 1393 struct CRITSECT* cs = (*(struct CRITSECT**)c); |
2579 | 1394 #endif |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1395 dbgprintf("EnterCriticalSection(0x%x) %p\n",c, cs); |
2069 | 1396 if (!cs) |
1397 { | |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
1398 dbgprintf("entered uninitialized critisec!\n"); |
2069 | 1399 expInitializeCriticalSection(c); |
2579 | 1400 #ifdef CRITSECS_NEWTYPE |
1401 cs=critsecs_get_unix(c); | |
1402 #else | |
7718 | 1403 cs = (*(struct CRITSECT**)c); |
2579 | 1404 #endif |
12074 | 1405 dbgprintf("Win32 Warning: Accessed uninitialized Critical Section (%p)!\n", c); |
2069 | 1406 } |
1 | 1407 if(cs->locked) |
1408 if(cs->id==pthread_self()) | |
1409 return; | |
1410 pthread_mutex_lock(&(cs->mutex)); | |
1411 cs->locked=1; | |
1412 cs->id=pthread_self(); | |
1413 return; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1414 } |
3465 | 1415 static void WINAPI expLeaveCriticalSection(CRITICAL_SECTION* c) |
1 | 1416 { |
2579 | 1417 #ifdef CRITSECS_NEWTYPE |
1418 struct CRITSECT* cs = critsecs_get_unix(c); | |
1419 #else | |
7718 | 1420 struct CRITSECT* cs = (*(struct CRITSECT**)c); |
2579 | 1421 #endif |
3465 | 1422 // struct CRITSECT* cs=(struct CRITSECT*)c; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1423 dbgprintf("LeaveCriticalSection(0x%x) 0x%x\n",c, cs); |
2069 | 1424 if (!cs) |
1425 { | |
12074 | 1426 dbgprintf("Win32 Warning: Leaving uninitialized Critical Section %p!!\n", c); |
2069 | 1427 return; |
1428 } | |
11852
0bbdbc75532f
Don't mutex_unlock if it was never locked. Patch by Min Sik Kim
alex
parents:
10818
diff
changeset
|
1429 if (cs->locked) |
0bbdbc75532f
Don't mutex_unlock if it was never locked. Patch by Min Sik Kim
alex
parents:
10818
diff
changeset
|
1430 { |
0bbdbc75532f
Don't mutex_unlock if it was never locked. Patch by Min Sik Kim
alex
parents:
10818
diff
changeset
|
1431 cs->locked=0; |
0bbdbc75532f
Don't mutex_unlock if it was never locked. Patch by Min Sik Kim
alex
parents:
10818
diff
changeset
|
1432 pthread_mutex_unlock(&(cs->mutex)); |
0bbdbc75532f
Don't mutex_unlock if it was never locked. Patch by Min Sik Kim
alex
parents:
10818
diff
changeset
|
1433 } |
11853
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1434 else |
12074 | 1435 dbgprintf("Win32 Warning: Unlocking unlocked Critical Section %p!!\n", c); |
1 | 1436 return; |
1437 } | |
8451 | 1438 |
1439 static void expfree(void* mem); /* forward declaration */ | |
1440 | |
3465 | 1441 static void WINAPI expDeleteCriticalSection(CRITICAL_SECTION *c) |
1 | 1442 { |
2579 | 1443 #ifdef CRITSECS_NEWTYPE |
1444 struct CRITSECT* cs = critsecs_get_unix(c); | |
1445 #else | |
7718 | 1446 struct CRITSECT* cs= (*(struct CRITSECT**)c); |
2579 | 1447 #endif |
3465 | 1448 // struct CRITSECT* cs=(struct CRITSECT*)c; |
128 | 1449 dbgprintf("DeleteCriticalSection(0x%x)\n",c); |
3465 | 1450 |
11853
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1451 if (!cs) |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1452 { |
12074 | 1453 dbgprintf("Win32 Warning: Deleting uninitialized Critical Section %p!!\n", c); |
11853
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1454 return; |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1455 } |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1456 |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1457 if (cs->locked) |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1458 { |
12074 | 1459 dbgprintf("Win32 Warning: Deleting unlocked Critical Section %p!!\n", c); |
11853
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1460 pthread_mutex_unlock(&(cs->mutex)); |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1461 } |
b5805b819ff9
reviewed the locking codes, a mutex should be unlocked before destroying it
alex
parents:
11852
diff
changeset
|
1462 |
3465 | 1463 #ifndef GARBAGE |
128 | 1464 pthread_mutex_destroy(&(cs->mutex)); |
3465 | 1465 // released by GarbageCollector in my_relase otherwise |
1466 #endif | |
1467 my_release(cs); | |
2579 | 1468 #ifdef CRITSECS_NEWTYPE |
1469 { | |
3465 | 1470 int i = critsecs_get_pos(c); |
1471 | |
1472 if (i < 0) | |
1473 { | |
1474 printf("DeleteCriticalSection(%p) error (critsec not found)\n", c); | |
1475 return; | |
1476 } | |
1477 | |
1478 critsecs_list[i].cs_win = NULL; | |
1479 expfree(critsecs_list[i].cs_unix); | |
1480 critsecs_list[i].cs_unix = NULL; | |
1481 dbgprintf("DeleteCriticalSection -> itemno=%d\n", i); | |
2579 | 1482 } |
1483 #endif | |
1 | 1484 return; |
1485 } | |
3465 | 1486 static int WINAPI expGetCurrentThreadId() |
1 | 1487 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1488 dbgprintf("GetCurrentThreadId() => %d\n", pthread_self()); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1489 return pthread_self(); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1490 } |
3465 | 1491 static int WINAPI expGetCurrentProcess() |
128 | 1492 { |
1493 dbgprintf("GetCurrentProcess() => %d\n", getpid()); | |
1 | 1494 return getpid(); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1495 } |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1496 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1497 #ifdef QTX |
3128 | 1498 // this version is required for Quicktime codecs (.qtx/.qts) to work. |
1499 // (they assume some pointers at FS: segment) | |
1500 | |
7386 | 1501 extern void* fs_seg; |
1502 | |
2779 | 1503 //static int tls_count; |
1504 static int tls_use_map[64]; | |
3465 | 1505 static int WINAPI expTlsAlloc() |
2779 | 1506 { |
1507 int i; | |
1508 for(i=0; i<64; i++) | |
1509 if(tls_use_map[i]==0) | |
1510 { | |
1511 tls_use_map[i]=1; | |
5234 | 1512 dbgprintf("TlsAlloc() => %d\n",i); |
2779 | 1513 return i; |
1514 } | |
5234 | 1515 dbgprintf("TlsAlloc() => -1 (ERROR)\n"); |
2779 | 1516 return -1; |
1517 } | |
1518 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1519 //static int WINAPI expTlsSetValue(DWORD index, void* value) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1520 static int WINAPI expTlsSetValue(int index, void* value) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1521 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
1522 dbgprintf("TlsSetValue(%d,0x%x) => 1\n",index,value); |
5234 | 1523 // if((index<0) || (index>64)) |
1524 if((index>=64)) | |
2779 | 1525 return 0; |
1526 *(void**)((char*)fs_seg+0x88+4*index) = value; | |
1527 return 1; | |
1528 } | |
1529 | |
5234 | 1530 static void* WINAPI expTlsGetValue(DWORD index) |
1531 { | |
1532 dbgprintf("TlsGetValue(%d)\n",index); | |
1533 // if((index<0) || (index>64)) | |
1534 if((index>=64)) return NULL; | |
1535 return *(void**)((char*)fs_seg+0x88+4*index); | |
2779 | 1536 } |
1537 | |
3465 | 1538 static int WINAPI expTlsFree(int idx) |
2779 | 1539 { |
3465 | 1540 int index = (int) idx; |
5234 | 1541 dbgprintf("TlsFree(%d)\n",index); |
2779 | 1542 if((index<0) || (index>64)) |
1543 return 0; | |
1544 tls_use_map[index]=0; | |
1545 return 1; | |
1546 } | |
1547 | |
1548 #else | |
2069 | 1549 struct tls_s { |
1 | 1550 void* value; |
1551 int used; | |
1552 struct tls_s* prev; | |
1553 struct tls_s* next; | |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1554 }; |
2069 | 1555 |
3465 | 1556 static void* WINAPI expTlsAlloc() |
1 | 1557 { |
7386 | 1558 if (g_tls == NULL) |
1 | 1559 { |
1560 g_tls=my_mreq(sizeof(tls_t), 0); | |
1561 g_tls->next=g_tls->prev=NULL; | |
1562 } | |
1563 else | |
1564 { | |
1565 g_tls->next=my_mreq(sizeof(tls_t), 0); | |
1566 g_tls->next->prev=g_tls; | |
1567 g_tls->next->next=NULL; | |
1568 g_tls=g_tls->next; | |
1569 } | |
128 | 1570 dbgprintf("TlsAlloc() => 0x%x\n", g_tls); |
2670 | 1571 if (g_tls) |
1572 g_tls->value=0; /* XXX For Divx.dll */ | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1573 return g_tls; |
1 | 1574 } |
1575 | |
3465 | 1576 static int WINAPI expTlsSetValue(void* idx, void* value) |
1 | 1577 { |
3465 | 1578 tls_t* index = (tls_t*) idx; |
128 | 1579 int result; |
1 | 1580 if(index==0) |
128 | 1581 result=0; |
1582 else | |
1583 { | |
1584 index->value=value; | |
1585 result=1; | |
1586 } | |
1587 dbgprintf("TlsSetValue(index 0x%x, value 0x%x) => %d \n", index, value, result ); | |
1588 return result; | |
1 | 1589 } |
3465 | 1590 static void* WINAPI expTlsGetValue(void* idx) |
1 | 1591 { |
3465 | 1592 tls_t* index = (tls_t*) idx; |
128 | 1593 void* result; |
1 | 1594 if(index==0) |
128 | 1595 result=0; |
1596 else | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1597 result=index->value; |
128 | 1598 dbgprintf("TlsGetValue(index 0x%x) => 0x%x\n", index, result); |
1599 return result; | |
1 | 1600 } |
3465 | 1601 static int WINAPI expTlsFree(void* idx) |
1 | 1602 { |
3465 | 1603 tls_t* index = (tls_t*) idx; |
128 | 1604 int result; |
1 | 1605 if(index==0) |
128 | 1606 result=0; |
1607 else | |
1608 { | |
1609 if(index->next) | |
1610 index->next->prev=index->prev; | |
1611 if(index->prev) | |
3465 | 1612 index->prev->next=index->next; |
7386 | 1613 if (g_tls == index) |
1614 g_tls = index->prev; | |
128 | 1615 my_release((void*)index); |
1616 result=1; | |
1617 } | |
1618 dbgprintf("TlsFree(index 0x%x) => %d\n", index, result); | |
1619 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1620 } |
2779 | 1621 #endif |
1622 | |
3465 | 1623 static void* WINAPI expLocalAlloc(int flags, int size) |
1 | 1624 { |
3465 | 1625 void* z = my_mreq(size, (flags & GMEM_ZEROINIT)); |
1626 if (z == 0) | |
1 | 1627 printf("LocalAlloc() failed\n"); |
128 | 1628 dbgprintf("LocalAlloc(%d, flags 0x%x) => 0x%x\n", size, flags, z); |
1 | 1629 return z; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1630 } |
2069 | 1631 |
3465 | 1632 static void* WINAPI expLocalReAlloc(int handle,int size, int flags) |
2069 | 1633 { |
3465 | 1634 void *newpointer; |
1635 int oldsize; | |
1636 | |
1637 newpointer=NULL; | |
1638 if (flags & LMEM_MODIFY) { | |
1639 dbgprintf("LocalReAlloc MODIFY\n"); | |
1640 return (void *)handle; | |
1641 } | |
1642 oldsize = my_size((void *)handle); | |
1643 newpointer = my_realloc((void *)handle,size); | |
1644 dbgprintf("LocalReAlloc(%x %d(old %d), flags 0x%x) => 0x%x\n", handle,size,oldsize, flags,newpointer); | |
1645 | |
1646 return newpointer; | |
2069 | 1647 } |
1648 | |
3465 | 1649 static void* WINAPI expLocalLock(void* z) |
1 | 1650 { |
128 | 1651 dbgprintf("LocalLock(0x%x) => 0x%x\n", z, z); |
1 | 1652 return z; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1653 } |
128 | 1654 |
3465 | 1655 static void* WINAPI expGlobalAlloc(int flags, int size) |
1 | 1656 { |
1657 void* z; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1658 dbgprintf("GlobalAlloc(%d, flags 0x%X)\n", size, flags); |
3465 | 1659 |
1660 z=my_mreq(size, (flags & GMEM_ZEROINIT)); | |
1661 //z=calloc(size, 1); | |
1662 //z=malloc(size); | |
1 | 1663 if(z==0) |
128 | 1664 printf("GlobalAlloc() failed\n"); |
1665 dbgprintf("GlobalAlloc(%d, flags 0x%x) => 0x%x\n", size, flags, z); | |
1 | 1666 return z; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1667 } |
3465 | 1668 static void* WINAPI expGlobalLock(void* z) |
1 | 1669 { |
128 | 1670 dbgprintf("GlobalLock(0x%x) => 0x%x\n", z, z); |
1 | 1671 return z; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1672 } |
3128 | 1673 // pvmjpg20 - but doesn't work anyway |
3465 | 1674 static int WINAPI expGlobalSize(void* amem) |
3128 | 1675 { |
1676 int size = 100000; | |
1677 #ifdef GARBAGE | |
1678 alloc_header* header = last_alloc; | |
1679 alloc_header* mem = (alloc_header*) amem - 1; | |
1680 if (amem == 0) | |
3465 | 1681 return 0; |
3128 | 1682 pthread_mutex_lock(&memmut); |
1683 while (header) | |
1684 { | |
3465 | 1685 if (header->deadbeef != 0xdeadbeef) |
1686 { | |
12258
25310086fc95
Less verbosity by moving some debug messages from printf --> dbgprintf.
diego
parents:
12074
diff
changeset
|
1687 dbgprintf("FATAL found corrupted memory! %p 0x%lx (%d)\n", header, header->deadbeef, alccnt); |
3465 | 1688 break; |
1689 } | |
1690 | |
1691 if (header == mem) | |
1692 { | |
1693 size = header->size; | |
1694 break; | |
1695 } | |
1696 | |
1697 header = header->prev; | |
3128 | 1698 } |
1699 pthread_mutex_unlock(&memmut); | |
1700 #endif | |
1701 | |
1702 dbgprintf("GlobalSize(0x%x)\n", amem); | |
1703 return size; | |
1704 } | |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1705 |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1706 static int WINAPI expLoadIconA( long hinstance, char *name ) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1707 { |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1708 dbgprintf("LoadIconA( %ld, 0x%x ) => 1\n",hinstance,name); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1709 return 1; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1710 } |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
1711 |
3465 | 1712 static int WINAPI expLoadStringA(long instance, long id, void* buf, long size) |
1 | 1713 { |
128 | 1714 int result=LoadStringA(instance, id, buf, size); |
3465 | 1715 // if(buf) |
128 | 1716 dbgprintf("LoadStringA(instance 0x%x, id 0x%x, buffer 0x%x, size %d) => %d ( %s )\n", |
3465 | 1717 instance, id, buf, size, result, buf); |
1718 // else | |
1719 // dbgprintf("LoadStringA(instance 0x%x, id 0x%x, buffer 0x%x, size %d) => %d\n", | |
1720 // instance, id, buf, size, result); | |
128 | 1721 return result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1722 } |
1 | 1723 |
3465 | 1724 static long WINAPI expMultiByteToWideChar(long v1, long v2, char* s1, long siz1, short* s2, int siz2) |
1 | 1725 { |
1726 #warning FIXME | |
128 | 1727 int i; |
1728 int result; | |
1 | 1729 if(s2==0) |
3465 | 1730 result=1; |
128 | 1731 else |
1732 { | |
3465 | 1733 if(siz1>siz2/2)siz1=siz2/2; |
1734 for(i=1; i<=siz1; i++) | |
1735 { | |
1736 *s2=*s1; | |
1737 if(!*s1)break; | |
1738 s2++; | |
1739 s1++; | |
1740 } | |
1741 result=i; | |
128 | 1742 } |
1743 if(s1) | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1744 dbgprintf("MultiByteToWideChar(codepage %d, flags 0x%x, string 0x%x='%s'," |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1745 "size %d, dest buffer 0x%x, dest size %d) => %d\n", |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1746 v1, v2, s1, s1, siz1, s2, siz2, result); |
128 | 1747 else |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1748 dbgprintf("MultiByteToWideChar(codepage %d, flags 0x%x, string NULL," |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1749 "size %d, dest buffer 0x%x, dest size %d) =>\n", |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1750 v1, v2, siz1, s2, siz2, result); |
128 | 1751 return result; |
1752 } | |
1753 static void wch_print(const short* str) | |
1754 { | |
1755 dbgprintf(" src: "); | |
1756 while(*str)dbgprintf("%c", *str++); | |
1757 dbgprintf("\n"); | |
1 | 1758 } |
3465 | 1759 static long WINAPI expWideCharToMultiByte(long v1, long v2, short* s1, long siz1, |
1760 char* s2, int siz2, char* c3, int* siz3) | |
1 | 1761 { |
1762 int result; | |
128 | 1763 dbgprintf("WideCharToMultiByte(codepage %d, flags 0x%x, src 0x%x, src size %d, " |
3465 | 1764 "dest 0x%x, dest size %d, defch 0x%x, used_defch 0x%x)", v1, v2, s1, siz1, s2, siz2, c3, siz3); |
1 | 1765 result=WideCharToMultiByte(v1, v2, s1, siz1, s2, siz2, c3, siz3); |
1766 dbgprintf("=> %d\n", result); | |
2069 | 1767 //if(s1)wch_print(s1); |
128 | 1768 if(s2)dbgprintf(" dest: %s\n", s2); |
1 | 1769 return result; |
1770 } | |
3465 | 1771 static long WINAPI expGetVersionExA(OSVERSIONINFOA* c) |
1 | 1772 { |
128 | 1773 dbgprintf("GetVersionExA(0x%x) => 1\n"); |
1774 c->dwOSVersionInfoSize=sizeof(*c); | |
1 | 1775 c->dwMajorVersion=4; |
128 | 1776 c->dwMinorVersion=0; |
1777 c->dwBuildNumber=0x4000457; | |
5234 | 1778 #if 1 |
2069 | 1779 // leave it here for testing win9x-only codecs |
1 | 1780 c->dwPlatformId=VER_PLATFORM_WIN32_WINDOWS; |
128 | 1781 strcpy(c->szCSDVersion, " B"); |
2069 | 1782 #else |
1783 c->dwPlatformId=VER_PLATFORM_WIN32_NT; // let's not make DLL assume that it can read CR* registers | |
1784 strcpy(c->szCSDVersion, "Service Pack 3"); | |
1785 #endif | |
128 | 1786 dbgprintf(" Major version: 4\n Minor version: 0\n Build number: 0x4000457\n" |
3465 | 1787 " Platform Id: VER_PLATFORM_WIN32_NT\n Version string: 'Service Pack 3'\n"); |
1 | 1788 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1789 } |
3465 | 1790 static HANDLE WINAPI expCreateSemaphoreA(char* v1, long init_count, |
1791 long max_count, char* name) | |
1 | 1792 { |
128 | 1793 pthread_mutex_t *pm; |
1794 pthread_cond_t *pc; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1795 mutex_list* pp; |
3465 | 1796 /* |
1797 printf("CreateSemaphoreA(%p = %s)\n", name, (name ? name : "<null>")); | |
1798 pp=mlist; | |
1799 while(pp) | |
1800 { | |
1801 printf("%p => ", pp); | |
1802 pp=pp->prev; | |
1803 } | |
1804 printf("0\n"); | |
1805 */ | |
128 | 1806 if(mlist!=NULL) |
1 | 1807 { |
128 | 1808 mutex_list* pp=mlist; |
1809 if(name!=NULL) | |
3465 | 1810 do |
128 | 1811 { |
1812 if((strcmp(pp->name, name)==0) && (pp->type==1)) | |
1813 { | |
3465 | 1814 dbgprintf("CreateSemaphoreA(0x%x, init_count %d, max_count %d, name 0x%x='%s') => 0x%x\n", |
1815 v1, init_count, max_count, name, name, mlist); | |
128 | 1816 return (HANDLE)mlist; |
1817 } | |
2069 | 1818 }while((pp=pp->prev) != NULL); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1819 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1820 pm=mreq_private(sizeof(pthread_mutex_t), 0, AREATYPE_MUTEX); |
128 | 1821 pthread_mutex_init(pm, NULL); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1822 pc=mreq_private(sizeof(pthread_cond_t), 0, AREATYPE_COND); |
128 | 1823 pthread_cond_init(pc, NULL); |
1824 if(mlist==NULL) | |
1825 { | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1826 mlist=mreq_private(sizeof(mutex_list), 00, AREATYPE_EVENT); |
128 | 1827 mlist->next=mlist->prev=NULL; |
1828 } | |
1829 else | |
1 | 1830 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1831 mlist->next=mreq_private(sizeof(mutex_list), 00, AREATYPE_EVENT); |
128 | 1832 mlist->next->prev=mlist; |
1833 mlist->next->next=NULL; | |
1834 mlist=mlist->next; | |
3465 | 1835 // printf("new semaphore %p\n", mlist); |
1 | 1836 } |
128 | 1837 mlist->type=1; /* Type Semaphore */ |
1838 mlist->pm=pm; | |
1839 mlist->pc=pc; | |
1840 mlist->state=0; | |
1841 mlist->reset=0; | |
1842 mlist->semaphore=init_count; | |
1843 if(name!=NULL) | |
3465 | 1844 strncpy(mlist->name, name, 64); |
128 | 1845 else |
1846 mlist->name[0]=0; | |
1847 if(pm==NULL) | |
1848 dbgprintf("ERROR::: CreateSemaphoreA failure\n"); | |
1849 if(name) | |
3465 | 1850 dbgprintf("CreateSemaphoreA(0x%x, init_count %d, max_count %d, name 0x%x='%s') => 0x%x\n", |
1851 v1, init_count, max_count, name, name, mlist); | |
128 | 1852 else |
3465 | 1853 dbgprintf("CreateSemaphoreA(0x%x, init_count %d, max_count %d, name 0) => 0x%x\n", |
1854 v1, init_count, max_count, mlist); | |
128 | 1855 return (HANDLE)mlist; |
1 | 1856 } |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1857 |
3465 | 1858 static long WINAPI expReleaseSemaphore(long hsem, long increment, long* prev_count) |
1 | 1859 { |
3465 | 1860 // The state of a semaphore object is signaled when its count |
1861 // is greater than zero and nonsignaled when its count is equal to zero | |
1862 // Each time a waiting thread is released because of the semaphore's signaled | |
1863 // state, the count of the semaphore is decreased by one. | |
128 | 1864 mutex_list *ml = (mutex_list *)hsem; |
1 | 1865 |
128 | 1866 pthread_mutex_lock(ml->pm); |
1867 if (prev_count != 0) *prev_count = ml->semaphore; | |
1868 if (ml->semaphore == 0) pthread_cond_signal(ml->pc); | |
1869 ml->semaphore += increment; | |
1870 pthread_mutex_unlock(ml->pm); | |
1871 dbgprintf("ReleaseSemaphore(semaphore 0x%x, increment %d, prev_count 0x%x) => 1\n", | |
3465 | 1872 hsem, increment, prev_count); |
128 | 1873 return 1; |
1 | 1874 } |
1875 | |
1876 | |
3465 | 1877 static long WINAPI expRegOpenKeyExA(long key, const char* subkey, long reserved, long access, int* newkey) |
1 | 1878 { |
128 | 1879 long result=RegOpenKeyExA(key, subkey, reserved, access, newkey); |
1880 dbgprintf("RegOpenKeyExA(key 0x%x, subkey %s, reserved %d, access 0x%x, pnewkey 0x%x) => %d\n", | |
3465 | 1881 key, subkey, reserved, access, newkey, result); |
128 | 1882 if(newkey)dbgprintf(" New key: 0x%x\n", *newkey); |
1883 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1884 } |
3465 | 1885 static long WINAPI expRegCloseKey(long key) |
1 | 1886 { |
128 | 1887 long result=RegCloseKey(key); |
1888 dbgprintf("RegCloseKey(0x%x) => %d\n", key, result); | |
1889 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1890 } |
3465 | 1891 static long WINAPI expRegQueryValueExA(long key, const char* value, int* reserved, int* type, int* data, int* count) |
1 | 1892 { |
128 | 1893 long result=RegQueryValueExA(key, value, reserved, type, data, count); |
1894 dbgprintf("RegQueryValueExA(key 0x%x, value %s, reserved 0x%x, data 0x%x, count 0x%x)" | |
3465 | 1895 " => 0x%x\n", key, value, reserved, data, count, result); |
128 | 1896 if(data && count)dbgprintf(" read %d bytes: '%s'\n", *count, data); |
1897 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1898 } |
12059
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1899 |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1900 //from wine source dlls/advapi32/registry.c |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1901 static long WINAPI expRegCreateKeyA(long hkey, const char* name, int *retkey) |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1902 { |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1903 dbgprintf("RegCreateKeyA(key 0x%x, name 0x%x='%s',newkey=0x%x)\n",hkey,name,retkey); |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1904 return RegCreateKeyExA( hkey, name, 0, NULL,REG_OPTION_NON_VOLATILE, |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1905 KEY_ALL_ACCESS , NULL, retkey, NULL ); |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1906 } |
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
1907 |
3465 | 1908 static long WINAPI expRegCreateKeyExA(long key, const char* name, long reserved, |
1909 void* classs, long options, long security, | |
1910 void* sec_attr, int* newkey, int* status) | |
1 | 1911 { |
128 | 1912 long result=RegCreateKeyExA(key, name, reserved, classs, options, security, sec_attr, newkey, status); |
1913 dbgprintf("RegCreateKeyExA(key 0x%x, name 0x%x='%s', reserved=0x%x," | |
3465 | 1914 " 0x%x, 0x%x, 0x%x, newkey=0x%x, status=0x%x) => %d\n", |
1915 key, name, name, reserved, classs, options, security, sec_attr, newkey, status, result); | |
128 | 1916 if(!result && newkey) dbgprintf(" New key: 0x%x\n", *newkey); |
1917 if(!result && status) dbgprintf(" New key status: 0x%x\n", *status); | |
1918 return result; | |
1 | 1919 } |
3465 | 1920 static long WINAPI expRegSetValueExA(long key, const char* name, long v1, long v2, void* data, long size) |
1 | 1921 { |
128 | 1922 long result=RegSetValueExA(key, name, v1, v2, data, size); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1923 dbgprintf("RegSetValueExA(key 0x%x, name '%s', 0x%x, 0x%x, data 0x%x -> 0x%x '%s', size=%d) => %d", |
3465 | 1924 key, name, v1, v2, data, *(int*)data, data, size, result); |
128 | 1925 return result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1926 } |
1 | 1927 |
3465 | 1928 static long WINAPI expRegOpenKeyA (long hKey, LPCSTR lpSubKey, int* phkResult) |
3134 | 1929 { |
128 | 1930 long result=RegOpenKeyExA(hKey, lpSubKey, 0, 0, phkResult); |
1931 dbgprintf("RegOpenKeyExA(key 0x%x, subkey '%s', 0x%x) => %d\n", | |
3465 | 1932 hKey, lpSubKey, phkResult, result); |
128 | 1933 if(!result && phkResult) dbgprintf(" New key: 0x%x\n", *phkResult); |
1934 return result; | |
1 | 1935 } |
1936 | |
3465 | 1937 static DWORD WINAPI expRegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count, |
1938 LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count) | |
2069 | 1939 { |
1940 return RegEnumValueA(hkey, index, value, val_count, | |
1941 reserved, type, data, count); | |
1942 } | |
1943 | |
3465 | 1944 static DWORD WINAPI expRegEnumKeyExA(HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName, |
1945 LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, | |
1946 LPFILETIME lpftLastWriteTime) | |
1947 { | |
1948 return RegEnumKeyExA(hKey, dwIndex, lpName, lpcbName, lpReserved, lpClass, | |
1949 lpcbClass, lpftLastWriteTime); | |
1950 } | |
1951 | |
1952 static long WINAPI expQueryPerformanceCounter(long long* z) | |
1 | 1953 { |
1954 longcount(z); | |
128 | 1955 dbgprintf("QueryPerformanceCounter(0x%x) => 1 ( %Ld )\n", z, *z); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1956 return 1; |
1 | 1957 } |
1958 | |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1959 /* |
9896
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1960 * dummy function RegQueryInfoKeyA(), required by vss codecs |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1961 */ |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1962 static DWORD WINAPI expRegQueryInfoKeyA( HKEY hkey, LPSTR class, LPDWORD class_len, LPDWORD reserved, |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1963 LPDWORD subkeys, LPDWORD max_subkey, LPDWORD max_class, |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1964 LPDWORD values, LPDWORD max_value, LPDWORD max_data, |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1965 LPDWORD security, FILETIME *modif ) |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1966 { |
13182 | 1967 return ERROR_SUCCESS; |
9896
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1968 } |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1969 |
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
1970 /* |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1971 * return CPU clock (in kHz), using linux's /proc filesystem (/proc/cpuinfo) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1972 */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1973 static double linux_cpuinfo_freq() |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1974 { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1975 double freq=-1; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1976 FILE *f; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1977 char line[200]; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1978 char *s,*value; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1979 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1980 f = fopen ("/proc/cpuinfo", "r"); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1981 if (f != NULL) { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1982 while (fgets(line,sizeof(line),f)!=NULL) { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1983 /* NOTE: the ':' is the only character we can rely on */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1984 if (!(value = strchr(line,':'))) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1985 continue; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1986 /* terminate the valuename */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1987 *value++ = '\0'; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1988 /* skip any leading spaces */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1989 while (*value==' ') value++; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1990 if ((s=strchr(value,'\n'))) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1991 *s='\0'; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1992 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1993 if (!strncasecmp(line, "cpu MHz",strlen("cpu MHz")) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1994 && sscanf(value, "%lf", &freq) == 1) { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1995 freq*=1000; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1996 break; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
1997 } |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1998 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
1999 fclose(f); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2000 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2001 return freq; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2002 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2003 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2004 |
3465 | 2005 static double solaris_kstat_freq() |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2006 { |
1679
73c8f54305b1
Add a few ifdefs, so that the code compiles on old solaris releases (2.6 and 7)
jkeil
parents:
1543
diff
changeset
|
2007 #if defined(HAVE_LIBKSTAT) && defined(KSTAT_DATA_INT32) |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2008 /* |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2009 * try to extract the CPU speed from the solaris kernel's kstat data |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2010 */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2011 kstat_ctl_t *kc; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2012 kstat_t *ksp; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2013 kstat_named_t *kdata; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2014 int mhz = 0; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2015 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2016 kc = kstat_open(); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2017 if (kc != NULL) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2018 { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2019 ksp = kstat_lookup(kc, "cpu_info", 0, "cpu_info0"); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2020 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2021 /* kstat found and name/value pairs? */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2022 if (ksp != NULL && ksp->ks_type == KSTAT_TYPE_NAMED) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2023 { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2024 /* read the kstat data from the kernel */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2025 if (kstat_read(kc, ksp, NULL) != -1) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2026 { |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2027 /* |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2028 * lookup desired "clock_MHz" entry, check the expected |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2029 * data type |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2030 */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2031 kdata = (kstat_named_t *)kstat_data_lookup(ksp, "clock_MHz"); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2032 if (kdata != NULL && kdata->data_type == KSTAT_DATA_INT32) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2033 mhz = kdata->value.i32; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2034 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2035 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2036 kstat_close(kc); |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2037 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2038 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2039 if (mhz > 0) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2040 return mhz * 1000.; |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2041 #endif /* HAVE_LIBKSTAT */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2042 return -1; // kstat stuff is not available, CPU freq is unknown |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2043 } |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2044 |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2045 /* |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2046 * Measure CPU freq using the pentium's time stamp counter register (TSC) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2047 */ |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2048 static double tsc_freq() |
1 | 2049 { |
128 | 2050 static double ofreq=0.0; |
2051 int i; | |
1 | 2052 int x,y; |
128 | 2053 i=time(NULL); |
2054 if (ofreq != 0.0) return ofreq; | |
1 | 2055 while(i==time(NULL)); |
2056 x=localcount(); | |
2057 i++; | |
2058 while(i==time(NULL)); | |
2059 y=localcount(); | |
128 | 2060 ofreq = (double)(y-x)/1000.; |
2061 return ofreq; | |
1 | 2062 } |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2063 |
1 | 2064 static double CPU_Freq() |
2065 { | |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2066 double freq; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2067 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2068 if ((freq = linux_cpuinfo_freq()) > 0) |
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2069 return freq; |
1 | 2070 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2071 if ((freq = solaris_kstat_freq()) > 0) |
1 | 2072 return freq; |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
1096
diff
changeset
|
2073 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2074 return tsc_freq(); |
1 | 2075 } |
2076 | |
3465 | 2077 static long WINAPI expQueryPerformanceFrequency(long long* z) |
1 | 2078 { |
2079 *z=(long long)CPU_Freq(); | |
128 | 2080 dbgprintf("QueryPerformanceFrequency(0x%x) => 1 ( %Ld )\n", z, *z); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2081 return 1; |
1 | 2082 } |
3465 | 2083 static long WINAPI exptimeGetTime() |
1 | 2084 { |
2085 struct timeval t; | |
128 | 2086 long result; |
1 | 2087 gettimeofday(&t, 0); |
128 | 2088 result=1000*t.tv_sec+t.tv_usec/1000; |
2089 dbgprintf("timeGetTime() => %d\n", result); | |
2090 return result; | |
1 | 2091 } |
3465 | 2092 static void* WINAPI expLocalHandle(void* v) |
1 | 2093 { |
128 | 2094 dbgprintf("LocalHandle(0x%x) => 0x%x\n", v, v); |
1 | 2095 return v; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2096 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2097 |
3465 | 2098 static void* WINAPI expGlobalHandle(void* v) |
1 | 2099 { |
128 | 2100 dbgprintf("GlobalHandle(0x%x) => 0x%x\n", v, v); |
1 | 2101 return v; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2102 } |
3465 | 2103 static int WINAPI expGlobalUnlock(void* v) |
1 | 2104 { |
128 | 2105 dbgprintf("GlobalUnlock(0x%x) => 1\n", v); |
1 | 2106 return 1; |
2107 } | |
3465 | 2108 static void* WINAPI expGlobalFree(void* v) |
1 | 2109 { |
128 | 2110 dbgprintf("GlobalFree(0x%x) => 0\n", v); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2111 my_release(v); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2112 //free(v); |
1 | 2113 return 0; |
128 | 2114 } |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2115 |
3465 | 2116 static void* WINAPI expGlobalReAlloc(void* v, int size, int flags) |
128 | 2117 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2118 void* result=my_realloc(v, size); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2119 //void* result=realloc(v, size); |
128 | 2120 dbgprintf("GlobalReAlloc(0x%x, size %d, flags 0x%x) => 0x%x\n", v,size,flags,result); |
2121 return result; | |
2122 } | |
1 | 2123 |
3465 | 2124 static int WINAPI expLocalUnlock(void* v) |
1 | 2125 { |
128 | 2126 dbgprintf("LocalUnlock(0x%x) => 1\n", v); |
1 | 2127 return 1; |
2128 } | |
3465 | 2129 // |
2130 static void* WINAPI expLocalFree(void* v) | |
1 | 2131 { |
128 | 2132 dbgprintf("LocalFree(0x%x) => 0\n", v); |
1 | 2133 my_release(v); |
2134 return 0; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2135 } |
3465 | 2136 static HRSRC WINAPI expFindResourceA(HMODULE module, char* name, char* type) |
1 | 2137 { |
3465 | 2138 HRSRC result; |
2139 | |
2140 result=FindResourceA(module, name, type); | |
4545 | 2141 dbgprintf("FindResourceA(module 0x%x, name 0x%x(%s), type 0x%x(%s)) => 0x%x\n", |
2142 module, name, HIWORD(name) ? name : "UNICODE", type, HIWORD(type) ? type : "UNICODE", result); | |
128 | 2143 return result; |
1 | 2144 } |
3465 | 2145 |
128 | 2146 extern HRSRC WINAPI LoadResource(HMODULE, HRSRC); |
3465 | 2147 static HGLOBAL WINAPI expLoadResource(HMODULE module, HRSRC res) |
1 | 2148 { |
128 | 2149 HGLOBAL result=LoadResource(module, res); |
2150 dbgprintf("LoadResource(module 0x%x, resource 0x%x) => 0x%x\n", module, res, result); | |
2151 return result; | |
1 | 2152 } |
3465 | 2153 static void* WINAPI expLockResource(long res) |
1 | 2154 { |
128 | 2155 void* result=LockResource(res); |
2156 dbgprintf("LockResource(0x%x) => 0x%x\n", res, result); | |
2157 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2158 } |
3465 | 2159 static int WINAPI expFreeResource(long res) |
1 | 2160 { |
128 | 2161 int result=FreeResource(res); |
2162 dbgprintf("FreeResource(0x%x) => %d\n", res, result); | |
2163 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2164 } |
1 | 2165 //bool fun(HANDLE) |
2166 //!0 on success | |
3465 | 2167 static int WINAPI expCloseHandle(long v1) |
1 | 2168 { |
128 | 2169 dbgprintf("CloseHandle(0x%x) => 1\n", v1); |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
2170 /* do not close stdin,stdout and stderr */ |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
2171 if (v1 > 2) |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
2172 if (!close(v1)) |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
2173 return 0; |
1 | 2174 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2175 } |
1 | 2176 |
3465 | 2177 static const char* WINAPI expGetCommandLineA() |
1 | 2178 { |
128 | 2179 dbgprintf("GetCommandLineA() => \"c:\\aviplay.exe\"\n"); |
1 | 2180 return "c:\\aviplay.exe"; |
2181 } | |
128 | 2182 static short envs[]={'p', 'a', 't', 'h', ' ', 'c', ':', '\\', 0, 0}; |
3465 | 2183 static LPWSTR WINAPI expGetEnvironmentStringsW() |
1 | 2184 { |
3465 | 2185 dbgprintf("GetEnvironmentStringsW() => 0\n", envs); |
2186 return 0; | |
1 | 2187 } |
3465 | 2188 static void * WINAPI expRtlZeroMemory(void *p, size_t len) |
121 | 2189 { |
2190 void* result=memset(p,0,len); | |
2191 dbgprintf("RtlZeroMemory(0x%x, len %d) => 0x%x\n",p,len,result); | |
2192 return result; | |
2193 } | |
3465 | 2194 static void * WINAPI expRtlMoveMemory(void *dst, void *src, size_t len) |
121 | 2195 { |
2196 void* result=memmove(dst,src,len); | |
2197 dbgprintf("RtlMoveMemory (dest 0x%x, src 0x%x, len %d) => 0x%x\n",dst,src,len,result); | |
2198 return result; | |
2199 } | |
2200 | |
3465 | 2201 static void * WINAPI expRtlFillMemory(void *p, int ch, size_t len) |
121 | 2202 { |
2203 void* result=memset(p,ch,len); | |
2204 dbgprintf("RtlFillMemory(0x%x, char 0x%x, len %d) => 0x%x\n",p,ch,len,result); | |
2205 return result; | |
2206 } | |
3465 | 2207 static int WINAPI expFreeEnvironmentStringsW(short* strings) |
1 | 2208 { |
128 | 2209 dbgprintf("FreeEnvironmentStringsW(0x%x) => 1\n", strings); |
1 | 2210 return 1; |
2211 } | |
3465 | 2212 static int WINAPI expFreeEnvironmentStringsA(char* strings) |
128 | 2213 { |
3465 | 2214 dbgprintf("FreeEnvironmentStringsA(0x%x) => 1\n", strings); |
2215 return 1; | |
128 | 2216 } |
3465 | 2217 |
128 | 2218 static const char ch_envs[]= |
3465 | 2219 "__MSVCRT_HEAP_SELECT=__GLOBAL_HEAP_SELECTED,1\r\n" |
2220 "PATH=C:\\;C:\\windows\\;C:\\windows\\system\r\n"; | |
2221 static LPCSTR WINAPI expGetEnvironmentStrings() | |
1 | 2222 { |
128 | 2223 dbgprintf("GetEnvironmentStrings() => 0x%x\n", ch_envs); |
2224 return (LPCSTR)ch_envs; | |
3465 | 2225 // dbgprintf("GetEnvironmentStrings() => 0\n"); |
2226 // return 0; | |
1 | 2227 } |
2228 | |
3465 | 2229 static int WINAPI expGetStartupInfoA(STARTUPINFOA *s) |
1 | 2230 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2231 int i; |
128 | 2232 dbgprintf("GetStartupInfoA(0x%x) => 1\n"); |
1 | 2233 memset(s, 0, sizeof(*s)); |
2234 s->cb=sizeof(*s); | |
3465 | 2235 // s->lpReserved="Reserved"; |
2236 // s->lpDesktop="Desktop"; | |
2237 // s->lpTitle="Title"; | |
2238 // s->dwX=s->dwY=0; | |
2239 // s->dwXSize=s->dwYSize=200; | |
2240 s->dwFlags=s->wShowWindow=1; | |
2241 // s->hStdInput=s->hStdOutput=s->hStdError=0x1234; | |
128 | 2242 dbgprintf(" cb=%d\n", s->cb); |
2243 dbgprintf(" lpReserved='%s'\n", s->lpReserved); | |
2244 dbgprintf(" lpDesktop='%s'\n", s->lpDesktop); | |
2245 dbgprintf(" lpTitle='%s'\n", s->lpTitle); | |
2246 dbgprintf(" dwX=%d dwY=%d dwXSize=%d dwYSize=%d\n", | |
3465 | 2247 s->dwX, s->dwY, s->dwXSize, s->dwYSize); |
128 | 2248 dbgprintf(" dwXCountChars=%d dwYCountChars=%d dwFillAttribute=%d\n", |
3465 | 2249 s->dwXCountChars, s->dwYCountChars, s->dwFillAttribute); |
128 | 2250 dbgprintf(" dwFlags=0x%x wShowWindow=0x%x cbReserved2=0x%x\n", |
3465 | 2251 s->dwFlags, s->wShowWindow, s->cbReserved2); |
128 | 2252 dbgprintf(" lpReserved2=0x%x hStdInput=0x%x hStdOutput=0x%x hStdError=0x%x\n", |
3465 | 2253 s->lpReserved2, s->hStdInput, s->hStdOutput, s->hStdError); |
1 | 2254 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2255 } |
1 | 2256 |
3465 | 2257 static int WINAPI expGetStdHandle(int z) |
1 | 2258 { |
3465 | 2259 dbgprintf("GetStdHandle(0x%x) => 0x%x\n", z+0x1234); |
2260 return z+0x1234; | |
1 | 2261 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2262 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2263 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2264 #define FILE_HANDLE_quicktimeqts ((HANDLE)0x444) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2265 #define FILE_HANDLE_quicktimeqtx ((HANDLE)0x445) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2266 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2267 |
3465 | 2268 static int WINAPI expGetFileType(int handle) |
1 | 2269 { |
3465 | 2270 dbgprintf("GetFileType(0x%x) => 0x3 = pipe\n", handle); |
2271 return 0x3; | |
1 | 2272 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2273 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2274 static int WINAPI expGetFileAttributesA(char *filename) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2275 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2276 dbgprintf("GetFileAttributesA(%s) => FILE_ATTR_NORMAL\n", filename); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2277 if (strstr(filename, "QuickTime.qts")) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2278 return FILE_ATTRIBUTE_SYSTEM; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2279 return FILE_ATTRIBUTE_NORMAL; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2280 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2281 #endif |
3465 | 2282 static int WINAPI expSetHandleCount(int count) |
1 | 2283 { |
128 | 2284 dbgprintf("SetHandleCount(0x%x) => 1\n", count); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2285 return 1; |
1 | 2286 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2287 static int WINAPI expGetACP(void) |
1 | 2288 { |
128 | 2289 dbgprintf("GetACP() => 0\n"); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2290 return 0; |
1 | 2291 } |
2292 extern WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m); | |
3465 | 2293 static int WINAPI expGetModuleFileNameA(int module, char* s, int len) |
1 | 2294 { |
2295 WINE_MODREF *mr; | |
128 | 2296 int result; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2297 //printf("File name of module %X (%s) requested\n", module, s); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2298 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2299 if (module == 0 && len >= 12) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2300 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2301 /* return caller program name */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2302 strcpy(s, "aviplay.dll"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2303 result=1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2304 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2305 else if(s==0) |
128 | 2306 result=0; |
2307 else | |
3465 | 2308 if(len<35) |
2309 result=0; | |
128 | 2310 else |
3465 | 2311 { |
2312 result=1; | |
2313 strcpy(s, "c:\\windows\\system\\"); | |
2314 mr=MODULE32_LookupHMODULE(module); | |
2315 if(mr==0)//oops | |
2316 strcat(s, "aviplay.dll"); | |
2317 else | |
2318 if(strrchr(mr->filename, '/')==NULL) | |
2319 strcat(s, mr->filename); | |
2320 else | |
2321 strcat(s, strrchr(mr->filename, '/')+1); | |
2322 } | |
128 | 2323 if(!s) |
3465 | 2324 dbgprintf("GetModuleFileNameA(0x%x, 0x%x, %d) => %d\n", |
2325 module, s, len, result); | |
1 | 2326 else |
3465 | 2327 dbgprintf("GetModuleFileNameA(0x%x, 0x%x, %d) => %d ( '%s' )\n", |
2328 module, s, len, result, s); | |
128 | 2329 return result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2330 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2331 |
3465 | 2332 static int WINAPI expSetUnhandledExceptionFilter(void* filter) |
1 | 2333 { |
128 | 2334 dbgprintf("SetUnhandledExceptionFilter(0x%x) => 1\n", filter); |
1 | 2335 return 1;//unsupported and probably won't ever be supported |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2336 } |
2069 | 2337 |
3465 | 2338 static int WINAPI expLoadLibraryA(char* name) |
1 | 2339 { |
2069 | 2340 int result = 0; |
713 | 2341 char* lastbc; |
2069 | 2342 int i; |
713 | 2343 if (!name) |
2344 return -1; | |
2345 // we skip to the last backslash | |
2346 // this is effectively eliminating weird characters in | |
2347 // the text output windows | |
2069 | 2348 |
713 | 2349 lastbc = strrchr(name, '\\'); |
2350 if (lastbc) | |
2351 { | |
3465 | 2352 int i; |
2353 lastbc++; | |
713 | 2354 for (i = 0; 1 ;i++) |
2355 { | |
2356 name[i] = *lastbc++; | |
2357 if (!name[i]) | |
2358 break; | |
2359 } | |
2360 } | |
2069 | 2361 if(strncmp(name, "c:\\windows\\", 11)==0) name += 11; |
1416 | 2362 if(strncmp(name, ".\\", 2)==0) name += 2; |
2069 | 2363 |
2364 dbgprintf("Entering LoadLibraryA(%s)\n", name); | |
3465 | 2365 |
3440 | 2366 // PIMJ and VIVO audio are loading kernel32.dll |
2367 if (strcasecmp(name, "kernel32.dll") == 0 || strcasecmp(name, "kernel32") == 0) | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
2368 return MODULE_HANDLE_kernel32; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
2369 // return ERROR_SUCCESS; /* yeah, we have also the kernel32 calls */ |
3457 | 2370 /* exported -> do not return failed! */ |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2371 |
5234 | 2372 if (strcasecmp(name, "user32.dll") == 0 || strcasecmp(name, "user32") == 0) |
2373 // return MODULE_HANDLE_kernel32; | |
2374 return MODULE_HANDLE_user32; | |
2375 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2376 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2377 if (strcasecmp(name, "wininet.dll") == 0 || strcasecmp(name, "wininet") == 0) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2378 return MODULE_HANDLE_wininet; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2379 if (strcasecmp(name, "ddraw.dll") == 0 || strcasecmp(name, "ddraw") == 0) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2380 return MODULE_HANDLE_ddraw; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2381 if (strcasecmp(name, "advapi32.dll") == 0 || strcasecmp(name, "advapi32") == 0) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2382 return MODULE_HANDLE_advapi32; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2383 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2384 |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2385 if (strcasecmp(name, "comdlg32.dll") == 0 || strcasecmp(name, "comdlg32") == 0) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2386 return MODULE_HANDLE_comdlg32; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2387 if (strcasecmp(name, "msvcrt.dll") == 0 || strcasecmp(name, "msvcrt") == 0) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2388 return MODULE_HANDLE_msvcrt; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2389 if (strcasecmp(name, "ole32.dll") == 0 || strcasecmp(name, "ole32") == 0) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2390 return MODULE_HANDLE_ole32; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2391 if (strcasecmp(name, "winmm.dll") == 0 || strcasecmp(name, "winmm") == 0) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2392 return MODULE_HANDLE_winmm; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2393 |
2069 | 2394 result=LoadLibraryA(name); |
2395 dbgprintf("Returned LoadLibraryA(0x%x='%s'), def_path=%s => 0x%x\n", name, name, def_path, result); | |
2396 | |
128 | 2397 return result; |
2069 | 2398 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2399 |
3465 | 2400 static int WINAPI expFreeLibrary(int module) |
1 | 2401 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2402 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2403 int result=0; /* FIXME:XXX: qtx svq3 frees up qt.qts */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2404 #else |
128 | 2405 int result=FreeLibrary(module); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2406 #endif |
128 | 2407 dbgprintf("FreeLibrary(0x%x) => %d\n", module, result); |
2408 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2409 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2410 |
3465 | 2411 static void* WINAPI expGetProcAddress(HMODULE mod, char* name) |
1 | 2412 { |
2069 | 2413 void* result; |
5234 | 2414 switch(mod){ |
2415 case MODULE_HANDLE_kernel32: | |
2416 result=LookupExternalByName("kernel32.dll", name); break; | |
2417 case MODULE_HANDLE_user32: | |
2418 result=LookupExternalByName("user32.dll", name); break; | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2419 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2420 case MODULE_HANDLE_wininet: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2421 result=LookupExternalByName("wininet.dll", name); break; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2422 case MODULE_HANDLE_ddraw: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2423 result=LookupExternalByName("ddraw.dll", name); break; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2424 case MODULE_HANDLE_advapi32: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2425 result=LookupExternalByName("advapi32.dll", name); break; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2426 #endif |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2427 case MODULE_HANDLE_comdlg32: |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2428 result=LookupExternalByName("comdlg32.dll", name); break; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2429 case MODULE_HANDLE_msvcrt: |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2430 result=LookupExternalByName("msvcrt.dll", name); break; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2431 case MODULE_HANDLE_ole32: |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2432 result=LookupExternalByName("ole32.dll", name); break; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2433 case MODULE_HANDLE_winmm: |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
2434 result=LookupExternalByName("winmm.dll", name); break; |
5234 | 2435 default: |
128 | 2436 result=GetProcAddress(mod, name); |
5234 | 2437 } |
22476 | 2438 if((unsigned int)name > 0xffff) |
2439 dbgprintf("GetProcAddress(0x%x, '%s') => 0x%x\n", mod, name, result); | |
2440 else | |
2441 dbgprintf("GetProcAddress(0x%x, '%d') => 0x%x\n", mod, (int)name, result); | |
128 | 2442 return result; |
2069 | 2443 } |
1 | 2444 |
3465 | 2445 static long WINAPI expCreateFileMappingA(int hFile, void* lpAttr, |
2446 long flProtect, long dwMaxHigh, | |
2447 long dwMaxLow, const char* name) | |
1 | 2448 { |
128 | 2449 long result=CreateFileMappingA(hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, name); |
2450 if(!name) | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2451 dbgprintf("CreateFileMappingA(file 0x%x, lpAttr 0x%x," |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2452 "flProtect 0x%x, dwMaxHigh 0x%x, dwMaxLow 0x%x, name 0) => %d\n", |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2453 hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, result); |
128 | 2454 else |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2455 dbgprintf("CreateFileMappingA(file 0x%x, lpAttr 0x%x," |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2456 "flProtect 0x%x, dwMaxHigh 0x%x, dwMaxLow 0x%x, name 0x%x='%s') => %d\n", |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2457 hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, name, name, result); |
128 | 2458 return result; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2459 } |
1 | 2460 |
3465 | 2461 static long WINAPI expOpenFileMappingA(long hFile, long hz, const char* name) |
1 | 2462 { |
128 | 2463 long result=OpenFileMappingA(hFile, hz, name); |
2464 if(!name) | |
2465 dbgprintf("OpenFileMappingA(0x%x, 0x%x, 0) => %d\n", | |
3465 | 2466 hFile, hz, result); |
128 | 2467 else |
2468 dbgprintf("OpenFileMappingA(0x%x, 0x%x, 0x%x='%s') => %d\n", | |
3465 | 2469 hFile, hz, name, name, result); |
128 | 2470 return result; |
1 | 2471 } |
2472 | |
3465 | 2473 static void* WINAPI expMapViewOfFile(HANDLE file, DWORD mode, DWORD offHigh, |
2474 DWORD offLow, DWORD size) | |
1 | 2475 { |
128 | 2476 dbgprintf("MapViewOfFile(0x%x, 0x%x, 0x%x, 0x%x, size %d) => 0x%x\n", |
3465 | 2477 file,mode,offHigh,offLow,size,(char*)file+offLow); |
1 | 2478 return (char*)file+offLow; |
2479 } | |
2480 | |
3465 | 2481 static void* WINAPI expUnmapViewOfFile(void* view) |
1 | 2482 { |
128 | 2483 dbgprintf("UnmapViewOfFile(0x%x) => 0\n", view); |
1 | 2484 return 0; |
2485 } | |
2486 | |
3465 | 2487 static void* WINAPI expSleep(int time) |
2488 { | |
2489 #if HAVE_NANOSLEEP | |
2490 /* solaris doesn't have thread safe usleep */ | |
2491 struct timespec tsp; | |
2492 tsp.tv_sec = time / 1000000; | |
2493 tsp.tv_nsec = (time % 1000000) * 1000; | |
2494 nanosleep(&tsp, NULL); | |
2495 #else | |
2496 usleep(time); | |
2497 #endif | |
2498 dbgprintf("Sleep(%d) => 0\n", time); | |
2499 return 0; | |
2500 } | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
2501 |
3465 | 2502 // why does IV32 codec want to call this? I don't know ... |
2503 static int WINAPI expCreateCompatibleDC(int hdc) | |
1 | 2504 { |
3465 | 2505 int dc = 0;//0x81; |
2506 //dbgprintf("CreateCompatibleDC(%d) => 0x81\n", hdc); | |
2507 dbgprintf("CreateCompatibleDC(%d) => %d\n", hdc, dc); | |
2508 return dc; | |
2509 } | |
2510 | |
2511 static int WINAPI expGetDeviceCaps(int hdc, int unk) | |
2512 { | |
2513 dbgprintf("GetDeviceCaps(0x%x, %d) => 0\n", hdc, unk); | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2514 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2515 #define BITSPIXEL 12 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2516 #define PLANES 14 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2517 if (unk == BITSPIXEL) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2518 return 24; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2519 if (unk == PLANES) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2520 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2521 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2522 return 1; |
3465 | 2523 } |
2524 | |
2525 static WIN_BOOL WINAPI expDeleteDC(int hdc) | |
2526 { | |
2527 dbgprintf("DeleteDC(0x%x) => 0\n", hdc); | |
2528 if (hdc == 0x81) | |
2529 return 1; | |
1 | 2530 return 0; |
2531 } | |
3465 | 2532 |
2533 static WIN_BOOL WINAPI expDeleteObject(int hdc) | |
1 | 2534 { |
3465 | 2535 dbgprintf("DeleteObject(0x%x) => 1\n", hdc); |
2536 /* FIXME - implement code here */ | |
2537 return 1; | |
1 | 2538 } |
2539 | |
3465 | 2540 /* btvvc32.drv wants this one */ |
2541 static void* WINAPI expGetWindowDC(int hdc) | |
1 | 2542 { |
3465 | 2543 dbgprintf("GetWindowDC(%d) => 0x0\n", hdc); |
3128 | 2544 return 0; |
2545 } | |
2546 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2547 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2548 static int WINAPI expGetWindowRect(HWND win, RECT *r) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2549 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2550 dbgprintf("GetWindowRect(0x%x, 0x%x) => 1\n", win, r); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2551 /* (win == 0) => desktop */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2552 r->right = PSEUDO_SCREEN_WIDTH; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2553 r->left = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2554 r->bottom = PSEUDO_SCREEN_HEIGHT; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2555 r->top = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2556 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2557 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2558 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2559 static int WINAPI expMonitorFromWindow(HWND win, int flags) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2560 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2561 dbgprintf("MonitorFromWindow(0x%x, 0x%x) => 0\n", win, flags); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2562 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2563 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2564 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2565 static int WINAPI expMonitorFromRect(RECT *r, int flags) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2566 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2567 dbgprintf("MonitorFromRect(0x%x, 0x%x) => 0\n", r, flags); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2568 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2569 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2570 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2571 static int WINAPI expMonitorFromPoint(void *p, int flags) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2572 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2573 dbgprintf("MonitorFromPoint(0x%x, 0x%x) => 0\n", p, flags); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2574 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2575 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2576 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2577 static int WINAPI expEnumDisplayMonitors(void *dc, RECT *r, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2578 int WINAPI (*callback_proc)(), void *callback_param) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2579 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2580 dbgprintf("EnumDisplayMonitors(0x%x, 0x%x, 0x%x, 0x%x) => ?\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2581 dc, r, callback_proc, callback_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2582 return callback_proc(0, dc, r, callback_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2583 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2584 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2585 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2586 typedef struct tagMONITORINFO { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2587 DWORD cbSize; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2588 RECT rcMonitor; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2589 RECT rcWork; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2590 DWORD dwFlags; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2591 } MONITORINFO, *LPMONITORINFO; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2592 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2593 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2594 #define CCHDEVICENAME 8 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2595 typedef struct tagMONITORINFOEX { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2596 DWORD cbSize; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2597 RECT rcMonitor; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2598 RECT rcWork; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2599 DWORD dwFlags; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2600 TCHAR szDevice[CCHDEVICENAME]; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2601 } MONITORINFOEX, *LPMONITORINFOEX; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2602 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2603 static int WINAPI expGetMonitorInfoA(void *mon, LPMONITORINFO lpmi) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2604 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2605 dbgprintf("GetMonitorInfoA(0x%x, 0x%x) => 1\n", mon, lpmi); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2606 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2607 lpmi->rcMonitor.right = lpmi->rcWork.right = PSEUDO_SCREEN_WIDTH; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2608 lpmi->rcMonitor.left = lpmi->rcWork.left = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2609 lpmi->rcMonitor.bottom = lpmi->rcWork.bottom = PSEUDO_SCREEN_HEIGHT; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2610 lpmi->rcMonitor.top = lpmi->rcWork.top = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2611 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2612 lpmi->dwFlags = 1; /* primary monitor */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2613 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2614 if (lpmi->cbSize == sizeof(MONITORINFOEX)) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2615 { |
8451 | 2616 LPMONITORINFOEX lpmiex = (LPMONITORINFOEX)lpmi; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2617 dbgprintf("MONITORINFOEX!\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2618 strncpy(lpmiex->szDevice, "Monitor1", CCHDEVICENAME); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2619 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2620 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2621 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2622 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2623 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2624 static int WINAPI expEnumDisplayDevicesA(const char *device, int devnum, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2625 void *dispdev, int flags) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2626 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2627 dbgprintf("EnumDisplayDevicesA(0x%x = %s, %d, 0x%x, %x) => 1\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2628 device, device, devnum, dispdev, flags); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2629 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2630 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2631 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2632 static int WINAPI expIsWindowVisible(HWND win) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2633 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2634 dbgprintf("IsWindowVisible(0x%x) => 1\n", win); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2635 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2636 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2637 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2638 static HWND WINAPI expGetActiveWindow(void) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2639 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2640 dbgprintf("GetActiveWindow() => 0\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2641 return (HWND)0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2642 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2643 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2644 static int WINAPI expGetClassNameA(HWND win, LPTSTR classname, int maxcount) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2645 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2646 strncat(classname, "QuickTime", maxcount); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2647 dbgprintf("GetClassNameA(0x%x, 0x%x, %d) => %d\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2648 win, classname, maxcount, strlen(classname)); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2649 return strlen(classname); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2650 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2651 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2652 #define LPWNDCLASS void * |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2653 static int WINAPI expGetClassInfoA(HINSTANCE inst, LPCSTR classname, LPWNDCLASS wndclass) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2654 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2655 dbgprintf("GetClassInfoA(0x%x, 0x%x = %s, 0x%x) => 1\n", inst, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2656 classname, classname, wndclass); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2657 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2658 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2659 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2660 static int WINAPI expGetWindowLongA(HWND win, int index) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2661 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2662 dbgprintf("GetWindowLongA(0x%x, %d) => 0\n", win, index); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2663 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2664 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2665 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2666 static int WINAPI expGetObjectA(HGDIOBJ hobj, int objsize, LPVOID obj) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2667 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2668 dbgprintf("GetObjectA(0x%x, %d, 0x%x) => %d\n", hobj, objsize, obj, objsize); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2669 return objsize; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2670 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2671 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2672 static int WINAPI expCreateRectRgn(int x, int y, int width, int height) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2673 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2674 dbgprintf("CreateRectRgn(%d, %d, %d, %d) => 0\n", x, y, width, height); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2675 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2676 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2677 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2678 static int WINAPI expEnumWindows(int (*callback_func)(), void *callback_param) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2679 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2680 int i, i2; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2681 dbgprintf("EnumWindows(0x%x, 0x%x) => 1\n", callback_func, callback_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2682 i = callback_func(0, callback_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2683 i2 = callback_func(1, callback_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2684 return i && i2; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2685 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2686 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2687 static int WINAPI expGetWindowThreadProcessId(HWND win, int *pid_data) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2688 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2689 int tid = pthread_self(); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2690 dbgprintf("GetWindowThreadProcessId(0x%x, 0x%x) => %d\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2691 win, pid_data, tid); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2692 if (pid_data) |
12374 | 2693 *(int*)pid_data = tid; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2694 return tid; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2695 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2696 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2697 //HWND WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2698 // INT,INT,HWND,HMENU,HINSTANCE,LPVOID); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2699 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2700 static HWND WINAPI expCreateWindowExA(int exstyle, const char *classname, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2701 const char *winname, int style, int x, int y, int w, int h, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2702 HWND parent, HMENU menu, HINSTANCE inst, LPVOID param) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2703 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2704 printf("CreateWindowEx() called\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2705 dbgprintf("CreateWindowEx(%d, 0x%x = %s, 0x%x = %s, %d, %d, %d, %d, %d, 0x%x, 0x%x, 0x%x, 0x%x) => 1\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2706 exstyle, classname, classname, winname, winname, style, x, y, w, h, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2707 parent, menu, inst, param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2708 printf("CreateWindowEx() called okey\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2709 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2710 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2711 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2712 static int WINAPI expwaveOutGetNumDevs(void) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2713 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2714 dbgprintf("waveOutGetNumDevs() => 0\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2715 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2716 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2717 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2718 |
3465 | 2719 /* |
2720 * Returns the number of milliseconds, modulo 2^32, since the start | |
2721 * of the wineserver. | |
2722 */ | |
2723 static int WINAPI expGetTickCount(void) | |
1 | 2724 { |
3465 | 2725 static int tcstart = 0; |
2726 struct timeval t; | |
2727 int tc; | |
2728 gettimeofday( &t, NULL ); | |
2729 tc = ((t.tv_sec * 1000) + (t.tv_usec / 1000)) - tcstart; | |
2730 if (tcstart == 0) | |
2731 { | |
2732 tcstart = 0; | |
2733 tc = 0; | |
2734 } | |
2735 dbgprintf("GetTickCount() => %d\n", tc); | |
2736 return tc; | |
1 | 2737 } |
2738 | |
3465 | 2739 static int WINAPI expCreateFontA(void) |
2740 { | |
2741 dbgprintf("CreateFontA() => 0x0\n"); | |
2742 return 1; | |
2743 } | |
2744 | |
2745 /* tried to get pvmjpg work in a different way - no success */ | |
2746 static int WINAPI expDrawTextA(int hDC, char* lpString, int nCount, | |
2747 LPRECT lpRect, unsigned int uFormat) | |
2748 { | |
2749 dbgprintf("expDrawTextA(%p,...) => 8\n", hDC); | |
2750 return 8; | |
2751 } | |
2752 | |
2753 static int WINAPI expGetPrivateProfileIntA(const char* appname, | |
2754 const char* keyname, | |
2755 int default_value, | |
2756 const char* filename) | |
1 | 2757 { |
2758 int size=255; | |
2759 char buffer[256]; | |
2760 char* fullname; | |
2761 int result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2762 |
1 | 2763 buffer[255]=0; |
128 | 2764 if(!(appname && keyname && filename) ) |
2765 { | |
3465 | 2766 dbgprintf("GetPrivateProfileIntA('%s', '%s', %d, '%s') => %d\n", appname, keyname, default_value, filename, default_value ); |
128 | 2767 return default_value; |
2768 } | |
18878 | 2769 fullname=malloc(50+strlen(appname)+strlen(keyname)+strlen(filename)); |
1 | 2770 strcpy(fullname, "Software\\IniFileMapping\\"); |
2771 strcat(fullname, appname); | |
2772 strcat(fullname, "\\"); | |
2773 strcat(fullname, keyname); | |
2774 strcat(fullname, "\\"); | |
2775 strcat(fullname, filename); | |
2776 result=RegQueryValueExA(HKEY_LOCAL_MACHINE, fullname, NULL, NULL, (int*)buffer, &size); | |
2777 if((size>=0)&&(size<256)) | |
2778 buffer[size]=0; | |
3465 | 2779 // printf("GetPrivateProfileIntA(%s, %s, %s) -> %s\n", appname, keyname, filename, buffer); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2780 free(fullname); |
1 | 2781 if(result) |
128 | 2782 result=default_value; |
1 | 2783 else |
128 | 2784 result=atoi(buffer); |
2785 dbgprintf("GetPrivateProfileIntA('%s', '%s', %d, '%s') => %d\n", appname, keyname, default_value, filename, result); | |
2786 return result; | |
1 | 2787 } |
3465 | 2788 static int WINAPI expGetProfileIntA(const char* appname, |
2789 const char* keyname, | |
2790 int default_value) | |
128 | 2791 { |
2792 dbgprintf("GetProfileIntA -> "); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2793 return expGetPrivateProfileIntA(appname, keyname, default_value, "default"); |
128 | 2794 } |
2795 | |
3465 | 2796 static int WINAPI expGetPrivateProfileStringA(const char* appname, |
2797 const char* keyname, | |
2798 const char* def_val, | |
2799 char* dest, unsigned int len, | |
2800 const char* filename) | |
1 | 2801 { |
2802 int result; | |
2803 int size; | |
2804 char* fullname; | |
128 | 2805 dbgprintf("GetPrivateProfileStringA('%s', '%s', def_val '%s', 0x%x, 0x%x, '%s')", appname, keyname, def_val, dest, len, filename ); |
1 | 2806 if(!(appname && keyname && filename) ) return 0; |
18878 | 2807 fullname=malloc(50+strlen(appname)+strlen(keyname)+strlen(filename)); |
1 | 2808 strcpy(fullname, "Software\\IniFileMapping\\"); |
2809 strcat(fullname, appname); | |
2810 strcat(fullname, "\\"); | |
2811 strcat(fullname, keyname); | |
2812 strcat(fullname, "\\"); | |
2813 strcat(fullname, filename); | |
2814 size=len; | |
2815 result=RegQueryValueExA(HKEY_LOCAL_MACHINE, fullname, NULL, NULL, (int*)dest, &size); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2816 free(fullname); |
128 | 2817 if(result) |
2818 { | |
2819 strncpy(dest, def_val, size); | |
2820 if (strlen(def_val)< size) size = strlen(def_val); | |
2821 } | |
2822 dbgprintf(" => %d ( '%s' )\n", size, dest); | |
1 | 2823 return size; |
2824 } | |
3465 | 2825 static int WINAPI expWritePrivateProfileStringA(const char* appname, |
2826 const char* keyname, | |
2827 const char* string, | |
2828 const char* filename) | |
1 | 2829 { |
2830 int size=256; | |
2831 char* fullname; | |
128 | 2832 dbgprintf("WritePrivateProfileStringA('%s', '%s', '%s', '%s')", appname, keyname, string, filename ); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2833 if(!(appname && keyname && filename) ) |
128 | 2834 { |
2835 dbgprintf(" => -1\n"); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2836 return -1; |
128 | 2837 } |
18878 | 2838 fullname=malloc(50+strlen(appname)+strlen(keyname)+strlen(filename)); |
1 | 2839 strcpy(fullname, "Software\\IniFileMapping\\"); |
2840 strcat(fullname, appname); | |
2841 strcat(fullname, "\\"); | |
2842 strcat(fullname, keyname); | |
2843 strcat(fullname, "\\"); | |
2844 strcat(fullname, filename); | |
2845 RegSetValueExA(HKEY_LOCAL_MACHINE, fullname, 0, REG_SZ, (int*)string, strlen(string)); | |
3465 | 2846 // printf("RegSetValueExA(%s,%d)\n", string, strlen(string)); |
2847 // printf("WritePrivateProfileStringA(%s, %s, %s, %s)\n", appname, keyname, string, filename ); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2848 free(fullname); |
128 | 2849 dbgprintf(" => 0\n"); |
1 | 2850 return 0; |
2851 } | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2852 |
1 | 2853 unsigned int _GetPrivateProfileIntA(const char* appname, const char* keyname, INT default_value, const char* filename) |
2854 { | |
2855 return expGetPrivateProfileIntA(appname, keyname, default_value, filename); | |
2856 } | |
2857 int _GetPrivateProfileStringA(const char* appname, const char* keyname, | |
3465 | 2858 const char* def_val, char* dest, unsigned int len, const char* filename) |
1 | 2859 { |
2860 return expGetPrivateProfileStringA(appname, keyname, def_val, dest, len, filename); | |
2861 } | |
2862 int _WritePrivateProfileStringA(const char* appname, const char* keyname, | |
3465 | 2863 const char* string, const char* filename) |
1 | 2864 { |
2865 return expWritePrivateProfileStringA(appname, keyname, string, filename); | |
2866 } | |
2867 | |
2868 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2869 |
3465 | 2870 static int WINAPI expDefDriverProc(int _private, int id, int msg, int arg1, int arg2) |
1 | 2871 { |
128 | 2872 dbgprintf("DefDriverProc(0x%x, 0x%x, 0x%x, 0x%x, 0x%x) => 0\n", _private, id, msg, arg1, arg2); |
1 | 2873 return 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2874 } |
1 | 2875 |
3465 | 2876 static int WINAPI expSizeofResource(int v1, int v2) |
1 | 2877 { |
128 | 2878 int result=SizeofResource(v1, v2); |
2879 dbgprintf("SizeofResource(0x%x, 0x%x) => %d\n", v1, v2, result); | |
2880 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2881 } |
1 | 2882 |
3465 | 2883 static int WINAPI expGetLastError() |
1 | 2884 { |
128 | 2885 int result=GetLastError(); |
2886 dbgprintf("GetLastError() => 0x%x\n", result); | |
2887 return result; | |
1 | 2888 } |
2889 | |
3465 | 2890 static void WINAPI expSetLastError(int error) |
1 | 2891 { |
128 | 2892 dbgprintf("SetLastError(0x%x)\n", error); |
1 | 2893 SetLastError(error); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2894 } |
1 | 2895 |
3465 | 2896 static int WINAPI expStringFromGUID2(GUID* guid, char* str, int cbMax) |
128 | 2897 { |
2069 | 2898 int result=snprintf(str, cbMax, "%.8x-%.4x-%.4x-%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", |
2899 guid->f1, guid->f2, guid->f3, | |
2900 (unsigned char)guid->f4[0], (unsigned char)guid->f4[1], | |
2901 (unsigned char)guid->f4[2], (unsigned char)guid->f4[3], | |
2902 (unsigned char)guid->f4[4], (unsigned char)guid->f4[5], | |
2903 (unsigned char)guid->f4[6], (unsigned char)guid->f4[7]); | |
128 | 2904 dbgprintf("StringFromGUID2(0x%x, 0x%x='%s', %d) => %d\n", guid, str, str, cbMax, result); |
2905 return result; | |
2906 } | |
2907 | |
1 | 2908 |
3465 | 2909 static int WINAPI expGetFileVersionInfoSizeA(const char* name, int* lpHandle) |
1 | 2910 { |
128 | 2911 dbgprintf("GetFileVersionInfoSizeA(0x%x='%s', 0x%X) => 0\n", name, name, lpHandle); |
1 | 2912 return 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2913 } |
1 | 2914 |
3465 | 2915 static int WINAPI expIsBadStringPtrW(const short* string, int nchars) |
1 | 2916 { |
128 | 2917 int result; |
2918 if(string==0)result=1; else result=0; | |
2919 dbgprintf("IsBadStringPtrW(0x%x, %d) => %d", string, nchars, result); | |
2920 if(string)wch_print(string); | |
2921 return result; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2922 } |
3465 | 2923 static int WINAPI expIsBadStringPtrA(const char* string, int nchars) |
3128 | 2924 { |
2925 return expIsBadStringPtrW((const short*)string, nchars); | |
2926 } | |
3465 | 2927 static long WINAPI expInterlockedExchangeAdd( long* dest, long incr ) |
1 | 2928 { |
2929 long ret; | |
3465 | 2930 __asm__ __volatile__ |
2931 ( | |
2932 "lock; xaddl %0,(%1)" | |
2933 : "=r" (ret) | |
2934 : "r" (dest), "0" (incr) | |
2935 : "memory" | |
2936 ); | |
1 | 2937 return ret; |
2938 } | |
2939 | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2940 static long WINAPI expInterlockedCompareExchange( unsigned long* dest, unsigned long exchange, unsigned long comperand) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2941 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2942 unsigned long retval = *dest; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2943 if(*dest == comperand) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2944 *dest = exchange; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2945 return retval; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2946 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2947 |
3465 | 2948 static long WINAPI expInterlockedIncrement( long* dest ) |
1 | 2949 { |
3465 | 2950 long result=expInterlockedExchangeAdd( dest, 1 ) + 1; |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2951 dbgprintf("InterlockedIncrement(0x%x => %d) => %d\n", dest, *dest, result); |
128 | 2952 return result; |
1 | 2953 } |
3465 | 2954 static long WINAPI expInterlockedDecrement( long* dest ) |
1 | 2955 { |
3465 | 2956 long result=expInterlockedExchangeAdd( dest, -1 ) - 1; |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
2957 dbgprintf("InterlockedDecrement(0x%x => %d) => %d\n", dest, *dest, result); |
128 | 2958 return result; |
1 | 2959 } |
2960 | |
3465 | 2961 static void WINAPI expOutputDebugStringA( const char* string ) |
1 | 2962 { |
128 | 2963 dbgprintf("OutputDebugStringA(0x%x='%s')\n", string); |
1 | 2964 fprintf(stderr, "DEBUG: %s\n", string); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2965 } |
1 | 2966 |
3465 | 2967 static int WINAPI expGetDC(int hwnd) |
1 | 2968 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2969 dbgprintf("GetDC(0x%x) => 1\n", hwnd); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2970 return 1; |
1 | 2971 } |
2972 | |
3465 | 2973 static int WINAPI expReleaseDC(int hwnd, int hdc) |
1 | 2974 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2975 dbgprintf("ReleaseDC(0x%x, 0x%x) => 1\n", hwnd, hdc); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
2976 return 1; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
2977 } |
3465 | 2978 |
2979 static int WINAPI expGetDesktopWindow() | |
128 | 2980 { |
3465 | 2981 dbgprintf("GetDesktopWindow() => 0\n"); |
2982 return 0; | |
128 | 2983 } |
3465 | 2984 |
2985 static int cursor[100]; | |
2986 | |
2987 static int WINAPI expLoadCursorA(int handle,LPCSTR name) | |
2988 { | |
2989 dbgprintf("LoadCursorA(%d, 0x%x='%s') => 0x%x\n", handle, name, (int)&cursor[0]); | |
2990 return (int)&cursor[0]; | |
2991 } | |
2992 static int WINAPI expSetCursor(void *cursor) | |
128 | 2993 { |
2994 dbgprintf("SetCursor(0x%x) => 0x%x\n", cursor, cursor); | |
2995 return (int)cursor; | |
2996 } | |
3465 | 2997 static int WINAPI expGetCursorPos(void *cursor) |
2069 | 2998 { |
2999 dbgprintf("GetCursorPos(0x%x) => 0x%x\n", cursor, cursor); | |
3000 return 1; | |
3001 } | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3002 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3003 static int show_cursor = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3004 static int WINAPI expShowCursor(int show) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3005 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3006 dbgprintf("ShowCursor(%d) => %d\n", show, show); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3007 if (show) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3008 show_cursor++; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3009 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3010 show_cursor--; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3011 return show_cursor; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3012 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3013 #endif |
3465 | 3014 static int WINAPI expRegisterWindowMessageA(char *message) |
2069 | 3015 { |
3016 dbgprintf("RegisterWindowMessageA(%s)\n", message); | |
3017 return 1; | |
3018 } | |
3465 | 3019 static int WINAPI expGetProcessVersion(int pid) |
2069 | 3020 { |
3021 dbgprintf("GetProcessVersion(%d)\n", pid); | |
3022 return 1; | |
3023 } | |
3465 | 3024 static int WINAPI expGetCurrentThread(void) |
2069 | 3025 { |
3457 | 3026 #warning FIXME! |
3027 dbgprintf("GetCurrentThread() => %x\n", 0xcfcf9898); | |
2779 | 3028 return 0xcfcf9898; |
2069 | 3029 } |
3465 | 3030 static int WINAPI expGetOEMCP(void) |
2069 | 3031 { |
3032 dbgprintf("GetOEMCP()\n"); | |
3033 return 1; | |
3034 } | |
3465 | 3035 static int WINAPI expGetCPInfo(int cp,void *info) |
2069 | 3036 { |
3037 dbgprintf("GetCPInfo()\n"); | |
3038 return 0; | |
3039 } | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3040 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3041 #define SM_CXSCREEN 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3042 #define SM_CYSCREEN 1 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3043 #define SM_XVIRTUALSCREEN 76 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3044 #define SM_YVIRTUALSCREEN 77 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3045 #define SM_CXVIRTUALSCREEN 78 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3046 #define SM_CYVIRTUALSCREEN 79 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3047 #define SM_CMONITORS 80 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3048 #endif |
3465 | 3049 static int WINAPI expGetSystemMetrics(int index) |
2069 | 3050 { |
3051 dbgprintf("GetSystemMetrics(%d)\n", index); | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3052 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3053 switch(index) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3054 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3055 case SM_XVIRTUALSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3056 case SM_YVIRTUALSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3057 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3058 case SM_CXSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3059 case SM_CXVIRTUALSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3060 return PSEUDO_SCREEN_WIDTH; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3061 case SM_CYSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3062 case SM_CYVIRTUALSCREEN: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3063 return PSEUDO_SCREEN_HEIGHT; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3064 case SM_CMONITORS: |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3065 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3066 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3067 #endif |
2069 | 3068 return 1; |
3069 } | |
3465 | 3070 static int WINAPI expGetSysColor(int index) |
2069 | 3071 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3072 dbgprintf("GetSysColor(%d) => 1\n", index); |
2069 | 3073 return 1; |
3074 } | |
3465 | 3075 static int WINAPI expGetSysColorBrush(int index) |
2069 | 3076 { |
3077 dbgprintf("GetSysColorBrush(%d)\n", index); | |
3078 return 1; | |
3079 } | |
3080 | |
3081 | |
3082 | |
3465 | 3083 static int WINAPI expGetSystemPaletteEntries(int hdc, int iStartIndex, int nEntries, void* lppe) |
128 | 3084 { |
3085 dbgprintf("GetSystemPaletteEntries(0x%x, 0x%x, 0x%x, 0x%x) => 0\n", | |
3465 | 3086 hdc, iStartIndex, nEntries, lppe); |
1 | 3087 return 0; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3088 } |
1 | 3089 |
3090 /* | |
3465 | 3091 typedef struct _TIME_ZONE_INFORMATION { |
3092 long Bias; | |
3093 char StandardName[32]; | |
3094 SYSTEMTIME StandardDate; | |
3095 long StandardBias; | |
3096 char DaylightName[32]; | |
3097 SYSTEMTIME DaylightDate; | |
3098 long DaylightBias; | |
3099 } TIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION; | |
3100 */ | |
3101 | |
3102 static int WINAPI expGetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation) | |
1 | 3103 { |
128 | 3104 const short name[]={'C', 'e', 'n', 't', 'r', 'a', 'l', ' ', 'S', 't', 'a', |
3105 'n', 'd', 'a', 'r', 'd', ' ', 'T', 'i', 'm', 'e', 0}; | |
3106 const short pname[]={'C', 'e', 'n', 't', 'r', 'a', 'l', ' ', 'D', 'a', 'y', | |
3107 'l', 'i', 'g', 'h', 't', ' ', 'T', 'i', 'm', 'e', 0}; | |
3108 dbgprintf("GetTimeZoneInformation(0x%x) => TIME_ZONE_ID_STANDARD\n"); | |
1 | 3109 memset(lpTimeZoneInformation, 0, sizeof(TIME_ZONE_INFORMATION)); |
128 | 3110 lpTimeZoneInformation->Bias=360;//GMT-6 |
3111 memcpy(lpTimeZoneInformation->StandardName, name, sizeof(name)); | |
3112 lpTimeZoneInformation->StandardDate.wMonth=10; | |
3113 lpTimeZoneInformation->StandardDate.wDay=5; | |
3114 lpTimeZoneInformation->StandardDate.wHour=2; | |
3115 lpTimeZoneInformation->StandardBias=0; | |
3116 memcpy(lpTimeZoneInformation->DaylightName, pname, sizeof(pname)); | |
3117 lpTimeZoneInformation->DaylightDate.wMonth=4; | |
3118 lpTimeZoneInformation->DaylightDate.wDay=1; | |
3119 lpTimeZoneInformation->DaylightDate.wHour=2; | |
3120 lpTimeZoneInformation->DaylightBias=-60; | |
3121 return TIME_ZONE_ID_STANDARD; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3122 } |
1 | 3123 |
3465 | 3124 static void WINAPI expGetLocalTime(SYSTEMTIME* systime) |
1 | 3125 { |
3126 time_t local_time; | |
3127 struct tm *local_tm; | |
3128 struct timeval tv; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3129 |
128 | 3130 dbgprintf("GetLocalTime(0x%x)\n"); |
1 | 3131 gettimeofday(&tv, NULL); |
3132 local_time=tv.tv_sec; | |
3133 local_tm=localtime(&local_time); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3134 |
1 | 3135 systime->wYear = local_tm->tm_year + 1900; |
3136 systime->wMonth = local_tm->tm_mon + 1; | |
3137 systime->wDayOfWeek = local_tm->tm_wday; | |
3138 systime->wDay = local_tm->tm_mday; | |
3139 systime->wHour = local_tm->tm_hour; | |
3140 systime->wMinute = local_tm->tm_min; | |
3141 systime->wSecond = local_tm->tm_sec; | |
3142 systime->wMilliseconds = (tv.tv_usec / 1000) % 1000; | |
128 | 3143 dbgprintf(" Year: %d\n Month: %d\n Day of week: %d\n" |
3465 | 3144 " Day: %d\n Hour: %d\n Minute: %d\n Second: %d\n" |
3145 " Milliseconds: %d\n", | |
3146 systime->wYear, systime->wMonth, systime->wDayOfWeek, systime->wDay, | |
3147 systime->wHour, systime->wMinute, systime->wSecond, systime->wMilliseconds); | |
1 | 3148 } |
3149 | |
3465 | 3150 static int WINAPI expGetSystemTime(SYSTEMTIME* systime) |
1 | 3151 { |
3152 time_t local_time; | |
3153 struct tm *local_tm; | |
3154 struct timeval tv; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3155 |
128 | 3156 dbgprintf("GetSystemTime(0x%x)\n", systime); |
1 | 3157 gettimeofday(&tv, NULL); |
3158 local_time=tv.tv_sec; | |
3159 local_tm=gmtime(&local_time); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3160 |
1 | 3161 systime->wYear = local_tm->tm_year + 1900; |
3162 systime->wMonth = local_tm->tm_mon + 1; | |
3163 systime->wDayOfWeek = local_tm->tm_wday; | |
3164 systime->wDay = local_tm->tm_mday; | |
3165 systime->wHour = local_tm->tm_hour; | |
3166 systime->wMinute = local_tm->tm_min; | |
3167 systime->wSecond = local_tm->tm_sec; | |
3168 systime->wMilliseconds = (tv.tv_usec / 1000) % 1000; | |
128 | 3169 dbgprintf(" Year: %d\n Month: %d\n Day of week: %d\n" |
3465 | 3170 " Day: %d\n Hour: %d\n Minute: %d\n Second: %d\n" |
3171 " Milliseconds: %d\n", | |
3172 systime->wYear, systime->wMonth, systime->wDayOfWeek, systime->wDay, | |
3173 systime->wHour, systime->wMinute, systime->wSecond, systime->wMilliseconds); | |
2069 | 3174 return 0; |
1 | 3175 } |
3176 | |
7386 | 3177 #define SECS_1601_TO_1970 ((369 * 365 + 89) * 86400ULL) |
3178 static void WINAPI expGetSystemTimeAsFileTime(FILETIME* systime) | |
3179 { | |
3180 struct tm *local_tm; | |
3181 struct timeval tv; | |
3182 unsigned long long secs; | |
3183 | |
3184 dbgprintf("GetSystemTime(0x%x)\n", systime); | |
3185 gettimeofday(&tv, NULL); | |
3186 secs = (tv.tv_sec + SECS_1601_TO_1970) * 10000000; | |
3187 secs += tv.tv_usec * 10; | |
3188 systime->dwLowDateTime = secs & 0xffffffff; | |
3189 systime->dwHighDateTime = (secs >> 32); | |
3190 } | |
3191 | |
3465 | 3192 static int WINAPI expGetEnvironmentVariableA(const char* name, char* field, int size) |
1 | 3193 { |
128 | 3194 char *p; |
3465 | 3195 // printf("%s %x %x\n", name, field, size); |
1 | 3196 if(field)field[0]=0; |
3465 | 3197 /* |
3198 p = getenv(name); | |
3199 if (p) strncpy(field,p,size); | |
3200 */ | |
128 | 3201 if (strcmp(name,"__MSVCRT_HEAP_SELECT")==0) |
3465 | 3202 strcpy(field,"__GLOBAL_HEAP_SELECTED,1"); |
128 | 3203 dbgprintf("GetEnvironmentVariableA(0x%x='%s', 0x%x, %d) => %d\n", name, name, field, size, strlen(field)); |
3204 return strlen(field); | |
3205 } | |
3206 | |
5744
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3207 static int WINAPI expSetEnvironmentVariableA(const char *name, const char *value) |
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3208 { |
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3209 dbgprintf("SetEnvironmentVariableA(%s, %s)\n", name, value); |
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3210 return 0; |
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3211 } |
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
3212 |
3465 | 3213 static void* WINAPI expCoTaskMemAlloc(ULONG cb) |
128 | 3214 { |
3215 return my_mreq(cb, 0); | |
3216 } | |
3465 | 3217 static void WINAPI expCoTaskMemFree(void* cb) |
128 | 3218 { |
3219 my_release(cb); | |
3220 } | |
3221 | |
3465 | 3222 |
3223 | |
3224 | |
3547 | 3225 void* CoTaskMemAlloc(unsigned long cb) |
3465 | 3226 { |
3227 return expCoTaskMemAlloc(cb); | |
3228 } | |
3229 void CoTaskMemFree(void* cb) | |
3230 { | |
3231 expCoTaskMemFree(cb); | |
3232 } | |
128 | 3233 |
3234 struct COM_OBJECT_INFO | |
3235 { | |
3236 GUID clsid; | |
7386 | 3237 long (*GetClassObject) (GUID* clsid, const GUID* iid, void** ppv); |
128 | 3238 }; |
3239 | |
3240 static struct COM_OBJECT_INFO* com_object_table=0; | |
3241 static int com_object_size=0; | |
7386 | 3242 int RegisterComClass(const GUID* clsid, GETCLASSOBJECT gcs) |
128 | 3243 { |
2069 | 3244 if(!clsid || !gcs) |
3245 return -1; | |
128 | 3246 com_object_table=realloc(com_object_table, sizeof(struct COM_OBJECT_INFO)*(++com_object_size)); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3247 com_object_table[com_object_size-1].clsid=*clsid; |
128 | 3248 com_object_table[com_object_size-1].GetClassObject=gcs; |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3249 return 0; |
128 | 3250 } |
3251 | |
7386 | 3252 int UnregisterComClass(const GUID* clsid, GETCLASSOBJECT gcs) |
2069 | 3253 { |
3254 int found = 0; | |
3255 int i = 0; | |
3256 if(!clsid || !gcs) | |
3257 return -1; | |
3258 | |
3259 if (com_object_table == 0) | |
3260 printf("Warning: UnregisterComClass() called without any registered class\n"); | |
3261 while (i < com_object_size) | |
3262 { | |
3263 if (found && i > 0) | |
3264 { | |
3265 memcpy(&com_object_table[i - 1].clsid, | |
3266 &com_object_table[i].clsid, sizeof(GUID)); | |
3267 com_object_table[i - 1].GetClassObject = | |
3268 com_object_table[i].GetClassObject; | |
3269 } | |
3270 else if (memcmp(&com_object_table[i].clsid, clsid, sizeof(GUID)) == 0 | |
3271 && com_object_table[i].GetClassObject == gcs) | |
3272 { | |
3465 | 3273 found++; |
2069 | 3274 } |
3275 i++; | |
3276 } | |
3277 if (found) | |
3278 { | |
3279 if (--com_object_size == 0) | |
3280 { | |
3281 free(com_object_table); | |
3465 | 3282 com_object_table = 0; |
2069 | 3283 } |
3284 } | |
3285 return 0; | |
3286 } | |
3287 | |
3288 | |
7386 | 3289 const GUID IID_IUnknown = |
3465 | 3290 { |
3291 0x00000000, 0x0000, 0x0000, | |
3292 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} | |
3293 }; | |
7386 | 3294 const GUID IID_IClassFactory = |
3465 | 3295 { |
3296 0x00000001, 0x0000, 0x0000, | |
3297 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} | |
3298 }; | |
3299 | |
3300 static long WINAPI expCoCreateInstance(GUID* rclsid, struct IUnknown* pUnkOuter, | |
7386 | 3301 long dwClsContext, const GUID* riid, void** ppv) |
128 | 3302 { |
3303 int i; | |
3304 struct COM_OBJECT_INFO* ci=0; | |
3305 for(i=0; i<com_object_size; i++) | |
3306 if(!memcmp(rclsid, &com_object_table[i].clsid, sizeof(GUID))) | |
3307 ci=&com_object_table[i]; | |
3465 | 3308 if(!ci)return REGDB_E_CLASSNOTREG; |
128 | 3309 // in 'real' world we should mess with IClassFactory here |
3310 i=ci->GetClassObject(rclsid, riid, ppv); | |
3311 return i; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3312 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3313 |
128 | 3314 long CoCreateInstance(GUID* rclsid, struct IUnknown* pUnkOuter, |
7386 | 3315 long dwClsContext, const GUID* riid, void** ppv) |
128 | 3316 { |
3317 return expCoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv); | |
3318 } | |
3319 | |
3465 | 3320 static int WINAPI expIsRectEmpty(CONST RECT *lprc) |
128 | 3321 { |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3322 int r = 0; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3323 int w,h; |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3324 //trapbug(); |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3325 if (lprc) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3326 { |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3327 w = lprc->right - lprc->left; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3328 h = lprc->bottom - lprc->top; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3329 if (w <= 0 || h <= 0) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3330 r = 1; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3331 } |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3332 else |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3333 r = 1; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3334 |
3465 | 3335 dbgprintf("IsRectEmpty(%p) => %s\n", lprc, (r) ? "TRUE" : "FALSE"); |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3336 //printf("Rect: left: %d, top: %d, right: %d, bottom: %d\n", lprc->left, lprc->top, lprc->right, lprc->bottom); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3337 // return 0; // wmv9? |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3338 return r; // TM20 |
128 | 3339 } |
3340 | |
3465 | 3341 static int _adjust_fdiv=0; //what's this? - used to adjust division |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
3342 static int _winver = 0x510; // windows version |
3465 | 3343 |
3344 | |
3345 | |
3346 | |
3347 static unsigned int WINAPI expGetTempPathA(unsigned int len, char* path) | |
128 | 3348 { |
3349 dbgprintf("GetTempPathA(%d, 0x%x)", len, path); | |
3350 if(len<5) | |
3351 { | |
3352 dbgprintf(" => 0\n"); | |
3353 return 0; | |
3354 } | |
3355 strcpy(path, "/tmp"); | |
3356 dbgprintf(" => 5 ( '/tmp' )\n"); | |
3357 return 5; | |
3358 } | |
3359 /* | |
3465 | 3360 FYI: |
3361 typedef struct | |
3362 { | |
3363 DWORD dwFileAttributes; | |
3364 FILETIME ftCreationTime; | |
3365 FILETIME ftLastAccessTime; | |
3366 FILETIME ftLastWriteTime; | |
3367 DWORD nFileSizeHigh; | |
3368 DWORD nFileSizeLow; | |
3369 DWORD dwReserved0; | |
3370 DWORD dwReserved1; | |
3371 CHAR cFileName[260]; | |
3372 CHAR cAlternateFileName[14]; | |
3373 } WIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; | |
3374 */ | |
3375 | |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3376 static DIR* qtx_dir=NULL; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3377 |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3378 static WIN_BOOL WINAPI expFindNextFileA(HANDLE h,LPWIN32_FIND_DATAA lpfd) |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3379 { |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3380 #ifdef QTX |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3381 dbgprintf("FindNextFileA(0x%x, 0x%x) => 0\n", h, lpfd); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3382 if(h==FILE_HANDLE_quicktimeqtx){ |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3383 struct dirent* d; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3384 if(!qtx_dir) return 0; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3385 while((d=readdir(qtx_dir))){ |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3386 char* x=strrchr(d->d_name,'.'); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3387 if(!x) continue; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3388 if(strcmp(x,".qtx")) continue; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3389 strcpy(lpfd->cFileName,d->d_name); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3390 // sprintf(lpfd->cAlternateFileName,"%-8s.qtx",d->d_name); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3391 strcpy(lpfd->cAlternateFileName,"foobar.qtx"); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3392 printf("### FindNext: %s\n",lpfd->cFileName); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3393 return 1; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3394 } |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3395 closedir(qtx_dir); qtx_dir=NULL; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3396 return 0; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3397 } |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3398 #endif |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3399 return 0; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3400 } |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3401 |
3465 | 3402 static HANDLE WINAPI expFindFirstFileA(LPCSTR s, LPWIN32_FIND_DATAA lpfd) |
128 | 3403 { |
8798
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3404 dbgprintf("FindFirstFileA(0x%x='%s', 0x%x) => 0\n", s, s, lpfd); |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3405 // printf("\n### FindFirstFileA('%s')...\n",s); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3406 #ifdef QTX |
8798
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3407 if(strstr(s, "quicktime\\*.QTX")){ |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3408 dbgprintf("FindFirstFileA(0x%x='%s', 0x%x) => QTX\n", s, s, lpfd); |
8658 | 3409 printf("\n### Searching for QuickTime plugins (*.qtx) at %s...\n",def_path); |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3410 qtx_dir=opendir(def_path); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3411 if(!qtx_dir) return (HANDLE)-1; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3412 memset(lpfd,0,sizeof(*lpfd)); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3413 if(expFindNextFileA(FILE_HANDLE_quicktimeqtx,lpfd)) |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3414 return FILE_HANDLE_quicktimeqtx; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3415 printf("loader: Couldn't find the QuickTime plugins (.qtx files) at %s\n",def_path); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3416 return (HANDLE)-1; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3417 } |
8798
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3418 #if 0 |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3419 if(strstr(s, "QuickTime.qts")){ |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3420 dbgprintf("FindFirstFileA(0x%x='%s', 0x%x) => QTS\n", s, s, lpfd); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3421 // if(!strcmp(s,"C:\\windows\\QuickTime.qts\\QuickTime.qts\\*.QTX")) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3422 // return (HANDLE)-1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3423 strcpy(lpfd->cFileName, "QuickTime.qts"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3424 strcpy(lpfd->cAlternateFileName, "QuickT~1.qts"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3425 return FILE_HANDLE_quicktimeqts; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3426 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3427 #endif |
8798
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3428 #endif |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3429 if(strstr(s, "*.vwp")){ |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3430 // hack for VoxWare codec plugins: |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3431 strcpy(lpfd->cFileName, "msms001.vwp"); |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3432 strcpy(lpfd->cAlternateFileName, "msms001.vwp"); |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3433 return (HANDLE)0; |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3434 } |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3435 // return 'file not found' |
b16c91194e40
qt vs. voxware fixed (hopefully), also some qt speedup
arpi
parents:
8764
diff
changeset
|
3436 return (HANDLE)-1; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3437 } |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3438 |
3465 | 3439 static WIN_BOOL WINAPI expFindClose(HANDLE h) |
128 | 3440 { |
3441 dbgprintf("FindClose(0x%x) => 0\n", h); | |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3442 #ifdef QTX |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3443 // if(h==FILE_HANDLE_quicktimeqtx && qtx_dir){ |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3444 // closedir(qtx_dir); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3445 // qtx_dir=NULL; |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3446 // } |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3447 #endif |
128 | 3448 return 0; |
3449 } | |
3465 | 3450 static UINT WINAPI expSetErrorMode(UINT i) |
128 | 3451 { |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3452 dbgprintf("SetErrorMode(%d) => 0\n", i); |
128 | 3453 return 0; |
3454 } | |
3465 | 3455 static UINT WINAPI expGetWindowsDirectoryA(LPSTR s,UINT c) |
128 | 3456 { |
3457 char windir[]="c:\\windows"; | |
3458 int result; | |
3459 strncpy(s, windir, c); | |
3460 result=1+((c<strlen(windir))?c:strlen(windir)); | |
3461 dbgprintf("GetWindowsDirectoryA(0x%x, %d) => %d\n", s, c, result); | |
3462 return result; | |
3463 } | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3464 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3465 static UINT WINAPI expGetCurrentDirectoryA(UINT c, LPSTR s) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3466 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3467 char curdir[]="c:\\"; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3468 int result; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3469 strncpy(s, curdir, c); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3470 result=1+((c<strlen(curdir))?c:strlen(curdir)); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3471 dbgprintf("GetCurrentDirectoryA(0x%x, %d) => %d\n", s, c, result); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3472 return result; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3473 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3474 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3475 static int WINAPI expSetCurrentDirectoryA(const char *pathname) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3476 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3477 dbgprintf("SetCurrentDirectoryA(0x%x = %s) => 1\n", pathname, pathname); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3478 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3479 if (strrchr(pathname, '\\')) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3480 chdir(strcat(strrchr(pathname, '\\')+1, '/')); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3481 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3482 chdir(pathname); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3483 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3484 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3485 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3486 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3487 static int WINAPI expCreateDirectoryA(const char *pathname, void *sa) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3488 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3489 dbgprintf("CreateDirectory(0x%x = %s, 0x%x) => 1\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3490 pathname, pathname, sa); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3491 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3492 p = strrchr(pathname, '\\')+1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3493 strcpy(&buf[0], p); /* should be strncpy */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3494 if (!strlen(p)) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3495 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3496 buf[0] = '.'; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3497 buf[1] = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3498 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3499 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3500 if (strrchr(pathname, '\\')) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3501 mkdir(strcat(strrchr(pathname, '\\')+1, '/'), 666); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3502 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3503 mkdir(pathname, 666); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3504 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3505 mkdir(&buf); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3506 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3507 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3508 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3509 #endif |
3465 | 3510 static WIN_BOOL WINAPI expDeleteFileA(LPCSTR s) |
128 | 3511 { |
3512 dbgprintf("DeleteFileA(0x%x='%s') => 0\n", s, s); | |
3513 return 0; | |
3514 } | |
3465 | 3515 static WIN_BOOL WINAPI expFileTimeToLocalFileTime(const FILETIME* cpf, LPFILETIME pf) |
128 | 3516 { |
3517 dbgprintf("FileTimeToLocalFileTime(0x%x, 0x%x) => 0\n", cpf, pf); | |
3518 return 0; | |
3519 } | |
3520 | |
3465 | 3521 static UINT WINAPI expGetTempFileNameA(LPCSTR cs1,LPCSTR cs2,UINT i,LPSTR ps) |
128 | 3522 { |
3523 char mask[16]="/tmp/AP_XXXXXX"; | |
3524 int result; | |
3525 dbgprintf("GetTempFileNameA(0x%x='%s', 0x%x='%s', %d, 0x%x)", cs1, cs1, cs2, cs2, i, ps); | |
3526 if(i && i<10) | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3527 { |
128 | 3528 dbgprintf(" => -1\n"); |
3529 return -1; | |
3530 } | |
3531 result=mkstemp(mask); | |
3532 sprintf(ps, "AP%d", result); | |
3533 dbgprintf(" => %d\n", strlen(ps)); | |
3534 return strlen(ps); | |
3535 } | |
3536 // | |
3537 // This func might need proper implementation if we want AngelPotion codec. | |
3538 // They try to open APmpeg4v1.apl with it. | |
3539 // DLL will close opened file with CloseHandle(). | |
3540 // | |
3465 | 3541 static HANDLE WINAPI expCreateFileA(LPCSTR cs1,DWORD i1,DWORD i2, |
3542 LPSECURITY_ATTRIBUTES p1, DWORD i3,DWORD i4,HANDLE i5) | |
128 | 3543 { |
3544 dbgprintf("CreateFileA(0x%x='%s', %d, %d, 0x%x, %d, %d, 0x%x)\n", cs1, cs1, i1, | |
3465 | 3545 i2, p1, i3, i4, i5); |
128 | 3546 if((!cs1) || (strlen(cs1)<2))return -1; |
3128 | 3547 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3548 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3549 if(strstr(cs1, "QuickTime.qts")) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3550 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3551 int result; |
18878 | 3552 char* tmp=malloc(strlen(def_path)+50); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3553 strcpy(tmp, def_path); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3554 strcat(tmp, "/"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3555 strcat(tmp, "QuickTime.qts"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3556 result=open(tmp, O_RDONLY); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3557 free(tmp); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3558 return result; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3559 } |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3560 if(strstr(cs1, ".qtx")) |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3561 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3562 int result; |
18878 | 3563 char* tmp=malloc(strlen(def_path)+250); |
8391
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3564 char* x=strrchr(cs1,'\\'); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3565 sprintf(tmp,"%s/%s",def_path,x?(x+1):cs1); |
780d0e226ac5
support for *.qtx (scan for all .qtx files at quicktime init)
arpi
parents:
8293
diff
changeset
|
3566 // printf("### Open: %s -> %s\n",cs1,tmp); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3567 result=open(tmp, O_RDONLY); |
8285 | 3568 free(tmp); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3569 return result; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3570 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3571 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3572 |
3128 | 3573 if(strncmp(cs1, "AP", 2) == 0) |
128 | 3574 { |
3575 int result; | |
18878 | 3576 char* tmp=malloc(strlen(def_path)+50); |
128 | 3577 strcpy(tmp, def_path); |
3578 strcat(tmp, "/"); | |
3579 strcat(tmp, "APmpg4v1.apl"); | |
3580 result=open(tmp, O_RDONLY); | |
3581 free(tmp); | |
3582 return result; | |
3128 | 3583 } |
3584 if (strstr(cs1, "vp3")) | |
3585 { | |
3586 int r; | |
3587 int flg = 0; | |
18878 | 3588 char* tmp=malloc(20 + strlen(cs1)); |
3128 | 3589 strcpy(tmp, "/tmp/"); |
3590 strcat(tmp, cs1); | |
3591 r = 4; | |
3592 while (tmp[r]) | |
3593 { | |
3594 if (tmp[r] == ':' || tmp[r] == '\\') | |
3595 tmp[r] = '_'; | |
3596 r++; | |
3597 } | |
3598 if (GENERIC_READ & i1) | |
3599 flg |= O_RDONLY; | |
3600 else if (GENERIC_WRITE & i1) | |
3601 { | |
3602 flg |= O_WRONLY; | |
3603 printf("Warning: openning filename %s %d (flags; 0x%x) for write\n", tmp, r, flg); | |
3604 } | |
3605 r=open(tmp, flg); | |
3606 free(tmp); | |
3607 return r; | |
3608 } | |
3609 | |
12735
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3610 // Needed by wnvplay1.dll |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3611 if (strstr(cs1, "WINNOV.bmp")) |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3612 { |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3613 int r; |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3614 r=open("/dev/null", 0); |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3615 return r; |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3616 } |
5af0b22d55a6
Support for Winnov Videum WINX and WNV1 codecs with binary dll
rtognimp
parents:
12374
diff
changeset
|
3617 |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3618 #if 0 |
7386 | 3619 /* we need this for some virtualdub filters */ |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3620 { |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3621 int r; |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3622 int flg = 0; |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3623 if (GENERIC_READ & i1) |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3624 flg |= O_RDONLY; |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3625 else if (GENERIC_WRITE & i1) |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3626 { |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3627 flg |= O_WRONLY; |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3628 printf("Warning: openning filename %s %d (flags; 0x%x) for write\n", cs1, r, flg); |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3629 } |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3630 r=open(cs1, flg); |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3631 return r; |
7386 | 3632 } |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3633 #endif |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3634 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3635 return atoi(cs1+2); |
128 | 3636 } |
5234 | 3637 static UINT WINAPI expGetSystemDirectoryA( |
3638 char* lpBuffer, // address of buffer for system directory | |
3639 UINT uSize // size of directory buffer | |
3640 ){ | |
3641 dbgprintf("GetSystemDirectoryA(%p,%d)\n", lpBuffer,uSize); | |
3642 if(!lpBuffer) strcpy(lpBuffer,"."); | |
3643 return 1; | |
3644 } | |
3645 /* | |
128 | 3646 static char sysdir[]="."; |
3465 | 3647 static LPCSTR WINAPI expGetSystemDirectoryA() |
128 | 3648 { |
3649 dbgprintf("GetSystemDirectoryA() => 0x%x='%s'\n", sysdir, sysdir); | |
3650 return sysdir; | |
3651 } | |
5234 | 3652 */ |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3653 static DWORD WINAPI expGetFullPathNameA |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3654 ( |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3655 LPCTSTR lpFileName, |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3656 DWORD nBufferLength, |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3657 LPTSTR lpBuffer, |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3658 LPTSTR lpFilePart |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3659 ){ |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3660 if(!lpFileName) return 0; |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3661 dbgprintf("GetFullPathNameA('%s',%d,%p,%p)\n",lpFileName,nBufferLength, |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3662 lpBuffer, lpFilePart); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3663 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3664 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3665 strcpy(lpFilePart, "Quick123.qts"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3666 #else |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3667 strcpy(lpFilePart, lpFileName); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3668 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3669 #else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3670 if (strrchr(lpFileName, '\\')) |
8451 | 3671 lpFilePart = strrchr(lpFileName, '\\'); |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3672 else |
13182 | 3673 lpFilePart = (LPTSTR)lpFileName; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3674 #endif |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3675 strcpy(lpBuffer, lpFileName); |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3676 // strncpy(lpBuffer, lpFileName, rindex(lpFileName, '\\')-lpFileName); |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3677 return strlen(lpBuffer); |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3678 } |
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
3679 |
5234 | 3680 static DWORD WINAPI expGetShortPathNameA |
3681 ( | |
3682 LPCSTR longpath, | |
3683 LPSTR shortpath, | |
3684 DWORD shortlen | |
3685 ){ | |
3686 if(!longpath) return 0; | |
3687 dbgprintf("GetShortPathNameA('%s',%p,%d)\n",longpath,shortpath,shortlen); | |
3688 strcpy(shortpath,longpath); | |
3689 return strlen(shortpath); | |
3690 } | |
7386 | 3691 |
3465 | 3692 static WIN_BOOL WINAPI expReadFile(HANDLE h,LPVOID pv,DWORD size,LPDWORD rd,LPOVERLAPPED unused) |
128 | 3693 { |
3694 int result; | |
3695 dbgprintf("ReadFile(%d, 0x%x, %d -> 0x%x)\n", h, pv, size, rd); | |
3696 result=read(h, pv, size); | |
3697 if(rd)*rd=result; | |
3698 if(!result)return 0; | |
3699 return 1; | |
3700 } | |
3701 | |
3465 | 3702 static WIN_BOOL WINAPI expWriteFile(HANDLE h,LPCVOID pv,DWORD size,LPDWORD wr,LPOVERLAPPED unused) |
128 | 3703 { |
3704 int result; | |
3705 dbgprintf("WriteFile(%d, 0x%x, %d -> 0x%x)\n", h, pv, size, wr); | |
3706 if(h==1234)h=1; | |
3707 result=write(h, pv, size); | |
3708 if(wr)*wr=result; | |
3709 if(!result)return 0; | |
3710 return 1; | |
3711 } | |
3465 | 3712 static DWORD WINAPI expSetFilePointer(HANDLE h, LONG val, LPLONG ext, DWORD whence) |
128 | 3713 { |
3714 int wh; | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3715 dbgprintf("SetFilePointer(%d, 0x%x, 0x%x = %d, %d)\n", h, val, ext, *ext, whence); |
3465 | 3716 //why would DLL want temporary file with >2Gb size? |
128 | 3717 switch(whence) |
3718 { | |
3719 case FILE_BEGIN: | |
3720 wh=SEEK_SET;break; | |
3721 case FILE_END: | |
3722 wh=SEEK_END;break; | |
3723 case FILE_CURRENT: | |
3724 wh=SEEK_CUR;break; | |
3725 default: | |
3726 return -1; | |
3727 } | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3728 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3729 if (val == 0 && ext != 0) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3730 val = val&(*ext); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3731 #endif |
128 | 3732 return lseek(h, val, wh); |
3733 } | |
3734 | |
3465 | 3735 static HDRVR WINAPI expOpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName, |
3736 LPARAM lParam2) | |
128 | 3737 { |
3738 dbgprintf("OpenDriverA(0x%x='%s', 0x%x='%s', 0x%x) => -1\n", szDriverName, szDriverName, szSectionName, szSectionName, lParam2); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3739 return -1; |
128 | 3740 } |
3465 | 3741 static HDRVR WINAPI expOpenDriver(LPCSTR szDriverName, LPCSTR szSectionName, |
3742 LPARAM lParam2) | |
128 | 3743 { |
3744 dbgprintf("OpenDriver(0x%x='%s', 0x%x='%s', 0x%x) => -1\n", szDriverName, szDriverName, szSectionName, szSectionName, lParam2); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
3745 return -1; |
128 | 3746 } |
1 | 3747 |
3748 | |
3465 | 3749 static WIN_BOOL WINAPI expGetProcessAffinityMask(HANDLE hProcess, |
3750 LPDWORD lpProcessAffinityMask, | |
3751 LPDWORD lpSystemAffinityMask) | |
128 | 3752 { |
3753 dbgprintf("GetProcessAffinityMask(0x%x, 0x%x, 0x%x) => 1\n", | |
3465 | 3754 hProcess, lpProcessAffinityMask, lpSystemAffinityMask); |
128 | 3755 if(lpProcessAffinityMask)*lpProcessAffinityMask=1; |
3756 if(lpSystemAffinityMask)*lpSystemAffinityMask=1; | |
3757 return 1; | |
1 | 3758 } |
3759 | |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3760 // Fake implementation: does nothing, but does it right :) |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3761 static WIN_BOOL WINAPI expSetProcessAffinityMask(HANDLE hProcess, |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3762 LPDWORD dwProcessAffinityMask) |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3763 { |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3764 dbgprintf("SetProcessAffinityMask(0x%x, 0x%x) => 1\n", |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3765 hProcess, dwProcessAffinityMask); |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3766 |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3767 return 1; |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3768 }; |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
3769 |
3465 | 3770 static int WINAPI expMulDiv(int nNumber, int nNumerator, int nDenominator) |
713 | 3771 { |
3772 static const long long max_int=0x7FFFFFFFLL; | |
3773 static const long long min_int=-0x80000000LL; | |
3774 long long tmp=(long long)nNumber*(long long)nNumerator; | |
3465 | 3775 dbgprintf("expMulDiv %d * %d / %d\n", nNumber, nNumerator, nDenominator); |
713 | 3776 if(!nDenominator)return 1; |
3777 tmp/=nDenominator; | |
3778 if(tmp<min_int) return 1; | |
3779 if(tmp>max_int) return 1; | |
3780 return (int)tmp; | |
3781 } | |
3782 | |
3465 | 3783 static LONG WINAPI explstrcmpiA(const char* str1, const char* str2) |
713 | 3784 { |
3785 LONG result=strcasecmp(str1, str2); | |
3786 dbgprintf("strcmpi(0x%x='%s', 0x%x='%s') => %d\n", str1, str1, str2, str2, result); | |
3787 return result; | |
3788 } | |
3789 | |
3465 | 3790 static LONG WINAPI explstrlenA(const char* str1) |
713 | 3791 { |
3792 LONG result=strlen(str1); | |
3134 | 3793 dbgprintf("strlen(0x%x='%.50s') => %d\n", str1, str1, result); |
713 | 3794 return result; |
3795 } | |
3796 | |
3465 | 3797 static LONG WINAPI explstrcpyA(char* str1, const char* str2) |
713 | 3798 { |
3799 int result= (int) strcpy(str1, str2); | |
3134 | 3800 dbgprintf("strcpy(0x%.50x, 0x%.50x='%.50s') => %d\n", str1, str2, str2, result); |
713 | 3801 return result; |
3802 } | |
3465 | 3803 static LONG WINAPI explstrcpynA(char* str1, const char* str2,int len) |
2069 | 3804 { |
3805 int result; | |
3806 if (strlen(str2)>len) | |
3465 | 3807 result = (int) strncpy(str1, str2,len); |
2069 | 3808 else |
3465 | 3809 result = (int) strcpy(str1,str2); |
2069 | 3810 dbgprintf("strncpy(0x%x, 0x%x='%s' len %d strlen %d) => %x\n", str1, str2, str2,len, strlen(str2),result); |
3811 return result; | |
3812 } | |
3465 | 3813 static LONG WINAPI explstrcatA(char* str1, const char* str2) |
2069 | 3814 { |
3815 int result= (int) strcat(str1, str2); | |
3816 dbgprintf("strcat(0x%x, 0x%x='%s') => %d\n", str1, str2, str2, result); | |
3817 return result; | |
3818 } | |
3819 | |
128 | 3820 |
3465 | 3821 static LONG WINAPI expInterlockedExchange(long *dest, long l) |
497 | 3822 { |
3465 | 3823 long retval = *dest; |
3824 *dest = l; | |
3825 return retval; | |
497 | 3826 } |
3827 | |
3465 | 3828 static void WINAPI expInitCommonControls(void) |
1543 | 3829 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3830 dbgprintf("InitCommonControls called!\n"); |
2069 | 3831 return; |
1543 | 3832 } |
3833 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3834 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3835 /* needed by QuickTime.qts */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3836 static HWND WINAPI expCreateUpDownControl (DWORD style, INT x, INT y, INT cx, INT cy, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3837 HWND parent, INT id, HINSTANCE inst, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3838 HWND buddy, INT maxVal, INT minVal, INT curVal) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3839 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3840 dbgprintf("CreateUpDownControl(...)\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3841 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3842 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3843 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3844 |
3457 | 3845 /* alex: implement this call! needed for 3ivx */ |
3465 | 3846 static HRESULT WINAPI expCoCreateFreeThreadedMarshaler(void *pUnkOuter, void **ppUnkInner) |
2396 | 3847 { |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
3848 dbgprintf("CoCreateFreeThreadedMarshaler(%p, %p) called!\n", |
3465 | 3849 pUnkOuter, ppUnkInner); |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
3850 // return 0; |
3457 | 3851 return ERROR_CALL_NOT_IMPLEMENTED; |
2396 | 3852 } |
3853 | |
2779 | 3854 |
3465 | 3855 static int WINAPI expDuplicateHandle(HANDLE hSourceProcessHandle, // handle to source process |
3856 HANDLE hSourceHandle, // handle to duplicate | |
3857 HANDLE hTargetProcessHandle, // handle to target process | |
3858 HANDLE* lpTargetHandle, // duplicate handle | |
3859 DWORD dwDesiredAccess, // requested access | |
3860 int bInheritHandle, // handle inheritance option | |
3861 DWORD dwOptions // optional actions | |
3862 ) | |
2779 | 3863 { |
3864 dbgprintf("DuplicateHandle(%p, %p, %p, %p, 0x%x, %d, %d) called\n", | |
3465 | 3865 hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, |
3866 lpTargetHandle, dwDesiredAccess, bInheritHandle, dwOptions); | |
2779 | 3867 *lpTargetHandle = hSourceHandle; |
3868 return 1; | |
3869 } | |
3870 | |
3128 | 3871 // required by PIM1 codec (used by win98 PCTV Studio capture sw) |
3465 | 3872 static HRESULT WINAPI expCoInitialize( |
3873 LPVOID lpReserved /* [in] pointer to win32 malloc interface | |
3874 (obsolete, should be NULL) */ | |
3875 ) | |
3033 | 3876 { |
3465 | 3877 /* |
3878 * Just delegate to the newer method. | |
3879 */ | |
3880 return 0; //CoInitializeEx(lpReserved, COINIT_APARTMENTTHREADED); | |
3033 | 3881 } |
3882 | |
3465 | 3883 static DWORD WINAPI expSetThreadAffinityMask |
3441 | 3884 ( |
3885 HANDLE hThread, | |
3886 DWORD dwThreadAffinityMask | |
3887 ){ | |
3888 return 0; | |
3889 }; | |
3033 | 3890 |
3465 | 3891 /* |
3892 * no WINAPI functions - CDECL | |
3893 */ | |
3894 static void* expmalloc(int size) | |
3895 { | |
3896 //printf("malloc"); | |
3897 // return malloc(size); | |
3898 void* result=my_mreq(size,0); | |
3899 dbgprintf("malloc(0x%x) => 0x%x\n", size,result); | |
3900 if(result==0) | |
3901 printf("WARNING: malloc() failed\n"); | |
3902 return result; | |
3903 } | |
3904 static void expfree(void* mem) | |
3905 { | |
3906 // return free(mem); | |
3907 dbgprintf("free(%p)\n", mem); | |
3908 my_release(mem); | |
3909 } | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3910 /* needed by atrac3.acm */ |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3911 static void *expcalloc(int num, int size) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3912 { |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3913 void* result=my_mreq(num*size,1); |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3914 dbgprintf("calloc(%d,%d) => %p\n", num,size,result); |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3915 if(result==0) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3916 printf("WARNING: calloc() failed\n"); |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3917 return result; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
3918 } |
3465 | 3919 static void* expnew(int size) |
3920 { | |
3921 // printf("NEW:: Call from address %08x\n STACK DUMP:\n", *(-1+(int*)&size)); | |
3922 // printf("%08x %08x %08x %08x\n", | |
3923 // size, *(1+(int*)&size), | |
3924 // *(2+(int*)&size),*(3+(int*)&size)); | |
3925 void* result; | |
3926 assert(size >= 0); | |
3927 | |
3928 result=my_mreq(size,0); | |
3929 dbgprintf("new(%d) => %p\n", size, result); | |
3930 if (result==0) | |
3931 printf("WARNING: new() failed\n"); | |
3932 return result; | |
3933 | |
3934 } | |
3935 static int expdelete(void* memory) | |
3936 { | |
3937 dbgprintf("delete(%p)\n", memory); | |
3938 my_release(memory); | |
3939 return 0; | |
3940 } | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3941 |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3942 /* |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3943 * local definition - we need only the last two members at this point |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3944 * otherwice we would have to introduce here GUIDs and some more types.. |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3945 */ |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3946 typedef struct __attribute__((__packed__)) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3947 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3948 char hay[0x40]; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3949 unsigned long cbFormat; //0x40 |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3950 char* pbFormat; //0x44 |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3951 } MY_MEDIA_TYPE; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3952 static HRESULT WINAPI expMoCopyMediaType(MY_MEDIA_TYPE* dest, const MY_MEDIA_TYPE* src) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3953 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3954 if (!dest || !src) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3955 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3956 memcpy(dest, src, sizeof(MY_MEDIA_TYPE)); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3957 if (dest->cbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3958 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3959 dest->pbFormat = (char*) my_mreq(dest->cbFormat, 0); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3960 if (!dest->pbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3961 return E_OUTOFMEMORY; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3962 memcpy(dest->pbFormat, src->pbFormat, dest->cbFormat); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3963 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3964 return S_OK; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3965 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3966 static HRESULT WINAPI expMoInitMediaType(MY_MEDIA_TYPE* dest, DWORD cbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3967 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3968 if (!dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3969 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3970 memset(dest, 0, sizeof(MY_MEDIA_TYPE)); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3971 if (cbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3972 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3973 dest->pbFormat = (char*) my_mreq(cbFormat, 0); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3974 if (!dest->pbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3975 return E_OUTOFMEMORY; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3976 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3977 return S_OK; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3978 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3979 static HRESULT WINAPI expMoCreateMediaType(MY_MEDIA_TYPE** dest, DWORD cbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3980 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3981 if (!dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3982 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3983 *dest = my_mreq(sizeof(MY_MEDIA_TYPE), 0); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3984 return expMoInitMediaType(*dest, cbFormat); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3985 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3986 static HRESULT WINAPI expMoDuplicateMediaType(MY_MEDIA_TYPE** dest, const void* src) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3987 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3988 if (!dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3989 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3990 *dest = my_mreq(sizeof(MY_MEDIA_TYPE), 0); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3991 return expMoCopyMediaType(*dest, src); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3992 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3993 static HRESULT WINAPI expMoFreeMediaType(MY_MEDIA_TYPE* dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3994 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3995 if (!dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3996 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3997 if (dest->pbFormat) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3998 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
3999 my_release(dest->pbFormat); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4000 dest->pbFormat = 0; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4001 dest->cbFormat = 0; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4002 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4003 return S_OK; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4004 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4005 static HRESULT WINAPI expMoDeleteMediaType(MY_MEDIA_TYPE* dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4006 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4007 if (!dest) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4008 return E_POINTER; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4009 expMoFreeMediaType(dest); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4010 my_release(dest); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4011 return S_OK; |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4012 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4013 |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4014 static int exp_snprintf( char *str, int size, const char *format, ... ) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4015 { |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4016 int x; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4017 va_list va; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4018 va_start(va, format); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4019 x=snprintf(str,size,format,va); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4020 dbgprintf("_snprintf( 0x%x, %d, %s, ... ) => %d\n",str,size,format,x); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4021 va_end(va); |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4022 return x; |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4023 } |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4024 |
7386 | 4025 #if 0 |
3465 | 4026 static int exp_initterm(int v1, int v2) |
4027 { | |
4028 dbgprintf("_initterm(0x%x, 0x%x) => 0\n", v1, v2); | |
4029 return 0; | |
4030 } | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4031 #else |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4032 /* merged from wine - 2002.04.21 */ |
7386 | 4033 typedef void (*_INITTERMFUNC)(); |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4034 static int exp_initterm(_INITTERMFUNC *start, _INITTERMFUNC *end) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4035 { |
7386 | 4036 dbgprintf("_initterm(0x%x, 0x%x) %p\n", start, end, *start); |
4037 while (start < end) | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4038 { |
7386 | 4039 if (*start) |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4040 { |
7386 | 4041 //printf("call _initfunc: from: %p %d\n", *start); |
4042 // ok this trick with push/pop is necessary as otherwice | |
4043 // edi/esi registers are being trashed | |
4044 void* p = *start; | |
4045 __asm__ __volatile__ | |
4046 ( | |
4047 "pushl %%ebx \n\t" | |
4048 "pushl %%ecx \n\t" | |
4049 "pushl %%edx \n\t" | |
4050 "pushl %%edi \n\t" | |
4051 "pushl %%esi \n\t" | |
4052 "call *%%eax \n\t" | |
4053 "popl %%esi \n\t" | |
4054 "popl %%edi \n\t" | |
4055 "popl %%edx \n\t" | |
4056 "popl %%ecx \n\t" | |
4057 "popl %%ebx \n\t" | |
4058 : | |
4059 : "a"(p) | |
4060 : "memory" | |
4061 ); | |
4062 //printf("done %p %d:%d\n", end); | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4063 } |
7386 | 4064 start++; |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4065 } |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4066 return 0; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4067 } |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
4068 #endif |
3465 | 4069 |
7386 | 4070 static void* exp__dllonexit() |
4071 { | |
4072 // FIXME extract from WINE | |
4073 return NULL; | |
4074 } | |
4075 | |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4076 static int expwsprintfA(char* string, const char* format, ...) |
3465 | 4077 { |
4078 va_list va; | |
4079 int result; | |
4080 va_start(va, format); | |
4081 result = vsprintf(string, format, va); | |
4082 dbgprintf("wsprintfA(0x%x, '%s', ...) => %d\n", string, format, result); | |
4083 va_end(va); | |
4084 return result; | |
4085 } | |
4086 | |
4087 static int expsprintf(char* str, const char* format, ...) | |
4088 { | |
4089 va_list args; | |
4090 int r; | |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4091 dbgprintf("sprintf(0x%x, %s)\n", str, format); |
3465 | 4092 va_start(args, format); |
4093 r = vsprintf(str, format, args); | |
4094 va_end(args); | |
4095 return r; | |
4096 } | |
4097 static int expsscanf(const char* str, const char* format, ...) | |
4098 { | |
4099 va_list args; | |
4100 int r; | |
4101 dbgprintf("sscanf(%s, %s)\n", str, format); | |
4102 va_start(args, format); | |
4103 r = vsscanf(str, format, args); | |
4104 va_end(args); | |
4105 return r; | |
4106 } | |
4107 static void* expfopen(const char* path, const char* mode) | |
4108 { | |
4109 printf("fopen: \"%s\" mode:%s\n", path, mode); | |
4110 //return fopen(path, mode); | |
4111 return fdopen(0, mode); // everything on screen | |
4112 } | |
4113 static int expfprintf(void* stream, const char* format, ...) | |
4114 { | |
4115 va_list args; | |
4116 int r = 0; | |
4117 dbgprintf("fprintf(%p, %s, ...)\n", stream, format); | |
4118 #if 1 | |
4119 va_start(args, format); | |
4120 r = vfprintf((FILE*) stream, format, args); | |
4121 va_end(args); | |
4122 #endif | |
4123 return r; | |
4124 } | |
4125 | |
4126 static int expprintf(const char* format, ...) | |
4127 { | |
4128 va_list args; | |
4129 int r; | |
4130 dbgprintf("printf(%s, ...)\n", format); | |
4131 va_start(args, format); | |
4132 r = vprintf(format, args); | |
4133 va_end(args); | |
4134 return r; | |
4135 } | |
4136 | |
4137 static char* expgetenv(const char* varname) | |
4138 { | |
4139 char* v = getenv(varname); | |
4140 dbgprintf("getenv(%s) => %s\n", varname, v); | |
4141 return v; | |
4142 } | |
4143 | |
4144 static void* expwcscpy(WCHAR* dst, const WCHAR* src) | |
4145 { | |
4146 WCHAR* p = dst; | |
4147 while ((*p++ = *src++)) | |
4148 ; | |
4149 return dst; | |
4150 } | |
4151 | |
4152 static char* expstrrchr(char* string, int value) | |
4153 { | |
4154 char* result=strrchr(string, value); | |
4155 if(result) | |
4156 dbgprintf("strrchr(0x%x='%s', %d) => 0x%x='%s'", string, string, value, result, result); | |
4157 else | |
4158 dbgprintf("strrchr(0x%x='%s', %d) => 0", string, string, value); | |
4159 return result; | |
4160 } | |
4161 | |
4162 static char* expstrchr(char* string, int value) | |
4163 { | |
4164 char* result=strchr(string, value); | |
4165 if(result) | |
4166 dbgprintf("strchr(0x%x='%s', %d) => 0x%x='%s'", string, string, value, result, result); | |
4167 else | |
4168 dbgprintf("strchr(0x%x='%s', %d) => 0", string, string, value); | |
4169 return result; | |
4170 } | |
4171 static int expstrlen(char* str) | |
4172 { | |
4173 int result=strlen(str); | |
4174 dbgprintf("strlen(0x%x='%s') => %d\n", str, str, result); | |
4175 return result; | |
4176 } | |
4177 static char* expstrcpy(char* str1, const char* str2) | |
4178 { | |
4179 char* result= strcpy(str1, str2); | |
4180 dbgprintf("strcpy(0x%x, 0x%x='%s') => %p\n", str1, str2, str2, result); | |
4181 return result; | |
4182 } | |
9397 | 4183 static char* expstrncpy(char* str1, const char* str2, size_t count) |
4184 { | |
4185 char* result= strncpy(str1, str2, count); | |
4186 dbgprintf("strncpy(0x%x, 0x%x='%s', %d) => %p\n", str1, str2, str2, count, result); | |
4187 return result; | |
4188 } | |
3465 | 4189 static int expstrcmp(const char* str1, const char* str2) |
4190 { | |
4191 int result=strcmp(str1, str2); | |
4192 dbgprintf("strcmp(0x%x='%s', 0x%x='%s') => %d\n", str1, str1, str2, str2, result); | |
4193 return result; | |
4194 } | |
4195 static int expstrncmp(const char* str1, const char* str2,int x) | |
4196 { | |
4197 int result=strncmp(str1, str2,x); | |
4198 dbgprintf("strcmp(0x%x='%s', 0x%x='%s') => %d\n", str1, str1, str2, str2, result); | |
4199 return result; | |
4200 } | |
4201 static char* expstrcat(char* str1, const char* str2) | |
4202 { | |
4203 char* result = strcat(str1, str2); | |
4204 dbgprintf("strcat(0x%x='%s', 0x%x='%s') => %p\n", str1, str1, str2, str2, result); | |
4205 return result; | |
4206 } | |
4207 static char* exp_strdup(const char* str1) | |
4208 { | |
4209 int l = strlen(str1); | |
7386 | 4210 char* result = (char*) my_mreq(l + 1,0); |
3465 | 4211 if (result) |
4212 strcpy(result, str1); | |
4213 dbgprintf("_strdup(0x%x='%s') => %p\n", str1, str1, result); | |
4214 return result; | |
4215 } | |
4216 static int expisalnum(int c) | |
4217 { | |
4218 int result= (int) isalnum(c); | |
4219 dbgprintf("isalnum(0x%x='%c' => %d\n", c, c, result); | |
4220 return result; | |
4221 } | |
3672
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4222 static int expisspace(int c) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4223 { |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4224 int result= (int) isspace(c); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4225 dbgprintf("isspace(0x%x='%c' => %d\n", c, c, result); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4226 return result; |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4227 } |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4228 static int expisalpha(int c) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4229 { |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4230 int result= (int) isalpha(c); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4231 dbgprintf("isalpha(0x%x='%c' => %d\n", c, c, result); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4232 return result; |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4233 } |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4234 static int expisdigit(int c) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4235 { |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4236 int result= (int) isdigit(c); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4237 dbgprintf("isdigit(0x%x='%c' => %d\n", c, c, result); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4238 return result; |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4239 } |
3465 | 4240 static void* expmemmove(void* dest, void* src, int n) |
4241 { | |
4242 void* result = memmove(dest, src, n); | |
4243 dbgprintf("memmove(0x%x, 0x%x, %d) => %p\n", dest, src, n, result); | |
4244 return result; | |
4245 } | |
4246 static int expmemcmp(void* dest, void* src, int n) | |
4247 { | |
4248 int result = memcmp(dest, src, n); | |
4249 dbgprintf("memcmp(0x%x, 0x%x, %d) => %d\n", dest, src, n, result); | |
4250 return result; | |
4251 } | |
4252 static void* expmemcpy(void* dest, void* src, int n) | |
4253 { | |
4254 void *result = memcpy(dest, src, n); | |
4255 dbgprintf("memcpy(0x%x, 0x%x, %d) => %p\n", dest, src, n, result); | |
4256 return result; | |
4257 } | |
3672
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4258 static void* expmemset(void* dest, int c, size_t n) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4259 { |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4260 void *result = memset(dest, c, n); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4261 dbgprintf("memset(0x%x, %d, %d) => %p\n", dest, c, n, result); |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4262 return result; |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
4263 } |
3465 | 4264 static time_t exptime(time_t* t) |
4265 { | |
4266 time_t result = time(t); | |
4267 dbgprintf("time(0x%x) => %d\n", t, result); | |
4268 return result; | |
4269 } | |
4270 | |
4271 static int exprand(void) | |
4272 { | |
4273 return rand(); | |
4274 } | |
4275 | |
4276 static void expsrand(int seed) | |
4277 { | |
4278 srand(seed); | |
4279 } | |
4280 | |
4281 #if 1 | |
4282 | |
4283 // prefered compilation with -O2 -ffast-math ! | |
4284 | |
4285 static double explog10(double x) | |
4286 { | |
4287 /*printf("Log10 %f => %f 0x%Lx\n", x, log10(x), *((int64_t*)&x));*/ | |
4288 return log10(x); | |
4289 } | |
4290 | |
4291 static double expcos(double x) | |
4292 { | |
4293 /*printf("Cos %f => %f 0x%Lx\n", x, cos(x), *((int64_t*)&x));*/ | |
4294 return cos(x); | |
4295 } | |
4296 | |
4297 /* doens't work */ | |
4298 static long exp_ftol_wrong(double x) | |
4299 { | |
4300 return (long) x; | |
4301 } | |
4302 | |
4303 #else | |
4304 | |
4305 static void explog10(void) | |
4306 { | |
4307 __asm__ __volatile__ | |
4308 ( | |
4309 "fldl 8(%esp) \n\t" | |
4310 "fldln2 \n\t" | |
4311 "fxch %st(1) \n\t" | |
4312 "fyl2x \n\t" | |
4313 ); | |
4314 } | |
4315 | |
4316 static void expcos(void) | |
4317 { | |
4318 __asm__ __volatile__ | |
4319 ( | |
4320 "fldl 8(%esp) \n\t" | |
4321 "fcos \n\t" | |
4322 ); | |
4323 } | |
4324 | |
4325 #endif | |
4326 | |
4327 // this seem to be the only how to make this function working properly | |
4328 // ok - I've spent tremendous amount of time (many many many hours | |
4329 // of debuging fixing & testing - it's almost unimaginable - kabi | |
4330 | |
4331 // _ftol - operated on the float value which is already on the FPU stack | |
3923
3fd9b781a9d2
workaround for the guilty code that caused sig11 when compiled with gcc-3.0.x
pl
parents:
3672
diff
changeset
|
4332 |
3465 | 4333 static void exp_ftol(void) |
4334 { | |
4335 __asm__ __volatile__ | |
4336 ( | |
4337 "sub $12, %esp \n\t" | |
4338 "fstcw -2(%ebp) \n\t" | |
4339 "wait \n\t" | |
3925 | 4340 "movw -2(%ebp), %ax \n\t" |
4341 "orb $0x0C, %ah \n\t" | |
4342 "movw %ax, -4(%ebp) \n\t" | |
3465 | 4343 "fldcw -4(%ebp) \n\t" |
4344 "fistpl -12(%ebp) \n\t" | |
4345 "fldcw -2(%ebp) \n\t" | |
3925 | 4346 "movl -12(%ebp), %eax \n\t" |
4347 //Note: gcc 3.03 does not do the following op if it | |
4348 // knows that ebp=esp | |
4349 "movl %ebp, %esp \n\t" | |
3465 | 4350 ); |
4351 } | |
4352 | |
13739
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4353 #define FPU_DOUBLES(var1,var2) double var1,var2; \ |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4354 __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var2) : ); \ |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4355 __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var1) : ) |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4356 |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4357 static double exp_CIpow(void) |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4358 { |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4359 FPU_DOUBLES(x,y); |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4360 |
09b6ce70be8e
Fix for Windows media audio 9 voice codec (format 0x0a)
rtognimp
parents:
13598
diff
changeset
|
4361 dbgprintf("_CIpow(%lf, %lf)\n", x, y); |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4362 return pow(x, y); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4363 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4364 |
3465 | 4365 static double exppow(double x, double y) |
4366 { | |
4367 /*printf("Pow %f %f 0x%Lx 0x%Lx => %f\n", x, y, *((int64_t*)&x), *((int64_t*)&y), pow(x, y));*/ | |
4368 return pow(x, y); | |
4369 } | |
4370 | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4371 static double expldexp(double x, int expo) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4372 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4373 /*printf("Cos %f => %f 0x%Lx\n", x, cos(x), *((int64_t*)&x));*/ |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4374 return ldexp(x, expo); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4375 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4376 |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4377 static double expfrexp(double x, int* expo) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4378 { |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4379 /*printf("Cos %f => %f 0x%Lx\n", x, cos(x), *((int64_t*)&x));*/ |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4380 return frexp(x, expo); |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4381 } |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
4382 |
3465 | 4383 |
4384 | |
4385 static int exp_stricmp(const char* s1, const char* s2) | |
4386 { | |
4387 return strcasecmp(s1, s2); | |
4388 } | |
4389 | |
4390 /* from declaration taken from Wine sources - this fountion seems to be | |
4391 * undocumented in any M$ doc */ | |
4392 static int exp_setjmp3(void* jmpbuf, int x) | |
4393 { | |
4394 //dbgprintf("!!!!UNIMPLEMENTED: setjmp3(%p, %d) => 0\n", jmpbuf, x); | |
4395 //return 0; | |
4396 __asm__ __volatile__ | |
4397 ( | |
4398 //"mov 4(%%esp), %%edx \n\t" | |
4399 "mov (%%esp), %%eax \n\t" | |
4400 "mov %%eax, (%%edx) \n\t" // store ebp | |
4401 | |
4402 //"mov %%ebp, (%%edx) \n\t" | |
4403 "mov %%ebx, 4(%%edx) \n\t" | |
4404 "mov %%edi, 8(%%edx) \n\t" | |
4405 "mov %%esi, 12(%%edx) \n\t" | |
4406 "mov %%esp, 16(%%edx) \n\t" | |
4407 | |
4408 "mov 4(%%esp), %%eax \n\t" | |
4409 "mov %%eax, 20(%%edx) \n\t" | |
4410 | |
4411 "movl $0x56433230, 32(%%edx) \n\t" // VC20 ?? | |
4412 "movl $0, 36(%%edx) \n\t" | |
4413 : // output | |
4414 : "d"(jmpbuf) // input | |
7386 | 4415 : "eax" |
3465 | 4416 ); |
4417 #if 1 | |
4418 __asm__ __volatile__ | |
4419 ( | |
4420 "mov %%fs:0, %%eax \n\t" // unsure | |
4421 "mov %%eax, 24(%%edx) \n\t" | |
4422 "cmp $0xffffffff, %%eax \n\t" | |
4423 "jnz l1 \n\t" | |
4424 "mov %%eax, 28(%%edx) \n\t" | |
4425 "l1: \n\t" | |
4426 : | |
4427 : | |
7386 | 4428 : "eax" |
3465 | 4429 ); |
4430 #endif | |
4431 | |
4432 return 0; | |
4433 } | |
4434 | |
5234 | 4435 static DWORD WINAPI expGetCurrentProcessId(void) |
4436 { | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4437 dbgprintf("GetCurrentProcessId(void) => %d\n", getpid()); |
5234 | 4438 return getpid(); //(DWORD)NtCurrentTeb()->pid; |
4439 } | |
4440 | |
4441 | |
4442 typedef struct { | |
4443 UINT wPeriodMin; | |
4444 UINT wPeriodMax; | |
4445 } TIMECAPS, *LPTIMECAPS; | |
4446 | |
4447 static MMRESULT WINAPI exptimeGetDevCaps(LPTIMECAPS lpCaps, UINT wSize) | |
4448 { | |
4449 dbgprintf("timeGetDevCaps(%p, %u) !\n", lpCaps, wSize); | |
4450 | |
4451 lpCaps->wPeriodMin = 1; | |
4452 lpCaps->wPeriodMax = 65535; | |
4453 return 0; | |
4454 } | |
4455 | |
4456 static MMRESULT WINAPI exptimeBeginPeriod(UINT wPeriod) | |
4457 { | |
4458 dbgprintf("timeBeginPeriod(%u) !\n", wPeriod); | |
4459 | |
4460 if (wPeriod < 1 || wPeriod > 65535) return 96+1; //TIMERR_NOCANDO; | |
4461 return 0; | |
4462 } | |
4463 | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4464 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4465 static MMRESULT WINAPI exptimeEndPeriod(UINT wPeriod) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4466 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4467 dbgprintf("timeEndPeriod(%u) !\n", wPeriod); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4468 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4469 if (wPeriod < 1 || wPeriod > 65535) return 96+1; //TIMERR_NOCANDO; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4470 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4471 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4472 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4473 |
5234 | 4474 static void WINAPI expGlobalMemoryStatus( |
4475 LPMEMORYSTATUS lpmem | |
4476 ) { | |
4477 static MEMORYSTATUS cached_memstatus; | |
4478 static int cache_lastchecked = 0; | |
4479 SYSTEM_INFO si; | |
4480 FILE *f; | |
4481 | |
4482 if (time(NULL)==cache_lastchecked) { | |
4483 memcpy(lpmem,&cached_memstatus,sizeof(MEMORYSTATUS)); | |
4484 return; | |
4485 } | |
4486 | |
4487 #if 1 | |
4488 f = fopen( "/proc/meminfo", "r" ); | |
4489 if (f) | |
4490 { | |
4491 char buffer[256]; | |
4492 int total, used, free, shared, buffers, cached; | |
4493 | |
4494 lpmem->dwLength = sizeof(MEMORYSTATUS); | |
4495 lpmem->dwTotalPhys = lpmem->dwAvailPhys = 0; | |
4496 lpmem->dwTotalPageFile = lpmem->dwAvailPageFile = 0; | |
4497 while (fgets( buffer, sizeof(buffer), f )) | |
4498 { | |
4499 /* old style /proc/meminfo ... */ | |
4500 if (sscanf( buffer, "Mem: %d %d %d %d %d %d", &total, &used, &free, &shared, &buffers, &cached )) | |
4501 { | |
4502 lpmem->dwTotalPhys += total; | |
4503 lpmem->dwAvailPhys += free + buffers + cached; | |
4504 } | |
4505 if (sscanf( buffer, "Swap: %d %d %d", &total, &used, &free )) | |
4506 { | |
4507 lpmem->dwTotalPageFile += total; | |
4508 lpmem->dwAvailPageFile += free; | |
4509 } | |
4510 | |
4511 /* new style /proc/meminfo ... */ | |
4512 if (sscanf(buffer, "MemTotal: %d", &total)) | |
4513 lpmem->dwTotalPhys = total*1024; | |
4514 if (sscanf(buffer, "MemFree: %d", &free)) | |
4515 lpmem->dwAvailPhys = free*1024; | |
4516 if (sscanf(buffer, "SwapTotal: %d", &total)) | |
4517 lpmem->dwTotalPageFile = total*1024; | |
4518 if (sscanf(buffer, "SwapFree: %d", &free)) | |
4519 lpmem->dwAvailPageFile = free*1024; | |
4520 if (sscanf(buffer, "Buffers: %d", &buffers)) | |
4521 lpmem->dwAvailPhys += buffers*1024; | |
4522 if (sscanf(buffer, "Cached: %d", &cached)) | |
4523 lpmem->dwAvailPhys += cached*1024; | |
4524 } | |
4525 fclose( f ); | |
4526 | |
4527 if (lpmem->dwTotalPhys) | |
4528 { | |
4529 DWORD TotalPhysical = lpmem->dwTotalPhys+lpmem->dwTotalPageFile; | |
4530 DWORD AvailPhysical = lpmem->dwAvailPhys+lpmem->dwAvailPageFile; | |
4531 lpmem->dwMemoryLoad = (TotalPhysical-AvailPhysical) | |
4532 / (TotalPhysical / 100); | |
4533 } | |
4534 } else | |
4535 #endif | |
4536 { | |
4537 /* FIXME: should do something for other systems */ | |
4538 lpmem->dwMemoryLoad = 0; | |
4539 lpmem->dwTotalPhys = 16*1024*1024; | |
4540 lpmem->dwAvailPhys = 16*1024*1024; | |
4541 lpmem->dwTotalPageFile = 16*1024*1024; | |
4542 lpmem->dwAvailPageFile = 16*1024*1024; | |
4543 } | |
4544 expGetSystemInfo(&si); | |
4545 lpmem->dwTotalVirtual = si.lpMaximumApplicationAddress-si.lpMinimumApplicationAddress; | |
4546 /* FIXME: we should track down all the already allocated VM pages and substract them, for now arbitrarily remove 64KB so that it matches NT */ | |
4547 lpmem->dwAvailVirtual = lpmem->dwTotalVirtual-64*1024; | |
4548 memcpy(&cached_memstatus,lpmem,sizeof(MEMORYSTATUS)); | |
4549 cache_lastchecked = time(NULL); | |
4550 | |
4551 /* it appears some memory display programs want to divide by these values */ | |
4552 if(lpmem->dwTotalPageFile==0) | |
4553 lpmem->dwTotalPageFile++; | |
4554 | |
4555 if(lpmem->dwAvailPageFile==0) | |
4556 lpmem->dwAvailPageFile++; | |
4557 } | |
4558 | |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4559 static INT WINAPI expGetThreadPriority(HANDLE hthread) |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4560 { |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4561 dbgprintf("GetThreadPriority(%p)\n",hthread); |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4562 return 0; |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4563 } |
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
4564 |
5234 | 4565 /********************************************************************** |
4566 * SetThreadPriority [KERNEL32.@] Sets priority for thread. | |
4567 * | |
4568 * RETURNS | |
4569 * Success: TRUE | |
4570 * Failure: FALSE | |
4571 */ | |
4572 static WIN_BOOL WINAPI expSetThreadPriority( | |
4573 HANDLE hthread, /* [in] Handle to thread */ | |
4574 INT priority) /* [in] Thread priority level */ | |
4575 { | |
4576 dbgprintf("SetThreadPriority(%p,%d)\n",hthread,priority); | |
4577 return TRUE; | |
4578 } | |
4579 | |
4580 static void WINAPI expExitProcess( DWORD status ) | |
4581 { | |
8451 | 4582 printf("EXIT - code %ld\n",status); |
5234 | 4583 exit(status); |
4584 } | |
4585 | |
4586 static INT WINAPI expMessageBoxA(HWND hWnd, LPCSTR text, LPCSTR title, UINT type){ | |
4587 printf("MSGBOX '%s' '%s' (%d)\n",text,title,type); | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4588 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4589 if (type == MB_ICONHAND && !strlen(text) && !strlen(title)) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4590 return IDIGNORE; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4591 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4592 return IDOK; |
5234 | 4593 } |
4594 | |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4595 /* these are needed for mss1 */ |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4596 |
21368 | 4597 /** |
4598 * \brief this symbol is defined within exp_EH_prolog_dummy | |
4599 * \param dest jump target | |
4600 */ | |
4601 void exp_EH_prolog(void *dest); | |
4602 //! just a dummy function that acts a container for the asm section | |
4603 void exp_EH_prolog_dummy(void) { | |
4604 asm volatile ( | |
4605 // take care, this "function" may not change flags or | |
4606 // registers besides eax (which is also why we can't use | |
4607 // exp_EH_prolog_dummy directly) | |
4608 MANGLE(exp_EH_prolog)": \n\t" | |
4609 "pop %eax \n\t" | |
4610 "push %ebp \n\t" | |
4611 "mov %esp, %ebp \n\t" | |
4612 "lea -12(%esp), %esp \n\t" | |
4613 "jmp *%eax \n\t" | |
4614 ); | |
4615 } | |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4616 |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4617 #include <netinet/in.h> |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4618 static WINAPI inline unsigned long int exphtonl(unsigned long int hostlong) |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4619 { |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4620 // dbgprintf("htonl(%x) => %x\n", hostlong, htonl(hostlong)); |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4621 return htonl(hostlong); |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4622 } |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4623 |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4624 static WINAPI inline unsigned long int expntohl(unsigned long int netlong) |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4625 { |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4626 // dbgprintf("ntohl(%x) => %x\n", netlong, ntohl(netlong)); |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4627 return ntohl(netlong); |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
4628 } |
7386 | 4629 static void WINAPI expVariantInit(void* p) |
4630 { | |
4631 printf("InitCommonControls called!\n"); | |
4632 return; | |
4633 } | |
2779 | 4634 |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4635 static int WINAPI expRegisterClassA(const void/*WNDCLASSA*/ *wc) |
5752
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4636 { |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4637 dbgprintf("RegisterClassA(%p) => random id\n", wc); |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4638 return time(NULL); /* be precise ! */ |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4639 } |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4640 |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4641 static int WINAPI expUnregisterClassA(const char *className, HINSTANCE hInstance) |
5752
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4642 { |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4643 dbgprintf("UnregisterClassA(%s, %p) => 0\n", className, hInstance); |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4644 return 0; |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4645 } |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
4646 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4647 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4648 /* should be fixed bcs it's not fully strlen equivalent */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4649 static int expSysStringByteLen(void *str) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4650 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4651 dbgprintf("SysStringByteLen(%p) => %d\n", str, strlen(str)); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4652 return strlen(str); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4653 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4654 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4655 static int expDirectDrawCreate(void) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4656 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4657 dbgprintf("DirectDrawCreate(...) => NULL\n"); |
8451 | 4658 return 0; |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4659 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4660 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4661 #if 1 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4662 typedef struct tagPALETTEENTRY { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4663 BYTE peRed; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4664 BYTE peGreen; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4665 BYTE peBlue; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4666 BYTE peFlags; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4667 } PALETTEENTRY; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4668 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4669 /* reversed the first 2 entries */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4670 typedef struct tagLOGPALETTE { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4671 WORD palNumEntries; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4672 WORD palVersion; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4673 PALETTEENTRY palPalEntry[1]; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4674 } LOGPALETTE; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4675 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4676 static HPALETTE WINAPI expCreatePalette(CONST LOGPALETTE *lpgpl) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4677 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4678 HPALETTE test; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4679 int i; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4680 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4681 dbgprintf("CreatePalette(%x) => NULL\n", lpgpl); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4682 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4683 i = sizeof(LOGPALETTE)+((lpgpl->palNumEntries-1)*sizeof(PALETTEENTRY)); |
8451 | 4684 test = (HPALETTE)malloc(i); |
4685 memcpy((void *)test, lpgpl, i); | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4686 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4687 return test; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4688 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4689 #else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4690 static int expCreatePalette(void) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4691 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4692 dbgprintf("CreatePalette(...) => NULL\n"); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4693 return NULL; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4694 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4695 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4696 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4697 static int WINAPI expGetClientRect(HWND win, RECT *r) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4698 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4699 dbgprintf("GetClientRect(0x%x, 0x%x) => 1\n", win, r); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4700 r->right = PSEUDO_SCREEN_WIDTH; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4701 r->left = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4702 r->bottom = PSEUDO_SCREEN_HEIGHT; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4703 r->top = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4704 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4705 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4706 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4707 #if 0 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4708 typedef struct tagPOINT { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4709 LONG x; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4710 LONG y; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4711 } POINT, *PPOINT; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4712 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4713 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4714 static int WINAPI expClientToScreen(HWND win, POINT *p) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4715 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4716 dbgprintf("ClientToScreen(0x%x, 0x%x = %d,%d) => 1\n", win, p, p->x, p->y); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4717 p->x = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4718 p->y = 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4719 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4720 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4721 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4722 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4723 /* for m3jpeg */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4724 static int WINAPI expSetThreadIdealProcessor(HANDLE thread, int proc) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4725 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4726 dbgprintf("SetThreadIdealProcessor(0x%x, %x) => 0\n", thread, proc); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4727 return 0; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4728 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4729 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4730 static int WINAPI expMessageBeep(int type) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4731 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4732 dbgprintf("MessageBeep(%d) => 1\n", type); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4733 return 1; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4734 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4735 |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4736 static int WINAPI expDialogBoxParamA(void *inst, const char *name, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4737 HWND parent, void *dialog_func, void *init_param) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4738 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4739 dbgprintf("DialogBoxParamA(0x%x, 0x%x = %s, 0x%x, 0x%x, 0x%x) => 0x42424242\n", |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4740 inst, name, name, parent, dialog_func, init_param); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4741 return 0x42424242; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4742 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4743 |
16338
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4744 static void WINAPI expRegisterClipboardFormatA(const char *name) { |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4745 dbgprintf("RegisterClipboardFormatA(0x%x = %s)\n", name, name); |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4746 } |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4747 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4748 /* needed by imagepower mjpeg2k */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4749 static void *exprealloc(void *ptr, size_t size) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4750 { |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4751 dbgprintf("realloc(0x%x, %x)\n", ptr, size); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4752 if (!ptr) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4753 return my_mreq(size,0); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4754 else |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4755 return my_realloc(ptr, size); |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4756 } |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4757 |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4758 /* Fake GetOpenFileNameA from comdlg32.dll for ViVD codec */ |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4759 static WIN_BOOL WINAPI expGetOpenFileNameA(/*LPOPENFILENAMEA*/ void* lpfn) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4760 { |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4761 return 1; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4762 } |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
4763 |
16338
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4764 static char * WINAPI expPathFindExtensionA(const char *path) { |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4765 char *ext; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4766 if (!path) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4767 ext = NULL; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4768 else { |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4769 ext = strrchr(path, '.'); |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4770 if (!ext) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4771 ext = &path[strlen(path)]; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4772 } |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4773 dbgprintf("PathFindExtensionA(0x%x = %s) => 0x%x, %s\n", path, path, ext, ext); |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4774 return ext; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4775 } |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4776 |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4777 static char * WINAPI expPathFindFileNameA(const char *path) { |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4778 char *name; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4779 if (!path || strlen(path) < 2) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4780 name = path; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4781 else { |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4782 name = strrchr(path - 1, '\\'); |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4783 if (!name) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4784 name = path; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4785 } |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4786 dbgprintf("PathFindFileNameA(0x%x = %s) => 0x%x, %s\n", path, path, name, name); |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4787 return name; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4788 } |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
4789 |
13598
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4790 static double expfloor(double x) |
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4791 { |
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4792 dbgprintf("floor(%lf)\n", x); |
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4793 return floor(x); |
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4794 } |
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
4795 |
13751 | 4796 #define FPU_DOUBLE(var) double var; \ |
4797 __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) | |
4798 | |
4799 static double exp_CIcos(void) | |
4800 { | |
4801 FPU_DOUBLE(x); | |
4802 | |
4803 dbgprintf("_CIcos(%lf)\n", x); | |
4804 return cos(x); | |
4805 } | |
4806 | |
4807 static double exp_CIsin(void) | |
4808 { | |
4809 FPU_DOUBLE(x); | |
4810 | |
4811 dbgprintf("_CIsin(%lf)\n", x); | |
4812 return sin(x); | |
4813 } | |
4814 | |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4815 static double exp_CIsqrt(void) |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4816 { |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4817 FPU_DOUBLE(x); |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4818 |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4819 dbgprintf("_CIsqrt(%lf)\n", x); |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4820 return sqrt(x); |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4821 } |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4822 |
17071 | 4823 /* Needed by rp8 sipr decoder */ |
4824 static LPSTR WINAPI expCharNextA(LPCSTR ptr) | |
4825 { | |
4826 if (!*ptr) return (LPSTR)ptr; | |
4827 // dbgprintf("CharNextA(0x%08x), %s\n", ptr, ptr); | |
4828 return (LPSTR)(ptr + 1); | |
4829 } | |
4830 | |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4831 // Fake implementation, needed by wvc1dmod.dll |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4832 static int WINAPI expPropVariantClear(void *pvar) |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4833 { |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4834 // dbgprintf("PropVariantclear (0x%08x), %s\n", ptr, ptr); |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4835 return 1; |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4836 } |
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
4837 |
20652
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4838 // This define is fake, the real thing is a struct |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4839 #define LPDEVMODEA void* |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4840 // Dummy implementation, always return 1 |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4841 // Required for frapsvid.dll 2.8.1, return value does not matter |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4842 static WIN_BOOL WINAPI expEnumDisplaySettingsA(LPCSTR name ,DWORD n, |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4843 LPDEVMODEA devmode) |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4844 { |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4845 dbgprintf("EnumDisplaySettingsA (dummy) => 1\n"); |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4846 return 1; |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4847 } |
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
4848 |
1 | 4849 struct exports |
4850 { | |
4851 char name[64]; | |
4852 int id; | |
4853 void* func; | |
4854 }; | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
4855 struct libs |
1 | 4856 { |
4857 char name[64]; | |
4858 int length; | |
4859 struct exports* exps; | |
4860 }; | |
4861 | |
4862 #define FF(X,Y) \ | |
3465 | 4863 {#X, Y, (void*)exp##X}, |
4864 | |
22475
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
4865 #define UNDEFF(X, Y) \ |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
4866 {#X, Y, (void*)-1}, |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
4867 |
3465 | 4868 struct exports exp_kernel32[]= |
4869 { | |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4870 FF(GetVolumeInformationA,-1) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4871 FF(GetDriveTypeA,-1) |
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
4872 FF(GetLogicalDriveStringsA,-1) |
3465 | 4873 FF(IsBadWritePtr, 357) |
4874 FF(IsBadReadPtr, 354) | |
4875 FF(IsBadStringPtrW, -1) | |
4876 FF(IsBadStringPtrA, -1) | |
4877 FF(DisableThreadLibraryCalls, -1) | |
4878 FF(CreateThread, -1) | |
4879 FF(CreateEventA, -1) | |
4880 FF(SetEvent, -1) | |
4881 FF(ResetEvent, -1) | |
4882 FF(WaitForSingleObject, -1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4883 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4884 FF(WaitForMultipleObjects, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4885 FF(ExitThread, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4886 FF(CreateMutexA,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4887 FF(ReleaseMutex,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4888 #endif |
3465 | 4889 FF(GetSystemInfo, -1) |
4890 FF(GetVersion, 332) | |
4891 FF(HeapCreate, 461) | |
4892 FF(HeapAlloc, -1) | |
4893 FF(HeapDestroy, -1) | |
4894 FF(HeapFree, -1) | |
4895 FF(HeapSize, -1) | |
4896 FF(HeapReAlloc,-1) | |
4897 FF(GetProcessHeap, -1) | |
4898 FF(VirtualAlloc, -1) | |
4899 FF(VirtualFree, -1) | |
4900 FF(InitializeCriticalSection, -1) | |
4901 FF(EnterCriticalSection, -1) | |
4902 FF(LeaveCriticalSection, -1) | |
4903 FF(DeleteCriticalSection, -1) | |
4904 FF(TlsAlloc, -1) | |
4905 FF(TlsFree, -1) | |
4906 FF(TlsGetValue, -1) | |
4907 FF(TlsSetValue, -1) | |
4908 FF(GetCurrentThreadId, -1) | |
4909 FF(GetCurrentProcess, -1) | |
4910 FF(LocalAlloc, -1) | |
4911 FF(LocalReAlloc,-1) | |
4912 FF(LocalLock, -1) | |
4913 FF(GlobalAlloc, -1) | |
4914 FF(GlobalReAlloc, -1) | |
4915 FF(GlobalLock, -1) | |
4916 FF(GlobalSize, -1) | |
4917 FF(MultiByteToWideChar, 427) | |
4918 FF(WideCharToMultiByte, -1) | |
4919 FF(GetVersionExA, -1) | |
4920 FF(CreateSemaphoreA, -1) | |
4921 FF(QueryPerformanceCounter, -1) | |
4922 FF(QueryPerformanceFrequency, -1) | |
4923 FF(LocalHandle, -1) | |
4924 FF(LocalUnlock, -1) | |
4925 FF(LocalFree, -1) | |
4926 FF(GlobalHandle, -1) | |
4927 FF(GlobalUnlock, -1) | |
4928 FF(GlobalFree, -1) | |
4929 FF(LoadResource, -1) | |
4930 FF(ReleaseSemaphore, -1) | |
4931 FF(FindResourceA, -1) | |
4932 FF(LockResource, -1) | |
4933 FF(FreeResource, -1) | |
4934 FF(SizeofResource, -1) | |
4935 FF(CloseHandle, -1) | |
4936 FF(GetCommandLineA, -1) | |
4937 FF(GetEnvironmentStringsW, -1) | |
4938 FF(FreeEnvironmentStringsW, -1) | |
4939 FF(FreeEnvironmentStringsA, -1) | |
4940 FF(GetEnvironmentStrings, -1) | |
4941 FF(GetStartupInfoA, -1) | |
4942 FF(GetStdHandle, -1) | |
4943 FF(GetFileType, -1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4944 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4945 FF(GetFileAttributesA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4946 #endif |
3465 | 4947 FF(SetHandleCount, -1) |
4948 FF(GetACP, -1) | |
4949 FF(GetModuleFileNameA, -1) | |
4950 FF(SetUnhandledExceptionFilter, -1) | |
4951 FF(LoadLibraryA, -1) | |
4952 FF(GetProcAddress, -1) | |
4953 FF(FreeLibrary, -1) | |
4954 FF(CreateFileMappingA, -1) | |
4955 FF(OpenFileMappingA, -1) | |
4956 FF(MapViewOfFile, -1) | |
4957 FF(UnmapViewOfFile, -1) | |
4958 FF(Sleep, -1) | |
4959 FF(GetModuleHandleA, -1) | |
4960 FF(GetProfileIntA, -1) | |
4961 FF(GetPrivateProfileIntA, -1) | |
4962 FF(GetPrivateProfileStringA, -1) | |
4963 FF(WritePrivateProfileStringA, -1) | |
4964 FF(GetLastError, -1) | |
4965 FF(SetLastError, -1) | |
4966 FF(InterlockedIncrement, -1) | |
4967 FF(InterlockedDecrement, -1) | |
4968 FF(GetTimeZoneInformation, -1) | |
4969 FF(OutputDebugStringA, -1) | |
4970 FF(GetLocalTime, -1) | |
4971 FF(GetSystemTime, -1) | |
7386 | 4972 FF(GetSystemTimeAsFileTime, -1) |
3465 | 4973 FF(GetEnvironmentVariableA, -1) |
5744
16a7eee0aca3
added SetEnvironmentVariableA for UCOD-ClearVideo DLL
alex
parents:
5742
diff
changeset
|
4974 FF(SetEnvironmentVariableA, -1) |
3465 | 4975 FF(RtlZeroMemory,-1) |
4976 FF(RtlMoveMemory,-1) | |
4977 FF(RtlFillMemory,-1) | |
4978 FF(GetTempPathA,-1) | |
4979 FF(FindFirstFileA,-1) | |
4980 FF(FindNextFileA,-1) | |
4981 FF(FindClose,-1) | |
4982 FF(FileTimeToLocalFileTime,-1) | |
4983 FF(DeleteFileA,-1) | |
4984 FF(ReadFile,-1) | |
4985 FF(WriteFile,-1) | |
4986 FF(SetFilePointer,-1) | |
4987 FF(GetTempFileNameA,-1) | |
4988 FF(CreateFileA,-1) | |
4989 FF(GetSystemDirectoryA,-1) | |
4990 FF(GetWindowsDirectoryA,-1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4991 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4992 FF(GetCurrentDirectoryA,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4993 FF(SetCurrentDirectoryA,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4994 FF(CreateDirectoryA,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
4995 #endif |
5234 | 4996 FF(GetShortPathNameA,-1) |
5739
b7e0cf4cb7a9
fixed mp_msg, fixed CreateFile for VDub, added GetFullPathName for VDub, cleaned up a bit the critisecs
alex
parents:
5234
diff
changeset
|
4997 FF(GetFullPathNameA,-1) |
3465 | 4998 FF(SetErrorMode, -1) |
4999 FF(IsProcessorFeaturePresent, -1) | |
5000 FF(GetProcessAffinityMask, -1) | |
5001 FF(InterlockedExchange, -1) | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5002 FF(InterlockedCompareExchange, -1) |
3465 | 5003 FF(MulDiv, -1) |
5004 FF(lstrcmpiA, -1) | |
5005 FF(lstrlenA, -1) | |
5006 FF(lstrcpyA, -1) | |
5007 FF(lstrcatA, -1) | |
5008 FF(lstrcpynA,-1) | |
5009 FF(GetProcessVersion,-1) | |
5010 FF(GetCurrentThread,-1) | |
5011 FF(GetOEMCP,-1) | |
5012 FF(GetCPInfo,-1) | |
5013 FF(DuplicateHandle,-1) | |
5014 FF(GetTickCount, -1) | |
5015 FF(SetThreadAffinityMask,-1) | |
5234 | 5016 FF(GetCurrentProcessId,-1) |
5017 FF(GlobalMemoryStatus,-1) | |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
5018 FF(GetThreadPriority,-1) |
5234 | 5019 FF(SetThreadPriority,-1) |
5020 FF(ExitProcess,-1) | |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5021 {"LoadLibraryExA", -1, (void*)&LoadLibraryExA}, |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5022 FF(SetThreadIdealProcessor,-1) |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
5023 FF(SetProcessAffinityMask, -1) |
22475
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5024 UNDEFF(FlsAlloc, -1) |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5025 UNDEFF(FlsGetValue, -1) |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5026 UNDEFF(FlsSetValue, -1) |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5027 UNDEFF(FlsFree, -1) |
1 | 5028 }; |
5029 | |
5030 struct exports exp_msvcrt[]={ | |
3465 | 5031 FF(malloc, -1) |
5032 FF(_initterm, -1) | |
7386 | 5033 FF(__dllonexit, -1) |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
5034 FF(_snprintf,-1) |
3465 | 5035 FF(free, -1) |
5036 {"??3@YAXPAX@Z", -1, expdelete}, | |
5037 {"??2@YAPAXI@Z", -1, expnew}, | |
5038 {"_adjust_fdiv", -1, (void*)&_adjust_fdiv}, | |
16632
bdc49c9c419e
Several minor fixes: Correctly advertise SSE and SSE2 instruction sets,
reimar
parents:
16338
diff
changeset
|
5039 {"_winver",-1,(void*)&_winver}, |
3465 | 5040 FF(strrchr, -1) |
5041 FF(strchr, -1) | |
5042 FF(strlen, -1) | |
5043 FF(strcpy, -1) | |
9397 | 5044 FF(strncpy, -1) |
3465 | 5045 FF(wcscpy, -1) |
5046 FF(strcmp, -1) | |
5047 FF(strncmp, -1) | |
5048 FF(strcat, -1) | |
5049 FF(_stricmp,-1) | |
5050 FF(_strdup,-1) | |
5051 FF(_setjmp3,-1) | |
5052 FF(isalnum, -1) | |
3672
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
5053 FF(isspace, -1) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
5054 FF(isalpha, -1) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
5055 FF(isdigit, -1) |
3465 | 5056 FF(memmove, -1) |
5057 FF(memcmp, -1) | |
3672
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
5058 FF(memset, -1) |
1d48df12001b
fixes for vdub plugin support - by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
3547
diff
changeset
|
5059 FF(memcpy, -1) |
3465 | 5060 FF(time, -1) |
5061 FF(rand, -1) | |
5062 FF(srand, -1) | |
5063 FF(log10, -1) | |
5064 FF(pow, -1) | |
5065 FF(cos, -1) | |
5066 FF(_ftol,-1) | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5067 FF(_CIpow,-1) |
13751 | 5068 FF(_CIcos,-1) |
5069 FF(_CIsin,-1) | |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
5070 FF(_CIsqrt,-1) |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5071 FF(ldexp,-1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5072 FF(frexp,-1) |
3465 | 5073 FF(sprintf,-1) |
5074 FF(sscanf,-1) | |
5075 FF(fopen,-1) | |
5076 FF(fprintf,-1) | |
5077 FF(printf,-1) | |
5078 FF(getenv,-1) | |
13598
7a626d236929
Windows Media Image (WMVP) can be decoded with WMV9 dmo codec
rtognimp
parents:
13379
diff
changeset
|
5079 FF(floor,-1) |
15474 | 5080 /* needed by frapsvid.dll */ |
5081 {"strstr",-1,(char *)&strstr}, | |
5082 {"qsort",-1,(void *)&qsort}, | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5083 #ifdef MPLAYER |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5084 FF(_EH_prolog,-1) |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5085 #endif |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5086 FF(calloc,-1) |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5087 {"ceil",-1,(void*)&ceil}, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5088 /* needed by imagepower mjpeg2k */ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5089 {"clock",-1,(void*)&clock}, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5090 {"memchr",-1,(void*)&memchr}, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5091 {"vfprintf",-1,(void*)&vfprintf}, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5092 // {"realloc",-1,(void*)&realloc}, |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5093 FF(realloc,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5094 {"puts",-1,(void*)&puts} |
1 | 5095 }; |
5096 struct exports exp_winmm[]={ | |
3465 | 5097 FF(GetDriverModuleHandle, -1) |
5098 FF(timeGetTime, -1) | |
5099 FF(DefDriverProc, -1) | |
5100 FF(OpenDriverA, -1) | |
5101 FF(OpenDriver, -1) | |
5234 | 5102 FF(timeGetDevCaps, -1) |
5103 FF(timeBeginPeriod, -1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5104 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5105 FF(timeEndPeriod, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5106 FF(waveOutGetNumDevs, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5107 #endif |
1 | 5108 }; |
5109 struct exports exp_user32[]={ | |
12066
792eec413bd5
Support for Alparysoft lossless video codec (DShow and VfW)
rtognimp
parents:
12059
diff
changeset
|
5110 FF(LoadIconA,-1) |
3465 | 5111 FF(LoadStringA, -1) |
5112 FF(wsprintfA, -1) | |
5113 FF(GetDC, -1) | |
5114 FF(GetDesktopWindow, -1) | |
5115 FF(ReleaseDC, -1) | |
5116 FF(IsRectEmpty, -1) | |
5117 FF(LoadCursorA,-1) | |
5118 FF(SetCursor,-1) | |
5119 FF(GetCursorPos,-1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5120 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5121 FF(ShowCursor,-1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5122 #endif |
3465 | 5123 FF(RegisterWindowMessageA,-1) |
5124 FF(GetSystemMetrics,-1) | |
5125 FF(GetSysColor,-1) | |
5126 FF(GetSysColorBrush,-1) | |
5127 FF(GetWindowDC, -1) | |
5128 FF(DrawTextA, -1) | |
5234 | 5129 FF(MessageBoxA, -1) |
5752
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
5130 FF(RegisterClassA, -1) |
3f6b724efe83
RegisterClassA and UnregisterClassA for VoxWare RT24 speech codec ACM
alex
parents:
5751
diff
changeset
|
5131 FF(UnregisterClassA, -1) |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5132 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5133 FF(GetWindowRect, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5134 FF(MonitorFromWindow, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5135 FF(MonitorFromRect, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5136 FF(MonitorFromPoint, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5137 FF(EnumDisplayMonitors, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5138 FF(GetMonitorInfoA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5139 FF(EnumDisplayDevicesA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5140 FF(GetClientRect, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5141 FF(ClientToScreen, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5142 FF(IsWindowVisible, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5143 FF(GetActiveWindow, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5144 FF(GetClassNameA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5145 FF(GetClassInfoA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5146 FF(GetWindowLongA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5147 FF(EnumWindows, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5148 FF(GetWindowThreadProcessId, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5149 FF(CreateWindowExA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5150 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5151 FF(MessageBeep, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5152 FF(DialogBoxParamA, -1) |
16338
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5153 FF(RegisterClipboardFormatA, -1) |
17071 | 5154 FF(CharNextA, -1) |
20652
0c342e00c63d
Dummy EnumDisplaySettingsA, required by frapsvid.dll 2.8.1
rtogni
parents:
18878
diff
changeset
|
5155 FF(EnumDisplaySettingsA, -1) |
1 | 5156 }; |
5157 struct exports exp_advapi32[]={ | |
3465 | 5158 FF(RegCloseKey, -1) |
12059
937a520811e9
Add support for Lead MCMW 2.0 wavelet codec eval version
rtognimp
parents:
11853
diff
changeset
|
5159 FF(RegCreateKeyA, -1) |
3465 | 5160 FF(RegCreateKeyExA, -1) |
5161 FF(RegEnumKeyExA, -1) | |
5162 FF(RegEnumValueA, -1) | |
5163 FF(RegOpenKeyA, -1) | |
5164 FF(RegOpenKeyExA, -1) | |
5165 FF(RegQueryValueExA, -1) | |
5166 FF(RegSetValueExA, -1) | |
9896
acf96aea152c
Vanguard codecs support, patch by Andreas Hess <jaska (at) gmx (dot) net>
rtognimp
parents:
9592
diff
changeset
|
5167 FF(RegQueryInfoKeyA, -1) |
1 | 5168 }; |
5169 struct exports exp_gdi32[]={ | |
3465 | 5170 FF(CreateCompatibleDC, -1) |
5171 FF(CreateFontA, -1) | |
5172 FF(DeleteDC, -1) | |
5173 FF(DeleteObject, -1) | |
5174 FF(GetDeviceCaps, -1) | |
5175 FF(GetSystemPaletteEntries, -1) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5176 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5177 FF(CreatePalette, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5178 FF(GetObjectA, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5179 FF(CreateRectRgn, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5180 #endif |
1 | 5181 }; |
5182 struct exports exp_version[]={ | |
3465 | 5183 FF(GetFileVersionInfoSizeA, -1) |
1 | 5184 }; |
128 | 5185 struct exports exp_ole32[]={ |
3465 | 5186 FF(CoCreateFreeThreadedMarshaler,-1) |
5187 FF(CoCreateInstance, -1) | |
5188 FF(CoInitialize, -1) | |
5189 FF(CoTaskMemAlloc, -1) | |
5190 FF(CoTaskMemFree, -1) | |
5191 FF(StringFromGUID2, -1) | |
18580
d444160ee47c
Support WVC1 decoding via dmo binary codec wvc1dmod.dll
rtogni
parents:
17932
diff
changeset
|
5192 FF(PropVariantClear, -1) |
128 | 5193 }; |
3465 | 5194 // do we really need crtdll ??? |
5195 // msvcrt is the correct place probably... | |
130 | 5196 struct exports exp_crtdll[]={ |
3465 | 5197 FF(memcpy, -1) |
5198 FF(wcscpy, -1) | |
130 | 5199 }; |
2069 | 5200 struct exports exp_comctl32[]={ |
3465 | 5201 FF(StringFromGUID2, -1) |
5202 FF(InitCommonControls, 17) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5203 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5204 FF(CreateUpDownControl, 16) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5205 #endif |
2069 | 5206 }; |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5207 struct exports exp_wsock32[]={ |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5208 FF(htonl,8) |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5209 FF(ntohl,14) |
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5210 }; |
3465 | 5211 struct exports exp_msdmo[]={ |
5212 FF(memcpy, -1) // just test | |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5213 FF(MoCopyMediaType, -1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5214 FF(MoCreateMediaType, -1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5215 FF(MoDeleteMediaType, -1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5216 FF(MoDuplicateMediaType, -1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5217 FF(MoFreeMediaType, -1) |
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5218 FF(MoInitMediaType, -1) |
7386 | 5219 }; |
5220 struct exports exp_oleaut32[]={ | |
5221 FF(VariantInit, 8) | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5222 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5223 FF(SysStringByteLen, 149) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5224 #endif |
3465 | 5225 }; |
6359 | 5226 |
5227 /* realplayer8: | |
5228 DLL Name: PNCRT.dll | |
5229 vma: Hint/Ord Member-Name | |
5230 22ff4 615 free | |
5231 2302e 250 _ftol | |
5232 22fea 666 malloc | |
5233 2303e 609 fprintf | |
5234 2305e 167 _adjust_fdiv | |
5235 23052 280 _initterm | |
5236 | |
5237 22ffc 176 _beginthreadex | |
5238 23036 284 _iob | |
5239 2300e 85 __CxxFrameHandler | |
5240 23022 411 _purecall | |
5241 */ | |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5242 #ifdef REALPLAYER |
6359 | 5243 struct exports exp_pncrt[]={ |
5244 FF(malloc, -1) // just test | |
5245 FF(free, -1) // just test | |
5246 FF(fprintf, -1) // just test | |
5247 {"_adjust_fdiv", -1, (void*)&_adjust_fdiv}, | |
5248 FF(_ftol,-1) | |
5249 FF(_initterm, -1) | |
9397 | 5250 {"??3@YAXPAX@Z", -1, expdelete}, |
5251 {"??2@YAPAXI@Z", -1, expnew}, | |
5252 FF(__dllonexit, -1) | |
5253 FF(strncpy, -1) | |
5254 FF(_CIpow,-1) | |
5255 FF(calloc,-1) | |
5256 FF(memmove, -1) | |
17072
4c50b2f11ad8
export ldexp() and frexp() in pncrt, they are needed by rp8 sipr dll
rtognimp
parents:
17071
diff
changeset
|
5257 FF(ldexp, -1) |
4c50b2f11ad8
export ldexp() and frexp() in pncrt, they are needed by rp8 sipr dll
rtognimp
parents:
17071
diff
changeset
|
5258 FF(frexp, -1) |
6359 | 5259 }; |
7386 | 5260 #endif |
3465 | 5261 |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5262 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5263 struct exports exp_ddraw[]={ |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5264 FF(DirectDrawCreate, -1) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5265 }; |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5266 #endif |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5267 |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
5268 struct exports exp_comdlg32[]={ |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
5269 FF(GetOpenFileNameA, -1) |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
5270 }; |
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
5271 |
16338
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5272 struct exports exp_shlwapi[]={ |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5273 FF(PathFindExtensionA, -1) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5274 FF(PathFindFileNameA, -1) |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5275 }; |
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5276 |
1 | 5277 #define LL(X) \ |
3465 | 5278 {#X".dll", sizeof(exp_##X)/sizeof(struct exports), exp_##X}, |
1 | 5279 |
5280 struct libs libraries[]={ | |
3465 | 5281 LL(kernel32) |
5282 LL(msvcrt) | |
5283 LL(winmm) | |
5284 LL(user32) | |
5285 LL(advapi32) | |
5286 LL(gdi32) | |
5287 LL(version) | |
5288 LL(ole32) | |
7386 | 5289 LL(oleaut32) |
3465 | 5290 LL(crtdll) |
5291 LL(comctl32) | |
5742
310c836e3fb3
added _EH_prolog and some wsock32 funcs needed by mss1 codec -> mss1 codec works now
alex
parents:
5740
diff
changeset
|
5292 LL(wsock32) |
3465 | 5293 LL(msdmo) |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5294 #ifdef REALPLAYER |
6359 | 5295 LL(pncrt) |
7386 | 5296 #endif |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5297 #ifdef QTX |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5298 LL(ddraw) |
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5299 #endif |
10818
fa41f83edff0
ViVD v2 codec (fourcc gxve) support with vfw dll ViVD2.dll
rtognimp
parents:
10139
diff
changeset
|
5300 LL(comdlg32) |
16338
cbd034008ee0
Support On2 VP7 via binary decoder by implementing USER32.RegisterClipboardFormatA,
reimar
parents:
15566
diff
changeset
|
5301 LL(shlwapi) |
1 | 5302 }; |
7386 | 5303 |
22406
9977fe541c4d
The original asm code for the stub returned 0, restore that behaviour.
reimar
parents:
22367
diff
changeset
|
5304 static WIN_BOOL WINAPI ext_stubs(void) |
3465 | 5305 { |
21365
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5306 volatile int idx = 0xdeadabcd; |
21461
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5307 // make sure gcc does not do eip-relative call or something like that |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5308 volatile void (*my_printf)(char *, char *) = (void *)0xdeadfbcd; |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5309 my_printf("Called unk_%s\n", export_names[idx]); |
22406
9977fe541c4d
The original asm code for the stub returned 0, restore that behaviour.
reimar
parents:
22367
diff
changeset
|
5310 return 0; |
3465 | 5311 } |
5312 | |
21366
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5313 #define MAX_STUB_SIZE 0x60 |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5314 #define MAX_NUM_STUBS 200 |
7386 | 5315 static int pos=0; |
21462
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5316 static char *extcode = NULL; |
3465 | 5317 |
8293
f436f419e5ab
avifile sync (added only the new functions, all cosmetics ignored)
arpi
parents:
8285
diff
changeset
|
5318 static void* add_stub(void) |
3465 | 5319 { |
21365
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5320 int i; |
21461
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5321 int found = 0; |
7386 | 5322 // generated code in runtime! |
21462
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5323 char* answ; |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5324 if (!extcode) |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5325 extcode = mmap_anon(NULL, MAX_NUM_STUBS * MAX_STUB_SIZE, |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5326 PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, 0); |
bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
reimar
parents:
21461
diff
changeset
|
5327 answ = extcode + pos * MAX_STUB_SIZE; |
21366
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5328 if (pos >= MAX_NUM_STUBS) { |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5329 printf("too many stubs, expect crash\n"); |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5330 return NULL; |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5331 } |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5332 memcpy(answ, ext_stubs, MAX_STUB_SIZE); |
516351d9a796
Some extra checks and safety space for add_stub function.
reimar
parents:
21365
diff
changeset
|
5333 for (i = 0; i < MAX_STUB_SIZE - 3; i++) { |
21461
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5334 int *magic = (int *)(answ + i); |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5335 if (*magic == 0xdeadabcd) { |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5336 *magic = pos; |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5337 found |= 1; |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5338 } |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5339 if (*magic == 0xdeadfbcd) { |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5340 *magic = (intptr_t)printf; |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5341 found |= 2; |
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5342 } |
21365
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5343 } |
21461
71235c49d6ac
Fix 21381, make sure gcc does not make any ip-relative calls or similar.
reimar
parents:
21368
diff
changeset
|
5344 if (found != 3) { |
21365
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5345 printf("magic code not found in ext_subs, expect crash\n"); |
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5346 return NULL; |
fef7a6713be2
Change add_stub code to also work without -fomit-frame-pointer
reimar
parents:
21313
diff
changeset
|
5347 } |
3465 | 5348 pos++; |
5349 return (void*)answ; | |
5350 } | |
2069 | 5351 |
1 | 5352 void* LookupExternal(const char* library, int ordinal) |
5353 { | |
5354 int i,j; | |
5355 if(library==0) | |
5356 { | |
5357 printf("ERROR: library=0\n"); | |
5358 return (void*)ext_unknown; | |
5359 } | |
3465 | 5360 // printf("%x %x\n", &unk_exp1, &unk_exp2); |
1 | 5361 |
13379 | 5362 dbgprintf("External func %s:%d\n", library, ordinal); |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5363 |
5770
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5364 for(i=0; i<sizeof(libraries)/sizeof(struct libs); i++) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5365 { |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5366 if(strcasecmp(library, libraries[i].name)) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5367 continue; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5368 for(j=0; j<libraries[i].length; j++) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5369 { |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5370 if(ordinal!=libraries[i].exps[j].id) |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5371 continue; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5372 //printf("Hit: 0x%p\n", libraries[i].exps[j].func); |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5373 return libraries[i].exps[j].func; |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5374 } |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5375 } |
ec71380bdbca
fixed IsRectEmpty, added expcalloc, ceil, exporting LoadLibraryExA, IC* for some new codecs
alex
parents:
5752
diff
changeset
|
5376 |
9592
b20b0c80298b
Fix for truespeech dll, patch by <dimakar(at)yahoo.com>
rtognimp
parents:
9397
diff
changeset
|
5377 #ifndef LOADLIB_TRY_NATIVE |
9897 | 5378 /* hack for truespeech and vssh264*/ |
13748 | 5379 if (!strcmp(library, "tsd32.dll") || !strcmp(library,"vssh264dec.dll") || !strcmp(library,"LCMW2.dll") || !strcmp(library,"VDODEC32.dll")) |
9592
b20b0c80298b
Fix for truespeech dll, patch by <dimakar(at)yahoo.com>
rtognimp
parents:
9397
diff
changeset
|
5380 #endif |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5381 /* ok, this is a hack, and a big memory leak. should be fixed. - alex */ |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5382 { |
7386 | 5383 int hand; |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5384 WINE_MODREF *wm; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5385 void *func; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5386 |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5387 hand = LoadLibraryA(library); |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5388 if (!hand) |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5389 goto no_dll; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5390 wm = MODULE32_LookupHMODULE(hand); |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5391 if (!wm) |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5392 { |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5393 FreeLibrary(hand); |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5394 goto no_dll; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5395 } |
7386 | 5396 func = PE_FindExportedFunction(wm, (LPCSTR) ordinal, 0); |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5397 if (!func) |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5398 { |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5399 printf("No such ordinal in external dll\n"); |
7386 | 5400 FreeLibrary((int)hand); |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5401 goto no_dll; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5402 } |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5403 |
7386 | 5404 printf("External dll loaded (offset: 0x%x, func: %p)\n", |
5405 hand, func); | |
5751
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5406 return func; |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5407 } |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5408 |
271bd43aed88
loading requested library if available, and try to find function there in LookupExternal, needed for Truespeech codec
alex
parents:
5744
diff
changeset
|
5409 no_dll: |
1 | 5410 if(pos>150)return 0; |
5411 sprintf(export_names[pos], "%s:%d", library, ordinal); | |
7386 | 5412 return add_stub(); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5413 } |
1 | 5414 |
5415 void* LookupExternalByName(const char* library, const char* name) | |
5416 { | |
5417 char* answ; | |
5418 int i,j; | |
3465 | 5419 // return (void*)ext_unknown; |
1 | 5420 if(library==0) |
5421 { | |
5422 printf("ERROR: library=0\n"); | |
5423 return (void*)ext_unknown; | |
5424 } | |
22476 | 5425 if((unsigned long)name<=0xffff) |
1 | 5426 { |
22476 | 5427 return LookupExternal(library, (int)name); |
1 | 5428 } |
8279
fade8f754da0
_qtx support_ and m3jpeg,mjpeg2k fixes (some cleanup and _lot of testing needed_)
alex
parents:
8141
diff
changeset
|
5429 dbgprintf("External func %s:%s\n", library, name); |
1 | 5430 for(i=0; i<sizeof(libraries)/sizeof(struct libs); i++) |
5431 { | |
5432 if(strcasecmp(library, libraries[i].name)) | |
5433 continue; | |
5434 for(j=0; j<libraries[i].length; j++) | |
5435 { | |
5436 if(strcmp(name, libraries[i].exps[j].name)) | |
5437 continue; | |
22475
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5438 if((unsigned int)(libraries[i].exps[j].func) == -1) |
9edc4cfaeaed
Allow declaring special undefined functions that will return NULL
reimar
parents:
22406
diff
changeset
|
5439 return NULL; //undefined func |
3465 | 5440 // printf("Hit: 0x%08X\n", libraries[i].exps[j].func); |
1 | 5441 return libraries[i].exps[j].func; |
5442 } | |
5443 } | |
9897 | 5444 |
5445 #ifndef LOADLIB_TRY_NATIVE | |
5446 /* hack for vss h264 */ | |
22367
97639699240b
Update 3ivx decoder to latest version and allow it to load required library.
voroshil
parents:
21462
diff
changeset
|
5447 if (!strcmp(library,"vssh264core.dll") || !strcmp(library,"3ivx.dll")) |
9897 | 5448 #endif |
5449 /* ok, this is a hack, and a big memory leak. should be fixed. - alex */ | |
5450 { | |
5451 int hand; | |
5452 WINE_MODREF *wm; | |
5453 void *func; | |
5454 | |
5455 hand = LoadLibraryA(library); | |
5456 if (!hand) | |
5457 goto no_dll_byname; | |
5458 wm = MODULE32_LookupHMODULE(hand); | |
5459 if (!wm) | |
5460 { | |
5461 FreeLibrary(hand); | |
5462 goto no_dll_byname; | |
5463 } | |
5464 func = PE_FindExportedFunction(wm, name, 0); | |
5465 if (!func) | |
5466 { | |
5467 printf("No such name in external dll\n"); | |
5468 FreeLibrary((int)hand); | |
5469 goto no_dll_byname; | |
5470 } | |
5471 | |
5472 printf("External dll loaded (offset: 0x%x, func: %p)\n", | |
5473 hand, func); | |
5474 return func; | |
5475 } | |
5476 | |
5477 no_dll_byname: | |
3465 | 5478 if(pos>150)return 0;// to many symbols |
1 | 5479 strcpy(export_names[pos], name); |
7386 | 5480 return add_stub(); |
1 | 5481 } |
5482 | |
2069 | 5483 void my_garbagecollection(void) |
128 | 5484 { |
5485 #ifdef GARBAGE | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5486 int unfree = 0, unfreecnt = 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5487 |
7386 | 5488 int max_fatal = 8; |
3134 | 5489 free_registry(); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5490 while (last_alloc) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5491 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5492 alloc_header* mem = last_alloc + 1; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2579
diff
changeset
|
5493 unfree += my_size(mem); |
3465 | 5494 unfreecnt++; |
7386 | 5495 if (my_release(mem) != 0) |
5496 // avoid endless loop when memory is trashed | |
5497 if (--max_fatal < 0) | |
5498 break; | |
128 | 5499 } |
12258
25310086fc95
Less verbosity by moving some debug messages from printf --> dbgprintf.
diego
parents:
12074
diff
changeset
|
5500 dbgprintf("Total Unfree %d bytes cnt %d [%p,%d]\n",unfree, unfreecnt, last_alloc, alccnt); |
128 | 5501 #endif |
3134 | 5502 g_tls = NULL; |
5503 list = NULL; | |
128 | 5504 } |