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