Pascal-Script // Windows

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Joh
Lazarusforum e. V.
Beiträge: 332
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Pascal-Script // Windows

Beitrag von Joh »

PascalDragon hat geschrieben: Mo 27. Okt 2025, 22:30 Du könntest mit Hilfe von InstantFPC ein Pascal-„Skript” ausführen. ;)
Ey geil...
Ich habe da mal ein Video erstellt, wie ich mit dem Total-Commander ein Pascal-Laufzeitscript ausführe...

Für mal eben ist das schon geil. Gerade für mich, da ich häufiger Scripte auf der Console einfach testen möchte. So geht Pascal; wie anno 1990 ;-)
Lazarus starten, kompilieren etc, ist da häufig Overhead.

Hier das Video:
https://www.wilberding.de/lazarusforum/InstantFPC.mp4

Im Video:
- .pas-Datei erstellen // Editor egal
- auf die Instant-FPC-Verknüpfung ziehen
- fertig
- PS: im Programm warten auf Tastendruck // hier readLn

lg
Joh
just my two Beer

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

Re: Pascal-Script // Windows

Beitrag von alfware17 »

danke für das Video und die Gewißheit, ich bin mit dem Totalcommander nicht allein hier im Lazarus-Universum,
ABER:

Ich verstehe nicht den Sinn und Zweck von instant script. Was wäre der Unterschied zu einfach

Code: Alles auswählen

 fpc beispiel
? Die EXE kann ich dann weitergeben. InstantFPC müßte mein Kunde ggf erst installieren.

Joh
Lazarusforum e. V.
Beiträge: 332
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Pascal-Script // Windows

Beitrag von Joh »

nicht für meine Kunden, sondern für mich ;-)

Eben mal Daten von a nach b schaufeln, eben mal was konvertieren...
schnell ein Pascal-Script zusammengebastelt und los.

Was brauche ich für mich eine Oberfläche oder hübsche Balken.
Das ist _das_ Feature, welches mir an Lazarus vs. Foxpro fehlte: eben mal eine Schleife aufsetzen zum Daten manipulieren, ausgeben, konvertieren, auslesen.
just my two Beer

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

Re: Pascal-Script // Windows

Beitrag von alfware17 »

Ich brauche auch kein GUI, aber ich verstehe immer noch nicht, warum so kompliziert mit Instantfpc und nicht einfach FPC?
Bitte entschuldige wenn ich solche Fragen stelle - aber ich habe gegoogelt: instantfpc macht auch nichts weiter außer im Hintergrund ein fpc, dann ausführen und die Exe wieder löschen. Es ist also mitnichten Script wie bei Python zB. Ich mache ganz viel auf der Konsole, eigentlich nur (und Lazarus nur wenn ich muß oder zum Editieren) und daher interessiert mich dein Thema. Aber wie gesagt, was ist besser (oder anders) als einfach FPC?

Benutzeravatar
theo
Beiträge: 11047
Registriert: Mo 11. Sep 2006, 19:01

Re: Pascal-Script // Windows

Beitrag von theo »

Man sollte hier mit den Begriffen aufpassen.
InstantFPC und Pascal Script sind nicht das Gleiche.

https://wiki.freepascal.org/Pascal_Script
https://wiki.freepascal.org/InstantFPC

PascalDragon
Beiträge: 1006
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: Pascal-Script // Windows

Beitrag von PascalDragon »

alfware17 hat geschrieben: Di 4. Nov 2025, 07:40 Ich verstehe nicht den Sinn und Zweck von instant script. Was wäre der Unterschied zu einfach

Code: Alles auswählen

 fpc beispiel
? Die EXE kann ich dann weitergeben. InstantFPC müßte mein Kunde ggf erst installieren.
instantfpc kompiliert das Skript und führt es aus, während fpc nur kompiliert (und das Kompilat wird auch noch geached). Außerdem ist instantfpc ein Teil einer FPC Installation, also keine separate Installation notwendig. ;)
FPC Compiler Entwickler

charlytango
Beiträge: 1199
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Pascal-Script // Windows

Beitrag von charlytango »

Joh hat geschrieben: Di 4. Nov 2025, 22:18 Das ist _das_ Feature, welches mir an Lazarus vs. Foxpro fehlte: eben mal eine Schleife aufsetzen zum Daten manipulieren, ausgeben, konvertieren, auslesen.
Nur meine ganz persönliche Meinung zu diesem Thema.

Als hinkend Vergleich sehe ich dass du in einem tollen Sportwagen, der für eine ansehnliche Anzahl von Rennstrecken optimiert wurde nun einfach partout in schweres Gelände willst.

In deinem Alter wäre es möglich gewesen dass du die Entwicklungen von dbase, dbaseII, dbaseIII, foxbase, foxpro und anderen interpretativen Sprachen mitgemacht hast. Mir ging es jedenfalls so.

Solche (und um einiges komplexere Befehlseingaben) waren da interaktiv möglich, ließen sich speichern und wieder "abspielen". Letztlich auch Programme damit erstellen.

Code: Alles auswählen

USE kunden
BROWSE
APPEND BLANK
REPLACE vorname WITH "Max"
Später kamen dann Clipper (1985 und später), Visual Objects / xBase++, Harbour / xHarbour als Compiler.
Ich war da echt froh, nur mehr eine EXE weitergeben zu müssen anstelle der ganzen dbase3 Installation oder Foxpro.
Ausgehend von einem Kommandofenster und ausgezählten Eingabefeldern darin kam mit Windows 3 die Herausforderung auch für eine grafische Oberfläche zu entwickeln, das ging zwar davor auch schon aber der Aufwand war enorm.

Ich beleuchte das nur aus meiner eingeschränkte Perspektive eines DB-Frontend-Entwicklers. Pascal kam 1970 und Turbo Pascal 1983.
Access 1992, Delphi1 1995, ab Delphi 2 im März 1996 wurde es dann interessanter.

Die Sprachen haben sich also eher von Interpretern zu Compilern entwickelt (ich weiß, unter Linux sieht man das anders) und ich bin und war froh darüber. Ich konnte mir das ganze Installationsgedöns sehr lange ersparen. Alles war in einer einzigen ausführbaren Datei drin -- einfach in ein beliebiges Verzeichnis kopieren und fertig.

Nun zurück zu deinem Wunsch: Ich denke, wenn du scripting (außerhalb der Möglichkeiten und Limitierungen von Pascal_Script bzw InstantFPC) machen willst, hast du einfach das falsche Werkzeug.

Mit einem Hammer eine kleine Schraube eindrehen zu wollen, frustriert schon vom Ansatz her.

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

Re: Pascal-Script // Windows

Beitrag von alfware17 »

Was ist "geached"?

Und ja, ich habe mich ungenau ausgedrückt. Ich meinte, ich habe FPC und/oder Lazarus installiert und erstelle ein Textfile mit .PAS und sage FPC Beispiel wenn ich Glück habe baut er das fehlerfrei. Dann kann ich Beispiel.EXE selbst ausführen oder (nur die) weitergeben ohne daß mein Kunde FPC/Lazarus braucht.

Immerhin habe ich jetzt verstanden, InstantFPC macht gleich Ausführen mit und es gibt auch noch das reine Scriptausführen in Bytecode (?) wie bei Python oder Java oder gar reines Script wie bat/sh/powershell.

Aber danke für die nostalgische Rückerinnerung an dBase III/IV - das war mal meine Jugendzeit... Soweit ich mich erinnere hatte mein Lehrer im Ausbildungsbetrieb Dbase III und Turbo Pascal gemischt im Projekteinsatz und da schon erstaunliche Dinge gemacht. Vor einem Jahr oder so hatte ich selbst mal ein (reines) dBase am Wickel unter XP in einer Virtualbox. Da kann man compilieren (DBO) muß es aber heute nicht mehr

PascalDragon
Beiträge: 1006
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: Pascal-Script // Windows

Beitrag von PascalDragon »

alfware17 hat geschrieben: Mo 10. Nov 2025, 17:59 Was ist "geached"?
Da hat meine Tastatur wohl ein „c” verschluckt. Es sollte „gecached” heißen. Heißt, instantfpc kompiliert das „Skript” nur neu, wenn es sich geändert hat, ansonsten wird die bestehende Binary verwendet.
alfware17 hat geschrieben: Mo 10. Nov 2025, 17:59 Und ja, ich habe mich ungenau ausgedrückt. Ich meinte, ich habe FPC und/oder Lazarus installiert und erstelle ein Textfile mit .PAS und sage FPC Beispiel wenn ich Glück habe baut er das fehlerfrei. Dann kann ich Beispiel.EXE selbst ausführen oder (nur die) weitergeben ohne daß mein Kunde FPC/Lazarus braucht.

Immerhin habe ich jetzt verstanden, InstantFPC macht gleich Ausführen mit und es gibt auch noch das reine Scriptausführen in Bytecode (?) wie bei Python oder Java oder gar reines Script wie bat/sh/powershell.
InstantFPC erzeugt keinen Bytecode oder sonst irgendwas (außer du würdest hypothetisch InstantFPC so einrichten, dass es zum jvm-java Target kompiliert, das ist aber nicht der typische Anwendungsfall und geht für hier jetzt zu weit ;) ), sondern es ist tatsächlich einfach nur ein Wrapper um FPC und erzeugt damit eine Binary für deine aktuelle Platform und führt danach die kompilierte Anwendung auch noch direkt aus (mit den übergebenen Parameten).
Vor allem unter *nix-Systemen gibt es noch den zusätzlichen Vorteil der Unterstützung einer „she bang”, also eines Kommentars in der ersten Zeile im Format #!instantfpc, was dafür sorgt, dass die Shell (zum Beispiel bash) bzw. der Kernel selbstständig instantfpc aufruft und du dein „Skript” also wirklich direkt aufrufen kannst. (Unter Windows musst du instantfpc als Kommando davor schreiben)
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 11047
Registriert: Mo 11. Sep 2006, 19:01

Re: Pascal-Script // Windows

Beitrag von theo »

Übrigens: Pascal Script lohnt sich auch mal anzuschauen.
Leider sind viele Beispiele vielleicht etwas abschreckend.
Ich hab hier mal einen Screenshot eines "Hello World" gemacht.
Mehr braucht es dazu nicht.
Beim Formular 1 schreibt man in das Synedit den Code rein und (in diesem Falle) kommt auf dem Memo die Ausgabe.
Wenn beim Übersetzen was schief geht, kommt ein "ShowMessage" mit dem Fehler.
So kann man damit zu spielen beginnen.

Weiter hier:
https://wiki.freepascal.org/Pascal_Script_Examples

Laz_PS.png
Laz_PS.png (331.39 KiB) 23 mal betrachtet

Code: Alles auswählen

procedure WriteMemo(const s: string);
begin
  Form1.Memo1.Lines.Add(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  PSScript1.Script.Assign(Synedit1.Lines);
  if PSScript1.compile then
    PSScript1.Execute
  else
    ShowMessage(PSScript1.CompilerErrorToStr(0));
end;

procedure TForm1.PSScript1Compile(Sender: TPSScript);
begin
  Sender.AddFunction(@WriteMemo, 'procedure WriteMemo(const s: string)');
end;  

Antworten