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