--------------------------------Linux Guide---------------------------------- by Ingo Blechschmidt (c) 2002 ----------------------------------------------------------------------------- ------------------------- 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 lesen soll, ohne dass der Benutzer mit bestätigen muss. ----------------------------------------------------------------------------- Folgender Code hilft: --------CODE--------: 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); } } } --------/CODE-------- Benutzt werden kann das Programm dann wiefolgt: --------CODE--------: 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 --------/CODE-------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- This document is distributed under the terms of the GNU Free Documentation License.