Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#12

Re: noch'n BF Interpreter

  Alt 25. Jan 2010, 08:14
Hab zwar noch keine Funktion gefunden, welche prüft, ob umgeleitet wurde, aber FlushConsoleInputBuffer funktioniert bei einer Datei nicht, also würden da auch keine Zeichen verloren gehn,
allerdings funktioniert ReadConsoleInput auch nicht und er ließt keine Zeichen ein = Endlosschleife.

Jedenfalls scheint dieses nun in beiden Fällen zu laufen.
Delphi-Quellcode:
var H: THandle;
  CI: TInputRecord;
  isRedirected: Boolean;
  i: Integer;
  C: Char;

begin
  // initialisieren
  H := GetStdHandle(STD_INPUT_HANDLE);
  isRedirected := not FlushConsoleInputBuffer(H);

  while true do begin

    // abfragen
    if isRedirected then begin
      if EOF then begin
        {dateiende erreicht}
        //C := #0;
        break;
      end else Read(C);
    end else begin
      CI.EventType := KEY_EVENT;
      repeat
      until ReadConsoleInput(H, CI, 1, Cardinal(i)) and (i = 1)
        and (CI.Event.KeyEvent.bKeyDown) and (CI.Event.KeyEvent.AsciiChar <> #0);
      C := CI.Event.KeyEvent.AsciiChar;
      FlushConsoleInputBuffer(H);
    end;

    write(C);
    sleep(50);

  end;
Hier wird mal mit Break abgebrochen, aber dem BF-Programm übergebe ich eine #0, welche dann das Dateiende signalisiert.

Allerdings dachte ich immer Read ließt nur das ein, welches man verlangt und ohne ein Enter zu fordern, so wie es auch bei einer Dateieingabe geschieht
und nur ReadLn verlangt das Enter.
Nja, hatte es aber auch noch nie so bei einer Konsoleneingabe verwendet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat