After Googling around a bit, I found this description of exactly how Windows interprets command lines in the C runtime:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng /htm/progs_12.asp As you can see, the rules are indeed very strange, but they are invertible. I think this code should do the trick: translate :: String -> String translate str = '"' : snd (foldr escape (True,"\"") str) where escape '"' (_, str) = (True, '\\' : '"' : str) escape '\\' (True, str) = (True, '\\' : '\\' : str) escape '\\' (False, str) = (False, '\\' : str) escape c (_, str) = (False, c : str) Cheers, Simon > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf > Of Simon Marlow > Sent: 29 January 2004 11:31 > To: Claus Reinke; Simon Peyton-Jones; > [EMAIL PROTECTED] > Subject: RE: Problem with ghc on Windows ME > > > > So does that mean functionality has been lost in the move from > > ghc-6.0.1? > > No, the behaviour is improved in 6.2 because we're now > careful to escape > quotes before passing the command-line to the operating system. > > I think confusion has arisen because Simon pointed out that there's no > way, on Windows, to pass this sequence of characters as an > argument to a > command: > > \" > > This is not entirely true, I just discovered that the > sequence \\\" will > turn into \". But in general, the sequence \\ does not turn into \. > Windows' command-line quoting rules are highly mysterious, to say the > least. > > So the patch I posted is not complete. It looks like rawSystem should > additionally translate \" as \\\". > > > Because that (on win98) happily accepts such useful > > contraptions as > > > > System.Cmd.rawSystem "\"c:\\silly > > space\\Vim\\vim62\\gvim.exe\" --servername GVIM --remote-send > > \":echo \\\"hi \\\\\\\" there\\\"<cr>\"" >>= print > > The idea is that you should pass to rawSystem *exactly* the > command and > arguments you want to run, with no quoting except that required by the > Haskell lexical syntax. You'll notice that rawSystem now takes the > command and list of arguments separately in 6.2. The > implementation of > rawSystem will attempt to compensate for the internal translation that > Windows does on the command-line; on Unix no translation is necessary. > So clients of rawSystem should be more portable, because they > don't have > to know about quoting that happens under the hood. > > Your example will probably work once it's reformulated for > 6.2's version > of rawSystem, and once we fix rawSystem in light of the \\\" hack I > discovered above. > > Cheers, > Simon > _______________________________________________ > Glasgow-haskell-users mailing list > [EMAIL PROTECTED] > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users > _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users