Tux L i n u x * G u i d e

v o n * I n g o * B l e c h s c h m i d t * ( c ) * 2 0 0 1
Tux
|Home|

|Neue Artikel|

|Index|

|Liste|

|Code-Snippets|

|Links|

|Allgemeines|

|Cool Stuff|
Term::Cap in Perl
Sam Jun 23 10:51:57 MEST 2001
Term Cap Term::Cap getc Trick perl

Sie wollen ein Perl-Programm schreiben, welches die Position des Cursors verändern können soll und einzelne Buchstaben von <STDIN> lesen soll, ohne dass der Benutzer mit <CR> bestätigen muss.

LinuxGuide Druckbare Version
Man-Page
Sourcecode
Verwandte Artikel:

Perl-Sicherheitslücken decken
Große Buchstaben für die Konsole
Operationen mit Dateien in Perl
CSV2HTML
Entropie
Perl-Präprozessor
Farbverlauf mit Perl
Sichere Passwörter generieren



      .~.   
      /V\   
     // \\  
    /(   )\ 
     ^`~'^  
     


Hosted at Sorceforge.net
No ePATENTS
Viewable With Any Browser
Burn All GIFs!

F
olgender Code hilft:
# Beispiel für eine Term::Cap-Benutzung
 
require Term::Cap;                                     ### Die Term::Cap wird
require POSIX;                                         ### initialisiert
my $termios = new POSIX::Termios;
$termios->getattr;
my $ospeed = $termios->getospeed;
    # Old-style ioctl code to get ospeed:
    #     require 'ioctl.pl';
    #     ioctl(TTY,$TIOCGETP,$sgtty);
    #     ($ispeed,$ospeed) = unpack('cc',$sgtty);
$terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
$terminal->Trequire(qw/ce ku kd/);

sub inikey {                                           ### Sub für getc
  if ($BSD_STYLE) {
    system "stty cbreak /dev/tty 2>&1";
  } else {
    system "stty", '-icanon', 'eol', "\001";
  }
}

sub endkey {                                           ### Hebt inikey's
  if ($BSD_STYLE) {                                    ### Wirkung wieder auf
    system "stty -cbreak /dev/tty 2>&1";
  } else {
    system "stty", 'icanon', 'eol', '^@'; # ASCII null
  }
  print "\n";
}

sub getkey {                                           ### Bloßes getc
  getc(STDIN);
}

sub pufkey {                                           ### getc - aber diesmal
  until (getkey) {}                                    ### wird abgewartet, bis
}                                                      ### der Nutzer
                                                       ### gedrückt hat

sub draw {}                                            ### Dummy für das
                                                       ### rekursive Aufrufen

sub draw {                                             ### Das verbesserte
  my ($mxko, $myko, $mch) = (shift, shift, shift);     ### print
  if (length($mch) == 1) {
    print $terminal->Tgoto('cm', $mxko, $myko, $FH);
    print $terminal->Tpad($mch, 1, $FH);
    # Für's Spiele programmieren folgende Zeile auskommentieren:
    # print $terminal->Tgoto('cm', $mxko, $myko, $FH);
  } elsif (length($mch) > 1) {
    for($i = 0; $i <= length($mch); $i++) {
      draw $mxko + $i, $myko, substr($mch, $i, 1);
    }
  }
}
 
 

Benutzt werden kann das Programm dann wiefolgt:
# Benutuzng
 
inikey;                                                ### Initialisierung

$key = pufkey;                                         ### Einen Tastendruck
                                                       ### abfragen
						       
draw 5, 5, "#";                                        ### Fünf Zeichen von
                                                       ### oben und von links
						       ### ein # zeichnen

endkey;                                                ### Prompt wieder
                                                       ### benutzbar machen
 
 

Document Informations: Content-Type: text/html; charset=iso-8859-1
Author: Ingo Blechschmidt
Description: LinuxGuide - Sie wollen ein Perl-Programm schreiben, welches die Position des Cursors verändern können soll und einzelne Buchstaben von <STDIN> lesen soll, ohne dass der Benutzer mit <CR> bestätigen muss.
Keywords: Term, Cap, Term::Cap, getc, Trick, perl, LinuxGuide
Robots: all
Copyright: Copyright (C) 2002 by Ingo Blechschmidt
Date: 2003-06-23T10:51:57+02:00

Stichwortverzeichnis | Neue Artikel | Übersicht | Codesnippets | Links | Copyright | Cool Stuff | Home | Druckbare Version | Manpage | Sourcecode |
Diesen Artikel kritisieren, kommentieren oder ergänzen
Einen Neuen Artikel schreiben

 
This website is distributed under the GNU Free Documentation License .