| |
|
|
- 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 8 - |
|
|
« 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 ▲ |
|
|
|
|
|
funkheld | Habe mal ein neuen Test gemacht mit einer api. Die funktioniert wunderbar.
Ich glaube du bist fast am Ziel.
Gruss
Declare hWin&,hDlg&,hDCWin&
Declare xy&
dim xy&,16
Long xy&,0 = 30
Long xy&,4 = 30
Long xy&,8 = 100
Long xy&,12 = 100
hWin& = Create("Window", %hWnd, "Test", 10, 10, 500, 500)
Window 510, 10 - 200, 200
grafik_api(hwin&,xy&)
WaitKey
End
nProc grafik_api(Long hwin,xy)
Long hdcWin,brush,mypen
hDCWin=GetDC(hWin)
brush = CreateSolidBrush($00ffff)
FillRect(hdcwin, xy, brush)
mypen=CreatePen(PS_SOLID, 1,$0000ff)
SelectObject( hdcwin, MyPen )
MoveToEx(hDCWin, 10,10, 0)
LineTo(hDCWin, 200,200)
DeleteObject(MyPen)
EndProc
|
|
|
| |
|
|
|
funkheld | Es funktioniert auch diese Grafik-Stern.
declare vordergrpic&
Window 20,20-800,600
Cls RGB(220,220,220)
vordergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
erzeugestern(vordergrpic&)
drawpic vordergrpic&,20,20;0
WaitKey
end
nProc getCircP(long r,w)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc erzeugestern(long hPic)
Long x,y,r,mypen
long hDCBits=createCompatibleDC(hDC)
selectObject(hDCBits, hPic)
mypen=CreatePen(PS_SOLID, 1,$0000ff)
SelectObject( hDCBits, MyPen )
r=250
whileloop 0,360000,1000
x=getcircp(r,&loop)
y=getcircp(r,&loop+90000)
MoveToEx(hDCBits,250,250,0)
LineTo(hDCBits,250+x,250+y)
EndWhile
deleteDC(hDCBits)
endproc
|
|
|
| |
|
|
|
Jens-Arne Reumschüssel | Das mit den nProcs funktioniert leider aus dem schon angegebenen Grund nicht zuverlässig.
Deshalb habe ich mir die Mühe gemacht, fbProcs einzuführen. "fb" steht dabei für "FreeBasic". Das ist ein kostenloser Basic-Compiler, der nativen Code erzeugt und DLLs erstellen kann. Näheres siehe Hilfe der neuen JRPC3-Version 6. Damit ist man im Ergebnis sogar noch viel flexibler als mit nProcs; Nachteil ist, dass man sich ein ganz klein bisschen FreeBasic aneignen muss. Ist aber eigentlich total einfach.
Ich wünsche viel Spaß beim Ausprobieren!
Beste Grüße, Jens-Arne |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 08.01.2022 ▲ |
|
|
|
|
funkheld | Danke für die Info.
Dieses Freebasic kenne ich , wenn es dieses ist ? [...]
Habe von 2015 noch 2 CD mit eigenen Programmen dafür.
Gruss |
|
|
| |
|
|
|
Jens-Arne Reumschüssel | Ja, das ist es. Bitte noch schnell JRPC V6.00i herunterladen, bei der Version von gestern wurde versucht, die DLL auch dann zu erstellen, wenn es im Profan-Quelltext Fehler gibt. Das resultiert in einem schnöden Absturz von JRPC3 ohne Fehlermeldung, das ist jetzt behoben.
Beste Grüße, Jens-Arne |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 09.01.2022 ▲ |
|
|
|
|
funkheld | Danke. Habe ich neu geladen.
Die Demos funktionieren wunderbar.
Werde mal ein paar Programme von mir umsetzen.
Gruss |
|
|
| |
|
|
|
funkheld | "fbproc gehe" wird nicht erkannt. Meldung : Keyword unbekannt: "gehe"
Gruss
Declare test% SharedInFbProcs
{$FBSYNTAX on}
declare dib&,array&,groesse&,hoehe&,ende&,bild&
DEF CreateDIB(2) !"dib","CreateDIB"
DEF FreeDIB(1) !"dib","FreeDIB"
DEF DrawDIB(4) !"dib","DrawDIB"
DEF CloneDIB(1) !"dib","CloneDIB"
dib&=usedll("dib.dll")
fbProc gehe(ByVal b As Integer, ByVal g as integer)
FOR test% = 0 TO g-735000 step 3
poke byte,test%+g,&hFF0000
next test%
endproc
array&=CreateDIB(700,700)
groesse&=700*700*3
hoehe&=700
Window 20,20-750,800
Cls RGB(255,255,0)
bild&= Long(array&,40)
gehe(bild&,groesse&)
DrawDIB(%hdc,10,10,array&)
WaitKey
FreeDIB(dib&)
End
|
|
|
| |
|
|
|
Jens-Arne Reumschüssel | Die Funktion ist in XProfan nicht sichtbar, weil sie nicht exportiert wird.
Richtig also so: fbProc gehe(ByVal b As Integer, ByVal g As Integer) As Integer Export
Außerdem fehlt am Ende ein return 0.
Globale, mit SharedInFbProcs gepushte XProfan-Variablen können nicht als Laufvariablen für For verwendet werden, weil diese als Pointer abgebildet werden. Hierfür ist also eine eigene lokale Variable zu definieren.
Das ergibt:
fbProc gehe(ByVal b As Integer, ByVal g As Integer) As Integer Export Dim test As Integer FOR test = 0 TO (g-735000) step 3 poke byte,test+g,&hFF0000 next test return 0 endproc
Dabei wirft der FB-Compiler allerdings immer noch eine Warnung aus. Ich kann das Programm nicht testen, weil bei mir die DLL "dib.dll" nicht gefunden wird.
Gruß, Jens-Arne |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 09.01.2022 ▲ |
|
|
|
|
funkheld | Danke für die Hilfe.
Werde weiter ausprobieren.
Gruss |
|
|
| |
|
|
|
p.specht
| Also ich steige an dieser Stelle aus: Eine weitere Programmiersprache erscheint mir faulem Tier nicht mehr zumutbar. Wir haben: Profan-alte Schreibweise bis v11.2a, XProfan an Delphi angelehnte Schreibweise, den eingeschränkten Inline-Assembler von X4, die XPSE-Sprache sowie den voll MASM-kompatiblen jwasm-Assembler, die neuen JRPC3-Standards sowie DLLs die mit PureBasic erstellt wurden. JSON rechne ich nicht als Sprache, aber OGL-Befehle schon. Von dBase und SQLite ganz zu schweigen, das API-Interfacing nicht gerechnet.
Seufz ... XProfan war mal so schön einfach. |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 09.01.2022 ▲ |
|
|
|
|
Jens-Arne Reumschüssel | Ist's doch immer noch . Native Procs sind doch nur für Spezialfälle da, und die FreeBasic-Syntax ist bis auf die Variablendeklaration nichts großartig neues. Aber das muss man ja nicht benutzen, wenn es einem nicht gefällt. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 09.01.2022 ▲ |
|
|
|
|
funkheld | Wenn man Jens-Arne mehr unterstützt hätte bei dem xpse für das xprofan4 dann wäre es für ihn einfacher gewesen einen Weg zu finden damit es funktioniert. Es gibt hier im Forum bestimmt User die das xpse in der Struktur kennen. Aber man hat sich im Forum bedeckt gehalten , warum weiß ich nicht genau.
Wenn man mit Profan etwas erreichen möchte braucht man noch zusätzliche Hilfe die mehr Geschwindigkeit bringen. Dieser Spruch : "XProfan4 hat ja jetzt Inline-ASM" ist für mich keine Aussage. Wir brauchen ein Sprache die auch lesbar ist und das ist xpse oder wie jetzt Freebasic um nicht nur unten herum zu dümpeln.
Ich glaube noch ist es Zeit das man xpse mit XProfan4 zum laufen bringen kann mit den Fachleuten für Jens-Arne. Er hat die stabile Grundlage für das xpse in seiner Schublade. Noch ist es da...
Ich bin 73 Jahre alt und gebe dafür die Hoffnung nicht auf.
Gruss |
|
|
| |
|
|