Aktuelle Zeit: 18.11.2018 18:00

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: spiderbasic with newlisp-js
BeitragVerfasst: 26.08.2018 19:59 
Offline

Registriert: 30.08.2004 17:32
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

_________________
Hans-Peter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 14.09.2018 05:22 
Offline

Registriert: 24.11.2014 19:23
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 14.09.2018 18:33 
Offline

Registriert: 30.08.2004 17:32
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

_________________
Hans-Peter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 15.09.2018 17:47 
Offline

Registriert: 24.11.2014 19:23
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

Code:
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:
<!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>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 15.09.2018 18:12 
Offline

Registriert: 30.08.2004 17:32
Hallo,

Hier mal meine bisherige Version:

newlisp.sbi
Code:
;newlisp-js for SpiderBasic
;Version     : 1.0.0

DeclareModule NEWLISP
  ;-Engine.sbi
  Declare.s  newlispCall(sourcestring.s)
EndDeclareModule

Module NEWLISP
  IncludeFile "nlengine.sbi"   
EndModule


nlengine.sbi
Code:
;newlisp-js for SpiderBasic : Nlengine

Procedure.s newlispCall(sourcestring$)   
!     v_callnewlispresultstr = newlispEvalStr(v_sourcestring$);     
      ProcedureReturn callnewlispresultstr.s
EndProcedure


Newlisp.sb
Code:
;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


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,

_________________
Hans-Peter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 15.09.2018 22:23 
Offline

Registriert: 24.11.2014 19:23
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 ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: spiderbasic with newlisp-js
BeitragVerfasst: 16.09.2018 08:30 
Offline

Registriert: 30.08.2004 17:32
Hallo,

Prima das es jetzt klappt.

Zitat:
...auch an die vielen Klammern ;-)


was für einen Lisp Neuling zunächst abschreckend wirkt ist eigentlich eine Stärke.
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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye