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