PB Interpreter

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Wenn ich Sonntag mal ein bissel Zeit habe teste ich das ganze mal ausführlich und gebe meine Meinung ab :allright:

Damit lassen sich aber bestimmt paar sachen umsetzen die mir so vorschweben .... mal schauen.

Danke aber schon mal für deine Mühen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> aufwändigeren Dokumenten wird es mühselig
> Müsste man auch escapen können
Ja, das ist leider wahr. Das ist eben so wenn man mit PureBasic arbeiten will. Wenn du das escapen willst, müsstest du entweder eine extra Routine in den Interpreter einbauen, die Zeile für Zeile parst; oder du müsstest zwischen Interpreter und Kompiler eine zusätzliche Anwendung schalten, die parst.
Letzteres ist natürlich Blödsinn, denn es kostet viel mehr Performance, als wenn der Interpreter das Parsen übernimmt.
Denn im gibt es eine Stelle, an der ja der Source-Code verändert wird: Da, wo die erste Zeile rausgefiltert wird. Diese Stelle könnte man erweitern, da die Datei ja sowieso schon geöffnet ist.

> Wenn ich Sonntag mal ein bissel Zeit habe teste ich das ganze mal ausführlich und gebe meine Meinung ab
Cool, danke vielmals! :allright: Was schweben dir eigentlich so für Sachen vor? Das würde mich interessieren, vielleicht habe ich solche Ideen ja noch nicht. Dann könnt ich mich ja auch von dir inspirieren lassen und außerdem bei der weiteren Entwicklung des Interpreters deine Vorstellungen mit einfließen lassen.


@ Volker Schmid:
Wie sieht's denn mit deinem "inline-html" aus? Ist der gezeigte Weg für dich auch okay? Wenn du es unbedingt PHP-like haben musst, kann ich dir mal ein Blick auf SSI (Server Side Includes) empfehlen. Das sind stinknormale HTML-Dokumente, die aber serverseitig von Apache geparst werden. Es gibt 'spezielle' HTML-Tags, zum Beispiel

Code: Alles auswählen

<html>
<head>
<title>Eine SHTML Seite (SSI)</title>
</head>
<body>
Sie sind Besucher Nummer <!--#exec cgi="pfad/counter.pb" --> auf dieser Seite
</body>
</html>
Das exec-Tag ist natürlich kein echtes HTML-Tag, sondern wird beim Parsen von Apache ersetzt. Es wird nämlich das angegebene CGI-Skript ausgeführt (im Beispiel eine PureBasic-Datei, die dank es PB Interpreters läuft; kann aber auch eine PHP-Datei sein). Die Ausgabe des Skriptes wird dann an dieser Stelle eingefügt.

HTML-Dateien, die SSI enthalten, haben in der Regel die Endung ".shtml". Ich habe SSI noch nie benutzt, aber seit ich meinen PB Interpreter habe, werde ich mir das mal näher anschauen.

Vorteil: Man kann HTML-Dokumente wie in PHP mit Anweisungen spicken, ist also Syntaxfreundlicher (wegen den ganzen Chr(34), wie angesprochen).
Nachteil: Bei jedem exec-Tag müsste Apache glaube ich eine separate Instanz des Perl-, PHP- oder PB-Interpreters starten, um das Skript an der Stelle parsen zu können.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Da können dann aber ungeheure Zeilen entstehen, wenn man für Parameterreiche Tags einen Haufen an Attributen definieren möchte. :| Dass das dann kein PureBasic mehr ist, weiß ich.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Was meinste mit "ungeheure Zeilen"? Die SSI-Methode?
Die Ideen von wegen SSI etc. sind alles nur Zusätze. Da habe ich beim Schreiben des PB Interpreters noch gar nicht dran gedacht. Ursprünglich wollte ich lediglich ganze HTML-Seiten in PB coden. Aber es ist doch umso besser, je mehr Wege es gibt, wie man das erreichen kann. Da hat Volker Schmid ja jetzt die Qual der Wahl. :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Code: Alles auswählen

<area shape="rect" coords="540, 0, 630, 40" href="contact.php" alt="Kontakt" title="Kontakt" />
Im PureBasic Interpreter:

Code: Alles auswählen

PrintN("<area shape=" + Chr(34) + "rect" + Chr(34) + " coords=" + Chr(34) + "540, 0, 630, 40" + Chr(34) + " href=" + Chr(34) + "contact.php" + Chr(34) + " alt=" + Chr(34) + "Kontakt" + Chr(34) + " title=" + Chr(34) + "Kontakt" + Chr(34) + " />")
Das meine ich mit ungeheuren Zeilen, einen ziemlich "breiten" Quelltext.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Achso. Ja ist klar, das passiert, wenn man viele Anführungszeichen braucht. PureBasic ist von der Syntax her eben nicht für solche Aufgaben gedacht.

Da hast du folgende Möglichkeiten, um das Chr(34) zu vermeiden:
-Eigenen Preparser bauen
-SSI verwenden
-wenn möglich auf Anf.zeichen verzichten (nicht HTML konform)
-Dokument in EXE einbinden, zur Laufzeit einlesen und dynamischen Inhalt mit ReplaceString() einsetzen
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Oder #DQuote verwenden...
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Sry für die späte Antwort

Bin heute leider nicht dazu gekommen :cry:

Aber ich hätte eine frage , und zwar kann ich dann eigentlich Computer Daten überprüfen ?

Z.b den WINDOWS Benutzer Name ?
Weil die exe is ja nur im Cache und ist ja für Linux ....

Ich hätte verschiedene Ideen für Generatoren gehabt, z.b Signaturen oder Umrechnungen...
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hey, nicht schlimm. Lass dir ruhig Zeit mit dem Testen.
Entschuldige, aber ich verstehe überhaupt nicht, was du meinst.

> kann ich dann eigentlich Computer Daten überprüfen
Welche Computer Daten? In deinen CGI-Skripten, die ja dann in PureBasic geschrieben sind, kannst du nach Herzenslust alle Befehle benutzen, die du willst. Also auch API und so weiter. Damit sollte das möglich sein. Außerden kannst du ja noch die Umgebungsvariablen abfragen:

Code: Alles auswählen

Debug GetEnvironmentVariable("USER")
Musst mal gucken, ob's USERNAME oder nur USER heißt. Dies funktioniert unter Windows und Linux.

> die exe is ja nur im Cache
In welchem Cache? Den Sourcecode für den PB Interpreter gibt's ja hier im Thread. Den nimmst du und kompilierst ihn auf Windows, wenn du den Interpreter auf einem Windows-Server laufen lassen möchtest. Kompiliere ihn auf Linux, wenn du ihn auf einem Linux/Unix-Server laufen lassen möchtest. Solltest du das nicht hinbekommen, den SOurcecode per Kommandozeile z. B. auf Linux zu kompilieren, kann ich das auch gern für dich tun.

> und ist ja für Linux
Jein. In erster Linie ist er für Linux geschrieben. Aber du kannst ihn auch auf Windows einsetzen, denn der Sourcecode istr portabel. Es wird keine API benutzt, das macht das Umschreiben besonders einfach: Das einzige, was du ändern musst, sind Sachen wie Frontslahses / durch Backslashes \ in Pfadangaben zu ersetzen, wenn du den Interpreter auf Windows benutzen möchtest. Ich habe den Quellcode so gut kommentiert, dass es mir vorkommt, als halte ich eine Nachtlektüre in den Händen: So viel interessantes Zeugs zum Lesen... Wusel dich einfach von oben nach unten durch und änder hier und da was für Windows, das dürfte dank der guten Kommentierung sehr einfach sein. Solltest du an einigen Stellen sogar Ideen haben, wie man den Vorgang schneller machen kann, dann immer her damit. :)

> verschiedene Ideen für Generatoren gehabt, z.b Signaturen oder Umrechnungen
Kein Problem! Falls du dazu Eingabedaten verarbeiten musst, kannst du diese wie folgt abfragen:

Wenn die Daten mit der POST-Methode gesendet wurden:

Code: Alles auswählen

Define length=Val(GetEnvironmentVariable("CONTENT_LENGTH"))

If length
   Define *buffer=AllocateMemory(length)
   If *buffer
      ReadConsoleData(*buffer, length)
   Else
      ; Buffer kann nicht allokiert werden
   EndIf
Else
   ; Es gibt nichts einzulesen
EndIf
Wenn die Daten mit GET gesendet wurden (das sind die Daten, die hinter einem Fragezeichen an die URL gehängt wurden), dann ist die Umgebungsvariable QUERY_STRING verfügbar:

Code: Alles auswählen

Define qs.s=GetEnvironmentVariable("QUERY_STRING")
Ich hoffe, ich konnte deine Fragen beantworten.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Also noch mal ausführlich, hab das grad da oben nur so hingerotzt..

Ich kann also WIN API anwenden auf dem Linux Server ?
Ich könnte also auf einem Linux Server die Umgebungsvariablen vom Windows User rauskrigen ?

Die Exe wird auf Linux Kompiliert und wird auf einem Linux Server aufgerufen.

Der User hat Windows
Ich kann also

Code: Alles auswählen

String$ = Space(255)
GetEnvironmentVariable_("USERNAME",@String$,Len(String$))
In die Website einbauen und es würde mir meinen Namen anzeigen ?

Das wäre ja Genial :shock: (Wieso hab ich das gefühl das ich was falsch verstanden habe ? )

Das mit Cache hab ich dann wohl falsch verstanden.

Ich würde mich ja über ein richtiges Beispiel freuen für GET und Post freuen.
Wie z.b sowas in PHP , da mir das noch nicht ganz einleutet wie ich das hier jetzt machen soll.

Code: Alles auswählen

<?php
$seite = $_GET["seite"];

if($seite=="index")
   {
   echo "Indexseite";
   }

if($seite=="start")
   {
   echo "Startseite";
   }
?>
Antworten