| |
|
|
- Seite 1 - |
|
Jens-Arne Reumschüssel | Guten Abend zusammen,
ich bin kürzlich über das Problem gestolpert, dass XPSE eine ziemlich große Quelldatei von mir nicht mehr verarbeiten konnte. Variablen wurden plötzlich als nicht definiert gemeldet und andere "erratische" Probleme mehr. Ich könnte mir vorstellen, dass dies daran liegt, dass XPSE Schlüsselworte in Windows-Atoms verwaltet. Da ist irgendwann Schluss (bei irgendwas zwischen 60.000 und 70.000 Stück, wobei man bedenken muss, dass XPSE die Windows-API mit vorhält). Vielleicht ist es aber auch etwas ganz anderes, ich kann ja nicht in den "Maschinenraum" von XPSE schauen.
Jedenfalls blieb mir, da XPSE nicht mehr gepflegt wird, nichts anderes übrig, als das nachzubauen. Das Ergebnis ist JRPC3.
----- Features:
*vernünftige Meldung von Fehlern *direkte Anzeige des Programmablaufes in XProfEd (sofern der unten erhältliche aufgebohrte XProfEd verwendet wird) *Umsetzung der alten Profan-Syntax für Operatoren und alte Containerfunktionen *extrem schnelle native fbPROCs, sofern man FreeBasic installiert hat (kostenlos, siehe Hilfe) *mit fbPROCs kann zudem Inline-Assembler auch vor XProfan X4 realisiert werden *extrem schnelle native pbPROCs, sofern man PureBasic installiert hat *Echtzeitverfolgung von Variableninhalten *einfache Zeitmessungen im Programmablauf *Profan-Kompilerdirektiven funktionieren endlich vernünftig (z.B. Verschachtelung) *eingebettete Variablen funktionieren auch mit Arrays *die meisten WIN32-API-Funktionen sind bereits vordefiniert mitgeliefert *API-Aufrufe über @external(...) werden automatisch in @call(...)-Aufrufe umgesetzt *Einrückungsanalyse zum Finden von vertrackten Verschachtelungsfehlern *Klammeranalyse zum Finden von vertrackten Klammerfehlern *ENUMERATE-Funktionalität *Assert zur Fehlerkontrolle *es können beliebige DLLs in die XProfan-EXE integriert werden, sodass sie nicht mit ausgeliefert werden müssen (siehe {$WrapDll}) *einfaches Killen von mit JRPC3 gestarteten Programmen (interpretiert, .prc gestartet, .exe gestartet) *extrem schnell (und daher natürlich nicht in XProfan geschrieben, da eine interpretierte Sprache hierfür naturgemäß viel zu langsam ist) *beim Start von JRPC3 bereits vorhandene .prc-Dateien können zum Starten und Linken genutzt werden (es wird ein Hinweis angezeigt, dass es sich um ein altes Kompilat handelt) *der Profan-Compiler kann zur Beschleunigung mit hoher Prozessorpriorität aufgerufen werden *eingebauter Update-Checker mit Download, falls es ein Update gibt (Hilfe --> online nach Updates suchen) *64- oder 32-bit-Version verfügbar (einfach JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten) - Achtung, die 64-bit-Version erzeugt natürlich keine 64-bit-XProfan-Programme, da XProfan das nicht kann, sondern JRPC3 selbst wird als 64-bit-Programm ausgeführt *XProfan X4-Syntax verfügbar (möglicherweise noch nicht alles, da ich vermutlich nicht alles davon benutze, aber ich habe mich um Vollständigkeit bemüht - jedenfalls sind z.B. HASH-Arrays und QUADINTs dabei) *Interpreter, PRCs und EXEs können mit Kommandozeilenparametern ausgeführt werden *Interpreter, PRCs, EXEs und XPSE können mit Administratorrechten ausgeführt werden *Prozeduren, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten Datei entfernt, um die Dateigröße des Kompilats möglichst klein zu halten *Variablen, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten Datei entfernt, um die Dateigröße des Kompilats möglichst klein zu halten und den Speicherverbrauch zu optimieren *nPROCs aus XPSE werden automatisch mit XPE zu einer DLL umgesetzt und die Aufrufe der nPROCs im Programm entsprechend angepasst, sofern XPSE vorhanden ist *fast alles aus XPSE funktioniert auch in JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime und Compiler festlegen, Shorties, ...) *XProfEd_JR mit Quelltext-AutoComplete *XProfEd_JR mit Quelltext-Memory-Funktion (Markierungen, zu denen zurückgesprungen werden kann)
Einschränkungen: -kein XPSE-Inline-Assembler, wohl aber XProfan-Inline-Assembler (darin allerdings keine Prüfungen auf Korrektheit des Codes) -ABER: man kann XPSE aus JRPC3 heraus aufrufen, sodass diese Funktionalität weiterhin verfügbar ist, sofern man XPSE besitzt (neuer Shorty: {$x}) -Variablen, die in einer Prozedur nicht deklariert sind, sondern "aus der aufrufenden Prozedur übernommen werden", sind standardmäßig nicht zugelassen (XProfan erlaubt das, aber so etwas ist genauso tödlich wie GOTO-Anweisungen). Bitte alle zu nutzenden Inputs als Parameter übergeben, und wenn etwas aus dem aufrufenden Programmteil verändert werden muss, beim Aufruf als Parameter z.B. @addr(x&) verwenden und in der Prozedur parameters x# und LONG x#,0=y& nutzen. Wenn man aber unbedingt "vererbte" Variablen nutzen möchte, kann man dies mit der Kompilerdirektive {$Declare...} tun.
*als Hommage an XPSE lautet die Endung der Ausgabedatei ".enh3"
Eine genauere Erläuterung der einzelnen Features ist der chm-Hilfedatei zu entnehmen, die im Programm unter Hilfe --> Hilfedatei anzeigen oder mit F1 verfügbar ist.
----- /Features
Herunterladen und installieren: JRPC3 kann unten heruntergeladen werden (setup_jrpc3.exe oder als ZIP-Datei). Als Installationsverzeichnis bitte das XProfan-Stammverzeichnis angeben, also dasjenige, in dem die Dateien PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ kann die ZIP-Datei heruntergeladen und deren Inhalt manuell ins XProfan-Stammverzeichnis kopiert werden.
Einrichtung: JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten.
Alle Befehle sind mit dem Befehl "h" wie "Hilfe" abrufbar und sollten selbsterklärend sein.
Für viele erweitere Features, die XProfEd betreffen, wie z.B. jenes, die Zeile, in der ein Fehler auftrat, direkt in XProfEd anzeigen zu können, ist der mitinstallierte XProfEd_JR erforderlich. Dafür muss man also XProfEd_JR.exe statt XProfEd.exe als Editor benutzen. Als "goody" gibt es dazu, dass beim Auf- und Zufalten von Programmen ein Fortschrittsanzeiger integriert ist (das kann bei großen Programmen ja bekanntlich ein bisschen dauern).
Es mag sein, dass noch nicht alles perfekt funktioniert. Ich bitte hierfür um Nachsicht. Meine Programme lassen sich umsetzen, aber das muss noch lange nicht heißen, dass dies mit Programmen anderer Autoren, die jeder so ihre Eigenheiten haben, auch funktioniert.
Fehlermeldungen und Verbesserungsvorschläge gerne an jreumsc@web.de oder hier im Forum.
Beste Grüße, Jens-Arne |
| 2.584 kB | | Bezeichnung: | JRPC3 | | Version: | 10.29 | | Kurzbeschreibung: | JRPC3-Installer | | Hochgeladen: | 15.02.2021 | | Ladeanzahl: | | | | Herunterladen | | | | 1.699 kB | | Bezeichnung: | XProfEd_JR | | Version: | 5.2 | | Kurzbeschreibung: | Alte Version ohne AutoComplete zur Sicherheit | | Hochgeladen: | 15.02.2021 | | Ladeanzahl: | | | | Herunterladen | | | | 3.777 kB | | Bezeichnung: | JRPC3 | | Version: | 10.29 | | Kurzbeschreibung: | ZIP-Datei statt Installer | | Hochgeladen: | 02.04.2021 | | Ladeanzahl: | | | | Herunterladen |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 16.02.2021 ▲ |
|
|
|
| |
|
- Seite 5 - |
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Seite 15 - |
|
Jens-Arne Reumschüssel | Es gibt eine neue Version, die anders mit dem internen Messagehandling umgeht. Bitte probier die mal aus. Vielleicht ist das Problem damit behoben. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 24.09.2022 ▲ |
|
|
|
|
|
Jens-Arne Reumschüssel | V3.25: - Fehler bei TimeTrack-Routinen behoben (Anzeige und Wiederstart eines bereits vorhandenen Timers) - Hilfedatei verbessert
V3.26: - {$NOWRITE$R} eingebaut - verhindert das Schreiben von $R ... in den umgesetzten Quelltext, wenn {$RUNTIME ...} benutzt wird; das ist für Profan-Versionen vor XProfanX2 wichtig, weil es die Direktive $R dort noch nicht gab |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 12.08.2021 ▲ |
|
|
|
|
p.specht
| Das Link zu den Programmen rutscht, je länger der Einführungstext wird, immer tiefer. Weil ich ein faules Ferkel bin, hier für mich nochmal ein Link auf das Original-Link zum Programm von Jens-Arne: jrpc3.zip [...] |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 12.08.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | Ich werde den Einführungstext jetzt extrem kürzen. Das sollte man jetzt lieber alles in der Hilfe nachlesen, da hast Du Recht.
V3.27: - {$STOPPROCESSING} eingeführt: schaltet für den nachfolgenden Code jegliche Umsetzung und Fehlerprüfung ab. So kann Originalcode in die Ergebnisdatei mitgenommen werden, z.B. wenn für ältere Profan-Versionen programmiert wird. - {$RESUMEPROCESSING} schaltet Umsetzung und Fehlerkontrolle wieder ein. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 12.08.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | V3.28: - Variablen- und Proc-Namen werden nun standardmäßig in kurze Bezeichner umgewandelt. Diese werden von XProfan schneller abgearbeitet als lange. - Dieses Feature kann mit {$NOSHORTNAMES} abgeschaltet werden, um den umgesetzten Code lesbar zu machen. - Bei Nutzung von Klassen wird es im Moment automatisch abgeschaltet, weil es dabei noch ungelöste Probleme gibt. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 13.08.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | V4.01: - Makros: mächtige Funktion zum Ersetzen redundanter Codebestandteile durch ein Makro; Ersetzer möglich (so etwas wie Parameter bei Funktionen), dadurch extrem flexibel einsetzbar - Einzelheiten sind in der aktualisierten chm-Hilfedatei beschrieben - Bugfix beim Entfernen nicht genutzter PROCs bei Nutzung von ContainerProcs ("SUBPROC") |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 01.09.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | V4.05: - MACROFOR eingebaut - MACROIF eingebaut
Einfach mal diesen Code mit XProfan/JRPC3 umsetzen und das Ergebnis betrachten (ist hier natürlich etwas komisch eingerückt; in der chm-Hilfe gibt es eine besser lesbare Version):
{$NOPROCEXCLUDE}
{$NOSHORTNAMES}
MACRO mcr_Command(#Command2#,#FileNum#,#HasFileName2#,#FileName2#)
MACROIF #FileNum#=1
if filenum%=#FileNum#
MACROELSE
elseif filenum%=#FileNum#
MACROENDIF
MACROIF #HasFileName2#=1
#Command2# ##FileNum#,#FileName2#
MACROELSE
#Command2# ##FileNum#
MACROENDIF
ENDMACRO'mcr_Command
MACRO mcr_PROC(#Command#,#HasArg#,#Arg#)
PROC _#Command#
MACROIF #HasArg#=1
parameters filenum%,#Arg#
MACROFOR #FileNum#,1,99
mcr_Command(#Command#,1,1,#Arg#)
MACROENDFOR
endif
MACROELSE
parameters filenum%
MACROFOR #FileNum#,1,99
mcr_Command(#Command#,1,0,)
MACROENDFOR
endif
MACROENDIF
MACROIF #Command#=input
return #Arg#
MACROENDIF
ENDPROC
ENDMACRO'mcr_PROC
cls
mcr_PROC(assign,1,fn$)
mcr_PROC(reset,0,)
mcr_PROC(rewrite,0,)
mcr_PROC(openrw,0,)
mcr_PROC(close,0,)
mcr_PROC(print,1,s$)
mcr_PROC(input,1,s$)
end
|
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 05.09.2021 ▲ |
|
|
|
|
p.specht
| Öhm ... bin verwirrt: Was läuft da genau ab?:
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 05.09.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | Das ist ein sehr komplexes Beispiel für zwei verschachtelte Makros, in denen bedingte Umsetzungen (MACROIF) und Umsetzungsschleifen (MACROFOR) stattfinden. Wie gesagt, in der Hilfe ist das wesentlich besser zu verstehen, weil da die Einrückungen und Leerzeilen richtig sind. Die werden hier im Forum automatisch gesetzt und das ist natürlich nicht korrekt, weil der Code des Forums die Makro-Konventionen nicht kennt.
Heraus kommen Prozeduren, mit denen man mit Integer-Variablen die Dateifunktionen mit "#1" etc. als Dateinummer ansprechen kann. Ist nur ein Beispiel, es geht nicht so sehr darum, ob man das gebrauchen kann. |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 05.09.2021 ▲ |
|
|
|
|
p.specht
| Eine Art Programmgenerator also, der noch vor dem Pre-processing wirkt. Ziel: Beschleunigung durch explizit wiederholte Programmpassagen, die sonst viele komplizierte Abfragen in Schleifen benötigen würden... SO ungefähr? |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 06.09.2021 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | Ja, das kann man so sagen. Es gibt in vielen Programmen Passagen, die sich immer wieder wiederholen. So muss man die nur einmal eintippen, und vor allem nur einmal pflegen.
Wie oft gibt es das, dass man an den Rand seines Codes schreibt: " 'Achtung, das hier auch weiter unten ändern, wenn man es ändert!". Genau so etwas ist prädestiniert für ein Makro.
Und wenn es doch kleine Änderungen bei den einzelnen Wiederholungen gibt, kann man die mit den Ersetzern realisieren.
Das ist übrigens keine neue Erfindung von mir, sondern in z.B. PureBasic gibt es das schon lange. |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 06.09.2021 ▲ |
|
|
|
|
Michael W. | Wenn Du die Einrückungen behalten willst dann kannst Du z.B. auf das Anmalen verzichten. Dies wird mit einem Ausrufezeichen direkt hinter dem CODE-Tag (hinter der Klammer) gelöst. Danach einfach eine neue Zeile beginnen.
Das sieht dann SO aus:
{$NOPROCEXCLUDE} {$NOSHORTNAMES}
MACRO mcr_Command(#Command2#,#FileNum#,#HasFileName2#,#FileName2#) MACROIF #FileNum#=1 if filenum%=#FileNum# MACROELSE elseif filenum%=#FileNum# MACROENDIF MACROIF #HasFileName2#=1 #Command2# ##FileNum#,#FileName2# MACROELSE #Command2# ##FileNum# MACROENDIF ENDMACRO 'mcr_Command
MACRO mcr_PROC(#Command#,#HasArg#,#Arg#) PROC _#Command# MACROIF #HasArg#=1 parameters filenum%,#Arg# MACROFOR #FileNum#,1,99 mcr_Command(#Command#,1,1,#Arg#) MACROENDFOR endif MACROELSE parameters filenum% MACROFOR #FileNum#,1,99 mcr_Command(#Command#,1,0,) MACROENDFOR endif MACROENDIF MACROIF #Command#=input return #Arg# MACROENDIF ENDPROC ENDMACRO 'mcr_PROC
cls mcr_PROC(assign,1,fn$) mcr_PROC(reset,0,) mcr_PROC(rewrite,0,) mcr_PROC(openrw,0,) mcr_PROC(close,0,) mcr_PROC(print,1,s$) mcr_PROC(input,1,s$) end
|
|
|
| |
|
|
|
Jens-Arne Reumschüssel | Oh, super! Das wusste ich noch nicht. Danke für den Hinweis! |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 24.09.2021 ▲ |
|
|
|