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