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