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