~ubuntu-branches/ubuntu/hardy/ruby1.8/hardy-updates

« back to all changes in this revision

Viewing changes to ext/pty/shl.rb

  • Committer: Bazaar Package Importer
  • Author(s): akira yamada
  • Date: 2007-03-13 22:11:58 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20070313221158-h3oql37brlaf2go2
Tags: 1.8.6-1
* new upstream version, 1.8.6.
* libruby1.8 conflicts with libopenssl-ruby1.8 (< 1.8.6) (closes: #410018)
* changed packaging style to cdbs from dbs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
#  old-fashioned 'shl' like program
 
3
#  by A. Ito
 
4
#
 
5
#  commands:
 
6
#     c        creates new shell
 
7
#     C-z      suspends shell
 
8
#     p        lists all shell
 
9
#     0,1,...  choose shell
 
10
#     q        quit
 
11
 
 
12
require 'pty'
 
13
 
 
14
$shells = []
 
15
$n_shells = 0
 
16
 
 
17
$r_pty = nil
 
18
$w_pty = nil
 
19
 
 
20
def writer
 
21
  system "stty -echo raw"
 
22
  begin
 
23
    while true
 
24
      c = STDIN.getc
 
25
      if c == 26 then # C-z
 
26
        $reader.raise(nil)
 
27
        return 'Suspend'
 
28
      end
 
29
      $w_pty.print c.chr
 
30
      $w_pty.flush
 
31
    end
 
32
  rescue
 
33
    $reader.raise(nil)
 
34
    return 'Exit'
 
35
  ensure
 
36
    system "stty echo -raw"
 
37
  end
 
38
end
 
39
 
 
40
$reader = Thread.new {
 
41
  while true
 
42
    begin
 
43
      next if $r_pty.nil?
 
44
      c = $r_pty.getc
 
45
      if c.nil? then
 
46
        Thread.stop
 
47
      end
 
48
      print c.chr
 
49
      STDOUT.flush
 
50
    rescue
 
51
      Thread.stop
 
52
    end
 
53
  end
 
54
}
 
55
 
 
56
# $reader.raise(nil)
 
57
 
 
58
 
 
59
while true
 
60
  print ">> "
 
61
  STDOUT.flush
 
62
  case gets
 
63
  when /^c/i
 
64
    $shells[$n_shells] = PTY.spawn("/bin/csh")
 
65
    $r_pty,$w_pty = $shells[$n_shells]
 
66
    $n_shells += 1
 
67
    $reader.run
 
68
    if writer == 'Exit'
 
69
      $n_shells -= 1
 
70
      $shells[$n_shells] = nil
 
71
    end
 
72
  when /^p/i
 
73
    for i in 0..$n_shells
 
74
      unless $shells[i].nil?
 
75
        print i,"\n"
 
76
      end
 
77
    end
 
78
  when /^([0-9]+)/
 
79
    n = $1.to_i
 
80
    if $shells[n].nil?
 
81
      print "\##{i} doesn't exist\n"
 
82
    else
 
83
      $r_pty,$w_pty = $shells[n]
 
84
      $reader.run
 
85
      if writer == 'Exit' then
 
86
        $shells[n] = nil
 
87
      end
 
88
    end
 
89
  when /^q/i
 
90
    exit
 
91
  end
 
92
end