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