Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von alfware17 »

... und wenn ja, ist es schwer, eine Anwendung so zu schreiben, daß sie von Free Pascal für 32/64 bit in Windows und Linux ebenso verstanden wird wie von Free Pascal für 16 bit?
Ich habe einige Anwendungen so geschrieben, daß sie genau das mit bedingter Compilierung schaffen, manche Sprachkonstrukte kann ich eben bei 16 bit nicht verwenden und andere sind wiederum bei 32 bit doof oder bei Linux. Also ich habe das was. Nur compiliert mir das für für 16 bit das originale Turbo-Pascal 7.0 welches ich virtuell im MS-DOS bzw auch in Windows XP (beides in Virtualbox) laufen habe.

Jetzt hatte ich wieder so eine Idee - es geht konkret um Readln/Writeln auf input/output oder auf file. Ich habe mal ein Testprogramm angehängt, wo nur das Prinzip zu sehen ist.
Leider lehnt mir Turbo-Pascal als einziges nur die Zuweisung der Text-Variablen

Code: Alles auswählen

var eingabe: text;
begin
eingabe:=input;
end.
ab und damit fällt meine Idee. Die ich übrigens vor 10 Jahren schon mal verfolgt hatte und wie ich jetzt nachvollziehe (aber mich nicht erinnere wegen Alzheimer) verwerfen mußte und umschreiben

Code: Alles auswählen

procedure ausgabe(datei:text);
begin
    writeln(datei, 'Hugo');
end;
und die kann ich dann aufrufen mit

Code: Alles auswählen

ausgabe(input)
oder

Code: Alles auswählen

ausgabe(feste_datei)
abhängig von einem Schalter und da mault Turbo-Pascal nicht.

Nur wollte ich es etwas eleganter und kürzer haben, die Abfrage des Schalters ist mir zu oft (sowohl beim ausgabe-Aufruf als auch noch diverse Male bei readln und writeln auf Dateien oder input/output. Zur Erklärung, das Programm soll auch im Pipelining Modus in Scripts arbeiten.

Nun hatte ich die Idee, Free Pascal 16 Bit zu nehmen. Eine Frage an die Spezialisten: versteht das auch nur die Turbo-Pascal Syntax oder kann ich alle Sprachkonstrukte verwenden?
Nur einfaches Pascal, keine OO, jedenfalls nicht an der Stelle. Und wie compiliert man das? Hat jemand ein einfaches Beispiel? Laufen lassen unter Win XP? Oder muß es unter Win 7-11 sein?

Hoffe habe mein Anliegen deutlich machen können. Und hier mein Beispiel. Den DOS-Schalter setze ich über eine Unit und/oder beim Compiler-Aufruf für WIndows/Linux/DOS.... Natürlich komfortabler im richtigen Programm, das hier ist nur ein Test

Code: Alles auswählen

program FileMix;
var eingabe, ausgabe, protokoll: text;
    einname, ausname, zeile: string;
    einzahl, auszahl: longint;
    einpipe, auspipe: boolean;

procedure hilfe;
begin 
   writeln(protokoll, 'dateien eingabe.txt ausgabe.txt');
   close(protokoll); halt;
end;

procedure open_eingabe;
begin
   if einpipe 
      then begin
         einname:='input';
         {$IFNDEF DOS} eingabe:=input; {$ENDIF}
      end
      else begin
         assign(eingabe, einname); {$i-} reset(eingabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Open Eingabedatei ' + einname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Eingabe: ' + einname); 
end;

procedure close_eingabe;
begin
   if einpipe 
      then einname:='input'
      else begin
         {$i-} close(eingabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Close Eingabedatei ' + einname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Eingabe: ', einzahl, ' Zeilen'); 
end;

procedure open_ausgabe;
begin
   if auspipe 
      then begin
         ausname:='output';
         {$IFNDEF DOS} ausgabe:=output; {$ENDIF}
      end
      else begin
         assign(ausgabe, ausname); {$i-} rewrite(ausgabe); {$i+}
         if ioresult<>0 then begin 
             writeln(protokoll, 'Fehler Open Ausgabedatei ' + ausname); hilfe;
         end;
      end;
   writeln(protokoll, 'Ausgabe: ' + ausname); 
end;

procedure close_ausgabe;
begin
   if auspipe 
      then ausname:='output'
      else begin
         {$i-} close(ausgabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Close Ausgabedatei ' + ausname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Ausgabe: ', auszahl, ' Zeilen'); 
end;

function myeof: boolean;
begin
   {$IFDEF DOS} 
   if einpipe 
      then myeof:=eof 
      else {$ENDIF} myeof:=eof(eingabe);
end;

function myreadln: string;
var myzeile: string;
begin
   {$IFDEF DOS} if einpipe
      then readln(myzeile)
      else {$ENDIF} readln(eingabe, myzeile);
   inc(einzahl);
   myreadln:=myzeile;
end;

procedure mywriteln(myzeile: string);
begin
   {$IFDEF DOS} if auspipe
      then writeln(myzeile)
      else {$ENDIF} writeln(ausgabe, myzeile);
   inc(auszahl);
end;


begin
   einzahl:=0; auszahl:=0; einpipe:=false; auspipe:=false;
   assign(protokoll, 'protokoll.txt'); rewrite(protokoll);
   if paramstr(1)<>'' 
      then einname:=paramstr(1) 
      else einpipe:=true;
   if paramstr(2)<>'' 
      then ausname:=paramstr(2) 
      else auspipe:=true;
   open_eingabe; 
   open_ausgabe;

   zeile:=myreadln;
   while not myeof do begin
      mywriteln(zeile);
      zeile:=myreadln;
   end;
   mywriteln(zeile);

   close_eingabe;
   close_ausgabe;
   close(protokoll);
end.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von PascalDragon »

alfware17 hat geschrieben:
Mi 31. Mai 2023, 20:07
Nun hatte ich die Idee, Free Pascal 16 Bit zu nehmen. Eine Frage an die Spezialisten: versteht das auch nur die Turbo-Pascal Syntax oder kann ich alle Sprachkonstrukte verwenden?
Der Compiler unterstützt alle Sprachfeatures, je nach Größe des verfügbaren Speichers kann es jedoch sein, dass man manche Features nicht unbedingt nutzen kann. Noch dazu kommt die Wahl des jeweiligen Speichermodells (wie die Segmente konfiguriert werden).
alfware17 hat geschrieben:
Mi 31. Mai 2023, 20:07
Nur einfaches Pascal, keine OO, jedenfalls nicht an der Stelle. Und wie compiliert man das? Hat jemand ein einfaches Beispiel? Laufen lassen unter Win XP? Oder muß es unter Win 7-11 sein?
Schau dir zum Bauen die Informationen im Wiki an, allerdings haben wir glaub ich auch ein Binary Release von 3.2 für Windows (unter anderem). Auch mit dem Binary Release musst du dein gewünschtes Speichermodell beim Kompilieren auswählen (wie auf der Wikiseite erwähnt).
FPC Compiler Entwickler

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von Mathias »

. Nur compiliert mir das für für 16 bit das originale Turbo-Pascal 7.0 welches ich virtuell im MS-DOS bzw auch in Windows XP (beides in Virtualbox) laufen habe.
Noch ein Tip zur Plattform. Der Umweg für MSDOS über die VB kannst du dir sparen.
Ich würde mal die DOSBox angucken, da kannst du bequem dein DOS-Programm in Lazarus entwickeln und mit F9 starten. Egal ob von Linux oder Windows.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von alfware17 »

So hallo, dann kommt hier mal eine Rückmeldung.
Also ich habe alles ausprobiert: den 8086 Crosscompiler von FPC 3.22 unter Win 7, den kompletten neuen FPC für 386 unter Win XP und sogar den GO32 Dos-Extender. Ergebnis, ich bleibe bei meinem Turbo-Pascal 7... Und bei dem speziellen Problem was ich bei dem Projekt hatte, war auch alles gar nicht so schlimm mit der Sprachmittel-Unterscheidung 16/32/64bit - ich hatte da schon angefangen und war viel weiter als es meine Erinnerung her gab. Das geht so, ich will es nicht ändern, nur um noch einen vierten Fall nämlch FPC/16 bit reinzubekommen. Meine EXEn laufen gut im native MS-DOS und auch in Win-XP.

Was war konkret das Problem mit dem FPC/16. Irgendwie war mein Datensegment bei dem viel zu früh "zu klein", verglichen mit Turbo-Pascal ging einiges nicht. Nun muß ich sagen, daß es echt ein böses und großes Programm ist und das auch von statischen Daten lebt. Ich habe schon im Vergleich Turbo-FPC32 sehr viel abgespeckt und gespart - aber anscheinend nimmt FPC/16 noch nicht einmal das an, was Turbo kann. Ich habe auch versucht, noch die Trennung zu machen 16bit ja aber trotzdem FPC-Sprachmittel (also nicht den Turbo-kompatiblen Modus), aber ging auch nicht bzw wie gesagt habe ich für eine 4.Unterscheidung nicht den Nerv. Kleinere Programme, so bis 200 Zeilen, das ging aber!

Wie gesagt, da die Fallunterscheidung historisch nun schon mal drin ist und sie betrifft ca 150 der 3000 Codezeilen, wollte ich es nicht auf Teufel komm raus ändern und so wieder neue Fehler und Unsicherheiten reinbauen. Ich habe aber meine ursprüngliche Idee (Lesen input/Schreiben ouput analog File) in eine Unit ausgelagert und rufe es bei zwei relativ abgegrenzten Nebenfunktionen (einmal Zählen und einmal kurz Anzählen und die Filegröße und Struktur schätzen) auch auf, was das Hauptprogramm um 100 Zeilen kleiner gemacht hat. Mein Traum, das an allen 20-30 Stellen so zu machen, habe ich aber begraben, auch aus einem anderen Grund. Ich war da von 6(?) Jahren schon mal dran, hatte auch was gemacht und das mit dem Aufruf über den Prozedurkopf

Code: Alles auswählen

procedure Eing(var datei: text);
als am besten gesehen nur wieder vergessen....

Für mich bleibt trotzdem gut zu wissen, daß es da diesen 8086 Crosscompiler gibt und vielleicht ergibt sich auch mal ein anderes Programm/Problem, wo ich Turbo/FPC vergleichen kann - hier jedenfalls sind die Datensegmente echt zu dick.

Und nein, DOSBOX ist keine wirkliche Alternative zum XP oder MS-DOS in der Virtualbox. Ich habe das auch, ein paar mal zB zum Aufruf von dBase 4 wovon ich ebensowenig lassen kann oder zur Weitergabe von bestimmten Programmen an andere. Die können sich dann die DOSBOX installieren. Ich habe für die Entwicklung lieber ein richtiges Betriebssystem und mit
(im Falle XP:) Internet und shared-folder sowie TotalCommander (eigentlich sitze ich Stunden an dieser virtuellen Maschine, eben weil sie 16+32bit kann) oder (im Fall MS-DOS:) mit Disketten und im Zweifel schnellen/schmerz- und klaglosen Ausschalten ohne Herunterfahren.

Meine Eingangsfrage, ja FP kann - man muß nur den Kompatibilitätsmodus umstellen, allerdings sollte man von Anfang an auf die Datensegmente achten, wenn ich das heute nochmal auf dem Reißbrett entwickeln würde, würde ich es auch beachten - aber das Programm ist nun ebenso wie ich ein Dino und da muß das nicht mehr unbedingt, wenn nur die 32/64-Bit Version schnell ist und die 16bit so einigermaßen noch verwandt/kompatibel

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von Mathias »

Mal eine andere Frage, für was brachst du zwingend MSDOS ?
Einfach aus Nostalgiegründen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von PascalDragon »

alfware17 hat geschrieben:
Di 6. Jun 2023, 13:06
Was war konkret das Problem mit dem FPC/16. Irgendwie war mein Datensegment bei dem viel zu früh "zu klein", verglichen mit Turbo-Pascal ging einiges nicht. Nun muß ich sagen, daß es echt ein böses und großes Programm ist und das auch von statischen Daten lebt. Ich habe schon im Vergleich Turbo-FPC32 sehr viel abgespeckt und gespart - aber anscheinend nimmt FPC/16 noch nicht einmal das an, was Turbo kann. Ich habe auch versucht, noch die Trennung zu machen 16bit ja aber trotzdem FPC-Sprachmittel (also nicht den Turbo-kompatiblen Modus), aber ging auch nicht bzw wie gesagt habe ich für eine 4.Unterscheidung nicht den Nerv. Kleinere Programme, so bis 200 Zeilen, das ging aber!
Welches Speichermodell hast du denn genommen? Der Standard ist Small, kompatibler mit Turbo Pascal ist jedoch Large.

Falls du den Installer genommen hast, dann kannst du einfach in den Projektoptionen -Wmlarge hinzufügen. Falls du FPC manuell oder mit fpcupdeluxe erstellt hast, musst du beim Bauen bereits -Wmlarge mit angeben, damit die RTL passend erstellt wird (im Fall von Kompilierung mit make mittels CROSSOPT="-Wmlarge").
FPC Compiler Entwickler

alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von alfware17 »

PascalDragon hat geschrieben:
Di 6. Jun 2023, 22:14
alfware17 hat geschrieben:
Di 6. Jun 2023, 13:06
Was war konkret das Problem mit dem FPC/16. Irgendwie war mein Datensegment bei dem viel zu früh "zu klein", verglichen mit Turbo-Pascal ging einiges nicht. Nun muß ich sagen, daß es echt ein böses und großes Programm ist und das auch von statischen Daten lebt. Ich habe schon im Vergleich Turbo-FPC32 sehr viel abgespeckt und gespart - aber anscheinend nimmt FPC/16 noch nicht einmal das an, was Turbo kann. Ich habe auch versucht, noch die Trennung zu machen 16bit ja aber trotzdem FPC-Sprachmittel (also nicht den Turbo-kompatiblen Modus), aber ging auch nicht bzw wie gesagt habe ich für eine 4.Unterscheidung nicht den Nerv. Kleinere Programme, so bis 200 Zeilen, das ging aber!
Welches Speichermodell hast du denn genommen? Der Standard ist Small, kompatibler mit Turbo Pascal ist jedoch Large.

Falls du den Installer genommen hast, dann kannst du einfach in den Projektoptionen -Wmlarge hinzufügen. Falls du FPC manuell oder mit fpcupdeluxe erstellt hast, musst du beim Bauen bereits -Wmlarge mit angeben, damit die RTL passend erstellt wird (im Fall von Kompilierung mit make mittels CROSSOPT="-Wmlarge").
Ich habe den Installer genommen, aber (für 16bit) kein Projekt und auch nicht Lazarus als IDE genommen, sondern einfach so ppcross8086 auf der Kommandozeile aufgerufen. Die -Wm... bis Huge habe ich alle durchprobiert, die EXE-Größen haben sich verändert, aber leider compilierte keines mein Programm auch nicht mit den abgespeckten Datensegmentgrößen, die ich sonst mittels bedingter Compilierung {$IFDEF DOS} mache. Den Schalter und dann FPC/16 im Turbo-Kompatibilitätsmodus.

alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von alfware17 »

Mathias hat geschrieben:
Di 6. Jun 2023, 16:59
Mal eine andere Frage, für was brachst du zwingend MSDOS ?
Einfach aus Nostalgiegründen ?
Einfache Antwort: Ja. Ich habe so 20 Programme, die ich gerne sowohl in 64/32bit als auch in Linux/32/64 als auch in 16bit laufen lassen möchte. Da ich die MSDOS (egal ob nun DOSBOX oder meinen Virtualbox-Gast) und Win XP nun mal habe, ist es meine Nostalgie/mein Sport, das lauffähig zu halten.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von PascalDragon »

alfware17 hat geschrieben:
Mi 7. Jun 2023, 11:24
Ich habe den Installer genommen, aber (für 16bit) kein Projekt und auch nicht Lazarus als IDE genommen, sondern einfach so ppcross8086 auf der Kommandozeile aufgerufen. Die -Wm... bis Huge habe ich alle durchprobiert, die EXE-Größen haben sich verändert, aber leider compilierte keines mein Programm auch nicht mit den abgespeckten Datensegmentgrößen, die ich sonst mittels bedingter Compilierung {$IFDEF DOS} mache. Den Schalter und dann FPC/16 im Turbo-Kompatibilitätsmodus.
Ohne Beispiel lässt sich schwer sagen, was da falsch läuft. Das i8086-msdos-large-Ziel ist eigentlich genau dafür gedacht größtenteils TP-kompatibel zu sein. Kann man das Problem mit deinem Code vom ersten Post nachvollziehen?
FPC Compiler Entwickler

multiplatform-coder
Beiträge: 16
Registriert: Do 20. Apr 2023, 18:25

Re: Kann Free Pascal für DOS (16bit) eine bessere Syntax verstehen als Turbo-Pascal?

Beitrag von multiplatform-coder »

alfware17 hat geschrieben:
Mi 31. Mai 2023, 20:07
... und wenn ja, ist es schwer, eine Anwendung so zu schreiben, daß sie von Free Pascal für 32/64 bit in Windows und Linux ebenso verstanden wird wie von Free Pascal für 16 bit?
Ich habe einige Anwendungen so geschrieben, daß sie genau das mit bedingter Compilierung schaffen, manche Sprachkonstrukte kann ich eben bei 16 bit nicht verwenden und andere sind wiederum bei 32 bit doof oder bei Linux. Also ich habe das was. Nur compiliert mir das für für 16 bit das originale Turbo-Pascal 7.0 welches ich virtuell im MS-DOS bzw auch in Windows XP (beides in Virtualbox) laufen habe.

Jetzt hatte ich wieder so eine Idee - es geht konkret um Readln/Writeln auf input/output oder auf file. Ich habe mal ein Testprogramm angehängt, wo nur das Prinzip zu sehen ist.
Leider lehnt mir Turbo-Pascal als einziges nur die Zuweisung der Text-Variablen

Code: Alles auswählen

var eingabe: text;
begin
eingabe:=input;
end.
ab und damit fällt meine Idee. Die ich übrigens vor 10 Jahren schon mal verfolgt hatte und wie ich jetzt nachvollziehe (aber mich nicht erinnere wegen Alzheimer) verwerfen mußte und umschreiben

Code: Alles auswählen

procedure ausgabe(datei:text);
begin
    writeln(datei, 'Hugo');
end;
und die kann ich dann aufrufen mit

Code: Alles auswählen

ausgabe(input)
oder

Code: Alles auswählen

ausgabe(feste_datei)
abhängig von einem Schalter und da mault Turbo-Pascal nicht.

Nur wollte ich es etwas eleganter und kürzer haben, die Abfrage des Schalters ist mir zu oft (sowohl beim ausgabe-Aufruf als auch noch diverse Male bei readln und writeln auf Dateien oder input/output. Zur Erklärung, das Programm soll auch im Pipelining Modus in Scripts arbeiten.

Nun hatte ich die Idee, Free Pascal 16 Bit zu nehmen. Eine Frage an die Spezialisten: versteht das auch nur die Turbo-Pascal Syntax oder kann ich alle Sprachkonstrukte verwenden?
Nur einfaches Pascal, keine OO, jedenfalls nicht an der Stelle. Und wie compiliert man das? Hat jemand ein einfaches Beispiel? Laufen lassen unter Win XP? Oder muß es unter Win 7-11 sein?

Hoffe habe mein Anliegen deutlich machen können. Und hier mein Beispiel. Den DOS-Schalter setze ich über eine Unit und/oder beim Compiler-Aufruf für WIndows/Linux/DOS.... Natürlich komfortabler im richtigen Programm, das hier ist nur ein Test

Code: Alles auswählen

program FileMix;
var eingabe, ausgabe, protokoll: text;
    einname, ausname, zeile: string;
    einzahl, auszahl: longint;
    einpipe, auspipe: boolean;

procedure hilfe;
begin 
   writeln(protokoll, 'dateien eingabe.txt ausgabe.txt');
   close(protokoll); halt;
end;

procedure open_eingabe;
begin
   if einpipe 
      then begin
         einname:='input';
         {$IFNDEF DOS} eingabe:=input; {$ENDIF}
      end
      else begin
         assign(eingabe, einname); {$i-} reset(eingabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Open Eingabedatei ' + einname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Eingabe: ' + einname); 
end;

procedure close_eingabe;
begin
   if einpipe 
      then einname:='input'
      else begin
         {$i-} close(eingabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Close Eingabedatei ' + einname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Eingabe: ', einzahl, ' Zeilen'); 
end;

procedure open_ausgabe;
begin
   if auspipe 
      then begin
         ausname:='output';
         {$IFNDEF DOS} ausgabe:=output; {$ENDIF}
      end
      else begin
         assign(ausgabe, ausname); {$i-} rewrite(ausgabe); {$i+}
         if ioresult<>0 then begin 
             writeln(protokoll, 'Fehler Open Ausgabedatei ' + ausname); hilfe;
         end;
      end;
   writeln(protokoll, 'Ausgabe: ' + ausname); 
end;

procedure close_ausgabe;
begin
   if auspipe 
      then ausname:='output'
      else begin
         {$i-} close(ausgabe); {$i+}
         if ioresult<>0 then begin 
            writeln(protokoll, 'Fehler Close Ausgabedatei ' + ausname); hilfe;
         end;
     end;    
  writeln(protokoll, 'Ausgabe: ', auszahl, ' Zeilen'); 
end;

function myeof: boolean;
begin
   {$IFDEF DOS} 
   if einpipe 
      then myeof:=eof 
      else {$ENDIF} myeof:=eof(eingabe);
end;

function myreadln: string;
var myzeile: string;
begin
   {$IFDEF DOS} if einpipe
      then readln(myzeile)
      else {$ENDIF} readln(eingabe, myzeile);
   inc(einzahl);
   myreadln:=myzeile;
end;

procedure mywriteln(myzeile: string);
begin
   {$IFDEF DOS} if auspipe
      then writeln(myzeile)
      else {$ENDIF} writeln(ausgabe, myzeile);
   inc(auszahl);
end;


begin
   einzahl:=0; auszahl:=0; einpipe:=false; auspipe:=false;
   assign(protokoll, 'protokoll.txt'); rewrite(protokoll);
   if paramstr(1)<>'' 
      then einname:=paramstr(1) 
      else einpipe:=true;
   if paramstr(2)<>'' 
      then ausname:=paramstr(2) 
      else auspipe:=true;
   open_eingabe; 
   open_ausgabe;

   zeile:=myreadln;
   while not myeof do begin
      mywriteln(zeile);
      zeile:=myreadln;
   end;
   mywriteln(zeile);

   close_eingabe;
   close_ausgabe;
   close(protokoll);
end.
Zumindest kann das die Go32-Gui.
https://sourceforge.net/projects/go32-gui/
Die läuft zumindest auf Go32, Linux, Windows und Android, aber nicht auf Turbo-Pascal.

Antworten