queries on internals...
ok... getting reasonable output, but now I have some questions. First, it seems like wine can't find the audio codecs, though it seems to find the video ones. Is this a to-be-implemented or a bug and any clues on where to look? The next are portability / solaris questions... 1) For some unknown reason, the solaris version segfaults when it tries to load win87em.dll, but the linux one doesn't. I presume that this is trying to load the fpu emulator, but I'm not certain. In any case, what controls the loading of this in the first place? 2) regapi uses strsep, which solaris doesn't have. Is its usage in wine compatible with strtok, or should I cut/paste strsep into library/ports.c? 3) In win32/console.c, it seems that master/slave is reversed through the fork. This is only going off the docs, but if it is, how is this working under linux? That's all for now.... -r -- Roger Fujii <rmf(a)lookhere.com> Underemployed, and trying to keep it that way....
Roger Fujii wrote: > > ok... getting reasonable output, but now I have some > questions. > > First, it seems like wine can't find the audio codecs, > though it seems to find the video ones. Is this a > to-be-implemented or a bug and any clues on where to look? which audio codecs ? you mean the ACM ones ? there are loaded as any drivers, looking for their names in system.ini drivers32 entries. to use the native acm codecs, you need something like: [drivers32] MSACM.imaadpcm=imaadp32.acm MSACM.msadpcm=msadp32.acm MSACM.msgsm610=msgsm32.acm msacm.msg711=msg711.acm MSACM.trspch=tssoft32.acm msacm.l3acm=l3codeca.acm msacm.vivog723=vivog723.acm msacm.voxacm119=vdk32119.acm msacm.iac2=C:\WINDOWS\SYSTEM\IAC25_32.AX (btw, video codecs are loaded the same way, so it's strange it doesn't work. any trouble somewhere with the .acm extension in the loader somewhere ??) > 1) For some unknown reason, the solaris version segfaults > when it tries to load win87em.dll, but the linux one > doesn't. I presume that this is trying to load the fpu > emulator, but I'm not certain. In any case, what controls > the loading of this in the first place? well it depends how the program was first compiled. there are options on windows to compile a program as: - without fpu (force always emulation) - only with fpu (no emulation) - mixed strategy (if fpu present, then use it, otherwise fall back to emulation) so, it sounds like the fpu traps are not correctly handled between wine and solaris (hard to tell more here) > 3) In win32/console.c, it seems that master/slave is reversed > through the fork. This is only going off the docs, but if > it is, how is this working under linux? don't worry about that. all this code should be removed real soon (if Alexandre commits my patches ;-) A+ -- --------------- Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
eric pouech wrote: Before I start, the large checkin this morning definitely broke the dll loader (at least on solaris). Sol.exe no longer runs :(
First, it seems like wine can't find the audio codecs, though it seems to find the video ones. Is this a to-be-implemented or a bug and any clues on where to look? which audio codecs ? you mean the ACM ones ?
it doesn't show ANY audio codecs.
there are loaded as any drivers, looking for their names in system.ini drivers32 entries. to use the native acm codecs, you need something like:
[drivers32] MSACM.imaadpcm=imaadp32.acm MSACM.msadpcm=msadp32.acm MSACM.msgsm610=msgsm32.acm msacm.msg711=msg711.acm MSACM.trspch=tssoft32.acm msacm.l3acm=l3codeca.acm msacm.vivog723=vivog723.acm msacm.voxacm119=vdk32119.acm msacm.iac2=C:\WINDOWS\SYSTEM\IAC25_32.AX
yup... those and more are there - I copied a working w98 win tree there, and it did find the video codecs.
(btw, video codecs are loaded the same way, so it's strange it doesn't work. any trouble somewhere with the .acm extension in the loader somewhere ??)
not certain. My linux reference machine's hd just died, so I can't truss it (don't even get that far under solaris - dies trying to bring up the dialog)
well it depends how the program was first compiled. there are options on windows to compile a program as: - without fpu (force always emulation) - only with fpu (no emulation) - mixed strategy (if fpu present, then use it, otherwise fall back to emulation) so, it sounds like the fpu traps are not correctly handled between wine and solaris (hard to tell more here)
what I don't understand is that one would think that should cause a SIGILL, and not a SIGSEG. Does wine return a CPU type somewhere?
3) In win32/console.c, it seems that master/slave is reversed through the fork. This is only going off the docs, but if it is, how is this working under linux? don't worry about that. all this code should be removed real soon (if Alexandre commits my patches ;-)
looks like TOO much was removed :) -r -- Roger Fujii <rmf(a)lookhere.com> Underemployed, and trying to keep it that way....
First, it seems like wine can't find the audio codecs, though it seems to find the video ones. Is this a to-be-implemented or a bug and any clues on where to look? which audio codecs ? you mean the ACM ones ?
it doesn't show ANY audio codecs. could you elaborate what you mean with "show" and "audio codecs" ? (I don't get what you want to say)
what I don't understand is that one would think that should cause a SIGILL, and not a SIGSEG. Does wine return a CPU type somewhere? yes, in misc/cpu.c... however the causes of the SIGSEG have to be investigated... what's the instruction causing the signal to be raised ?
A+ -- --------------- Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
eric pouech wrote:
First, it seems like wine can't find the audio codecs, though it seems to find the video ones. Is this a to-be-implemented or a bug and any clues on where to look? which audio codecs ? you mean the ACM ones ? it doesn't show ANY audio codecs. could you elaborate what you mean with "show" and "audio codecs" ? (I don't get what you want to say)
virtualdub has a selection that brings up the audio compressors (and another that has the video compressors) that can be used to compress a stream. The audio compression list is empty, while the video one has all the ones I expect. Sounds like from a previous post that it's a problem of not related to the audio device.
what I don't understand is that one would think that should cause a SIGILL, and not a SIGSEG. Does wine return a CPU type somewhere? yes, in misc/cpu.c... however the causes of the SIGSEG have to be investigated... what's the instruction causing the signal to be raised ?
uh, I wish I could be more specific, but gdb (at least under solaris) is pretty abysmal as far as multitheading apps go, and since the problem doesn't happen under linux and that wine doesn't work with the bundled assember/compiler (which rules out the use of the better forte tools), tracking this down is slow going. The current version oddly brings up virtualdub fine, but now fails bringing up solitaire (ugh). Look like something broke in the X stuff, but that's pure speculation right now. -r -- Roger Fujii <rmf(a)lookhere.com> Underemployed, and trying to keep it that way....
virtualdub has a selection that brings up the audio compressors (and another that has the video compressors) that can be used to compress a stream. The audio compression list is empty, while the video one has all the ones I expect. Sounds like from a previous post that it's a problem of not related to the audio device. well, other post says that no ACM driver is reported when there's no audio available... that's perhaps the program which disables the list when no audio is avail. could you mail me anyway the -debugmsg +msacm trace
TIA -- --------------- Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
eric pouech wrote:
virtualdub has a selection that brings up the audio compressors (and another that has the video compressors) that can be used to compress a stream. The audio compression list is empty, while the video one has all the ones I expect. Sounds like from a previous post that it's a problem of not related to the audio device. well, other post says that no ACM driver is reported when there's no audio available... that's perhaps the program which disables the list when no audio is avail. could you mail me anyway the -debugmsg +msacm trace
ok... attached is the wine output for the above I *finally* got it back to working order. Ended up that the last checkin caused a reconfiguration that latched onto the X11 4.1.0 tree on my system (as opposed to the openwin one). For some reason (as stated before), wine crashes when compiled/linked against the XFree tree, but runs fine when compiled against the openwin tree. My suspicion is that it is a funky threading issue - probably should be in a readme somewhere. Also, I got the following message from Avery Lee (the author of VirtualDub). Am posting it here as an FYI and for archival reasons.
From Avery Lee: Please feel free to forward this on to other developers or onto the Wine list.
I read the discussion about VirtualDub crashing the Wine loader with great interest today. (It's a bit weird that the only way I heard about a problem with my Win32 program was via a Unix-oriented mailing list.) Yes, the exports header points to garbage, and yes, it was caused by UPX -- UPX left the export header RVA and size in the PE32 optional header exactly was it was in the unpacked image. You can safely hex edit the bytes at 180-187 to null to kill the bogus export directory, since it turns out I exported those functions by mistake in some hasty cut-and-paste and they aren't used. As for other compatibility problems with Wine, I have gotten VirtualDub to run in the past under Linux, although I ran into severe problems with the handling of custom templates in GetOpenFileName() and slow updates in the trackbar common control. The last time I tried I had to remove two calls to SetUnhandledExceptionFilter() to get it to run. One more thing: There is an undocumented Wine compatibility switch /w that you can specify on the command line to force VirtualDub to use StretchDIBits() to blit to the screen instead of a DIB section. It was a workaround for an old problem where Wine wouldn't mark a GDI DIB section dirty if it was written to through an aliased, memory-mapped section. -- Roger Fujii <rmf(a)lookhere.com> Underemployed, and trying to keep it that way.... Script started on Fri 09 Nov 2001 03:45:17 AM EST router.lookhere.com[1]% dowine GNU gdb 5.0 Copyright 2000 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-pc-solaris2.8"... (gdb) run / --debugmsg +msacm tr /home/rmf/pc/vdub/VirtualDub.exe Starting program: /home/rmf/playcvs/wine/./wine --debugmsg +msacm /home/rmf/pc/vdub/VirtualDub.exe warning: Unable to find dynamic linker breakpoint function. GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code. Could not stat /mnt/fd0 (No such file or directory), ignoring drive A: Could not stat /cdrom (No such file or directory), ignoring drive D: Line 181563: Key is too long '[Software\\Microsoft\\Protected Storage System Provider\\rmf\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db\\e161255a-37c3-11d2-bcaa-00c04fd929db\\http://javashoplm.sun.com/servlet/EComActionServlet/ECom.WelcomePageInfo;jse...]' Line 181563: Error creating key '[Software\\Microsoft\\Protected Storage System Provider\\rmf\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db\\e161255a-37c3-11d2-bcaa-00c04fd929db\\http://javashoplm.sun.com/servlet/EComActionServlet/ECom.WelcomePageInfo;jse...]' Line 181564: Value without key '"Behavior"=hex:02,00,00,00,02,00,00,00,10,00,00,00,57,00,69,00,6e,00,64,00,6f,\' Line 181565: Unrecognized input ' 00,77,00,73,00,00,00,14,00,00,00,83,69,ed,13,38,8d,13,13,59,70,7e,56,fb,54,\' Line 181566: Unrecognized input ' d0,cc,81,38,3a,ec' Line 181567: Value without key '"Item Data"=hex:02,00,00,00,18,00,00,00,61,2d,ad,05,70,75,3a,64,1d,56,e0,84,8f,\' Line 181568: Unrecognized input ' 80,a1,61,4b,4f,fd,27,46,e4,c6,58,30,00,00,00,40,27,66,51,f3,c7,28,06,74,de,\' Line 181569: Unrecognized input ' 20,e4,01,51,36,bd,cd,ab,8d,ce,ca,5f,77,ef,d9,ba,96,1b,3e,79,5f,ac,b6,34,de,\' Line 181570: Unrecognized input ' cd,4d,55,5f,01,ed,48,89,d0,3e,c0,97,ee' Line 181572: Key is too long '[Software\\Microsoft\\Protected Storage System Provider\\rmf\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db\\e161255a-37c3-11d2-bcaa-00c04fd929db\\http://javashoplm.sun.com/servlet/EComActionServlet/ECom.WelcomePageInfo;jse...]' Line 181572: Error creating key '[Software\\Microsoft\\Protected Storage System Provider\\rmf\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db\\e161255a-37c3-11d2-bcaa-00c04fd929db\\http://javashoplm.sun.com/servlet/EComActionServlet/ECom.WelcomePageInfo;jse...]' Line 181573: Value without key '"Behavior"=hex:02,00,00,00,02,00,00,00,10,00,00,00,57,00,69,00,6e,00,64,00,6f,\' Line 181574: Unrecognized input ' 00,77,00,73,00,00,00,14,00,00,00,55,af,f8,de,7a,b4,0b,fa,dd,45,5f,f0,96,bb,\' Line 181575: Unrecognized input ' de,f0,c5,c5,0d,8f' Line 181576: Value without key '"Item Data"=hex:02,00,00,00,18,00,00,00,80,58,f9,8b,65,ed,de,c0,7d,40,94,84,4f,\' Line 181577: Unrecognized input ' cb,6f,a1,9b,18,27,1a,d7,45,01,f5,58,00,00,00,08,a6,e1,69,2c,31,7d,0e,f3,2d,\' Line 181578: Unrecognized input ' a4,36,5f,94,b6,9f,8a,df,78,66,f9,7f,7f,b0,bd,52,a1,e5,a9,cc,9a,c7,1f,b1,73,\' Line 181579: Unrecognized input ' 74,ea,9d,85,77,87,aa,76,74,ca,5c,a7,47,a0,86,cc,94,5a,94,bd,41,e1,86,11,09,\' Line 181580: Unrecognized input ' c9,42,30,bc,e6,0a,a1,e3,5e,d5,99,0b,5c,71,f5,1d,94,12,12,b9,be,a9,30,27,4f,\' Line 181581: Unrecognized input ' 2a,34,af' err:module:BUILTIN32_LoadLibraryExA loaded .so but dll avicap32.dll still not found trace:msacm:MSACM32_LibMain 0xdef85000 0x1 0 trace:msacm:MSACM_RegisterDriver ('msacm.lhacm', 'lhacm.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('MSACM.imaadpcm', 'imaadp32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('MSACM.msadpcm', 'msadp32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('MSACM.msgsm610', 'msgsm32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.msg711', 'msg711.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('MSACM.trspch', 'tssoft32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.msg723', 'msg723.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.iac2', 'C:\WINDOWS\SYSTEM\IAC25_32.AX', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.l3acm', 'L3codeca.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.sl_anet', 'sl_anet.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.voxacm160', 'vct3216.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.msaudio1', 'msaud32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.divxa32', 'DivXa32.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.dvacm', 'dvacm.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm.ctmp3', 'C:\WINDOWS\SYSTEM\ctmp3.acm', 0x00000000) trace:msacm:MSACM_RegisterDriver ('msacm32.dll', 'msacm32.dll', 0x00000000) trace:msacm:acmDriverOpen (df5e6958, deae0fbc, 00000000) trace:msacm:PCM_DriverProc (00000000 df6cb42c 1 00000000 00000000); trace:msacm:PCM_DriverProc (00000000 df6cb42c 2 00000000 00000000); trace:msacm:PCM_DriverProc (00000000 df6cb42c 3 00000000 00000000); trace:msacm:PCM_DriverProc (00000000 df6cb454 3 00000000 df5e60a0); trace:msacm:acmDriverOpen 'msacm32.dll' => deae0108 trace:msacm:PCM_DriverProc (00000001 df6cb454 24586 df5e624c 00000000); trace:msacm:PCM_DriverProc (00000001 df6cb454 24602 df5e6134 00000000); trace:msacm:PCM_DriverProc (00000001 df6cb454 4 00000000 00000000); trace:msacm:WAVEMAP_DriverProc (00000000, DF6CA760, 00000001, 00000000, 00000000) trace:msacm:WAVEMAP_DriverProc (00000000, DF6CA760, 00000002, 00000000, 00000000) trace:msacm:WAVEMAP_DriverProc (00000000, DF6CA760, 00000003, 00000000, 00000000) trace:msacm:WAVEMAP_widMessage (0, 0064, 00000000, 00000000, 00000000); trace:msacm:WAVEMAP_widMessage (0, 0032, 00000000, 00000000, 00000000); trace:msacm:WAVEMAP_wodMessage (0, 0064, 00000000, 00000000, 00000000); trace:msacm:WAVEMAP_wodMessage (0, 0003, 00000000, 00000000, 00000000); trace:msacm:MIDIMAP_modMessage (0, 0064, 00000000, 00000000, 00000000); trace:msacm:MIDIMAP_modMessage (0, 0001, 00000000, 00000000, 00000000); fixme:msvideo:DrawDibRealize (1086,0x000008ec,0), stub fixme:ddraw:DDRAW_DllCanUnloadNow (void): stub fixme:msvideo:DrawDibRealize (1086,0x000008ec,0), stub trace:msacm:acmMetrics (0x00000000, 50, df5e6800); fixme:msvideo:DrawDibRealize (1086,0x000008ec,0), stub trace:msacm:MSACM32_LibMain 0xdef85000 0x0 1 trace:msacm:PCM_DriverProc (00000001 df6cb42c 4 00000000 00000000); trace:msacm:PCM_DriverProc (00000001 df6cb42c 5 00000000 00000000); trace:msacm:PCM_DriverProc (00000001 df6cb42c 6 00000000 00000000); Program exited normally. (gdb) quit router.lookhere.com[2]% exit script done on Fri 09 Nov 2001 03:46:52 AM EST
Hmm, I noticed that when using VirtualDub, I had the same problem with ACM codecs. I did some detective work and found the problem to be a mistake in dlls/msacm/driver.c. Included is a patch to fix this error. However, I noticed that with this patch, the codecs are found, but for some reason are listed many times for each codec!? - Travis Index: dlls/msacm/driver.c =================================================================== RCS file: /home/wine/wine/dlls/msacm/driver.c,v retrieving revision 1.13 diff -u -r1.13 driver.c --- dlls/msacm/driver.c 2001/07/25 00:43:31 1.13 +++ dlls/msacm/driver.c 2001/11/09 16:09:43 @@ -171,7 +171,7 @@ if (!fnCallback) return MMSYSERR_INVALPARAM; - if (fdwEnum && ~(ACM_DRIVERENUMF_NOLOCAL|ACM_DRIVERENUMF_DISABLED)) + if (fdwEnum & ~(ACM_DRIVERENUMF_NOLOCAL|ACM_DRIVERENUMF_DISABLED)) return MMSYSERR_INVALFLAG; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) { _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
On Tue, 6 Nov 2001, Roger Fujii wrote: [...]
2) regapi uses strsep, which solaris doesn't have. Is its usage in wine compatible with strtok, or should I cut/paste strsep into library/ports.c?
I believe regapi is not compatible with strtok: if you have "Name"= then regapi expects to get two tokens '"name"' and '', but strtok only returns one. I was also wondering how to best fix that. Since it is a Winelib application and not a part of Wine I don't know if implementing strsep in library/port.c is the best solution: shouldn't we be able to compile regapi on Windows? In addition to that Wine itself does not use strsep. I would like Alexandre's opinion on that :-) So the other solution is to reimplement strsep in regapi itself and I have a patch for that. Just in case, here is a carefully tested strsep reimplementation: static char* getToken(char** str, const char* delims) { char* token; if (*str==NULL) { /* No more tokens */ return NULL; } token=*str; while (**str!='\0') { if (strchr(delims,**str)!=NULL) { **str='\0'; (*str)++; return token; } (*str)++; } /* There is no other token */ *str=NULL; return token; } -- Francois Gouget fgouget(a)free.fr http://fgouget.free.fr/ Any sufficiently advanced bug is indistinguishable from a feature. -- from some indian guy
participants (4)
-
eric pouech -
Francois Gouget -
KiLMoR Zombie -
Roger Fujii