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
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.