Adding visual editor.
This commit is contained in:
5
Makefile
5
Makefile
@ -215,9 +215,10 @@ COMMON_PHASE2 = common/utils.fs common/locals.fs
|
|||||||
|
|
||||||
COMMON_FILETOOLS = common/tasks.fs common/streams.fs \
|
COMMON_FILETOOLS = common/tasks.fs common/streams.fs \
|
||||||
common/filetools.fs common/including.fs \
|
common/filetools.fs common/including.fs \
|
||||||
common/blocks.fs
|
common/blocks.fs common/ansi.fs \
|
||||||
|
common/visual.fs
|
||||||
|
|
||||||
COMMON_DESKTOP = common/ansi.fs common/desktop.fs \
|
COMMON_DESKTOP = common/desktop.fs \
|
||||||
common/graphics.fs common/graphics_utils.fs common/heart.fs
|
common/graphics.fs common/graphics_utils.fs common/heart.fs
|
||||||
|
|
||||||
POSIX_BOOT = $(COMMON_PHASE1) \
|
POSIX_BOOT = $(COMMON_PHASE1) \
|
||||||
|
|||||||
@ -1,19 +0,0 @@
|
|||||||
\ Copyright 2021 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.
|
|
||||||
|
|
||||||
needs ../posix/termios.fs
|
|
||||||
|
|
||||||
create keymap
|
|
||||||
|
|
||||||
: edit raw-mode begin key . again ;
|
|
||||||
@ -466,10 +466,11 @@ e: check-opcodes
|
|||||||
e: check-desktop
|
e: check-desktop
|
||||||
out: graphics
|
out: graphics
|
||||||
check-args
|
check-args
|
||||||
check-ansi
|
|
||||||
;e
|
;e
|
||||||
|
|
||||||
e: check-filetools
|
e: check-filetools
|
||||||
|
out: visual
|
||||||
|
check-ansi
|
||||||
check-blocks
|
check-blocks
|
||||||
check-imports
|
check-imports
|
||||||
check-snapshots
|
check-snapshots
|
||||||
@ -590,6 +591,7 @@ e: test-esp32-forth-voclist
|
|||||||
out: WiFi
|
out: WiFi
|
||||||
out: Wire
|
out: Wire
|
||||||
out: ESP
|
out: ESP
|
||||||
|
out: ansi
|
||||||
out: editor
|
out: editor
|
||||||
out: streams
|
out: streams
|
||||||
out: tasks
|
out: tasks
|
||||||
@ -606,7 +608,6 @@ e: check-esp32-platform
|
|||||||
out: INPUT
|
out: INPUT
|
||||||
out: HIGH
|
out: HIGH
|
||||||
out: LOW
|
out: LOW
|
||||||
out: page
|
|
||||||
out: tone
|
out: tone
|
||||||
out: freq
|
out: freq
|
||||||
out: duty
|
out: duty
|
||||||
|
|||||||
165
common/visual.fs
Normal file
165
common/visual.fs
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
\ Copyright 2021 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.
|
||||||
|
|
||||||
|
( Lazy loaded visual editor. )
|
||||||
|
|
||||||
|
: visual r|
|
||||||
|
|
||||||
|
also DEFINED? termios [IF] termios [THEN]
|
||||||
|
also internals
|
||||||
|
also ansi
|
||||||
|
also forth
|
||||||
|
current @
|
||||||
|
vocabulary visual visual definitions
|
||||||
|
vocabulary insides insides definitions
|
||||||
|
|
||||||
|
256 constant max-path
|
||||||
|
create filename max-path allot 0 value filename#
|
||||||
|
0 value fileh
|
||||||
|
|
||||||
|
10 constant start-size
|
||||||
|
start-size allocate throw value text
|
||||||
|
start-size value capacity
|
||||||
|
0 value length
|
||||||
|
0 value caret
|
||||||
|
|
||||||
|
: up ( n -- n ) begin dup 0 > over text + c@ nl <> and while 1- repeat 1- 0 max ;
|
||||||
|
: nup ( n -- n ) 10 for up next ;
|
||||||
|
: down ( n -- n ) begin dup length < over text + c@ nl <> and while 1+ repeat 1+ length min ;
|
||||||
|
: ndown ( n -- n ) 10 for down next ;
|
||||||
|
|
||||||
|
: cremit ( ch -- ) dup nl = if drop cr else emit then ;
|
||||||
|
: crtype ( a n -- ) for aft dup c@ cremit 1+ then next drop ;
|
||||||
|
|
||||||
|
: update
|
||||||
|
caret nup dup 0<> if 1+ 1+ then { before }
|
||||||
|
before ndown ndown { after }
|
||||||
|
page
|
||||||
|
text before + caret before - crtype
|
||||||
|
caret length < text caret + c@ nl <> and if
|
||||||
|
1 bg text caret + c@ emit normal
|
||||||
|
text caret + 1+ after caret - 1- 0 max crtype
|
||||||
|
else
|
||||||
|
1 bg space normal
|
||||||
|
text caret + after caret - crtype
|
||||||
|
then normal
|
||||||
|
;
|
||||||
|
|
||||||
|
: insert ( ch -- )
|
||||||
|
length capacity = if text capacity 1+ 2* >r r@ 1+ resize throw to text r> to capacity then
|
||||||
|
text caret + dup 1+ length caret - cmove>
|
||||||
|
text caret + c!
|
||||||
|
1 +to caret
|
||||||
|
1 +to length
|
||||||
|
update
|
||||||
|
;
|
||||||
|
|
||||||
|
: handle-esc
|
||||||
|
key
|
||||||
|
dup [char] [ = if drop
|
||||||
|
key
|
||||||
|
dup [char] A = if drop caret up to caret update exit then
|
||||||
|
dup [char] B = if drop caret down to caret update exit then
|
||||||
|
dup [char] C = if drop caret 1+ length min to caret update exit then
|
||||||
|
dup [char] D = if drop caret 1- 0 max to caret update exit then
|
||||||
|
dup [char] 5 = if drop key drop caret 8 for up next to caret update exit then
|
||||||
|
dup [char] 6 = if drop key drop caret 8 for down next to caret update exit then
|
||||||
|
drop
|
||||||
|
exit
|
||||||
|
then
|
||||||
|
drop
|
||||||
|
;
|
||||||
|
|
||||||
|
: delete
|
||||||
|
length caret > if
|
||||||
|
text caret + dup 1+ swap length caret - 1- 0 max cmove
|
||||||
|
-1 +to length
|
||||||
|
update
|
||||||
|
then
|
||||||
|
;
|
||||||
|
|
||||||
|
: backspace
|
||||||
|
caret 0 > if
|
||||||
|
-1 +to caret
|
||||||
|
delete
|
||||||
|
then
|
||||||
|
;
|
||||||
|
|
||||||
|
: load ( a n -- )
|
||||||
|
0 to caret
|
||||||
|
dup to filename#
|
||||||
|
filename swap cmove
|
||||||
|
filename filename# r/o open-file 0= if
|
||||||
|
to fileh
|
||||||
|
fileh file-size throw to capacity
|
||||||
|
text capacity 1+ resize throw to text
|
||||||
|
capacity to length
|
||||||
|
text length fileh read-file throw drop
|
||||||
|
fileh close-file throw
|
||||||
|
else
|
||||||
|
drop
|
||||||
|
then
|
||||||
|
;
|
||||||
|
|
||||||
|
: save
|
||||||
|
filename filename# w/o create-file throw to fileh
|
||||||
|
text length fileh write-file throw
|
||||||
|
fileh close-file throw
|
||||||
|
;
|
||||||
|
|
||||||
|
: quit-edit
|
||||||
|
page filename filename# type cr ." SAVE? "
|
||||||
|
begin
|
||||||
|
key 95 and
|
||||||
|
dup [char] Y = if drop save 123 throw then
|
||||||
|
dup [char] N = if drop 123 throw then
|
||||||
|
drop
|
||||||
|
again
|
||||||
|
;
|
||||||
|
|
||||||
|
: handle-key ( ch -- )
|
||||||
|
dup 27 = if drop handle-esc exit then
|
||||||
|
dup [char] D [char] @ - = if delete exit then
|
||||||
|
dup [char] H [char] @ - = over 127 = or if drop backspace exit then
|
||||||
|
dup [char] L [char] @ - = if drop update exit then
|
||||||
|
dup [char] S [char] @ - = if drop save update exit then
|
||||||
|
dup [char] X [char] @ - = if drop quit-edit then
|
||||||
|
dup [char] Q [char] @ - = if drop quit-edit then
|
||||||
|
dup 13 = if drop nl insert exit then
|
||||||
|
dup bl >= if insert else drop then
|
||||||
|
;
|
||||||
|
|
||||||
|
: ground depth 0<> throw ;
|
||||||
|
: step *key handle-key ground ;
|
||||||
|
|
||||||
|
DEFINED? raw-mode 0= [IF]
|
||||||
|
: raw-mode ;
|
||||||
|
: normal-mode ;
|
||||||
|
[THEN]
|
||||||
|
|
||||||
|
: run
|
||||||
|
raw-mode update
|
||||||
|
begin
|
||||||
|
['] step catch
|
||||||
|
dup 123 = if drop normal-mode page exit then
|
||||||
|
if ." FAILURE!" then
|
||||||
|
again
|
||||||
|
;
|
||||||
|
|
||||||
|
visual definitions insides
|
||||||
|
|
||||||
|
: edit ( <filename> ) bl parse load run ;
|
||||||
|
|
||||||
|
previous previous previous previous current ! visual
|
||||||
|
| evaluate ;
|
||||||
@ -45,9 +45,6 @@ also ledc also serial also SPIFFS
|
|||||||
: freq ( n n -- ) 1000 * 13 ledcSetup drop ;
|
: freq ( n n -- ) 1000 * 13 ledcSetup drop ;
|
||||||
: tone ( n n -- ) 1000 * ledcWriteTone drop ;
|
: tone ( n n -- ) 1000 * ledcWriteTone drop ;
|
||||||
|
|
||||||
( Utilities )
|
|
||||||
: page 30 for cr next ;
|
|
||||||
|
|
||||||
( Basic Ardiuno Constants )
|
( Basic Ardiuno Constants )
|
||||||
0 constant LOW
|
0 constant LOW
|
||||||
1 constant HIGH
|
1 constant HIGH
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
:noname [ ' web-interface >body @ ] literal execute
|
:noname [ ' web-interface >body @ ] literal execute
|
||||||
r|
|
r|
|
||||||
also streams also WiFi also web-interface
|
also streams also sockets also WiFi also web-interface
|
||||||
|
|
||||||
: login ( z z -- )
|
: login ( z z -- )
|
||||||
WIFI_MODE_STA Wifi.mode
|
WIFI_MODE_STA Wifi.mode
|
||||||
|
|||||||
Reference in New Issue
Block a user