VOGONS


First post, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie

Hey guys, I'm trying to build dosbox from the latest source and adding the ne2000 patch (http://sourceforge.net/p/dosbox/patches/238/). I'm trying to use mingw and gcc/g++ 4.8.1.

Building the sdl-1.2.15 and sdl_net-1.2.8 was just fine, and I applied the patch to the source (seemingly) without issue (when I build the source, it has a section that looks for pcap.h and such):

checking pcap.h usability... no
checking pcap.h presence... no
checking for pcap.h... no
checking for pcap_open_live in -lpcap... no
configure: WARNING: Can't find libpcap, NE2000 ethernet passthrough disabled

However, I'm a little lost as to whether I should build libpcap, or winpcap, or both so that I can include the necessary files. Most of what I looked up implied I should build winpcap (since I'm on windows), however when I attempt to build it, I get the error message:

/winpcap/packetntx/dll/project
$ make
cc -I ../../../common -shared -mno-cygwin -O -D_WINNT4 -I.. -o ../Packet32.o -c
../Packet32.c
cc.exe: error: unrecognized command line option '-mno-cygwin'
make: *** [../Packet32.o] Error 1

So yeah, any suggestions on building or including the necessary files for the pcap libraries when building dosbox? Thanks!

Reply 1 of 14, by truth_deleted

User metadata

1. download winpcap from here: http://www.winpcap.org
2. move *.a files to /usr/lib/ and *.h files to /usr/include/pcap/
3. copy packet.dll, pthreadvc.dll, wanpacket.dll, wpcap.dll to /usr/bin (extract these files from binary install files; perhaps UniExtract will perform extraction)
4. Edit dosbox/configure.ac so the pcap function appears like this (mainly editing pcap to wpcap on some lines):

--- configure.ac	2014-01-29 07:10:04 -0500
+++ configure2.ac 2014-01-16 01:37:03 -0500
@@ -351,6 +351,16 @@ else
AC_MSG_WARN([Can't find libpng, screenshot support disabled])
fi

+AH_TEMPLATE(C_NE2000,[Define to 1 to enable NE2000 ethernet passthrough, requires libwpcap])
+AC_CHECK_HEADER(pcap.h,have_pcap_h=yes,)
+AC_CHECK_LIB(wpcap, pcap_open_live, have_wpcap_lib=yes, ,)
+if test x$have_wpcap_lib = xyes -a x$have_pcap_h = xyes ; then
+ LIBS="$LIBS -lwpcap";
+ AC_DEFINE(C_NE2000,1)
+else
+ AC_MSG_WARN([Can't find libwpcap, NE2000 ethernet passthrough disabled])
+fi
+
AH_TEMPLATE(C_MODEM,[Define to 1 to enable internal modem support, requires SDL_net])
AH_TEMPLATE(C_IPX,[Define to 1 to enable IPX over Internet networking, requires SDL_net])
AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,)

5. add flag to configure commandline: CPPFLAGS="-I/usr/include/pcap"

note: /usr/ directory is typically /MinGW/msys/1.0/ (or c:\MinGW\msys\1.0\); I haven't tried moving the files to /mingw/ instead. Also, if there is a linker error in misc_util.cpp, missing getsockname function, then report back for a solution.

Reply 2 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie
truth5678 wrote:
1. download winpcap from here: http://www.winpcap.org 2. move *.a files to /usr/lib/ and *.h files to /usr/include/pcap/ 3. copy […]
Show full quote

1. download winpcap from here: http://www.winpcap.org
2. move *.a files to /usr/lib/ and *.h files to /usr/include/pcap/
3. copy packet.dll, pthreadvc.dll, wanpacket.dll, wpcap.dll to /usr/bin (extract these files from binary install files; perhaps UniExtract will perform extraction)
4. Edit dosbox/configure.ac so the pcap function appears like this (mainly editing pcap to wpcap on some lines):

--- configure.ac	2014-01-29 07:10:04 -0500
+++ configure2.ac 2014-01-16 01:37:03 -0500
@@ -351,6 +351,16 @@ else
AC_MSG_WARN([Can't find libpng, screenshot support disabled])
fi

+AH_TEMPLATE(C_NE2000,[Define to 1 to enable NE2000 ethernet passthrough, requires libwpcap])
+AC_CHECK_HEADER(pcap.h,have_pcap_h=yes,)
+AC_CHECK_LIB(wpcap, pcap_open_live, have_wpcap_lib=yes, ,)
+if test x$have_wpcap_lib = xyes -a x$have_pcap_h = xyes ; then
+ LIBS="$LIBS -lwpcap";
+ AC_DEFINE(C_NE2000,1)
+else
+ AC_MSG_WARN([Can't find libwpcap, NE2000 ethernet passthrough disabled])
+fi
+
AH_TEMPLATE(C_MODEM,[Define to 1 to enable internal modem support, requires SDL_net])
AH_TEMPLATE(C_IPX,[Define to 1 to enable IPX over Internet networking, requires SDL_net])
AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,)

5. add flag to configure commandline: CPPFLAGS="-I/usr/include/pcap"

note: /usr/ directory is typically /MinGW/msys/1.0/ (or c:\MinGW\msys\1.0\); I haven't tried moving the files to /mingw/ instead. Also, if there is a linker error in misc_util.cpp, missing getsockname function, then report back for a solution.

Thanks! Couple of questions, though, if I may
Am I grabbing the source, or the developer's pack, or something else entirely?
Is it any and all .h and .a file in either of these packages? Or files from a specific location? (I'm not seeing any .a files in the source, I'll comb through the developer's pack though)
Can I grab the packet.dll, pthreadvc.dll, wanpacket.dll, and wpcap.dll from my install of Winpcap (C:\Windows\SysWOW64)? Or do I need to extract them from the binary itself?

And on the configure.ac, the line to edit:

+AC_CHECK_LIB(wpcap, pcap_open_live, have_wpcap_lib=yes, ,)

Shows up as the following for me:

AC_CHECK_LIB(wpcap, pcap_open_live, have_wpcap_lib=yes, ,-lz)

Should the last parameter be null like your example or should I leave the -lz?

Thanks again!

Reply 3 of 14, by truth_deleted

User metadata

The files should be in the developer's pack and the regular installation package; it's been a while since I checked. However, you shouldn't need source to compile.

Compile a 32-bit dosbox binary and use 32-bit pcap binaries.

Leave out the -lz parameter for initial testing. Once it compiles, then you could experiment with adding back the zlib library.

Reply 4 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie
truth5678 wrote:

The files should be in the developer's pack and the regular installation package; it's been a while since I checked. However, you shouldn't need source to compile.

Compile a 32-bit dosbox binary and use 32-bit pcap binaries.

Leave out the -lz parameter for initial testing. Once it compiles, then you could experiment with adding back the zlib library.

Hmm...I'm guessing I placed a file wrong, or some include statement should be changed to wpcap instead of pcap. Here's my configure result:

checking pcap.h usability... no
checking pcap.h presence... yes
configure: WARNING: pcap.h: present but cannot be compiled
configure: WARNING: pcap.h: check for missing prerequisite headers?
configure: WARNING: pcap.h: see the Autoconf documentation
configure: WARNING: pcap.h: section "Present But Cannot Be Compiled"
configure: WARNING: pcap.h: proceeding with the compiler's result
checking for pcap.h... no
checking for pcap_open_live in -lwpcap... no
configure: WARNING: Can't find libwpcap, NE2000 ethernet passthrough disabled

Funky, any ideas what I may be goofing up here?

Reply 5 of 14, by truth_deleted

User metadata

Ensure you run ./autogen.sh after patching dosbox, then run the ./configure line. I use winpcap 4.0.1, perhaps find this version if the problem persists. I have some recollection of trying different versions until one worked. Also, list the true directory name of /usr/include and /usr/lib and which pcap files were copied to which directory. And show the configure line.

http://www.winpcap.org/archive/
http://www.winpcap.org/archive/4.0.1-WpdPack.zip (for header and library files; just *.a libs for mingw32)
http://www.winpcap.org/archive/4.0.1-WinPcap.exe (for .dll binaries)

Reply 6 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie
truth5678 wrote:
Ensure you run ./autogen.sh after patching dosbox, then run the ./configure line. I use winpcap 4.0.1, perhaps find this versio […]
Show full quote

Ensure you run ./autogen.sh after patching dosbox, then run the ./configure line. I use winpcap 4.0.1, perhaps find this version if the problem persists. I have some recollection of trying different versions until one worked. Also, list the true directory name of /usr/include and /usr/lib and which pcap files were copied to which directory. And show the configure line.

http://www.winpcap.org/archive/
http://www.winpcap.org/archive/4.0.1-WpdPack.zip (for header and library files; just *.a libs for mingw32)
http://www.winpcap.org/archive/4.0.1-WinPcap.exe (for .dll binaries)

Cool, thanks. Ok, so, I opened and extracted the .dlls from the zip (using 7zip).

Step 1 - I moved lipwpcap.a and libpacket.a (from WpdPack\Lib) to C:\mingw\lib, C:\mingw\mingw32\lib, and C:\mingw\msys\1.0\lib
Step 2 - I moved everything from WpdPack\include (all the .h files) to C:\mingw\include\pcap, C:\mingw\mingw32\include\pcap, and C:\msys\1.0\include\pcap
Step 3 - I moved the packet.dll, pthreadvc.dll, wanpacket.dll, wpcap.dll to C:\mingw\bin, C:\mingw\mingw32\bin, and C:\msys\1.0\bin
Step 4 - Ran ./autogen.sh

$ ./autogen.sh
Generating build information using aclocal, autoheader, automake and autoconf
This may take a while ...
Now you are ready to run ./configure.
You can also run ./configure --help for extra features to enable/disable.

Step 5 - Ran ./configure

$ ./configure
checking build system type... i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking for ranlib... ranlib
checking for sdl-config... /usr/local/bin/sdl-config
checking for SDL - version >= 1.2.0... yes
checking SDL version only being 1.2.X... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking size of unsigned char... 1
checking size of unsigned short... 2
checking size of unsigned int... 4
checking size of unsigned long... 4
checking size of unsigned long long... 8
checking size of int *... 4
checking for stdlib.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... no
checking for netinet/in.h... no
checking for pwd.h... no
checking if environ can be included... yes
checking if environ can be linked... yes
checking if dirent includes d_type... no
checking for powf in libm... yes
Show last 82 lines
checking if compiler allows __attribute__... yes
checking if compiler allows __attribute__((always_inline)) ... yes
checking if compiler allows __attribute__((fastcall)) ... yes
checking if compiler allows __builtin_expect... yes
checking for ALSA CFLAGS...
checking for ALSA LDFLAGS... -lasound -lm -ldl -lpthread
checking for libasound headers version >= 0.9.0... not present.
checking for snd_ctl_open in -lasound... no
checking whether byte ordering is bigendian... no
checking for target cpu type... x86 compatible
checking whether x86 dynamic cpu core will be enabled... yes
checking whether recompiling cpu core will be enabled... no, using dynamic-x86
checking whether fpu emulation will be enabled... yes
checking whether x86 assembly fpu core will be enabled... yes
checking whether to enable unaligned memory access... yes
checking png.h usability... no
checking png.h presence... no
checking for png.h... no
checking for png_get_io_ptr in -lpng... no
configure: WARNING: Can't find libpng, screenshot support disabled
checking pcap.h usability... no
checking pcap.h presence... no
checking for pcap.h... no
checking for pcap_open_live in -lwpcap... yes
configure: WARNING: Can't find libwpcap, NE2000 ethernet passthrough disabled
checking SDL_net.h usability... yes
checking SDL_net.h presence... yes
checking for SDL_net.h... yes
checking for SDLNet_Init in -lSDL_net... yes
checking for main in -lX11... no
checking X11/XKBlib.h usability... no
checking X11/XKBlib.h presence... no
checking for X11/XKBlib.h... no
checking for XKBlib support... no
checking for main in -lGL... no
checking for main in -lopengl32... yes
checking GL/gl.h usability... yes
checking GL/gl.h presence... yes
checking for GL/gl.h... yes
checking whether opengl display output will be enabled... yes
checking SDL_sound.h usability... no
checking SDL_sound.h presence... no
checking for SDL_sound.h... no
checking for Sound_Init in -lSDL_sound... no
checking for Sound_Seek in -lSDL_sound... no
configure: WARNING: Can't find libSDL_sound, libSDL_sound support disabled
checking sys/mman.h usability... no
checking sys/mman.h presence... no
checking for sys/mman.h... no
checking for setpriority support... no
checking ddraw.h usability... no
checking ddraw.h presence... no
checking for ddraw.h... no
checking for windres... windres
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/cpu/Makefile
config.status: creating src/cpu/core_full/Makefile
config.status: creating src/cpu/core_normal/Makefile
config.status: creating src/cpu/core_dyn_x86/Makefile
config.status: creating src/cpu/core_dynrec/Makefile
config.status: creating src/debug/Makefile
config.status: creating src/dos/Makefile
config.status: creating src/fpu/Makefile
config.status: creating src/gui/Makefile
config.status: creating src/hardware/Makefile
config.status: creating src/hardware/serialport/Makefile
config.status: creating src/ints/Makefile
config.status: creating src/libs/Makefile
config.status: creating src/libs/zmbv/Makefile
config.status: creating src/libs/gui_tk/Makefile
config.status: creating src/misc/Makefile
config.status: creating src/shell/Makefile
config.status: creating src/platform/Makefile
config.status: creating src/platform/visualc/Makefile
config.status: creating visualc_net/Makefile
config.status: creating include/Makefile
config.status: creating docs/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

Interesting, now it's not seeing the pcap.h. Hmm...maybe I should add the .h files to the /include folders as well as /include/pcap?

Well, I tried that, and it is visible again, but it's not able to compile it.

$ ./configure
checking build system type... i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking for ranlib... ranlib
checking for sdl-config... /usr/local/bin/sdl-config
checking for SDL - version >= 1.2.0... yes
checking SDL version only being 1.2.X... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking size of unsigned char... 1
checking size of unsigned short... 2
checking size of unsigned int... 4
checking size of unsigned long... 4
checking size of unsigned long long... 8
checking size of int *... 4
checking for stdlib.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... no
checking for netinet/in.h... no
checking for pwd.h... no
checking if environ can be included... yes
checking if environ can be linked... yes
checking if dirent includes d_type... no
checking for powf in libm... yes
Show last 87 lines
checking if compiler allows __attribute__... yes
checking if compiler allows __attribute__((always_inline)) ... yes
checking if compiler allows __attribute__((fastcall)) ... yes
checking if compiler allows __builtin_expect... yes
checking for ALSA CFLAGS...
checking for ALSA LDFLAGS... -lasound -lm -ldl -lpthread
checking for libasound headers version >= 0.9.0... not present.
checking for snd_ctl_open in -lasound... no
checking whether byte ordering is bigendian... no
checking for target cpu type... x86 compatible
checking whether x86 dynamic cpu core will be enabled... yes
checking whether recompiling cpu core will be enabled... no, using dynamic-x86
checking whether fpu emulation will be enabled... yes
checking whether x86 assembly fpu core will be enabled... yes
checking whether to enable unaligned memory access... yes
checking png.h usability... no
checking png.h presence... no
checking for png.h... no
checking for png_get_io_ptr in -lpng... no
configure: WARNING: Can't find libpng, screenshot support disabled
checking pcap.h usability... no
checking pcap.h presence... yes
configure: WARNING: pcap.h: present but cannot be compiled
configure: WARNING: pcap.h: check for missing prerequisite headers?
configure: WARNING: pcap.h: see the Autoconf documentation
configure: WARNING: pcap.h: section "Present But Cannot Be Compiled"
configure: WARNING: pcap.h: proceeding with the compiler's result
checking for pcap.h... no
checking for pcap_open_live in -lwpcap... yes
configure: WARNING: Can't find libwpcap, NE2000 ethernet passthrough disabled
checking SDL_net.h usability... yes
checking SDL_net.h presence... yes
checking for SDL_net.h... yes
checking for SDLNet_Init in -lSDL_net... yes
checking for main in -lX11... no
checking X11/XKBlib.h usability... no
checking X11/XKBlib.h presence... no
checking for X11/XKBlib.h... no
checking for XKBlib support... no
checking for main in -lGL... no
checking for main in -lopengl32... yes
checking GL/gl.h usability... yes
checking GL/gl.h presence... yes
checking for GL/gl.h... yes
checking whether opengl display output will be enabled... yes
checking SDL_sound.h usability... no
checking SDL_sound.h presence... no
checking for SDL_sound.h... no
checking for Sound_Init in -lSDL_sound... no
checking for Sound_Seek in -lSDL_sound... no
configure: WARNING: Can't find libSDL_sound, libSDL_sound support disabled
checking sys/mman.h usability... no
checking sys/mman.h presence... no
checking for sys/mman.h... no
checking for setpriority support... no
checking ddraw.h usability... no
checking ddraw.h presence... no
checking for ddraw.h... no
checking for windres... windres
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/cpu/Makefile
config.status: creating src/cpu/core_full/Makefile
config.status: creating src/cpu/core_normal/Makefile
config.status: creating src/cpu/core_dyn_x86/Makefile
config.status: creating src/cpu/core_dynrec/Makefile
config.status: creating src/debug/Makefile
config.status: creating src/dos/Makefile
config.status: creating src/fpu/Makefile
config.status: creating src/gui/Makefile
config.status: creating src/hardware/Makefile
config.status: creating src/hardware/serialport/Makefile
config.status: creating src/ints/Makefile
config.status: creating src/libs/Makefile
config.status: creating src/libs/zmbv/Makefile
config.status: creating src/libs/gui_tk/Makefile
config.status: creating src/misc/Makefile
config.status: creating src/shell/Makefile
config.status: creating src/platform/Makefile
config.status: creating src/platform/visualc/Makefile
config.status: creating visualc_net/Makefile
config.status: creating include/Makefile
config.status: creating docs/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

I'm pretty sure everything is looking in the root of C:\mingw (either \include, \bin, or \lib) for files. But, I'm also getting the feeling that something is being pointed wrong somewhere with pcap.h, hence why it is present but not usable. I'll start searching through some of the files and see what I can dig up

Reply 7 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie

Hmmm...here's something interesting. Checking out the config.log, looks like it might be trying to grab something incorrectly from SDL? There seems to be a lot of errors around that section, at least.

Reply 8 of 14, by truth_deleted

User metadata

There is a guide for the novice to compile dosbox. Please see the link in my signature.

Reply 9 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie
truth5678 wrote:

There is a guide for the novice to compile dosbox. Please see the link in my signature.

Thanks! While I appreciate the resource, I'm pretty sure the issue is narrowed down to how I'm adding the headers to mingw. Dosbox itself, the SDL net and SDL libraries are going in no problem, and the build runs. I'm just botching the libraries the ne2000 patch is looking for.

Some of your load scripts looked interesting though, so I'll definitely take a look if and when I get the ne2000 built successfuly.

Reply 10 of 14, by truth_deleted

User metadata

I would follow my mingw guide. First, your gcc version is reported as 4.5.2 in your config.log, yet you are expecting 4.8.1. Your msys/ directory is reported in two separate locations in your post above. Also, your ./configure commandline has no parameters although parameters are necessary in this case. The configure commandline is listed in the guide along with another parameter value suggested in a post above.

These are the minor infractions I have found at a glance. If you follow the guide and go step by step, then it will be easier to trace any errors.

Reply 11 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie
truth5678 wrote:

I would follow my mingw guide. First, your gcc version is reported as 4.5.2 in your config.log, yet you are expecting 4.8.1. Your msys/ directory is reported in two separate locations in your post above. Also, your ./configure commandline has no parameters although parameters are necessary in this case. The configure commandline is listed in the guide along with another parameter value suggested in a post above.

These are the minor infractions I have found at a glance. If you follow the guide and go step by step, then it will be easier to trace any errors.

Oh, right, forgot to mention that. From what I read on the wiki (and it was the case when I first built dosbox vanilla), 4.8.1, and even 4.7 versions, kinda screw up the mount command. So ever time I go to build dosbox itself, I revert to gcc 4.5.2-1. (I also double check to include my .dll's, .h's, and .a's that get wiped by doing this).

I'll try building again from your guide, see where it lands me though. Thanks!

Reply 12 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie

Is sourceforge ftp having issues today? I'm trying to run the mingw-get-setup.exe for a fresh install and it's been crashing on trying to get almost any file. This is even on fresh virtual machines I set up with nothing to them, xp or 7, 32 and 64 bit.

Reply 13 of 14, by JesterXIII

User metadata
Rank Newbie
Rank
Newbie

Hey, truth, thanks for the advice! I skipped the ogg implementation, but I got it working thanks to your guide. Compiled quite nicely, thanks!