Eingabe-Menü am Terminal
Tomasz
- perl
Hallo,
Ich habe im Archiv leider nichts passendes gefunden, vielleicht hat jemand eine Idee für mein Problem(chen).
Ich mache gerade ein Eingabe-Menü in Perl, mit dem Daten in eine DB geschrieben werden. Die Eingabe erfolgt am Terminal.
Dabei nutze ich aus Term::Cap u.a. das getc(STDIN). Diese Funktion stellt das erste Byte der Taste die gedrückt wird zur Verfügung. Es gibt jedoch Tasten die mehr Bytes generieren, z.B. die Pfeiltasten.
Diese restlichen Bytes bleiben irgendwo im Speicher hängen und landen dann z.B. im nächsten Eingabefeld wo sie natürlich ungewollt sind.
Diese Bytes habe ich im folgenden Scritp mit <STDIN> aufgefangen.
Wie sonst könnte man sie auffangen damit sie nicht rumgeistern und auch keine Ausgabe am Bildschirm verursachen?
Danke für jeden Hinweis, und hier das Script.
Tomasz
#!/usr/bin/perl -w
require Term::Cap;
system("clear");
&inikey;
AAAA:
@li = ();
$byte1 = getc(STDIN);
print " nur ENTER drücken";
$rest = <STDIN>;
chomp($rest);
push(@li,$byte1);
$rest = reverse($rest);
while ($rest)
{
push(@li,chop($rest));
}
$i = 1;
for (@li)
{
$x = ord($_);
print "Byte$i=$x ";
$i++;
}
print "\n";
goto AAAA;
sub inikey
{
if ($BSD_STYLE)
{
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else
{
system "stty", '-icanon', 'eol', "\001";
}
}