I thought I might have a version of POpen that works with Win32/Hugs, but I'm only slightly successful. The function of POpen is to spawn a sub-process using the Win32 equivalent of pipes to supply standard input and to accept standard output and standard error from the spawned process.

My starting point was a module called Win32Spawn, which I found in hslibs/win32 in the GHC source distribution. I have managed to compile the accompanying module and FFI interface into a DLL. The files used to do this are at [1], with the build process outlined in [2].

The key code in the new module POPen.hs [3] is in function "spawn", which was adapted from the original module "hslibs/win32/Win32Spawn.hs". I had to change the code for "spawn", because the Hugs interface for function openFd is has fewer parameters than that provided by GHC. The remaining parameters seem to be the same as for the GHC version of openFd.

The resulting program has compiled successfully, and the spawned program is activated as requested (in this case, curl: my evidence is that my personal firewall is asking me if curl should be allowed to access the Internet).

But I also get an I/O exception in the calling program, in function spawn, when trying to open a handle to write the spawned process' standard input stream. My evidence for this is by this modification to the code:
[[
hIn <- catch (openFd (fromIntegral wIn) False WriteMode False)
(\er -> do { putStrLn ("openFd wIn: "++show er)
; ioError er
}
)
]]
generating this message:
[[
openFd wIn: openFd: does not exist (file does not exist)
]]


My question is this: are there any fundamental differences between GHC and Hugs, either in the implementation of openFd, or in the FFI interface, that would cause (what I assume is) a divergence of behaviour? Does anyone have any other clues what might be going wrong here?

(BTW, I did get the HXml Toolbox to read and parse XML *from the web* using the internal HTTP library.)

#g
--

[1] http://www.ninebynine.org/Software/HaskellUtils/Win32/

[2] http://www.ninebynine.org/Software/HaskellUtils/Win32/MakePOpenDLL.bat

[3] http://www.ninebynine.org/Software/HaskellUtils/Win32/POpen.hs

[4] http://www.ninebynine.org/Software/HaskellUtils/Win32/Win32Spawn.hs


------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to