Hallo,
Seit einiger Zeit habe ich mich für die Integration des newlisp-js Interpreters in spiderbasic interessiert.
https://forums.spiderbasic.com/viewtopi ... =16&t=1174
Zunächst ging es nicht recht voran.
Mit der Entwicklung von falsam's Babylon Modul und Peter's HtmlPreprozessor waren die Möglichkeiten aber nun vorhanden.
Hier ist dann mal ein erster Test:
Test-app: http://www.hpwsoft.de/nls/
Ich hoffe das Fred in einer zukünftigen Version von sb die Möglichkeit zur Einbettung beliebiger Javascript codes an beliebigen Stellen im generiertem Code ermöglicht.
Grüsse,
Hans-Peter
spiderbasic with newlisp-js
Re: spiderbasic with newlisp-js
Hallo Hans-Peter,
Scripte sind doch immer wieder etwas tolles
Der Link zu deinem Beispiel spiderlisp.zip unter Spiderbasic funktioniert leider nicht
Könntest Du bitte danach schauen?
VG
Wolfgang
Scripte sind doch immer wieder etwas tolles
Der Link zu deinem Beispiel spiderlisp.zip unter Spiderbasic funktioniert leider nicht
Könntest Du bitte danach schauen?
VG
Wolfgang
Re: spiderbasic with newlisp-js
Hallo Wolfgang,
Das Zip war nur eine Beispiel Html und die newlisp-js lib für den gesuchten Erst-Helfer zum Spiderbasic-Start.
Da hat sich dann leider nichts getan. Vom Mitlesen der Probleme beim Babylon-js projekt bin ich dann selber zur Lösung gekommen. Daher hatte ich aufgeräumt und die Testdaten-Zip gelöscht. Habe den Link gelöscht.
Den bisherigen Stand sieht man wie schon gepostet hier: http://www.hpwsoft.de/nls/
Der Jnfo-Button verlinkt zu:
http://www.hpwsoft.de/nl/README.html
Eine komplette IDE:
http://www.hpwsoft.de/nlide/
Oder worum geht es?
Grüsse,
Hans-Peter
Das Zip war nur eine Beispiel Html und die newlisp-js lib für den gesuchten Erst-Helfer zum Spiderbasic-Start.
Da hat sich dann leider nichts getan. Vom Mitlesen der Probleme beim Babylon-js projekt bin ich dann selber zur Lösung gekommen. Daher hatte ich aufgeräumt und die Testdaten-Zip gelöscht. Habe den Link gelöscht.
Den bisherigen Stand sieht man wie schon gepostet hier: http://www.hpwsoft.de/nls/
Der Jnfo-Button verlinkt zu:
http://www.hpwsoft.de/nl/README.html
Eine komplette IDE:
http://www.hpwsoft.de/nlide/
Oder worum geht es?
Grüsse,
Hans-Peter
Hans-Peter
Re: spiderbasic with newlisp-js
Hallo Hans-Peter
habe es mir noch ein wenig angeschaut - aber dieser entscheidende Hinweis, der fehlt mir noch:
Deins funktioniert ja soweit
In etwa ist meine Nachbildung das von dir, doch wie bekomme ich das Ganze lauffähig?
Das Script im HTML unter Body habe ich manuell eingefügt.
Worum es geht? Nicht unbedingt um das Ergebnis als vielmehr um die nötigen Schritte
und die HTML-seite sieht in etwa so aus:
habe es mir noch ein wenig angeschaut - aber dieser entscheidende Hinweis, der fehlt mir noch:
Deins funktioniert ja soweit
In etwa ist meine Nachbildung das von dir, doch wie bekomme ich das Ganze lauffähig?
Das Script im HTML unter Body habe ich manuell eingefügt.
Worum es geht? Nicht unbedingt um das Ergebnis als vielmehr um die nötigen Schritte
Code: Alles auswählen
Enumeration
#window1
#G_script
#G_combo
#G_runlisp
#G_edit
EndEnumeration
Procedure.s lispcall(in1$)
Protected temp$="nil"
! temp$ = newlispEvalStr(in1$)
temp$ = temp$ +"t"
ProcedureReturn temp$
EndProcedure
Procedure gadgetevents()
Protected newlispresultstr$=""
Select EventGadget()
Case #G_combo
SetGadgetText(#G_script,GetGadgetText(#G_combo))
Case #G_runlisp
Debug GetGadgetText(#G_script)
Debug lispcall(GetGadgetText(#G_script))
newlispresultstr$ = lispcall(GetGadgetText(#G_script))
SetGadgetText(#G_edit,newlispresultstr$);
EndSelect
ProcedureReturn 0;
EndProcedure
If (OpenWindow(#window1,100,100,400,430,"Lisp Test"))
top=20;
gadgetheight=28;
ComboBoxGadget(#G_combo,20,top,360,gadgetheight);
top=(top+30);
AddGadgetItem(#G_combo,-1,"(sys-info)");
AddGadgetItem(#G_combo,-1,"(symbols)");
AddGadgetItem(#G_combo,-1,"(setq Test1 10)");
AddGadgetItem(#G_combo,-1,"(setq Test2(+ Test1 20))");
AddGadgetItem(#G_combo,-1,"Test1");
AddGadgetItem(#G_combo,-1,"Test2");
SetGadgetState(#G_combo,0);
StringGadget(#G_script,20,top,360,gadgetheight,"");
top=(top+30);
ButtonGadget(#G_runlisp,20,top,360,gadgetheight,"run lisp");
top=(top+30);
EditorGadget(#G_edit,20,top,360,270);
StringGadget(7,20,390,360,gadgetheight,"");
DisableGadget(#G_runlisp,1);
DisableGadget(7,1);
GadgetToolTip(#G_combo,"auswahl");
GadgetToolTip(#G_runlisp,"lisp");
SetGadgetText(#G_script,GetGadgetText(#G_combo))
Debug "START"
BindEvent(#PB_Event_Gadget,@gadgetevents());
EndIf
und die HTML-seite sieht in etwa so aus:
Code: Alles auswählen
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script type="text/javascript">var spider = {}; spider.nbModules = 1; spider.nbLoadedModules = 0;</script>
<title>test</title>
<script type="text/javascript">function onLoad() { spiderCheckBrowser(); }</script>
<script type="text/javascript" src="spiderbasic/platform.js"></script>
<script type="text/javascript" src="spiderbasic/init.js"></script>
<script type="text/javascript">dojoConfig.baseUrl = 'spiderbasic/'; </script>
<script type="text/javascript" src="spiderbasic/dojo/dojo.js"></script>
<script type="text/javascript" src="spiderbasic/main.js"></script>
<script type="text/javascript" src="spiderbasic/debug.js"></script>
<link rel="stylesheet" href="spiderbasic/dojo/themes/flat/flat.css" />
<link rel="stylesheet" href="spiderbasic/dojo/dgrid/css/dgrid.css" />
<script type="text/javascript" src="spiderbasic/xdate.min.js"></script>
<link rel="stylesheet" title="Default" href="spiderbasic/themes/flat/window.css" type="text/css"/>
<script type="text/javascript" src="spiderbasic.js"></script>
</head>
<body oncontextmenu="return false;" class="flat" id="spiderbody" onload="onLoad()">
<script type='text/javascript'>
var Module = {
preRun: [],
postRun: [(function() {
newlispEvalStr = Module.cwrap('newlispEvalStr', 'string', ['string']);
})],
print: (function() { return function(text) { }; })(),
printErr: function(text) { },
setStatus: function(text) {
spider_DisableGadget(#G_runlisp,0);
spider_SetGadgetText(7,text);
}
};
</script>
<script async type="text/javascript" src="newlisp-js-lib.js"></script>
</body>
</html>
Re: spiderbasic with newlisp-js
Hallo,
Hier mal meine bisherige Version:
newlisp.sbi
nlengine.sbi
Newlisp.sb
Mittels des Tools HtmlPreprocessor wird die JavaScript-Ladefunction eingebaut die nach dem asycronen Laden im postrun die funtionen definiert bzw ausführt. Das wird vom emscripten-code so aufgerufen.
Edit: Noch ein Hinweiss: Lokal nur mit Firefox und auf Server mit allen 'modernen' Browsern.
Grüsse,
Hier mal meine bisherige Version:
newlisp.sbi
Code: Alles auswählen
;newlisp-js for SpiderBasic
;Version : 1.0.0
DeclareModule NEWLISP
;-Engine.sbi
Declare.s newlispCall(sourcestring.s)
EndDeclareModule
Module NEWLISP
IncludeFile "nlengine.sbi"
EndModule
Code: Alles auswählen
;newlisp-js for SpiderBasic : Nlengine
Procedure.s newlispCall(sourcestring$)
! v_callnewlispresultstr = newlispEvalStr(v_sourcestring$);
ProcedureReturn callnewlispresultstr.s
EndProcedure
Code: Alles auswählen
;newlisp.sbi - Simple Test
;! <HtmlPreprocessor>
;! [
;! {
;! "search": "</body>",
;! "replace": " <script type='text/javascript'>\n
;! var Module = {\n
;! preRun: [],\n
;! postRun: [(function() {\n
;! newlispEvalStr = Module.cwrap('newlispEvalStr', 'string', ['string']); \n
;! })],\n
;! print: (function() { return function(text) { }; })(),\n
;! printErr: function(text) { },\n
;! setStatus: function(text) {\n
;! spider_DisableGadget(3,0);\n
;! spider_SetGadgetText(7,text);\n
;! }\n
;! };\n
;! </script>\n
;!<script async type=\"text/javascript\" src=\"newlisp-js-lib.js\"></script>\n
;!</body>"
;! }
;! ]
;! </HtmlPreprocessor>
IncludeFile "newlisp/newlisp.sbi"
UseModule NEWLISP
#WindowWidth = 400
#WindowHeight = 430
Procedure CloseWindowEvent()
CloseWindow(EventWindow())
EndProcedure
Procedure GadgetEvents()
Select EventGadget()
Case 1 ; Select
SetGadgetText(2, GetGadgetText(1)) ; Get the current item from the Combobox.
Case 3 ; Call
newlispsource.s = GetGadgetText(2)
; Debug newlispsource
; ! alert (v_newlispsource);
; ! v_newlispresultstr = newlispEvalStr(v_newlispsource);
; Debug newlispresultstr
newlispresultstr.s = newlispCall(newlispsource.s)
; Debug newlispresultstr
SetGadgetText(6,newlispresultstr)
Case 4 ; Info
!window.open('README.html','MsgWindow');
Case 5 ; Doku
!window.open('manual_frame.html','MsgWindow');
EndSelect
EndProcedure
If OpenWindow(0, 100, 100, #WindowWidth, #WindowHeight, "newlisp-js Demonstration", #PB_Window_TitleBar)
Top = 20
GadgetHeight = 28
ComboBoxGadget(1, 20, Top, 360, GadgetHeight) : Top+30
AddGadgetItem(1, -1, "(sys-info)")
AddGadgetItem(1, -1, "(symbols)")
AddGadgetItem(1, -1, "(setq Test1 10)")
AddGadgetItem(1, -1, "(setq Test2(+ Test1 20))")
AddGadgetItem(1, -1, "Test1")
AddGadgetItem(1, -1, "Test2")
SetGadgetState(1,0)
StringGadget(2, 20, Top, 360, GadgetHeight, "(sys-info)") : Top+30
ButtonGadget(3, 20, Top, 100, GadgetHeight, "newlisp-call")
ButtonGadget(4, 130, Top, 120, GadgetHeight, "newlisp-js info")
ButtonGadget(5, 260, Top, 120, GadgetHeight, "newlisp-js Doku") : Top+30
EditorGadget(6, 20, Top, 360, 270)
StringGadget(7, 20, 390, 360, GadgetHeight, "")
DisableGadget(3,1)
DisableGadget(7,1)
GadgetToolTip(1,"Select newlisp string")
GadgetToolTip(2,"Enter newlisp string")
GadgetToolTip(3,"Call newlisp string")
BindEvent(#PB_Event_Gadget, @GadgetEvents())
BindEvent(#PB_Event_CloseWindow, @CloseWindowEvent())
CompilerIf #PB_Compiler_OS <> #PB_OS_Web
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CompilerEndIf
EndIf
Edit: Noch ein Hinweiss: Lokal nur mit Firefox und auf Server mit allen 'modernen' Browsern.
Grüsse,
Hans-Peter
Re: spiderbasic with newlisp-js
Ja, das hat geklappt.
Zwar noch nicht lokal auf dem IIS aber auf dem NAS.
Solche kleinen Projekte kann ich ganz gut verstehen - da ist immer noch genug neues für mich dabei,
vielen Dank.
Ich erinnere mich auch wieder: "Land of Lisp, die Mutter der funktionalen Programmiersprachen" und
auch an die vielen Klammern
Zwar noch nicht lokal auf dem IIS aber auf dem NAS.
Solche kleinen Projekte kann ich ganz gut verstehen - da ist immer noch genug neues für mich dabei,
vielen Dank.
Ich erinnere mich auch wieder: "Land of Lisp, die Mutter der funktionalen Programmiersprachen" und
auch an die vielen Klammern
Re: spiderbasic with newlisp-js
Hallo,
Prima das es jetzt klappt.
Mit einem guten Editor verliert es das Problem.
Wenn die Strukturen dann mal etwas umfangreicher werden, weiss man es zu schätzen wenn man von der öffnenen Klammer zur schliessenden springen kann.
Und Lisp mit seinem fliessendem Übergang von Code zu Daten und anders rum, hat damit eine enorme Mächtigkeit.
Newlisp darf man auch nicht mit den Common-Lisp Dickschiffen in einen Hut werfen.
Klein und kompakt, läuft fast überall und trotzdem relativ mächtig.
Grüsse,
Hans-Peter
Prima das es jetzt klappt.
was für einen Lisp Neuling zunächst abschreckend wirkt ist eigentlich eine Stärke....auch an die vielen Klammern
Mit einem guten Editor verliert es das Problem.
Wenn die Strukturen dann mal etwas umfangreicher werden, weiss man es zu schätzen wenn man von der öffnenen Klammer zur schliessenden springen kann.
Und Lisp mit seinem fliessendem Übergang von Code zu Daten und anders rum, hat damit eine enorme Mächtigkeit.
Newlisp darf man auch nicht mit den Common-Lisp Dickschiffen in einen Hut werfen.
Klein und kompakt, läuft fast überall und trotzdem relativ mächtig.
Grüsse,
Hans-Peter
Hans-Peter