Adding script load.
Still need to enhance to support script src.
This commit is contained in:
9
Makefile
9
Makefile
@ -346,7 +346,11 @@ $(RES)/ueforth_res64.res: windows/ueforth.rc $(RES)/eforth.ico
|
|||||||
# ---- WEB ----
|
# ---- WEB ----
|
||||||
|
|
||||||
web: web_target web_tests
|
web: web_target web_tests
|
||||||
web_target: $(WEB)/terminal.html $(WEB)/lazy_terminal.html $(WEB)/ueforth.js
|
web_target: \
|
||||||
|
$(WEB)/terminal.html \
|
||||||
|
$(WEB)/lazy_terminal.html \
|
||||||
|
$(WEB)/script_test.html \
|
||||||
|
$(WEB)/ueforth.js
|
||||||
|
|
||||||
$(WEB):
|
$(WEB):
|
||||||
mkdir -p $(WEB)
|
mkdir -p $(WEB)
|
||||||
@ -357,6 +361,9 @@ $(WEB)/terminal.html: web/terminal.html | $(WEB)
|
|||||||
$(WEB)/lazy_terminal.html: web/lazy_terminal.html | $(WEB)
|
$(WEB)/lazy_terminal.html: web/lazy_terminal.html | $(WEB)
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
|
$(WEB)/script_test.html: web/script_test.html | $(WEB)
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
$(WEB)/ueforth.js: \
|
$(WEB)/ueforth.js: \
|
||||||
web/fuse_web.js \
|
web/fuse_web.js \
|
||||||
web/web.template.js \
|
web/web.template.js \
|
||||||
|
|||||||
@ -24,4 +24,8 @@ forth definitions internals
|
|||||||
: ok ." uEforth" raw-ok ;
|
: ok ." uEforth" raw-ok ;
|
||||||
transfer forth
|
transfer forth
|
||||||
forth
|
forth
|
||||||
|
|
||||||
|
( Try to run script tags if any. )
|
||||||
|
web scripts scripts# forth evaluate
|
||||||
|
|
||||||
ok
|
ok
|
||||||
|
|||||||
@ -791,6 +791,17 @@ JSWORD: release { handle }
|
|||||||
context.ReleaseHandle(handle);
|
context.ReleaseHandle(handle);
|
||||||
~
|
~
|
||||||
|
|
||||||
|
JSWORD: importScripts { dst dst_limit -- n }
|
||||||
|
if (context.scripts === undefined) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var data = context.scripts;
|
||||||
|
for (var i = 0; i < dst_limit && i < data.length; ++i) {
|
||||||
|
u8[dst + i] = data[i];
|
||||||
|
}
|
||||||
|
return data.length;
|
||||||
|
~
|
||||||
|
|
||||||
r~
|
r~
|
||||||
context.audio_context = null;
|
context.audio_context = null;
|
||||||
context.audio_channels = [];
|
context.audio_channels = [];
|
||||||
@ -916,6 +927,10 @@ JSWORD: random { n -- n }
|
|||||||
return Math.floor(Math.random() * n);
|
return Math.floor(Math.random() * n);
|
||||||
~
|
~
|
||||||
|
|
||||||
|
0 0 importScripts constant scripts#
|
||||||
|
create scripts scripts# allot
|
||||||
|
scripts scripts# importScripts drop
|
||||||
|
|
||||||
forth definitions web
|
forth definitions web
|
||||||
|
|
||||||
: ms-ticks ms-ticks ;
|
: ms-ticks ms-ticks ;
|
||||||
|
|||||||
26
web/script_test.html
Normal file
26
web/script_test.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Copyright 2022 Bradley D. Nelson
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script type="text/forth">
|
||||||
|
: square dup * ;
|
||||||
|
4 square . cr
|
||||||
|
</script>
|
||||||
|
<script src="ueforth.js"></script>
|
||||||
|
<script type="text/forth">
|
||||||
|
colors
|
||||||
|
bye
|
||||||
|
</script>
|
||||||
@ -233,6 +233,21 @@ function Builtin(name, flags, vocab, opcode) {
|
|||||||
builtins.push([name, flags | BUILTIN_MARK, vocab, opcode]);
|
builtins.push([name, flags | BUILTIN_MARK, vocab, opcode]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function LoadScripts() {
|
||||||
|
if (globalObj.write) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var text = '';
|
||||||
|
var tags = document.getElementsByTagName('script');
|
||||||
|
for (var i = 0; i < tags.length; ++i) {
|
||||||
|
if (tags[i].type == 'text/forth') {
|
||||||
|
text += tags[i].text + '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var encoder = new TextEncoder();
|
||||||
|
context.scripts = encoder.encode(text);
|
||||||
|
}
|
||||||
|
|
||||||
function SetupBuiltins() {
|
function SetupBuiltins() {
|
||||||
for (var i = 0; i < builtins.length; ++i) {
|
for (var i = 0; i < builtins.length; ++i) {
|
||||||
var name = builtins[i][0];
|
var name = builtins[i][0];
|
||||||
@ -608,6 +623,7 @@ function run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Start() {
|
function Start() {
|
||||||
|
LoadScripts();
|
||||||
Init();
|
Init();
|
||||||
setTimeout(run, 0);
|
setTimeout(run, 0);
|
||||||
}
|
}
|
||||||
@ -620,8 +636,7 @@ if (globalObj.write) {
|
|||||||
context.Start = Start;
|
context.Start = Start;
|
||||||
} else {
|
} else {
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
Init();
|
Start();
|
||||||
setTimeout(run, 0);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user