linux-l: Free Pascal Compiler
Wolfgang Metze
metze at trionet.de
Fr Apr 23 12:09:01 CEST 1999
Hallo Mario!
Mario Thaten schrieb:
> uses crt,dos;
> var extended_code:byte;
>
> {Transparente Eingabeabfrage}
> function BIOSReadkey(var extended:byte):byte;
> var regs:registers;
> label raus;
> begin
> repeat
> regs.ah:=$11;
> intr($16,regs); {nachschauen ob eine Taste gedrückt wurde}
> if (regs.flags and 64)=64 then goto raus; {wenn nicht, dann raus}
> regs.ah:=$10; {ansonsten abholen}
> intr($16,regs);
> extended:=regs.ah;
> BIOSReadkey:=regs.al;
> gotoxy(1,25); write('Ascii: ',regs.al,' Biosflag: ',regs.ah);
> raus:
> until regs.al=13; {Warten auf Return}
>
> begin
> BIOSReadkey(extended_code);
> end.
>
Als ich den Code gesehen habe, hats mich glatt umgehauen! Nicht böse sein: Aber wer
Goto-Anweisungen in einer strukturierten Programmiersprache wie Pascal verwendet,
sollte sich mal gedanken über seine Struktur machen.
So wäre es besser:
function BIOSReadkey(var extended:byte):byte;
var regs:registers;
fertig:Boolean;
BEGIN
fertig:=False;
REPEAT
regs.ah:=$11;
intr($16,regs); {nachschauen ob eine Taste gedrückt wurde}
if (regs.flags and 64)=64 then
fertig:=True
ELSE
BEGIN
regs.ah:=$10; {ansonsten abholen}
intr($16,regs);
extended:=regs.ah;
BIOSReadkey:=regs.al;
fertig:= regs.al=13;
gotoxy(1,25); write('Ascii: ',regs.al,' Biosflag: ',regs.ah);
END;
UNTIL Fertig;
END;
Das gefällt mir schon besser, ist aber immer noch nicht sehr elegant.
>
> Das funktioniert unter Dos hervorragend. Nun dachte ich, daß bis $1A die
> Register bei Linux dieselben wie bei Dos sind. Aber offensichtlich habe
> ich mich geirrt, denn er gibt mir nach dem Programmstart dauerhaft
> "regs.al=0; regs.ah=16" aus, obwohl keine Taste gedrückt wurde und er
> dort gar nicht ankommen dürfte. Ebensowenig reagiert er aber, wenn ich
> nun wirklich mal eine Taste drücke.
> Könnt Ihr mir da bitte nochmal helfen?
>
Hast Du schon mal die HTML-Dokumentation zu der Unit DOS gelesen? Habe Linux im Moment
nicht am Laufen,sonst würde ich nachsehen.
Gruß
Wolfgang
Mehr Informationen über die Mailingliste linux-l