Italia
SDK-Helfer/ Tools

JRPC neuer Präkompiler per XProfan X4 - JRPC3

 
- Page 1 -



Jens-Arne
Reumschüssel
Guten Abend zusammen,

ich bin kürzlich circa das Problem gestolpert, dass XPSE eine ziemlich grande Quelldatei von mir nicht mehr verarbeiten konnte. Variablen wurden plötzlich als nicht definiert gemeldet und andere "erratische" Probleme mehr. Ich potuto 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 per Operatoren und alte Containerfunktionen
*extrem schnelle native fbPROCs, sofern man FreeBasic installiert hat (kostenlos, siehe Aiuto)
*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 circa @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 DLL 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 naturalmente nicht in XProfan geschrieben, da eine interpretierte Sprache hierfür naturgemäß viel zu langsam ist)
*beim Start von JRPC3 bereits vorhandene .prc-File 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 (Aiuto --> online nach Updates suchen)
*64- oder 32-bit-Version disponibile (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 naturalmente keine 64-bit-XProfan-Programme, da XProfan das nicht kann, sondern JRPC3 selbst wird als 64-bit-Programm corsa
*XProfan X4-Syntax disponibile (möglicherweise noch nicht alles, da ich presumibilmente 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 corsa werden
*Interpreter, PRCs, EXEs und XPSE können mit Administratorrechten corsa werden
*Prozeduren, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten File entfernt, um die Dateigröße des Kompilats possibile klein zu halten
*Variablen, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten File entfernt, um die Dateigröße des Kompilats possibile 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 disponibile 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 trasferimento, 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 Aiuto --> Hilfedatei Mostra oder mit F1 disponibile ist.

----- /Features

Herunterladen und installieren:
JRPC3 kann unten heruntergeladen werden (setup_jrpc3.exe oder als ZIP-File).
Als Installationsverzeichnis bitte das XProfan-Stammverzeichnis angeben, also dasjenige, in dem die File PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ kann die ZIP-File 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 Mostra 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 grande 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 Autori, die jeder so ihre Eigenheiten haben, auch funktioniert.

Fehlermeldungen und Verbesserungsvorschläge gerne an jreumsc@web.de oder hier im Foro.

Beste Grüße, Jens-Arne

2.584 kB
Bezeichnung:JRPC3
Version:10.29
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Downloadcounter363
Download
1.699 kB
Bezeichnung:XProfEd_JR
Version:5.2
Kurzbeschreibung: Alte Version ohne AutoComplete zur Sicherheit
Hochgeladen:15.02.2021
Downloadcounter224
Download
3.777 kB
Bezeichnung:JRPC3
Version:10.29
Kurzbeschreibung: ZIP-File statt Installer
Hochgeladen:02.04.2021
Downloadcounter291
Download
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
16.02.2021  
 



 
- Page 11 -


« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 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 X4
XProfan 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
Hier übrigens noch ein Beispiel, wie man mit Arrays umzugehen hätte. Das ist nämlich auch etwas tricky (Byte Pointer statt Integer Pointer verwenden, siehe Erklärung im Beispiel, sonst wundert man sich ganz furchtbar, welche Speicherplätze angesprochen werden).

{$FBSYNTAX ON}

declare a%[2]

fbPROC fbArrayTest1(ByVal p As Byte Pointer) As Integer Export
poke integer,p+0,100 'hier p immer um 4 erhöhen, da p als Byte Pointer definiert ist und FreeBasic daher beim Pointer immer ein Byte weiterzählt
poke integer,p+4,101 'das entspricht dem intuitiven Vorgehen, wenn man Integers in einen Speicherbereich schreibt
poke integer,p+8,102
return 0
ENDPROC

fbPROC fbArrayTest2(ByVal p As Integer Pointer) As Integer Export
poke integer,p+0,103 'hier p immer nur um 1 erhöhen, da p als Integer Pointer definiert ist und FreeBasic weiß, wie viele Bytes in jedem Element stecken (nämlich 4 pro Integer)
poke integer,p+1,104 'das ist *nicht* unbedingt intuitiv; ich würde sowas vermeiden und lieber Byte Pointer per Arrays benutzen
poke integer,p+2,105
return 0
ENDPROC

cls
fbArrayTest1(@addr(a%[0]))
print a%[0]
print a%[1]
print a%[2]
print
fbArrayTest2(@addr(a%[0]))
print a%[0]
print a%[1]
print a%[2]
waitinput
end
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
17.01.2022  
 




Jens-Arne
Reumschüssel
Zu Deiner Frage darüber (nullterminierte gepushte String-Bereichsvariablen):

Das geht leider momentan nicht. Da müsste ich SharedInFbProcs erweitern. Im Prinzip possibile, aber ich weiß nicht, ob das am Ende die Lesbarkeit des Codes wirklich verbessert. Dann müsste man sich merken, dass man eine Bereichsvariable wirklich nur dafür definiert hat.

Ich nehme einmal an, Du möchtest viele Strings auf einmal trasferimento. Pack die Adressen einfach in un eigene Bereichsvariable und übergib diese eine der fbProc. Dann extrahierst Du daraus die Strings.

{$FBSYNTAX on}

declare b1#,b2#,b3#,uebergabe#

fbProc fb3Strings(ByVal uebergabe As Any Pointer) As Integer Export
dim As ZString Pointer s1,s2,s3
s1=peek(ZString Pointer,uebergabe)
s2=peek(ZString Pointer,uebergabe+4)
s3=peek(ZString Pointer,uebergabe+8)
screenres(400,300)
print *s1
print *s2
print *s3
return 0
ENDPROC

cls
dim b1#,10000
dim b2#,10000
dim b3#,10000
string b1#,0="String 1"
string b2#,0="String 2"
string b3#,0="String 3"
dim uebergabe#,12
long uebergabe#,0=b1#
long uebergabe#,4=b2#
long uebergabe#,8=b3#
fb3Strings(uebergabe#)
waitinput
dispose uebergabe#,b1#,b2#,b3#
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
17.01.2022  
 




Jens-Arne
Reumschüssel
Vielleicht geht es mit den Arrays so etwas besser, ohne Gepoke:

{$FBSYNTAX on}

declare a%[10],i%

fbProc fbArrayTest(ByVal p As Any Pointer) As Integer Export
dim i As Byte
dim a(10) As Integer Pointer
for i=0 to 10
a(i)=p+(i*4) 'Adresse des Elements setzen
*a(i)=i 'dem Element einen Wert zuweisen
next i
return 0
ENDPROC

cls
fbArrayTest(@addr(a%[0]))
for i%,0,10
print a%[i%]
endfor
waitinput
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
17.01.2022  
 




funkheld
Danke Jens-Arne hast mir wieder in kürze 10 km weitergeholfen.
Deine Beispiele sind wunderbar Verfolgbar.

Wie du es oben zeigst , brauche ich dieses nicht mehr :
-------------------------------
nullterminierte gepushte Strings-Bereichsvariablen
-------------------------------

Mit den Bereichen und dem Array ist es einfacher zu handhaben.

Danke.
Gruss
 
17.01.2022  
 




funkheld


Hallo Jens-Arne,
mir ist eine Fehlermeldung aufgefallen (siehe Bild) bei dem Befehl : LoadBmp Name$,0,0; 0

Gruss
Declare Name$
WindowTitle "BILD-BETRACHTER"
CLS
ShowMax
Name$ = @LoadFile$("Bilddateien","*.BMP")

While Name$ <> ""

    Cls
    LoadBmp Name$,0,0; 0
    WindowTitle "BILD-BETRACHTER - [" + Name$ + "]"
    WaitMouse
    Name$ = @LoadFile$("Bilddateien","*.BMP")

EndWhile

End

51 kB
Hochgeladen:18.01.2022
Downloadcounter37
Download
 
18.01.2022  
 




Jens-Arne
Reumschüssel
Ja, das ist Absicht und hat den Grund, dass der Befehl veraltet ist.

Das steht dazu in der XProfan-Aiuto:

"Dieser Befehl wird in künftigen XProfan-Versionen nicht mehr supportati. Stattdessen ist der Befehl DrawPic zu verwenden."

Saluto, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
18.01.2022  
 




funkheld
Danke per die Info.
Ich dachte in XProfanx4 sind die ollen Kamellen nicht mehr drin.

Also bei solchen Fehlermeldungen erst mal schauen ob so ein Murx noch drin ist, den es nicht mehr geben soll.

Gruss
 
18.01.2022  
 




Jens-Arne
Reumschüssel
Man kann jetzt auch "endfor" statt "next" in fbProcs schreiben. Das hatte ich bei den "Konzessionen" vergessen.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
18.01.2022  
 




funkheld
Danke per die Info.

Läßt du dieses XPSE noch in deiner Beschreibung drin?
Ich würde das XPSE dort jetzt rausnehmen.
Finde dafür keine rückfragen von Hilfestellungen usw. mehr.

Ich selber habe mich davon auch verabschiedet und nutze jetzt dieses FreeBasic per die Erweiterungen.

Gruss
 
19.01.2022  
 




p.specht

Einspruch, ich brauche die Assembler-Möglichkeiten und api-Konstanten von XPSE. Nebenbei bemerkt, Jens-Arne ist berufstätig. Erstaunlich, daß er sich soviel Zeit per Rückfragen nimmt - einfach toll!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.01.2022  
 




funkheld
Na endlich meldet sich mal einer seit langer Zeit per XPSE , klasse.
Ich dachte die Spezies sind ausgestorben und schon im Himmel.

Ich grüße dich du XPSE fan.

Mein Interesse ist jetzt nach FreeBasic gegangen zur Erweiterung des XProfanx4.

Wie Jens-Arne geschrieben hat ist dieses XPSE nicht so leicht zu bändigen und hat immer weitere neueProbleme bereitet.

Ich habe schon einiges programmiert per mich und bin dabei meine eigenen XPSE-Programme umzustellen nach FreeBasic.

Gruss
 
19.01.2022  
 




Jens-Arne
Reumschüssel
Assembler bleibt XPSE-Domäne. API-Konstanten sind in JRPC3 auch drin. Wenn welche fehlen, bitte immer her damit, die kann ich dazupacken.

Allerdings wüsste ich gern einmal, ob Assembler wirklich so viel schneller ist als FreeBasic. Letzteres wird ja direkt in Maschinensprache übersetzt, also letztlich in Assembler - und es landet bei XPSE in einer DLL, die dann vom XProfan-Programm aufgerufen wird, genau wie bei FreeBasic mit JRPC3. Natürlich machen Hochsprachen da immer einiges etwas weniger optimal, als wenn man seine Routinen direkt und selbst in Assembler schreibt (was ich nicht kann), aber wie grande ist da der Unterschied? Peter, kannst Du das bei Gelegenheit mal testen?

Saluto, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
19.01.2022  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

63.221 Views

Untitledvor 0 min.
Jens-Arne Reumschüssel vor 7 Tagen
Manfred Barei25.09.2024
Gast.081529.08.2024
R.Schneider23.08.2024
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie