Refactor, starting audio.
This commit is contained in:
135
web/platform.fs
135
web/platform.fs
@ -86,6 +86,22 @@ if (!globalObj.write) {
|
|||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
context.handles = [];
|
||||||
|
context.free_handles = [];
|
||||||
|
context.next_handle = 1;
|
||||||
|
context.AllotHandle = function() {
|
||||||
|
if (context.free_handles.length) {
|
||||||
|
return context.free_handles.pop();
|
||||||
|
}
|
||||||
|
return context.next_handle++;
|
||||||
|
};
|
||||||
|
context.ReleaseHandle = function(id) {
|
||||||
|
if (context.handles[id] !== null) {
|
||||||
|
context.handles[id] = null;
|
||||||
|
context.free_handles.push(id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
context.terminal = document.createElement('div');
|
context.terminal = document.createElement('div');
|
||||||
context.terminal.style.width = '100%';
|
context.terminal.style.width = '100%';
|
||||||
context.terminal.style.whiteSpace = 'pre-wrap';
|
context.terminal.style.whiteSpace = 'pre-wrap';
|
||||||
@ -554,7 +570,9 @@ r|
|
|||||||
}
|
}
|
||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 6 jseval! 6 call echo !
|
| 6 jseval!
|
||||||
|
: shouldEcho? 6 call ;
|
||||||
|
shouldEcho? echo !
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -566,6 +584,9 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 7 jseval!
|
| 7 jseval!
|
||||||
|
: grmode ( mode -- ) 7 call ;
|
||||||
|
: gr 1 grmode ;
|
||||||
|
: text 0 grmode ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -587,6 +608,9 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 8 jseval!
|
| 8 jseval!
|
||||||
|
: rawbox ( x y w h col -- ) 8 call ;
|
||||||
|
$ffffff value color
|
||||||
|
: box ( x y w h -- ) color rawbox ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -600,6 +624,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 9 jseval!
|
| 9 jseval!
|
||||||
|
: window ( w h -- ) 9 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -613,6 +638,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 10 jseval!
|
| 10 jseval!
|
||||||
|
: viewport@ ( -- w h ) 10 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -627,6 +653,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 11 jseval!
|
| 11 jseval!
|
||||||
|
: textRatios ( tf mp -- ) ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -634,6 +661,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 12 jseval!
|
| 12 jseval!
|
||||||
|
: mobile ( -- f ) 12 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -641,6 +669,14 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 13 jseval!
|
| 13 jseval!
|
||||||
|
: keys-height ( -- n ) 13 call ;
|
||||||
|
|
||||||
|
: show-text ( f -- )
|
||||||
|
if
|
||||||
|
mobile if 3000 120 keys-height + else 1667 120 then
|
||||||
|
else
|
||||||
|
mobile if 0 keys-height else 0 0 then
|
||||||
|
then textRatios ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -653,6 +689,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 14 jseval!
|
| 14 jseval!
|
||||||
|
: translate ( x y ) 14 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -666,6 +703,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 15 jseval!
|
| 15 jseval!
|
||||||
|
: scale ( x y div ) 15 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -678,6 +716,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 16 jseval!
|
| 16 jseval!
|
||||||
|
: rotate ( angle div ) 16 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -688,6 +727,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 17 jseval!
|
| 17 jseval!
|
||||||
|
: gpush 17 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -698,6 +738,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 18 jseval!
|
| 18 jseval!
|
||||||
|
: gpop 18 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -709,6 +750,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 19 jseval!
|
| 19 jseval!
|
||||||
|
: smooth ( f -- ) 19 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -730,6 +772,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 20 jseval!
|
| 20 jseval!
|
||||||
|
: setItem ( a n a n sess -- ) 20 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -757,6 +800,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 21 jseval!
|
| 21 jseval!
|
||||||
|
: getItem ( a n a n sess -- n ) 21 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -784,6 +828,7 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 22 jseval!
|
| 22 jseval!
|
||||||
|
: getKey ( a n sess -- n ) 22 call ;
|
||||||
|
|
||||||
r|
|
r|
|
||||||
(function(sp) {
|
(function(sp) {
|
||||||
@ -801,33 +846,73 @@ r|
|
|||||||
return sp;
|
return sp;
|
||||||
})
|
})
|
||||||
| 23 jseval!
|
| 23 jseval!
|
||||||
|
: keyCount ( sess -- n ) 23 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var handle = i32[sp>>2]; sp -= 4;
|
||||||
|
context.ReleaseHandle(handle);
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 24 jseval!
|
||||||
|
: release ( handle -- ) 24 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var i = context.AllotHandle();
|
||||||
|
sp += 4; i32[sp>>2] = i;
|
||||||
|
context.handles[i] = new AudioContext();
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 25 jseval!
|
||||||
|
: newAudioContext ( -- h ) 25 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var audio_ctx = i32[sp>>2]; sp -= 4;
|
||||||
|
var i = context.AllotHandle();
|
||||||
|
sp += 4; i32[sp>>2] = i;
|
||||||
|
context.handles[i] = context.handles[audio_ctx].createOscillator();
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 26 jseval!
|
||||||
|
: createOscillator ( h -- h ) 26 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var audio_ctx = i32[sp>>2]; sp -= 4;
|
||||||
|
var i = context.AllotHandle();
|
||||||
|
sp += 4; i32[sp>>2] = i;
|
||||||
|
context.handles[i] = context.handles[audio_ctx].createGain();
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 27 jseval!
|
||||||
|
: createGain ( h -- h ) 27 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var audio_ctx = i32[sp>>2]; sp -= 4;
|
||||||
|
var i = context.AllotHandle();
|
||||||
|
sp += 4; i32[sp>>2] = i;
|
||||||
|
context.handles[i] = context.handles[audio_ctx].createBiquadFilter();
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 28 jseval!
|
||||||
|
: createBiquadFilter ( h -- h ) 28 call ;
|
||||||
|
|
||||||
|
r|
|
||||||
|
(function(sp) {
|
||||||
|
var audio_ctx = i32[sp>>2]; sp -= 4;
|
||||||
|
var i = context.AllotHandle();
|
||||||
|
sp += 4; i32[sp>>2] = i;
|
||||||
|
context.handles[i] = context.handles[audio_ctx].createBufferSource();
|
||||||
|
return sp;
|
||||||
|
})
|
||||||
|
| 29 jseval!
|
||||||
|
: createBufferSource ( h -- h ) 29 call ;
|
||||||
|
|
||||||
forth definitions web
|
forth definitions web
|
||||||
|
|
||||||
: bye 0 terminate ;
|
: bye 0 terminate ;
|
||||||
: gr 1 7 call ;
|
|
||||||
: text 0 7 call ;
|
|
||||||
: mobile ( -- f ) 12 call ;
|
|
||||||
: keys-height ( -- n ) 13 call ;
|
|
||||||
$ffffff value color
|
|
||||||
: box ( x y w h -- ) color 8 call ;
|
|
||||||
: window ( w h -- ) 9 call ;
|
|
||||||
: viewport@ ( -- w h ) 10 call ;
|
|
||||||
: show-text ( f -- )
|
|
||||||
if
|
|
||||||
mobile if 3000 120 keys-height + else 1667 120 then
|
|
||||||
else
|
|
||||||
mobile if 0 keys-height else 0 0 then
|
|
||||||
then 11 call ;
|
|
||||||
: translate ( x y ) 14 call ;
|
|
||||||
: scale ( x y div ) 15 call ;
|
|
||||||
: rotate ( angle div ) 16 call ;
|
|
||||||
: gpush 17 call ;
|
|
||||||
: gpop 18 call ;
|
|
||||||
: smooth ( f -- ) 19 call ;
|
|
||||||
: setItem ( a n a n sess -- ) 20 call ;
|
|
||||||
: getItem ( a n a n sess -- n ) 21 call ;
|
|
||||||
: getKey ( a n sess -- n ) 22 call ;
|
|
||||||
: keyCount ( sess -- n ) 23 call ;
|
|
||||||
|
|
||||||
forth definitions
|
forth definitions
|
||||||
|
|||||||
Reference in New Issue
Block a user