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