mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/pty: moved documents and samples to the appropriate places.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c7d001465c
commit
80684e9c09
7 changed files with 0 additions and 0 deletions
48
sample/pty/expect_sample.rb
Normal file
48
sample/pty/expect_sample.rb
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#
|
||||
# sample program of expect.rb
|
||||
#
|
||||
# by A. Ito
|
||||
#
|
||||
# This program reports the latest version of ruby interpreter
|
||||
# by connecting to ftp server at ruby-lang.org.
|
||||
#
|
||||
require 'pty'
|
||||
require 'expect'
|
||||
|
||||
fnames = []
|
||||
PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|
|
||||
w_f.sync = true
|
||||
|
||||
$expect_verbose = false
|
||||
|
||||
if !ENV['USER'].nil?
|
||||
username = ENV['USER']
|
||||
elsif !ENV['LOGNAME'].nil?
|
||||
username = ENV['LOGNAME']
|
||||
else
|
||||
username = 'guest'
|
||||
end
|
||||
|
||||
r_f.expect(/^(Name).*: |(word):|> /) do
|
||||
w_f.puts($1 ? "ftp" : $2 ? "#{username}@" : "cd pub/ruby")
|
||||
end
|
||||
r_f.expect("> ") do
|
||||
w_f.print "dir\n"
|
||||
end
|
||||
|
||||
r_f.expect(/[^\-]> /) do |output|
|
||||
for x in output[0].split("\n")
|
||||
if x =~ /(ruby.*?\.tar\.gz)/ then
|
||||
fnames.push $1
|
||||
end
|
||||
end
|
||||
end
|
||||
begin
|
||||
w_f.print "quit\n"
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
print "The latest ruby interpreter is "
|
||||
print fnames.sort.pop
|
||||
print "\n"
|
||||
37
sample/pty/script.rb
Normal file
37
sample/pty/script.rb
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
require 'pty'
|
||||
|
||||
if ARGV.size == 0 then
|
||||
ofile = "typescript"
|
||||
else
|
||||
ofile = ARGV[0]
|
||||
end
|
||||
|
||||
logfile = File.open(ofile,"a")
|
||||
|
||||
system "stty -echo raw lnext ^_"
|
||||
|
||||
PTY.spawn("/bin/csh") do |r_pty,w_pty,pid|
|
||||
|
||||
Thread.new do
|
||||
while true
|
||||
w_pty.print STDIN.getc.chr
|
||||
w_pty.flush
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
while true
|
||||
c = r_pty.sysread(512)
|
||||
break if c.nil?
|
||||
print c
|
||||
STDOUT.flush
|
||||
logfile.print c
|
||||
end
|
||||
rescue
|
||||
# print $@,':',$!,"\n"
|
||||
logfile.close
|
||||
end
|
||||
end
|
||||
|
||||
system "stty echo -raw lnext ^v"
|
||||
|
||||
92
sample/pty/shl.rb
Normal file
92
sample/pty/shl.rb
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
#
|
||||
# old-fashioned 'shl' like program
|
||||
# by A. Ito
|
||||
#
|
||||
# commands:
|
||||
# c creates new shell
|
||||
# C-z suspends shell
|
||||
# p lists all shell
|
||||
# 0,1,... choose shell
|
||||
# q quit
|
||||
|
||||
require 'pty'
|
||||
|
||||
$shells = []
|
||||
$n_shells = 0
|
||||
|
||||
$r_pty = nil
|
||||
$w_pty = nil
|
||||
|
||||
def writer
|
||||
system "stty -echo raw"
|
||||
begin
|
||||
while true
|
||||
c = STDIN.getc
|
||||
if c == 26 then # C-z
|
||||
$reader.raise(nil)
|
||||
return 'Suspend'
|
||||
end
|
||||
$w_pty.print c.chr
|
||||
$w_pty.flush
|
||||
end
|
||||
rescue
|
||||
$reader.raise(nil)
|
||||
return 'Exit'
|
||||
ensure
|
||||
system "stty echo -raw"
|
||||
end
|
||||
end
|
||||
|
||||
$reader = Thread.new {
|
||||
while true
|
||||
begin
|
||||
next if $r_pty.nil?
|
||||
c = $r_pty.getc
|
||||
if c.nil? then
|
||||
Thread.stop
|
||||
end
|
||||
print c.chr
|
||||
STDOUT.flush
|
||||
rescue
|
||||
Thread.stop
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
# $reader.raise(nil)
|
||||
|
||||
|
||||
while true
|
||||
print ">> "
|
||||
STDOUT.flush
|
||||
case gets
|
||||
when /^c/i
|
||||
$shells[$n_shells] = PTY.spawn("/bin/csh")
|
||||
$r_pty,$w_pty = $shells[$n_shells]
|
||||
$n_shells += 1
|
||||
$reader.run
|
||||
if writer == 'Exit'
|
||||
$n_shells -= 1
|
||||
$shells[$n_shells] = nil
|
||||
end
|
||||
when /^p/i
|
||||
for i in 0..$n_shells
|
||||
unless $shells[i].nil?
|
||||
print i,"\n"
|
||||
end
|
||||
end
|
||||
when /^([0-9]+)/
|
||||
n = $1.to_i
|
||||
if $shells[n].nil?
|
||||
print "\##{i} doesn't exist\n"
|
||||
else
|
||||
$r_pty,$w_pty = $shells[n]
|
||||
$reader.run
|
||||
if writer == 'Exit' then
|
||||
$shells[n] = nil
|
||||
end
|
||||
end
|
||||
when /^q/i
|
||||
exit
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue