From: John Joyce Date: 2008-01-18T10:05:55+09:00 Subject: Re: Quit, if a specific key is hit On Jan 17, 2008, at 7:28 AM, James Gray wrote: > On Jan 16, 2008, at 11:43 PM, Pavankumar Kulkarni wrote: > >> Excuse me, if this is already discussed... but from from here >> > learning-a-new-programming-language/>.. the author concludes that >> the following problem cannot be solved.. whats the reason? >> "Display series of numbers (1,2,3,4, 5....etc) in an infinite >> loop. The program should quit if someone hits a specific key (Say >> ESCAPE key)." > > It can definitely be solved. Here's a solution that works on most > Unix-like operating systems, for example: > > #!/usr/bin/env ruby -wKU > > require "io/wait" > > state = `stty -g` > begin > system "stty raw -echo cbreak isig" > > 1.upto(1.0/0.0) do |n| > puts n > exit if $stdin.ready? and $stdin.getc == 27 > end > > ensure > system "stty #{state}" > end > > __END__ > > What the author actually said was that it can't solve it without > writing some platform specific code or threads. I don't know how > to do it without using one of those tricks either. > > The reason is that all terminals are different and you are needing > to interact with it on two levels at once (reading while writing). > This is what introduces the need for the platform specific code. > > James Edward Gray II > > In many of the game libraries, input for different platforms is addressed. This one of those cases where the game libraries, such as Gosu or rubygame, or Ruby/SDL are going to be very useful for a non game. most game libs have a very fundamental need for input control, and a pretty important need for crossplatform code abstraction. You don't need to know much about them, just enough to get the keys under your control! But the plus is, you can also get a GUI up without much work.