[#66079] gc_sweep(): unknown data type 48 — Mauricio Fern疣dez <batsman.geo@...>

15 messages 2003/03/01
[#66082] Re: [BUG] gc_sweep(): unknown data type 48 — nobu.nokada@... 2003/03/01

Hi,

[#66085] Re: [BUG] gc_sweep(): unknown data type 48 — Mauricio Fern疣dez <batsman.geo@...> 2003/03/01

On Sat, Mar 01, 2003 at 07:26:58PM +0900, nobu.nokada@softhome.net wrote:

[#66088] Anything like Class::DBI from Perl — pw-googlegroups@... (Peter Wilkinson)

We've been doing some work using Class::DBI in Perl which makes access

17 messages 2003/03/01

[#66217] Prolly a simple question — <ghost-no-spam@...>

Sorry if these questions have come up before, but google searching hasn't

20 messages 2003/03/03

[#66245] TCPSocket delay problem — Seth Kurtzberg <seth@...>

Matz,

23 messages 2003/03/04

[#66269] OSCON — ptkwt@...1.aracnet.com (Phil Tomson)

For those coming to OSCON this year...

18 messages 2003/03/04

[#66315] system command expansion after PTY.spawn — Christian von Mueffling <cvm@...>

Hi!

13 messages 2003/03/05

[#66330] cookies in eruby mod_ruby — Daniel Bretoi <lists@...>

Can someone explain how to set/delete cookies using mod_ruby (eruby)?

13 messages 2003/03/06

[#66332] Russian Ruby resource and Ruby Course — leikind@... (Yuri Leikind)

Hi all,

19 messages 2003/03/06

[#66392] DRB and threads — Brian Candler <B.Candler@...>

I wonder if anyone can give me some hints on the interactions between dRuby

22 messages 2003/03/06
[#66417] Re: DRB and threads — "Robert Klemme" <bob.news@...> 2003/03/07

[#66421] Re: DRB and threads — Brian Candler <B.Candler@...> 2003/03/07

On Fri, Mar 07, 2003 at 07:15:29PM +0900, Robert Klemme wrote:

[#66449] Re: DRB and threads — ahoward <ahoward@...> 2003/03/08

On Fri, 7 Mar 2003, Brian Candler wrote:

[#66454] Re: DRB and threads — Brian Candler <B.Candler@...> 2003/03/08

On Sat, Mar 08, 2003 at 11:38:31AM +0900, ahoward wrote:

[#66440] Solving the 'strange language' documentation problem — "Josef 'Jupp' Schugt" <jupp@...>

Dear Rubyists,

18 messages 2003/03/07

[#66466] I'm to give short talk on ruby at work, anybody have material/outlines they can donate/ — Sam Roberts <sroberts@...>

10 messages 2003/03/08

[#66469] What character sets are available in Ruby ? — peterjohannsen@... (pj)

There is a Ruby FAQ which I read that said that Ruby only supports

17 messages 2003/03/08

[#66522] Thinking of learning Ruby — "anonimous" <n.thomp@...>

I have abour 3 or 4 years experience with Linux, and about 2 years

45 messages 2003/03/10

[#66530] Protocols — "Ray Capozzi" <Ray_Capozzi@...>

Is there a preferred set of ruby libraries for client/server solutions? As

26 messages 2003/03/10
[#66533] Re: Protocols — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/03/10

[#66548] Re: Protocols — <jbritt@...> 2003/03/10

> "Ray Capozzi" <Ray_Capozzi@hotmail.com> wrote in message

[#66633] Threads and DRb — "Hal E. Fulton" <hal9000@...>

I changed the title here because this is not

16 messages 2003/03/10

[#66805] Ruby newbie uninstall question? — "Colin Coates" <colin@...>

Hello Everyone,

12 messages 2003/03/12

[#66850] Ruby / Eiffel ? — <cailloux@...>

Hello evry body

23 messages 2003/03/13

[#66906] Syck 0.08 -- Next-generation of YAML.rb — why the lucky stiff <yaml-core@...>

citizens,

21 messages 2003/03/14
[#66931] Re: [ANN] Syck 0.08 -- Next-generation of YAML.rb — Richard Kilmer <rich@...> 2003/03/14

Works great under OS X and Ruby 1.8!

[#66927] dynamically create a method — Rudolf Polzer <abuse@...>

Is there a possiblilty to dynamically create a method, like this?

14 messages 2003/03/14

[#66974] The onion truck strikes again ... Announcing rake — Jim Weirich <jweirich@...>

Ok, let me state from the beginning that I never intended to write this

25 messages 2003/03/15

[#67013] ANN: vcard 0.1 - a vCard decoding library — Sam Roberts <sroberts@...>

http://raa.ruby-lang.org/list.rhtml?name=vcard

10 messages 2003/03/15

[#67071] How do I get irb to use readline, (with OS X)? — Sam Roberts <sroberts@...>

I'm sure I saw something about this somewhere, but I've been searching,

12 messages 2003/03/16

[#67074] ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...>

28 messages 2003/03/16
[#67109] Re: ANN: Madeleine 0.1 — Brian Candler <B.Candler@...> 2003/03/17

On Mon, Mar 17, 2003 at 07:00:35AM +0900, Anders Bengtsson wrote:

[#67115] Re: ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...> 2003/03/17

--- Brian Candler <B.Candler@pobox.com> skrev:

[#67124] Re: ANN: Madeleine 0.1 — Brian Candler <B.Candler@...> 2003/03/17

On Mon, Mar 17, 2003 at 11:37:56PM +0900, Anders Bengtsson wrote:

[#67128] Re: ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...> 2003/03/17

--- Brian Candler <B.Candler@pobox.com> wrote:

[#67222] OT: XML too hard (YAML opportunity?) — ptkwt@...1.aracnet.com (Phil Tomson)

On /. today there is a discussion about a weblog entry by an XML

27 messages 2003/03/18
[#67239] Re: XML too hard (YAML opportunity?) — <jbritt@...> 2003/03/19

> On /. today there is a discussion about a weblog entry by an XML

[#67302] Frequency of announcements — "Josef 'Jupp' Schugt" <jupp@...>

Hi!

14 messages 2003/03/19

[#67304] Strong advantages over Python — Greg McIntyre <greg@...>

Hi lovely Ruby people,

111 messages 2003/03/20
[#67408] Re: Strong advantages over Python — Greg McIntyre <greg@...> 2003/03/21

Good list. Amalgamated with http://www.ruby-lang.org/en/whats.html, it

[#67416] Re: Strong advantages over Python — Paul Prescod <paul@...> 2003/03/21

Greg McIntyre wrote:

[#67663] Ruby lecture slides (was Strong advantages over Python) — Greg McIntyre <greg@...> 2003/03/23

Thanks to all of you who answered and cleared up some of my perceptions

[#67675] Re: Ruby lecture slides (was Strong advantages over Python) — Paul Prescod <paul@...> 2003/03/23

Greg McIntyre wrote:

[#67685] Re: Ruby lecture slides (was Strong advantages over Python) — Mark Wilson <mwilson13@...> 2003/03/24

[#67697] Re: Ruby lecture slides (was Strong advantages over Python) — Greg McIntyre <greg@...> 2003/03/24

Mark Wilson <mwilson13@cox.net> wrote:

[#67346] class level Exception handling — Xiangrong Fang <xrfang@...>

Hi

12 messages 2003/03/20

[#67366] Newbie question: 9/5=1 ? — Thomas Jollans <nospam@...>

while learning ruby i wanted to program a simple fahrenheit to celsius

16 messages 2003/03/20

[#67387] Ruby tutorial download — Daniel Carrera <dcarrera@...>

Someone asked that I make the ruby tutorial available for download,

13 messages 2003/03/20

[#67415] Proposal: new operator: '<-' (for assignments) — ptkwt@...1.aracnet.com (Phil Tomson)

15 messages 2003/03/21

[#67446] Ruby & LaTeX — Walter Cazzola <cazzola@...>

Dear Ruby Experts,

19 messages 2003/03/21

[#67514] Rake problem? — manfred.lotz@... (Manfred)

Hi,

15 messages 2003/03/21

[#67546] Expression results — debitsch@... (Rasmus)

Hello,

22 messages 2003/03/21
[#67549] Re: Expression results — "Hal E. Fulton" <hal9000@...> 2003/03/21

----- Original Message -----

[#67634] exiting a loop — Daniel Carrera <dcarrera@...>

Hello,

31 messages 2003/03/23

[#67711] Iterate over two lists in parallel — Gavin Sinclair <gsinclair@...>

On Monday, March 24, 2003, 1:54:53 PM, Julian wrote:

33 messages 2003/03/24

[#67915] Conditionally make a method private? — Jeremy <thinker5555@...>

Hello again!

13 messages 2003/03/26

[#67961] What are the differences between Ruby's blocks and Python's lambdas? — sdieselil@... (sdieselil)

See subject.

22 messages 2003/03/26
[#67966] Re: What are the differences between Ruby's blocks and Python's lambdas? — "Chris Pine" <nemo@...> 2003/03/26

As was mentioned, Ruby has lambdas, but they are commonly called "procs".

[#67967] Re: What are the differences between Ruby's blocks and Python's lambdas? — Mauricio Fern疣dez <batsman.geo@...> 2003/03/26

On Thu, Mar 27, 2003 at 12:50:04AM +0900, Chris Pine wrote:

[#67975] Re: What are the differences between Ruby's blocks and Python's lambdas? — Paul Brannan <pbrannan@...> 2003/03/26

On Thu, Mar 27, 2003 at 01:01:25AM +0900, Mauricio Fern疣dez wrote:

[#67983] Re: What are the differences between Ruby's blocks and Python's lambdas? — Mauricio Fern疣dez <batsman.geo@...> 2003/03/26

On Thu, Mar 27, 2003 at 02:20:48AM +0900, Paul Brannan wrote:

[#67986] Re: What are the differences between Ruby's blocks and Python's lambdas? — Paul Brannan <pbrannan@...> 2003/03/26

On Thu, Mar 27, 2003 at 04:40:40AM +0900, Mauricio Fern疣dez wrote:

[#68082] Array question — walter@...

Any one know why Array.join can't take a code block and join that

28 messages 2003/03/27

[#68198] Announce: RHDL-0.4.2 (Ruby HDL) an agile HDL — ptkwt@...1.aracnet.com (Phil Tomson)

RHDL 0.4.2 is now available at:

12 messages 2003/03/29

[#68199] Ruby 1.6.8 vs Ruby 1.8.0 preview 2 - benchmarks — djberg96@... (Daniel Berger)

Hi all,

11 messages 2003/03/29

[#68201] Weighted random selection -- how would you do this? — "Hal E. Fulton" <hal9000@...>

Here's a little question for you.

24 messages 2003/03/29

[#68254] Saving code written during an irb session — Bil Kleb <W.L.Kleb@...>

OK, so I admit: I'm stupid. How do I save the code I've generated

19 messages 2003/03/30

[#68271] Hard coded newline characters — David King Landrith <dave@...>

There are a surprising number of ruby source files that have newline

24 messages 2003/03/30
[#68286] Re: Hard coded newline characters — nobu.nokada@... 2003/03/31

Hi,

[#68328] Re: Hard coded newline characters — David King Landrith <dave@...> 2003/03/31

On Sunday, March 30, 2003, at 08:06 PM, nobu.nokada@softhome.net wrote:

[#68318] syntax highlighting problem in vim — "Josef 'Jupp' Schugt" <jupp@...>

Hi!

16 messages 2003/03/31
[#68325] Re: syntax highlighting problem in vim — KONTRA Gergely <kgergely@...> 2003/03/31

Negative. It is correct for me. How is it displayed at you?

Expect.rb -- possible patch...

From: Hugh Sasse Staff Elec Eng <hgs@...>
Date: 2003-03-03 18:39:22 UTC
List: ruby-talk #66218
I have been wanting to use Ruby for expect-like applications, but
have had some difficulties because of wanting more facilities.  I
have managed to modify expect.rb, from the
.../ruby-1.8.0/ext/pty/lib/expect.rb
to do what I want, and would like to tentatively suggest the
following patch.  It needs much more testing, and is still "wet
paint" though it seems to do what I want.

So, what did I want?
 * I wanted to be able to look for several patterns at the same time,
   and respond accordingly.

 * I wanted to be able to repeat the cycle of looking for things,
   i.e. exp_continue (in Don Libes' expect.

 * I wanted to specify the order in which patterns were tested for
   matching.

 * respond to a timeout, should that occur

I seem to have achieved these goals.  I also wanted:
 * To be able to detect an EOF and respond accordingly

 * To implement interact, so the program could drive the remote
   system up to a point, then call on the user to drive it from
   thereon
I have not achieved these goals, but cannot work on them now, for a
while at least.

The patch is this (I'm using the =begin...=end delimiters for
familiarity and therefore clarity, since they are not used in the
code) :

=begin patch
--- expect.rb.orig	2002-08-13 07:07:08.000000000 +0100
+++ expect.rb	2003-03-03 17:15:47.000008000 +0000
@@ -1,36 +1,149 @@
 $expect_verbose = false

+# A class for holding the ordered list of pattern action pairs, like
+# those used by Don Libes' Expect program.  Because they are
+# ordered, a Hash cannot be used.
+#
+# <NOTE> it may be worth adding assoc and rassoc methods to this
+# class simply because of the structure of the instructions, but at
+# the moment I can see no utiltity for this.</NOTE>
+class ExpectInstructions
+
+  def initialize(*params)
+    @timeout = false
+    @instructions = Array.new
+    add_params(params)
+    $stderr.puts "@instructions = #{@instructions.inspect}"
+  end
+
+  # turn the supplied parameters into instructions.  The parameters
+  # are a list of pattern, action pairs. Actions must be Proc
+  # objects (because you can't just add a block to an array.
+  # Patterns will be Strings, Regexps, or the Symbol :TIMEOUT.
+  # <NOTE> The symbol :EOF may be added later</NOTE>
+  # It is thus possible to detect if an action has been missed  out,
+  # in which case the pattern will just be detected with no actual
+  # work being done.
+  def add_params(*params)
+    params.flatten!
+    # make all the patterns into regexp
+    params.each_with_index { |param,i|
+      case param
+      when String
+        params[i] = Regexp.new(Regexp.quote(param))
+      end
+    }
+    i = 0
+    while i < params.size
+      case params[i]
+      when Regexp, Symbol
+        pattern = params[i]
+        i += 1
+        case params[i]
+        when Proc
+          action = params[i]
+          i += 1
+        else
+          action = nil
+        end
+      end
+      @instructions.push [pattern, action]
+    end
+    # instructions is now an ordered list of pattern, (action|nil)
+    $stderr.puts "@instructions = #{@instructions.inspect}"
+  end
+
+  def each(&block)
+    @instructions.each(&block)
+  end
+
+  def each_pair
+    @instructions.each { |pair|
+      yield pair[0], pair[1]
+    }
+  end
+
+  def has_pattern?(pat)
+    @instructions.assoc(pat)
+  end
+
+  def [](value)
+    @instructions.assoc(value)[1]
+  end
+
+end
+
 class IO
   def expect(pat,timeout=9999999)
-    buf = ''
-    case pat
-    when String
-      e_pat = Regexp.new(Regexp.quote(pat))
-    when Regexp
-      e_pat = pat
-    end
-    while true
-      if IO.select([self],nil,nil,timeout).nil? then
-        result = nil
-        break
-      end
-      c = getc.chr
-      buf << c
-      if $expect_verbose
-        STDOUT.print c
-        STDOUT.flush
+    instructions = false # till we figure out otherwise
+    result = nil
+    begin
+      @exp_continue = false
+      buf = ''
+      $stderr.puts "buf cleared"
+      case pat
+      when ExpectInstructions #of [pattern, block,...] form
+        instructions = true
+      when String
+        e_pat = Regexp.new(Regexp.quote(pat))
+      when Regexp
+        e_pat = pat
       end
-      if mat=e_pat.match(buf) then
-        result = [buf,*mat.to_a[1..-1]]
-        break
+      $stderr.puts "start of catch block"
+      catch (:block_called) do
+        while true
+          if IO.select([self],nil,nil,timeout).nil? then
+            result = nil
+            if instructions
+              if pat.has_pattern?(:TIMEOUT)
+                pat[:TIMEOUT].call()
+              end
+            elsif pat =~ /^TIMEOUT$/ or pat == :TIMEOUT
+              if block_given?
+                yield
+              end
+            end
+            throw :block_called
+          end
+          c = getc.chr
+          buf << c
+          if $expect_verbose
+            STDOUT.print c
+            STDOUT.flush
+          end
+          if instructions
+            pat.each_pair { |pattern, aproc|
+              # $stderr.puts "pattern is #{pattern.inspect}"
+              if mat=pattern.match(buf) then
+                $stderr.puts "matched '#{buf}'"
+                result = [buf,*mat.to_a[1..-1]]
+                aproc.call(result)
+                throw :block_called
+              end
+            }
+          else
+            if mat=e_pat.match(buf) then
+              result = [buf,*mat.to_a[1..-1]]
+              throw :block_called
+            end
+          end # end if instructions...else...
+        end # end while true
+      end # end catch (:block_done)
+      $stderr.puts "end of catch block"
+      unless instructions
+        if block_given? then
+          yield result
+        else
+          return result
+        end
       end
-    end
-    if block_given? then
-      yield result
-    else
-      return result
-    end
+      $stderr.puts "near end of while @exp_continue"
+    end while @exp_continue
     nil
   end
+  def exp_continue
+    @exp_continue = true
+    $stderr.puts "exp_continue called"
+  end
 end

=end patch

I needed some way to test this, so wrote

=begin try_expect.rb
#!/usr/local/bin/ruby -w

require "pty"
load "./expect.rb"

count = 0
$expect_verbose = true
PTY.spawn("ruby -r debug simple.rb") { |rd, wrt, pid|
     wrt.sync = true
     ins = ExpectInstructions.new(/[\r\n]([^:]+:[^:]+):([^\r\n]*)[\r\n]$/, Proc.new {|r|
                                 r.shift
                                 location, string = r
                                 count += 1
                                 puts "location is {#{location}}"
                                 puts "string is {#{string}}"
                                 if string =~ /(\S+) ?[+*-]?=[^=]/
                                     puts "at #{location}, #{$1} is assigned"
                                 end
                                 rd.exp_continue unless count > 10
                              })
     ins.add_params(/\(rdb:1\)/, Proc.new {|x| wrt.puts "s"; rd.exp_continue})
     ins.add_params("Emacs support available.", Proc.new {|x|  rd.exp_continue})
     rd.expect(ins)
     rd.expect("(rdb:1)")
     $stderr.puts "old style expect(string) done"
     wrt.puts "s"
     rd.expect(/\(rdb\:1\)/)
     $stderr.puts "old style expect(regexp) done"
     wrt.puts "s"
     $stderr.puts Time.now
     rd.expect("TIMEOUT",10)
     $stderr.puts Time.now
     $stderr.puts "Got timeout"
     rd.expect(:TIMEOUT,10)
     $stderr.puts Time.now
     $stderr.puts "Got timeout"

}
=end try_expect.rb

which drives this trivial script:

=begin simple.rb
#!/usr/local/bin/ruby -w
#
#

$X = 5
x = 0
while 1
   x += 1
   sleep 3
end
=end simple.rb


Since the changes proposed at
http://www.rubygarden.org/ruby?RExpect
do not seem to have been integrated into 1.8.0 I have not attempted
to add any of them.  If expect.rb is to be examinined in the light
of this post, it may well be worth considering those while "the lid
is off".

The tests would be more rigorous, but I needed to get this to
a stage where I could use it for another task, which has to have
priority right now.  So if this patch is received favourably I will
try to tighten up the tests before it is actually accepted.  Think
of it as a discussion document for now.

I actually ran the tests using
ruby 1.6.7 (2002-03-01) [sparc-solaris2.9]
because the only difference between 1.6.x and 1.8.x was
  result = [buf,*mat.to_a[1..-1]]
replacing
  result = [buf,$1,$2,$3,$4,$5,$6,$7,$8,$9]
demonstrating that compatibility is not really an issue
so if this is accepted it could be backported if desired.

        HTH
        Hugh


In This Thread

Prev Next