T
Tobias Reif
Hi
I'm disappointed to see that stuff like www.ruby-talk.org/9739 and
www.ruby-talk.org/10006 still is required with the latest version of
Ruby on Windows.
Over the years there have been many long threads already, so in order to
not increase the list volume too much, this is a one-post wish for (one
aspect of) better Windows support. (Not a fifty-message thread about how
lame Windows is
Here's an illustration of the problem:
(Ruby hackers (implementers) please feel free to contact me offlist for
further details if required)
# latest PragProg installer
# ruby 1.8.0 (2003-08-04) [i386-mswin32]
tidy_version_command = 'tidy -v'
puts `#{tidy_version_command}`
# backticks:6:in ``': No such file or directory -
# tidy -v (Errno::ENOENT)
xmllint_version_command = 'xmllint --version'
puts `#{xmllint_version_command}`
# backticks:11:in ``': No such file or directory
# - xmllint --version (Errno::ENOENT)
$:<<'[/path/to]/ruby/shared/' # path string changed in post
require 'cross_os_calls.rb'
tidy_version_command = 'tidy -v'
puts `#{tidy_version_command}`
# HTML Tidy for Windows released on 1st February 2003
xmllint_version_command = 'xmllint --version'
puts `#{xmllint_version_command}`
#[...]\XMLLINT.EXE: using libxml version 20510 [...]
... where cross_os_calls.rb goes something like this:
require 'rbconfig'
alias oldBacktick `
def `(command)
if Config::CONFIG["arch"] =~ /win/
require 'Win32API'
popen = Win32API.new("crtdll", "_popen", ['P','P'], 'L')
pclose = Win32API.new("crtdll", "_pclose", ['L'], 'L')
fread = Win32API.new("crtdll", "fread", ['P','L','L','L'], 'L')
feof = Win32API.new("crtdll", "feof", ['L'], 'L')
saved_stdout = $stdout.clone
psBuffer = " " * 128
rBuffer = ""
f = popen.Call(command,"r")
while feof.Call( f )==0
l = fread.Call( psBuffer,1,128,f )
rBuffer += psBuffer[0..l]
end
pclose.Call f
$stdout.reopen(saved_stdout)
rBuffer
else
oldBacktick command
end
end
It might be a good idea to include something like the above in Ruby.
Tobi
I'm disappointed to see that stuff like www.ruby-talk.org/9739 and
www.ruby-talk.org/10006 still is required with the latest version of
Ruby on Windows.
Over the years there have been many long threads already, so in order to
not increase the list volume too much, this is a one-post wish for (one
aspect of) better Windows support. (Not a fifty-message thread about how
lame Windows is
Here's an illustration of the problem:
(Ruby hackers (implementers) please feel free to contact me offlist for
further details if required)
# latest PragProg installer
# ruby 1.8.0 (2003-08-04) [i386-mswin32]
tidy_version_command = 'tidy -v'
puts `#{tidy_version_command}`
# backticks:6:in ``': No such file or directory -
# tidy -v (Errno::ENOENT)
xmllint_version_command = 'xmllint --version'
puts `#{xmllint_version_command}`
# backticks:11:in ``': No such file or directory
# - xmllint --version (Errno::ENOENT)
$:<<'[/path/to]/ruby/shared/' # path string changed in post
require 'cross_os_calls.rb'
tidy_version_command = 'tidy -v'
puts `#{tidy_version_command}`
# HTML Tidy for Windows released on 1st February 2003
xmllint_version_command = 'xmllint --version'
puts `#{xmllint_version_command}`
#[...]\XMLLINT.EXE: using libxml version 20510 [...]
... where cross_os_calls.rb goes something like this:
require 'rbconfig'
alias oldBacktick `
def `(command)
if Config::CONFIG["arch"] =~ /win/
require 'Win32API'
popen = Win32API.new("crtdll", "_popen", ['P','P'], 'L')
pclose = Win32API.new("crtdll", "_pclose", ['L'], 'L')
fread = Win32API.new("crtdll", "fread", ['P','L','L','L'], 'L')
feof = Win32API.new("crtdll", "feof", ['L'], 'L')
saved_stdout = $stdout.clone
psBuffer = " " * 128
rBuffer = ""
f = popen.Call(command,"r")
while feof.Call( f )==0
l = fread.Call( psBuffer,1,128,f )
rBuffer += psBuffer[0..l]
end
pclose.Call f
$stdout.reopen(saved_stdout)
rBuffer
else
oldBacktick command
end
end
It might be a good idea to include something like the above in Ruby.
Tobi