🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #25

if( kbhit() ) w perlu

#25
From: Piotr Roszatycki
Date: Thu, 09 Jan 1997 19:32
105 lines
2712 bytes
Udalo mi sie :)

Po nieprzespanej nocy mam obsluge klawiatury bez zadnych funkcji ioctl,
fnctl, laczenia perla z C, XS, itd. Czysty perl!
Okazalo sie to strasznie banalne. Zreszta zapodaje sursa, moze sie komus
przyda?

#!/usr/bin/perl
#
# getkey.pl
# (c) 1997 Dexter!dexter@dedal.man.szczecin.pl
#
# wymaga programu "stty"


# &init_getkey
# Przelacza terminal w odpowiedni tryb
#
sub init_getkey {
    $oldstty = `stty -g` || "sane";   # zapamietuje poprzedni stan
terminala
                                      # lub "sane" - standardowe
ustawienia
    system "stty raw -echo";          # wczytuje od teraz bez echa i
znakow kontrolnych
}


# &done_getkey
# Przywraca poprzedni stan terminala
#
sub done_getkey {
    system "stty $oldstty";
}


# &kbhit( strumien )
# Powrot:
#   0 - brak wcisnietych klawiszy, 1 - wcisnieto klawisz
#
sub kbhit {
    local($fd) = shift || fileno(STDIN);
    local($rin) = '';
    vec( $rin, $fd, 1 ) = 1;
    local($nfound) = select( $rin, undef, undef, 0 );
    $nfound;
}


# &getch( strumien )
# Powrot:
#   kod klawisza
#
sub getch {
    local($fd) = shift || fileno(STDIN);
    local($key);
    sysread(STDIN,$key,1);
    $key;
}

1;

---------koniec---------

I oto jak to mozna wykorzystac:

#!/usr/bin/perl

require 'getkey.pl';


$| = 1;                 # musi byc autoflush, by nie buforowal print'y

&init_getkey;

$i = 0;

do {
    if( ++$i >= 100 ) {
        $i = 0;
        print ".";
    }
    if( &kbhit ) {
        $key = &getch;
        print "\r\n$key\r\n";   # bo teraz nie tlumaczy \n na \r\n !
    }
} until( $key eq 'q' );

&done_getkey;

---------koniec---------


No wlasnie, wykorzystuje "stty", i tylko zastanawiam sie, czy jest to na
tyle standardowe narzedzie, ze odpali sie na kazdym systemie...
Sprawdzilem, chodzi na Linux'ie i IRIX'ie. Jesli ktos ma dostep do
innych systemow, prosze o kontakt przez mail'a, jesli cos jest nie tak.

Teraz mozna pokusic sie o "conio.pl" ;)

-- 
Piotr "Dexter" Roszatycki
http://www.szczecin.pl/~dexter
mailto:dexter@dedal.man.szczecin.pl
irc:Dexter#SzczeciN
Technical Details
Message-ID: <32D547D7.5A84@dedal.man.szczecin.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!news.nask.pl!usenet

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!news.nask.pl!usenet
From: Piotr Roszatycki <dexter@dedal.man.szczecin.pl>
Newsgroups: pl.comp.lang.perl
Subject: if( kbhit() ) w perlu
Date: Thu, 09 Jan 1997 20:32:39 +0100
Organization: Public NewsServer at NASK N.O.C.
Lines: 106
Message-ID: <32D547D7.5A84@dedal.man.szczecin.pl>
NNTP-Posting-Host: ppp-srd52.szczecin.tpnet.pl
Mime-Version: 1.0
X-Mailer: Mozilla 3.0Gold (Win95; I)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit