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