|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#######
#
# E-scripts on PForth, TinyScript/Minotaur, PFE and (old) GForth.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
# (find-eev-quick-intro)
# http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/forth.e>
# or at <http://angg.twu.net/e/forth.e.html>.
# See also <http://angg.twu.net/emacs.html>,
# <http://angg.twu.net/.emacs[.html]>,
# <http://angg.twu.net/.zshrc[.html]>,
# <http://angg.twu.net/escripts.html>,
# and <http://angg.twu.net/>.
#
#######
# «.retro» (to "retro")
# «.gforth-0.4» (to "gforth-0.4")
# «.gforth_rr» (to "gforth_rr")
# «.ts2» (to "ts2")
# «.ts2b» (to "ts2b")
# «.pforth» (to "pforth")
# «.pforth-custom0» (to "pforth-custom0")
# «.first_pfcustom.c» (to "first_pfcustom.c")
# «.crim1_on_pfe» (to "crim1_on_pfe")
# «.pforth_and_tcl» (to "pforth_and_tcl")
# «.epforth» (to "epforth")
# «.gforth-bytecode» (to "gforth-bytecode")
# «.tasker» (to "tasker")
# «.pfe-0.33» (to "pfe-0.33")
# «.pforth-2011» (to "pforth-2011")
# «.yforth» (to "yforth")
# «.forth2012» (to "forth2012")
# «.pentom» (to "pentom")
# «.hakkinen-f» (to "hakkinen-f")
# «.elforth» (to "elforth")
# «.forth-mode» (to "forth-mode")
# «.chuck-moore-5-lines» (to "chuck-moore-5-lines")
#####
#
# retro
# 2000nov10
#
#####
# «retro» (to ".retro")
# (find-es "retro")
#*
# retro2 needs a drive "r" for mtools stuff.
# We create one in /tmp.
# Tcn said that retro2 is an abomination compared to retro3, but anyway.
# (find-fline "/usr/src/retro/INSTALL")
# (find-fline "/etc/mtools.conf" "drives_for_retro")
#drive r: file="/tmp/floppy-r"
dd if=/dev/zero of=/tmp/floppy-r bs=1024 count=1440
mkdosfs /tmp/floppy-r
mdir r:
#*
rm -Rv /usr/src/retro/
cd /usr/src/
tar -xvzf $S/http/retro.tunes.org/pub/retro2/retro-19991119.tar.gz
cd /usr/src/retro/
make options
make |& tee om
#*
# (find-fline "/usr/src/retro/")
# (find-fline "/usr/src/retro/INSTALL")
# (find-fline "/usr/src/retro/om")
# (find-fline "/etc/mtools.conf")
#drive r: file="/r/retro/kernel/dosimage"
#drive s: file="/r/retro/kernel/hdimage" offset=17920
#*
# This is for retro3, that tcn said that doesn't do much.
rm -Rv /usr/src/fos/
cd /usr/src/
tar -xvzf $S/http/retro.tunes.org/pub/retro3/fos-0812.tgz
cd /usr/src/fos/
gforth retro.f
#*
# (code-c-d "retro3" "/usr/src/fos/")
# (find-retro3file "")
# (find-retro3file "README")
# (find-retro3file "retro.f")
# (find-fline "/usr/src/fos/")
# (find-fline "/usr/src/fos/README")
lynx http://retro.tunes.org/pub/retro3/
# (find-node "(gforth)Blocks")
zcatinfo /usr/share/info/gforth > /tmp/gf
# (find-fline "/tmp/gf")
# (find-fline "/usr/doc/gforth/")
#####
#
# gforth 0.4.9 (potato)
# 2000oct20
#
#####
# (find-status "gforth")
# (find-vldifile "gforth.list")
# (find-fline "/usr/doc/gforth/")
# (code-c-d "gfshare" "/usr/share/gforth/0.4.9-19990617/" "gforth")
# (find-gfsharefile "")
# (find-node "(gforth)Top")
# (find-node "(gforth)Engine")
# (find-node "(gforth)Emacs and Gforth")
# (autoload 'forth-mode "gforth.el")
# (setq auto-mode-alist (cons '("\\.fs\\'" . forth-mode) auto-mode-alist))
# (find-fline "/etc/emacs/site-start.d/50gforth.el")
# (find-sitelispfile "gforth.el")
# (find-sitelispfile "gforth.el" "defun run-forth")
# (find-sitelispfile "gforth.el" "defun forth-send-string")
# (find-sitelispfile "gforth.el" "'forth-send-buffer")
# (find-sitelispfile "gforth.el" "'forth-send-paragraph")
# (find-sitelispfile "gforth.el" "\n Forth-send-paragraph")
# (load-library "gforth")
# (forth-mode)
# (define-key forth-mode-map "\eo" nil)
# (run-forth "gforth")
# (describe-mode)
1 2 + .
# (kill-buffer "*forth*")
######
#
# GForth 0.4.0 (potato, on hamm)
# 99dec03
#
######
# (find-vldifile "gforth.list")
# (find-fline "/usr/doc/gforth/")
# (code-c-d "gfshare" "/usr/share/gforth/0.4.0/")
# (find-gfsharefile "")
# (find-es "zsh" "heredoc")
# (find-gfsharefile "kernel/comp.fs" "Defers")
#*
clear
heredoc /tmp/test0.fs -m 766 <<'---'
#! /usr/bin/gforth
: test0 40 4 at-xy ." Hi" 40 14 at-xy ." Bye" ;
test0
bye
---
/tmp/teste.fs
#*
gforth <<'---'
: teste 40 11 at-xy ." Oi" ;
:noname defers 'cold
teste bye ; is 'cold
savesystem /tmp/teste.fi
bye
---
gforth -i /tmp/teste.fi
#####
#
# x3j14 (pdf)
#
#####
# (find-fline "/snarf/ftp/ftp.uu.net/vendor/minerva/x3j14/")
gv /snarf/ftp/ftp.uu.net/vendor/minerva/x3j14/drafts/dpans99a.pdf &
######
#
# gforth 0.3.0 hamm
#
######
pdsc /debian/main/source/interpreters/gforth_0.3.0-3.dsc
cd /usr/src/gforth-0.3.0/
dpkg -i ~/HASH/gforth
# (code-c-d "g4" "/usr/share/gforth/0.3.0/" "gforth")
# (find-g4node "Top")
# (find-g4file "")
# (find-g4tag "words")
words cr
context @ @ name>string
.s
nip 2 + +
.s
.name
cr
0 context @ .s name>string .s
: vords ( -- ) \ tools
cr 0 context @
BEGIN
@ dup
WHILE
2dup name>string ~~ nip 2 + dup >r +
drop
dup ~~ .name cr r> rot + swap
REPEAT
2drop ;
vords
# (find-g4node "Concept Index" "debug tracer")
# (find-g4node "Emacs and Gforth")
# (find-fline "/etc/emacs/site-start.d/50gforth.el")
# (find-fline "/usr/share/emacs/site-lisp/gforth.el")
: foo
cr 0 context @
@
2dup name>string nip 2 + dup >r +
dup .name cr r> rot + swap ;
foo cr
# (forth-mode)
cd /usr/src/gforth-0.3.0/
cd /usr/share/gforth/0.3.0/
# (find-g4file "debug.fs")
# (find-g4file "debugging.fs")
######
#
# GForth 0.3.0
#
######
cd /usr/src/
rm -Rv gforth-0.3.0/
tar -xvzf /snarf/ftp/prep.ai.mit.edu/pub/gnu/gforth-0.3.0.tar.gz
cd /usr/src/gforth-0.3.0/
./configure |& tee oc
# segfault loop at:
# (find-gffile "om" "-o gforth-ditc")
# (find-gffile "gforth-makeimage")
# (find-gffile "Makefile" "GFORTHD=")
# (find-gffile "om" "-o engine-ditc.o")
# (find-gffile "om" "-o main-ditc.o")
# (find-gffile "om" "-o io.o")
# (find-gffile "om" "-o memcasecmp.o")
# (find-gffile "engine.c")
# (find-gffile "main.c")
# (find-gffile "io.c")
# (find-gffile "memcasecmp.c")
cd /usr/src/gforth-0.3.0/
rm -v engine-ditc.o main-ditc.o io.o memcasecmp.o
make DEBUGFLAG=-g gforth-ditc |& tee omgd
make DEBUGFLAG=-g gforth.fi |& tee omgf
make |& tee om
make install |& tee omi
: foo dup * ;
: fee dup foo * ;
4 variable qa
' foo xt-see
' qa seevar
' foo S" bar" .defname
' foo S" bar" .defname drop drop drop drop drop drop drop
\ (find-g4file "debug.fs" ": dbg")
# (find-esfile "forth.e")
# (find-g4tag ".s")
# (find-g4tag ".name")
# (find-g4tag "bounce")
#####
#
# GForth 0.4
#
#####
# «gforth-0.4» (to ".gforth-0.4")
dpkg -i $SDEBIAN/dists/potato/main/binary-i386/interpreters/gforth_0.4.0-2.deb
cd /usr/share/gforth/0.4.0/
cp TAGS TAGS.0
# (find-gffile "TAGS.0")
# (find-gffile "TAGS")
cd /usr/share/gforth/0.4.0/
perl -nle 's:debian/tmp/usr/share/gforth/0.4.0/::; print $_' < TAGS.0 > TAGS
# (find-gftag "(type)")
# (find-gftag "count")
mkdir -p /usr/share/gforth/0.4.0/debian/
ln -s / /usr/share/gforth/0.4.0/debian/tmp
pdsc $SDEBIAN/dists/potato/main/source/interpreters/gforth_0.4.0-2.dsc
find * -type f | sort > .files
grep '\.fs$' .files > .files.fs
debian/rules binary |& tee odrb
# (find-fline "$SDEBIAN/dists/potato/main/source/interpreters/gforth_0.4.0-2.diff.gz")
# (find-gffile "odrb")
# (find-gffile "odrb" "gforth.fi")
# (find-gffile "gforthmi" "savesystem")
# (find-gffile "gforthmi2" "savesystem")
# (find-gffile "Makefile" "\ngforth-ditc")
# (find-gfstag "savesystem")
cat > /tmp/x <<'---'
#!/bin/bash
cd /usr/src/gforth-0.4.0/
GFORTHD="./gforth-ditc -p .:." GFORTH="./gforth-ditc -p .:. -i kernl32l.fi startup.fs" ./gforthmi2 gforth.fi --die-on-signal -p ".:~+:." -i kernl32l.fi startup.fs
---
chmod 777 /tmp/x
/tmp/x > ~/o
# (find-gfnode "Top")
# (find-gfnode "Threading Words")
# (find-gfnode "Threading")
# (find-gfnode "Tokens for Words")
# (find-gfstag "(type)")
# (find-vldifile "gforth.list")
# (find-fline "/usr/share/gforth/0.4.0/")
# (find-fline "/etc/emacs/site-start.d/50gforth.el")
# (find-fline "/usr/share/emacs/site-lisp/gforth.el")
# (find-gffile "prim" "dlopen")
# (find-gffile "prim" "SYSCALL")
# (find-gfsrcfile "prim.b" "SYSCALL")
# (find-gfsrcfile "Makefile" "engine/prim.i:")
# (find-gfsrcfile "engine/prim.i")
# (find-gfsrcfile "engine/engine.c")
lynx /snarf/http/www.complang.tuwien.ac.at/forth/index.html
lynx /snarf/http/www.complang.tuwien.ac.at/forth/dpans-html/dpansf.htm
#####
#
# gforth_rr
#
#####
# «gforth_rr» (to ".gforth_rr")
# (find-gfnode "Top")
# (find-gfnode "Word Index")
# (find-gfnode "Words for Including")
# (find-fline "~/FORTH/emacs.rr")
cd ~/bin/
gforth <<'---'
: rr s" ~/FORTH/emacs.rr" included ;
savesystem gforth_rr
bye
---
chmod 755 gforth_rr
# (find-gffile "")
# (find-gfsrcfile "")
# (find-fline "~/FORTH/tcl.fs")
# (find-node "(gforth)Automatic Generation")
#####
#
# TinyScript2 (pforth+Tcl+Perl+Python+...)
# 99sep??
#
#####
# (code-c-d "ts2" "/usr/src/ts2/")
rm -Rv /usr/src/ts2/
cd /usr/src/
tar -xvzf $S/http/mini.net/pub/ts2-19990704.tar.gz
cd /usr/src/ts2/
# Remove some misterious binary files
rm -v $(find * | grep 'mcp$')
cd /usr/src/ts2/forth/csrc/
diff -b -c -rs . /usr/src/pforth/csrc/ | tee ~/o
# diff -b -c -rs . /usr/src/pforth-21/csrc/ | tee ~/o
cd /usr/src/ts2/forth/csrc/
for i in *; do
if [[ -e /usr/src/pforth/csrc/$i ]] then
# tkdiff $i /usr/src/pforth/csrc/$i
else
echo Only in ts2: $i
fi
done
# lynx /usr/src/ts2/minotaur.html
# (find-ts2file "minotaur.html" "ShLib")
agrep -l ShLib $(find *)
# (find-ts2file "forth/csrc/pfcustom.c")
psner -nc -np http://mini.net/pub/ts2/
# (find-fline "$S/http/mini.net/pub/ts2/")
forTcl
forPl
lynx http://www.dcs.gla.ac.uk/~meurig/TclHaskell/
#####
#
# Minotaur/tinyscript
# 99nov17
#
#####
# (find-fline "$S/http/mini.net/pub/")
# (find-fline "$S/http/mini.net/pub/ts2-19990704.tar.gz")
# (find-fline "$S/http/mini.net/pub/ts2/")
# (find-fline "$S/http/mini.net/pub/ts2/index.html" "Tcl (Windows):")
# (find-fline "/usr/src/ts2/")
# (find-fline "/usr/src/ts2/forth/")
# (find-fline "/usr/src/ts2/forth/csrc/")
# (find-node "(make)Selective Search")
# (find-fline "/usr/src/ts2/forth/gnuc/Makefile")
# «ts2» (to ".ts2")
rm -Rv /usr/src/ts2/
cd /usr/src/
tar -xvzf $S/http/mini.net/pub/ts2-19990704.tar.gz
cd /usr/src/ts2/
find * -type f | sort > .files
cd /usr/src/ts2/forth/gnuc/
make -f ../gnuc/Makefile pforth |& tee omp
make -f ../gnuc/Makefile dict |& tee omd
cd /usr/src/ts2/forTcl/gnuc/
./configure --with-tcl=/usr/lib |& tee oc
sed 's/gluetcl.o/pfcustom.o common.o/' < Makefile > Makefile-
diff Makefile{,-}
cd /usr/src/ts2/forTcl/gnuc/
make -f Makefile- |& tee om
cd /usr/src/ts2/forTcl/gnuc/
strace-to ~/s expect -c '
load ./forTcl.so
forTcl::init
puts [forTcl::eval {123 456 +}]
puts [forTcl::eval {123 456 + .}]
'
cd /usr/src/ts2/forTcl/gnuc/
expect -c ' load ./forTcl.so; forTcl::init
set a [forTcl::eval {2 . 3 . 4 5}]
puts b
puts $a
puts c
'
# (find-ts2file "forth/csrc/")
# (find-ts2file "forTcl/")
# (find-ts2file "forTcl/initTcl.c" "int Fortcl_Init(")
# (find-ts2file "forTcl/gnuc/")
# (find-ts2file "forTcl/gnuc/om" "forTcl.so")
# (find-ts2file "minotaur/")
# (find-ts2file "minotaur/gnuc/")
# How I discovered which files to include in forTcl/gnuc/Makefile:
# (find-ts2file "forTcl/gnuc/om")
cd /usr/src/ts2/
agrep CustomFunctionTable $(<.files)
cd /usr/src/ts2/
agrep initForth $(<.files)
cd /usr/src/ts2/
# (find-ts2file ".files")
# (find-ts2file "forTcl/gnuc/")
# (find-fline "/usr/src/ts2/forTcl/")
# (find-fline "/usr/src/ts2/forTcl/gnuc/")
# (find-fline "/usr/src/ts2/minotaur/")
# (find-ts2file "forth/csrc/pfcustom.c")
# (find-ts2file "forth/csrc/pfcustom.c" "CreateGlueToC( \"ShLibOpen\", 0")
# (find-ts2file "forTcl/initTcl.c" "Fortcl_Init")
# (find-ts2file "forTcl/initTcl.c" "&init_forTcl")
#####
#
# Minotaur/tinyscript: gdb'ing
# 99nov30
#
#####
# «ts2b» (to ".ts2b")
# (find-es "forth" "ts2")
# (find-ts2file "forTcl/gnuc/")
# (find-ts2file "forTcl/gnuc/Makefile")
rm -Rv /usr/src/ts2/
cd /usr/src/
tar -xvzf $S/http/mini.net/pub/ts2-19990704.tar.gz
cd /usr/src/ts2/
find * -type f | sort > .files
cd /usr/src/ts2/forTcl/gnuc/
./configure --with-tcl=/usr/lib |& tee oc
sed 's/gluetcl.o/pfcustom.o common.o/' < Makefile > Makefile-
diff Makefile{,-}
cd /usr/src/ts2/forTcl/gnuc/
echo -n > .before-make; sleep 2
make CC='gcc -g -DPF_USER_CUSTOM' -f Makefile- |& tee om
find ../.. -name '*.[ch]' -and -anewer .before-make > .files.ch
etags $(<.files.ch)
cd /usr/src/ts2/forTcl/gnuc/
expect -c '
# exec $env(HOME)/TCL/attachgdb expect
# load ./forTcl.so
load $env(PWD)/forTcl.so
exec $env(HOME)/TCL/attachgdb expect
forTcl::init
puts [forTcl::eval {123 456 +}]
puts [forTcl::eval {123 456 + .}]
'
# (find-ts2file "forTcl/")
# (find-ts2file "forTcl/initTcl.c" "forTcl::init")
# (code-c-d "4tcl" "/usr/src/ts2/forTcl/gnuc/")
# (find-4tcltag "eval_forTcl")
# (find-4tclfile "../initTcl.c" 77)
if (EDRXOBJ_FLAG) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(EDRXOBJ_PTR, EDRXOBJ_LEN));
EDRXOBJ_FLAG = 0;
return 0;
}
# (find-4tclfile "../../forth/csrc/")
# (find-4tclfile "../../forth/csrc/common.h" 38)
extern int EDRXOBJ_FLAG, EDRXOBJ_LEN;
extern char *EDRXOBJ_PTR;
# (find-4tclfile "../../forth/csrc/pfcustom.c")
# (find-angg ".emacs" "f3")
%*
br TclLoadFile
c
info share
%*
# (find-tclfile "unix/" "tclLoadDl.c")
# (find-node "(gdb)Files" "`load FILENAME'")
# (find-node "(gdb)Files" "`info share'")
strace-to ~/s
#####
#
# Minotaur/tinyscript: returning strings
# 99nov30
#
#####
rm -Rv /usr/src/ts2/
cd /usr/src/
tar -xvzf $S/http/mini.net/pub/ts2-19990704.tar.gz
cd /usr/src/ts2/
find * -type f | sort > .files
cd /usr/src/ts2/forTcl/gnuc/
./configure --with-tcl=/usr/lib |& tee oc
sed 's/gluetcl.o/pfcustom.o common.o/' < Makefile > Makefile-
diff Makefile{,-}
cd /usr/src/ts2/forTcl/gnuc/
cp -v ~/PFORTH/initTcl.c ..
cp -v ~/PFORTH/{common.h,pfcustom.c} ../../forth/csrc/
cd /usr/src/ts2/forTcl/gnuc/
echo -n > .before-make; sleep 2
make CC='gcc -g -DPF_USER_CUSTOM' -f Makefile- |& tee om
find ../.. -name '*.[ch]' -and -anewer .before-make > .files.ch
etags $(<.files.ch)
cd /usr/src/ts2/forTcl/gnuc/
# strace-to ~/s \
expect -c '
load $env(PWD)/forTcl.so
forTcl::init
# forTcl::eval {words}
forTcl::eval {: shlibcall2 33 ;}
# forTcl::eval {: mmm s" mmm -- aaah." ; mmm SetObjPtr}
' |& tee ~/o
# (find-fline "~/PFORTH/")
# (find-ts2file "forTcl/gnuc/")
# (find-ts2file "forTcl/gnuc/om")
# (find-ts2file "forth/csrc/")
cd /usr/src/ts2/forTcl/gnuc/
expect -c '
# exec $env(HOME)/TCL/attachgdb expect
# load ./forTcl.so
load $env(PWD)/forTcl.so
exec $env(HOME)/TCL/attachgdb expect
forTcl::init
puts [forTcl::eval {123 456 +}]
puts [forTcl::eval {123 456 + .}]
'
#####
#
# shared libs on gforth
# 99may10?
#
#####
mail -s 'Re: using shared libs' GForth@ChaosSolutions.com <<'---'
> From: Ivan Tihonov <ivan>
>
> If someone mail to me how to use Linux shared-libs with GForth,
> i'll write info page for this topic. :)
Hi Ivan,
here's some ugly code that links to libtcl8.0.so and invokes the tcl
interpreter on a string. It works for me, but I would love to see a
prettier version of it...
\ s0" is like s" , but places a \0 after the string and works only
\ in interpretation mode.
: s0" ( "ccc<quote>" -- c-addr )
[char] " parse ( c-addr u )
2dup s"-buffer swap cmove ( c-addr u )
s"-buffer over + 0 swap c! ( c-addr u )
2drop s"-buffer ;
: strlen ( c-addr -- len ) dup &1024 0 scan drop swap - ;
s" libtcl8.0.so" open-lib dup . constant libtcl
s" Tcl_CreateInterp" libtcl lib-sym dup . constant &Tcl_CreateInterp
s" Tcl_Eval" libtcl lib-sym dup . constant &Tcl_Eval
&Tcl_CreateInterp icall0 dup . constant &interp
&interp s0" expr 22+3" &Tcl_Eval icall2 dup . drop
cr &interp @ dup strlen type
\ The last line should output "25".
More hints later.
[], Edrx
edrx@inx.com.br
edrx@mat.puc-rio.br
http://www.mat.puc-rio.br/~edrx/
---
\ (find-gffile "kernel/basics.fs" ": scan")
\ (find-fline "~/TCL/tclev.c")
#####
#
# pforth 21 (potato, on slink)
# 99nov19
#
#####
# «pforth» (to ".pforth")
# (find-es "forth" "pforth-edrx")
rm -Rv /usr/src/pforth-21/
pdsc $SDEBIAN/dists/potato/main/source/interpreters/pforth_21-2.dsc
cd /usr/src/pforth-21/
for i in docs/* README.txt; do
tr -d \\r < $i > tmpdoc
mv -v tmpdoc $i
done
cd /usr/src/pforth-21/docs/
for i in *.htm; do
unhtml < $i | sed -e 's/ / /g' -e 's/</</g' > $(basename $i .htm)
done
cd /usr/src/pforth-21/
cat >> debian/docs <<'---'
docs/pf_ref
docs/pf_tut
---
etags csrc/*.[ch]
debian/rules binary |& tee odrb
# (find-pffile "odrb" "pforth -i")
mv -v /usr/src/pforth*.deb /usr/src/.debs/
apt-update
apti pforth
# (find-vldifile "pforth.list")
# (find-fline "/usr/doc/pforth/")
echo words | pforth | tee ~/o
echo see koo cr see foo | pforth | tee ~/o
# (find-fline "~/o")
# (find-pffile "trace.fth" "KOO")
cd /usr/src/pforth/docs/
lynx 'pf_ref.htm#Single Step Trace'
# (code-c-d "pf" "/usr/src/pforth-21/")
# (find-pffile "")
# (find-pffile "csrc/")
# (find-pffile "docs/")
# (find-pffile "utils/")
# (find-pffile "see.fth")
# (find-pffile "csrc/")
# (find-pffile "csrc/pf_guts.h" 82)
# (find-pffile "system.fth" ": >CODE")
# (find-pffile "misc1.fth" ": >NAME")
(defun eepf-bounded () (interactive)
(ee-strbounded 'write-ee "%*" "%*" "" "" "/usr/src/pforth/ee.fth"))
(global-set-key [f3] 'eepf-bounded)
cd /usr/src/pforth/
pforth ee.fth
%*
hex
cr see foo
cr ' foo .xt
cr ' foo .
cr ' foo >code .
cr ' foo >code 10 - 30 dump
%*
# (find-pffile "csrc/pf_words.c" "Stack<")
'(s e pre post &optional other-ee-file fmode)
(debug-on-entry 'eepf-bounded)
# (find-elinode "Debugging")
#####
#
# pforth-21 with my own extensions
# 99dec11
#
#####
# «pforth-custom0» (to ".pforth-custom0")
# (find-es "forth" "pforth")
###
### Part 1: understanding pfcustom.c
###
rm -Rv /usr/src/pforth-21/
pdsc $SDEBIAN/dists/potato/main/source/interpreters/pforth_21-2.dsc
cd /usr/src/pforth-21/
for i in $(find * -name '*.[ch]' -or -name '*.fth'); do
tr -d \\r < $i > $i.lf; mv $i.lf $i
done
etags csrc/*.[ch]
cp -v csrc/pfcustom.c csrc/pfcustom.c.orig
debian/rules build |& tee odrbu
laf csrc/*.c objects/*
# (find-pffile "README.txt" "PF_USER_CUSTOM")
# (find-pffile "csrc/pfcustom.c" "PF_USER_CUSTOM")
# (find-pffile "csrc/pf_cglue.c")
# (find-pffile "odrbu")
g++ -DPF_SUPPORT_FP -E csrc/pfcustom.c > csrc/pfcustom.E
grep -v '^[ ]*$' csrc/pfcustom.E \
| awk '{
if ($1=="#") { verbose = ($3 ~ /csrc/); print }
else if (verbose) { print }
}' \
> csrc/pfcustom.E-
agrep '"C"' $(getstrings < csrc/pfcustom.E- | sort | uniq | grep usr)
###
### Part 2: printing and inspecting pfcustom.{c,E-}
###
cd /usr/src/pforth-21/csrc/
a2ps850dj -o /tmp/o.ps pfcustom.c pfcustom.E-
cd /tmp/
make -f ~/LATEX/Makefile o.p01
cd /usr/src/pforth-21/
find * -name '*.[ch]' -or -name '*.fth' > .files.chfth
agrep LoadCustom $(<.files.chfth)
# (find-pffile "csrc/pfcustom.c")
# (find-pffile "csrc/pfcustom.E")
# (find-pffile "csrc/pfcustom.E-")
# (find-node "(gawk)Using Constant Regexps")
# grep -v '^[ ]*$' csrc/pfcustom.E | l -S
###
### Part 3: writing my first pfcustom.c
### «first_pfcustom.c» (to ".first_pfcustom.c")
###
cd /usr/src/pforth-21/
cat > csrc/pfcustom.c <<'--%%--'
#include "pf_all.h"
/***/
static int32 CTest0( int32 Val );
static void CTest1( int32 Val1, cell Val2 );
static int32 CTest0(int32 Val) {
MSG_NUM_D("CTest0 (!!!): Val = ", Val);
return Val+1;
}
static void CTest1(int32 Val1, cell Val2) {
MSG("CTest1 (!!!): Val1 = "); ffDot(Val1);
MSG_NUM_D(", Val2 = ", Val2);
}
/***/
void *CustomFunctionTable[]={
(void *)CTest0,
(void *)CTest1
};
Err CompileCustomFunctions(void) {
/* Params are: Name in UPPER CASE, Function, Index, #rets (0/1), NumParams */
CreateGlueToC( "CTEST0", 0, C_RETURNS_VALUE, 1 );
CreateGlueToC( "CTAST1", 1, C_RETURNS_VOID, 2 );
return 0;
}
--%%--
make |& tee om
./pforth <<'---'
22 55
ctest0
ctast1
---
###
### Part 4: writing my own pf_main
###
cd /usr/src/pforth-21/
for i in csrc/*.c; do
echo $i '->' csrc/$(basename $i .c).E-
g++ -DPF_SUPPORT_FP -E $i \
| grep -v '^[[:space:]]*$' \
| awk '{
if ($1=="#") { verbose = !($3 ~ /^..usr/); print }
else if (verbose) { print }
}' \
> csrc/$(basename $i .c).E-
done
# (find-pffile "csrc/pf_main.E-" "Result = pfDoForth(")
# (find-pffile "csrc/pf_core.E-" "int32 pfDoForth(")
# (find-pffile "csrc/pf_main.c")
# (find-node "(libc)Table of Output Conversions")
# (find-pffile "om")
# (find-pffile "Makefile")
cd /usr/src/pforth-21/csrc/
cat > mypfmain.c <<'---'
#include "pforth.h"
#include <stdio.h>
#define S(ptr) (*(ptr)?ptr:0)
/* */
int main(int argc, char **argv) {
printf("pfDoForth result: %ld\n",
pfDoForth(S(argv[1]), S(argv[2]), *(argv[3])&1));
}
---
g++ -DPF_SUPPORT_FP -Wall -c -o mypfmain.o mypfmain.c
g++ -o mypfmain mypfmain.o ../objects/pf{_{cglue,clib,core,inner,io,mem,save,text,words},compil,custom}.o
cd /usr/src/pforth-21/csrc/
./mypfmain ../pforth.dic '' 0
./mypfmain '' '' 1
# All standard ".o"s: in ../objects/,
# pf{_{cglue,clib,core,inner,io,main,mem,save,text,words},compil,custom}.o
###
### Part 5: replacing pfDoForth
###
# (find-pffile "csrc/pf_core.E-" "int32 pfDoForth(")
# (find-pffile "csrc/pf_core.c" "int32 pfDoForth(")
cd /usr/src/pforth-21/csrc/
cat > mydoforth.c <<'---'
#include "pf_all.h"
#include <stdio.h>
#define S(ptr) (*(ptr)?ptr:0)
/* */
int main(int argc, char **argv) {
char *DicName = argv[1];
cfTaskData *cftd;
cfDictionary *dic;
int32 Result = 0;
ExecToken EntryPoint = 0;
pfInitGlobals();
cftd = pfCreateTask( (512), (512) );
pfSetCurrentTask( cftd );
dic = pfLoadDictionary( DicName, &EntryPoint );
pfExecByName("AUTO.INIT");
Result = pfRunForth();
pfExecByName("AUTO.TERM");
pfDeleteDictionary( dic );
pfDeleteTask( cftd );
return 0;
}
---
g++ -DPF_SUPPORT_FP -Wall -c -o mydoforth.o mydoforth.c
g++ -o mydoforth mydoforth.o ../objects/pf{_{cglue,clib,core,inner,io,mem,save,text,words},compil,custom}.o
cd /usr/src/pforth-21/csrc/
./mydoforth ../pforth.dic
cd /usr/src/pforth-21/csrc/
./mypfmain ../pforth.dic '' 0
./mypfmain '' '' 1
# Almost the original pfDoForth:
int32 pfDoForth(const char *DicName, const char *SourceName, int32 IfInit) {
cfTaskData *cftd;
cfDictionary *dic;
int32 Result = 0;
ExecToken EntryPoint = 0;
pfInitGlobals();
cftd = pfCreateTask( (512), (512) );
if(cftd) {
pfSetCurrentTask( cftd );
if( IfInit ) {
dic = pfBuildDictionary( (120000), (300000) );
} else {
dic = pfLoadDictionary( DicName, &EntryPoint );
}
pfExecByName("AUTO.INIT");
if( EntryPoint != 0 ) {
pfExecuteToken( EntryPoint );
} else {
if( SourceName == __null ) {
Result = pfRunForth();
} else {
Result = pfIncludeFile( SourceName );
}
}
pfExecByName("AUTO.TERM");
pfDeleteDictionary( dic );
pfDeleteTask( cftd );
}
return Result;
}
###
### Part ??: calling Tcl from a pfcustom.c
###
#######
#
# Crim1 on PFE
# 00jan24
#
#######
# «crim1_on_pfe» (to ".crim1_on_pfe")
# (code-c-d "pfe" "/usr/src/pfe-0.9.14/")
# (find-pfefile "")
# (find-pfefile "INSTALL" "of Linux, FreeBSD,")
# (find-pfefile "src/config/Linux/")
# (find-pfefile "src/config/Linux/options.mk" "ncurses")
# cd /usr/src/pfe-0.9.14/src/
# diff config/Linux/options.mk{~,} |& tee ~/o
# (find-fline "~/crim/patchpfe.txt")
# (find-pfefile "src/config/default/depend.mk" "ENVOBJ")
# diff config/default/depend.mk{~,} |& tee ~/o
#
# (find-fline "~/crim/patchpfe.txt" "At src/vocs.c")
# (find-pfefile "src/vocs.c" "extern const Words")
# diff vocs.c{~,} |& tee ~/o
rm -Rv /usr/src/pfe-0.9.14/
cd /usr/src/
tar -xvzf $S/ftp/ftp.taygeta.com/Taygeta/Forth/Linux/pfe-0.9.14.tar.gz
cd /usr/src/pfe-0.9.14/src/
(
patch config/Linux/options.mk <<'%%'
20,21c20,21
< OPTIONS =
< LIBS = -ltermcap -lm
---
> #OPTIONS =
> #LIBS = -ltermcap -lm
25,26c25,26
< #OPTIONS = -I/usr/include/ncurses
< #LIBS = -lncurses -lm
---
> OPTIONS = -I/usr/include/ncurses
> LIBS = -lncurses -lm
%%
cp -iv ~/crim/crim.c.txt crim.c
#
patch config/default/depend.mk <<'%%'
24c24
< yours$o
---
> yours$o crim$o
%%
#
patch vocs.c <<'%%'
47c47
< your_words;
---
> your_words, crim_words;
55a56
> &crim_words,
%%
) |& tee op
./config.sh |& tee oc
make |& tee om
rm -Rv /tmp/crim/
mkdir /tmp/crim/
cd ~/crim/
for i in *.txt; do cp -iv $i /tmp/crim/$(basename $i .txt); done
cd /tmp/crim/
echo "INCLUDE 1.4th BYE" > 1q.4th
echo "INCLUDE 2.4th BYE" > 2q.4th
cd /tmp/crim/
/usr/src/pfe-0.9.14/src/pfe -q 1q.4th
/usr/src/pfe-0.9.14/src/pfe -q 1-autod.4th
/usr/src/pfe-0.9.14/src/pfe -q 2q.4th
/usr/src/pfe-0.9.14/src/pfe -q 2-autod.4th
#####
#
# old notes on pforth and tcl
# 00jan??
#
#####
# (find-pffile "docs/")
# (find-pffile "docs/pf_ref" " pf_main.c")
# (find-pffile "csrc/pf_main.c")
# (find-pffile "csrc/pf_main.c" "module from 'C' based application")
# (find-pffile "csrc/pfcustom.c")
# (find-pffile "csrc/")
# (find-pffile "")
# (find-pffile "Makefile")
# (find-pffile "odrb")
# (find-pftag "pfDoForth")
cd /usr/src/pforth-21/
cat > testmain.c <<'---'
/*
*/
#include <stdio.h>
#include "pforth.h"
int main(int argc, char **argv) {
const char *DicName = "pforth.dic";
const char *SourceName = NULL;
char IfInit = 0;
char *s;
int32 i;
int Result;
pfSetQuiet(1);
Result = pfDoForth(DicName, SourceName, IfInit);
printf("%d\n", Result);
}
---
g++ -c -I csrc -o testmain.o testmain.c
g++ -o testmain $(ls objects/* | grep -v main) testmain.o -lm
######
#
# Debugging pforth
# 00jan23
#
######
rm -Rv /usr/src/pforth-21/
pdsc $SDEBIAN/dists/potato/main/source/interpreters/pforth_21-2.dsc
cd /usr/src/pforth-21/
for i in $(find * -name '*.[ch]' -or -name '*.fth'); do
tr -d \\r < $i > $i.lf; mv $i.lf $i
done
etags csrc/*.[ch]
cp -v csrc/pfcustom.c csrc/pfcustom.c.orig
# (find-pffile "Makefile" "$(COMPILE)")
debian/rules CDEFS=-g build |& tee odrbu
cd /usr/src/pforth-21/
for i in csrc/*.c; do
echo $i '->' csrc/$(basename $i .c).E-
g++ -DPF_SUPPORT_FP -E $i \
| grep -v '^[[:space:]]*$' \
| awk '{
if ($1=="#") { verbose = !($3 ~ /^..usr/); print }
else if (verbose) { print }
}' \
> csrc/$(basename $i .c).E-
done
# (find-pffile "csrc/pfcustom.c" "CustomFunctionTable[] =")
cat > /tmp/4 <<'---'
: square dup * ;
20 ctest0 square .
bye
---
/usr/src/pforth-21/pforth -q /tmp/4
%*
set args -q /tmp/4
br CTest0
run
bt
%*
# (gdb "gdb /usr/src/pforth-21/pforth")
#####
#
# Linking pforth and Tcl
# 00feb14
#
#####
# «pforth_and_tcl» (to ".pforth_and_tcl")
# (find-fline "~/PFORTH/")
# (find-fline "~/PFORTH/Makefile")
# (find-fline "~/PFORTH/tclpforth.c")
# (find-fline "~/PFORTH/tclpforth.tcl")
# The "pf_runforth" in the script below enters pforth's interactive
# mode. Use "bye" to return to Tcl.
cd ~/PFORTH/
make CFLAGS=-g
cat > /tmp/test.4th <<'---'
1 2 + . cr
---
expect -c '
load ./tclpforth.so
pf_init pforth.dic
pf_includefile /tmp/test.4th
pf_includefile $env(HOME)/crim.fth
# pf_runforth
pf_finish
puts "bye from Tcl!"
'
cd ~/PFORTH/
make clean
cd ~/PFORTH/
make CFLAGS=-g
expect -c '
source /home/root/PFORTH/tclpforth.tcl
fdo "1 2 .s .s"
# attachgdb expect
fdo "99 100"
fdo ".s"
# pfevaluate "quit"
# fdo "quit"
puts [fdo "33 22 + N->TCL"]
puts [fdo {: foo! s" foo!" ; foo! ->TCL}]
fdo ".s"
pf_finish
'
%*
br pfIncludeFile
br ffIncludeFile
cont
%*
# (find-fline "~/PFORTH/tclpforth.tcl")
# (find-fline "~/PFORTH/tclpforth.c")
cd /usr/src/pforth-21/csrc/
# (find-node "(gdb)Files")
# (find-node "(gdb)Files" "add-symbol-file")
# (find-node "(gdb)Source Path")
# (find-node "(gdb)File Options" "-d ")
cd /usr/src/pforth-21/csrc/
agrep gCurrentTask *.[ch]
# (find-pffile "csrc/pf_core.c" "gCurrentTask")
# (find-pftag "cfTaskData")
# (find-pftag "ffOK")
# (find-pftag "ffPushInputStream")
# (find-pftag "ffPopInputStream")
# (find-pftag "pfExecByName")
# (find-fline "/usr/doc/mktclapp/examples/")
# (find-fline "/usr/doc/mktclapp/examples/README")
# (find-fline "/usr/doc/mktclapp/examples/Makefile")
##
## Adding stuff to let forth return a result to Tcl
##
# (find-es "forth" "first_pfcustom.c")
# (find-fline "~/PFORTH/mtamacros.h")
# (find-fline "~/PFORTH/tclpf_custom.c")
# (find-fline "~/PFORTH/tclpf_hook.c")
# (find-vldifile "tcl8.0-dev.list")
# (find-fline "/usr/doc/tcl8.0-dev/")
# (eeman "Tcl_SetResult")
# (eeman "Tcl_SetObjResult")
# (eeman "Tcl_NewIntObj")
# (find-fline "~/PFORTH/Makefile")
cd ~/PFORTH/
make clean
make |& tee ~/om
# (find-fline "~/om")
strings < tclpforth0 | grep -i TCL
strings < tclpforth.dic | grep -i tcl
#####
#
# Understanding more of PForth
# 2000mar10
#
#####
# «epforth» (to ".epforth")
# (find-fline "~/EXPECT/epforth")
hex
see foo
' foo .
' foo rel->use .
' foo rel->use 20 - 40 dump
' foo rel->use @ .
' dup .
' dup >name .
' dup >name 20 - 40 dump
' dup >name 4 - @ .
' dup >name 8 - @ use->rel .
map
\ see map
\ (find-pffile "misc2.fth" "MAP")
\ (find-pffile "")
\ (find-pffile "misc1.fth" ">NAME")
\ (find-pffile "system.fth" "nfa")
\ (find-pffile "csrc/pfcompil.c")
#####
#
# box diagrams of pforth's memory
# 2000mar22
#
#####
# (find-fline "~/PFORTH/")
\ BD = box diagram
\ BDM = BD memory - where we are reading from.
\ BDH = BD horizontal pos
CREATE BD1 200 ALLOT
CREATE BD2 200 ALLOT
CREATE BD3 200 ALLOT
CREATE BD4 200 ALLOT
0 VALUE BDH
: H+ ( adr -- adr+bdh ) BDH + ;
: H+= ( delta -- ) BDH + TO BDH ;
: BDCLEAR ( -- )
BD1 200 BL FILL
BD2 200 BL FILL
BD3 200 BL FILL
BD4 200 BL FILL
0 TO BDH ;
: .BD ( -- )
CR BD1 BDH TYPE
CR BD2 BDH TYPE
CR BD3 BDH TYPE
CR BD4 BDH TYPE ;
BDCLEAR
ASCII - VALUE ROOFCHAR
ASCII - VALUE FLOORCHAR
: VWALL ( c -- )
ASCII + BD1 H+ C!
( c ) BD2 H+ C!
ASCII + BD3 H+ C!
1 H+= ;
: SPVWALL ( -- ) SPC VWALL ;
: |VWALL ( -- ) ASCII | VWALL ;
: HWALLS ( -- )
ROOFCHAR BD1 H+ C! ROOFCHAR BD1 H+ 1+ C!
FLOORCHAR BD3 H+ C! ROOFCHAR BD3 H+ 1+ C!
2 H+= ;
: U>D ( u -- d ) 0 ;
: <##> ( d -- $adr $len ) <# # # #> ;
: <########> ( d -- $adr $len ) <# # # # # # # # # #> ;
: $! ( adr len destadr -- ) SWAP MOVE ;
\ The prefixes say the number of digits.
\ 8VWALL advances BDH a lot, 2VWALL only one char.
\ They're made to be called in hex mode (but we're in decimal now)
NAMEBASE VALUE BDM
: BDM+= ( delta -- ) BDM + TO BDM ;
: 8VWALL ( -- ) BDM <########> BD4 H+ $! 6 H+= |VWALL ;
: 2VWALL ( c -- ) BDM 255 AND <##> BD4 H+ $! |VWALL ;
32 CONSTANT SPC
: 2HWALLS ( -- ) BDM C@ <##> BD2 H+ $! HWALLS 1 BDM+= ;
: HHWALLS ( -- ) HWALLS SPC VWALL HWALLS ;
: HHHHWALLS ( -- ) HHWALLS SPC VWALL HHWALLS ;
: 8HWALLS ( -- ) BDM @ <########> BD2 H+ 2 + $! HHHHWALLS 4 BDM+= ;
8VWALL HHHHWALLS ASCII | 2VWALL
ASCII | VWALL HWALLS ASCII i VWALL .BD
\ <##> BD4 H+ $!
#####
#
# PForth's bytecode
#
#####
# (find-fline "~/crim/autodoc.4th.txt")
# (find-fline "~/crim/2-autod.4th.txt")
# (find-fline "~/crim/2.aud.txt")
# (find-node "(emacs-e20)RegConfig")
# (find-etag "window-configuration-to-register")
# (find-etag "enlarge-window")
# (find-node "(elisp)Index")
# (find-node "(elisp)Size of Window")
(set-windows
6 0 '(find-fline "~/crim/2-autod.4th.txt" "0 N~")
5 0 '(find-fline "~/crim/2-autod.4th.txt" "\\\\")
14 0 '(find-fline "~/crim/2.aud.txt" "%END-CRIM")
3 0 '(find-fline "~/crim/2-autod.4th.txt" "BOX\"")
9 0 '(find-fline "~/crim/2.aud.txt" "+--+")
)
#####
#
# More about GForth's bytecode
# 2000jul26
#
#####
# «gforth-bytecode» (to ".gforth-bytecode")
#*
cat > /tmp/gf <<'---'
: hu.r ( n ndigits -- ) base @ >r hex u.r r> base ! ;
: h. ( byte -- ) 2 hu.r ;
: hadr ( adr -- ) 8 hu.r ." : " ;
here value old-here
: .bytes ( -- )
begin old-here here <
while old-here c@ h. space old-here 1+ to old-here
repeat ;
: b" ( -- ;" ) cr old-here hadr .bytes ." " 34 parse type ; immediate
here to old-here
create foo b" foo"
create bar b" bar"
create bz b" bz"
create baz b" baz"
create bazz b" bazz"
: nop ; b" nop"
: sq dup * ; b" sq"
: cub dup sq * ; b" cub"
cr ' foo hadr ." ' foo"
cr foo hadr ." foo"
cr dovar: hadr ." dovar:"
cr ' sq hadr ." ' sq"
cr ' sq @ hadr ." ' sq @"
cr ' sq 8 + @ hadr ." ' sq 8 + @"
cr ' dup hadr ." ' dup"
cr ' sq 12 + @ hadr ." ' sq 12 + @"
cr ' * hadr ." ' *"
cr ' sq 16 + @ hadr ." ' sq 16 + @"
cr comp' exit hadr ." comp' exit"
cr bye
---
gforth /tmp/gf
#*
4012DBC4: 84 DB 12 40 83 66 6F 6F 20 20 20 20
A0 A0 4 8 0 0 0 0 foo
4012DBD8: C4 DB 12 40 83 62 61 72 A0 A0 4 8 0 0 0 0 bar
4012DBE8: D8 DB 12 40 82 62 7A 20 A0 A0 4 8 0 0 0 0 bz
4012DBF8: E8 DB 12 40 83 62 61 7A A0 A0 4 8 0 0 0 0 baz
4012DC08: F8 DB 12 40 84 62 61 7A 7A 20 20 20 20 20 20 20
A0 A0 4 8 0 0 0 0 bazz
4012DBD0: ' foo
4012DBD8: foo
804A0A0: dovar:
# (find-node "(gforth)DOES>")
# (find-node "(nasm)Section 4.7.5")
# (find-gfsrcfile "kernel/int.fs" "(name>x)")
# (find-gfsrcfile "kernel/int.fs" ": '")
# (find-gfsrcfile "kernel/comp.fs" "\n: ; ")
# (find-gfsrcfile "kernel/comp.fs" ": POSTPONE ")
# (find-gfsrcfile "kernel/comp.fs" ": postpone,")
: name' name name-too-short? find-name ;
: my' name' (name>x) drop ;
: my'c name' (name>comp) drop ;
; HERE is here before CREATE FOO
dd HERE0
align 4
db 0x80+3,'foo'
align 8, db ' '
TICK_FOO: ; ' FOO returns this address
dd DOVAR ; DOVAR: returns DOVAR
dd 0 ; what's this 0?
ADR_FOO: ; FOO returns this address
; HERE is here before CREATE BAR
HERE2:
dd HERE1
align 4
db 0x80+3,'foo'
align 8, db ' '
TICK_FOO: ; ' FOO returns this address
dd DOVAR ; DOVAR: returns DOVAR
dd 0 ; what's this 0?
ADR_FOO: ; FOO returns this address
align 4
db 0x80+2,'bz'
align 8, db ' '
dd DOVAR ; ( ) dovar: ( DOVAR )
dd 0
FOO_ADR:
#####
#
# tasker.fs in gforth
# 2001apr19
#
#####
# «tasker» (to ".tasker")
#*
cat > $EEG <<'---'
require tasker.fs
: testa $100 newtask activate $10 0 DO 'A emit LOOP stop ;
: testb $100 newtask activate $10 0 DO 'B emit LOOP stop ;
testa testb
bye
---
eeg gforth
#*
#####
#
# pfe-0.33.66
# 2008apr20
#
#####
# «pfe-0.33» (to ".pfe-0.33")
# http://pfe.sourceforge.net/
# http://ufpr.dl.sourceforge.net/sourceforge/pfe/pfe-0.33.66.tar.bz2
#*
rm -Rv ~/usrc/pfe-0.33.66/
tar -C ~/usrc/ -xvjf \
$S/http/ufpr.dl.sourceforge.net/sourceforge/pfe/pfe-0.33.66.tar.bz2
cd ~/usrc/pfe-0.33.66/
./configure |& tee oc
make |& tee om
# make install
#*
# (code-c-d "pfe" "~/usrc/pfe-0.33.66/")
# (code-ps "forthprimer" (ee-pfefile "doc/Forthprimer.pdf"))
# (code-pdftotext "forthprimer" (ee-pfefile "doc/Forthprimer.pdf"))
# (find-pfefile "")
# (find-pfefile "INSTALL.TXT")
# (find-pfefile "README")
# (find-pfefile "README" "Forthprimer.pdf")
# (find-pfefile "doc/")
# (find-pfefile "doc/src/PFE.css")
# (find-forthprimerpage 1)
# (find-forthprimertext)
* (eepitch-gforth)
* (eepitch-kill)
* (eepitch-gforth)
\ draw stars!
: star ." *";
: stars 0 ?do star loop ;
: triangle dup 1 do cr dup i - spaces i 2* 1- stars loop drop ;
12 triangle
bye
#####
#
# PForth (2011)
# 2011nov25
#
#####
# «pforth-2011» (to ".pforth-2011")
# (find-status "pforth")
# (find-vldifile "pforth.list")
# (find-udfile "pforth/")
# (find-udfile "pforth/pf_ref.htm")
# (find-udfile "pforth/pf_todo.txt")
# (find-udfile "pforth/pf_tut.htm")
# (find-udfile "pforth/pfmanual.txt")
# (find-udfile "pforth/copyright")
# (find-udfile "pforth/README.txt.gz")
# (find-udfile "pforth/changelog.Debian.gz")
# (find-man "1 pforth")
* (eepitch-pforth)
* (eepitch-kill)
* (eepitch-pforth)
1 2 + .
words
: square dup * ;
: cube dup square * ;
see cube
#####
#
# yforth
# 2011nov25
#
#####
# «yforth» (to ".yforth")
# (find-status "yforth")
# (find-vldifile "yforth.list")
# (find-udfile "yforth/")
* (eepitch-yforth)
* (eepitch-kill)
* (eepitch-yforth)
1 2 + .
words
: square dup * ;
: cube dup square * ;
see cube
#####
#
# The Forth2012 standard
# 2019feb11
#
#####
# «forth2012» (to ".forth2012")
# http://lars.nocrew.org/forth2012/
# http://lars.nocrew.org/forth2012/core/
# http://lars.nocrew.org/forth2012/core/DivMOD.html
#####
#
# pentom
# 2021sep10
#
#####
# «pentom» (to ".pentom")
# https://github.com/benhoyt/python-pentomino/
# https://github.com/benhoyt/python-pentomino/blob/master/pentom.fs
# https://benhoyt.com/writings/python-pentomino/
#####
#
# hakkinen-f
# 2021dec05
#
#####
# «hakkinen-f» (to ".hakkinen-f")
# https://github.com/petrihakkinen/f
# (find-git-links "https://github.com/petrihakkinen/f" "hakkif")
# (code-c-d "hakkif" "~/usrc/f/")
# (find-hakkiffile "")
# (find-hakkiffile "f.lua")
# (find-hakkiffile "test/")
# (find-hakkiffile "test/mandel.f")
#####
#
# elforth
# 2021dec05
#
#####
# «elforth» (to ".elforth")
# (find-epackage-links 'elforth "elforth" t)
# (find-epackage 'elforth)
# https://github.com/lassik/elforth
#####
#
# forth-mode
# 2021dec05
#
#####
# «forth-mode» (to ".forth-mode")
# (find-epackage-links 'forth-mode "forthmode" t)
# (find-epackage 'forth-mode)
# (code-c-d "forthmode" "~/.emacs.d/elpa/forth-mode-20210829.1824/")
# (find-forthmodefile "")
# https://github.com/larsbrinkhoff/forth-mode
#####
#
# chuck-moore-5-lines
# 2022oct29
#
#####
# «chuck-moore-5-lines» (to ".chuck-moore-5-lines")
# https://retrocomputing.stackexchange.com/questions/25506/did-forths-inventor-charles-moore-really-write-a-cad-program-in-only-5-lines-of
# https://wiki.osdev.org/Beginner_Mistakes#Memory_usage
It can take a lot of time and thought to figure out how to reduce code
size. Charles Moore, inventor of Forth, wrote a CAD program which was
structured around just 5 lines of code. When asked how long it took to
write those 5 lines, he replied, "Ooh, about 2 years"!
# 2011jul13:
# http://www.softsynth.com/pforth/
# http://www.mailsend-online.com/blog/flirting-with-forth.html
# http://pygmy.utoh.org/forth.html
# New links, 2019feb11:
http://ficl.sourceforge.net/ficl.html
http://www.forth.org/
http://www.forth.org/svfig/
http://www.forth.org/POL.pdf
http://www.forth.org/svfig/zorkmail.html
http://wiki.c2.com/?ForthLanguage
http://www.ultratechnology.com/okad2.htm
http://home.hccnet.nl/a.w.m.van.der.horst/figforth.html
http://home.hccnet.nl/a.w.m.van.der.horst/forthlectureH.html
https://news.ycombinator.com/item?id=30944881 ACM Opens First 50 Years Backfile (acm.org)
"Looks like they have a bunch of papers about my current interest (FORTH - in fact there there is (was: final issue 1994) a SIGFORTH)"
https://news.ycombinator.com/item?id=33180796 Programming a Problem-Oriented Language (1970) [pdf] (forth.org) - chuck moore
https://news.ycombinator.com/item?id=34373279 What the hell is Forth? (2019) (information-superhighway.net) ***
https://blog.information-superhighway.net/a-forth-vocabulary-for-iteration ***
https://yosefk.com/blog/my-history-with-forth-stack-machines.html and largely dismisses the ANS standard as rooted in the past and bloated
https://news.ycombinator.com/item?id=44142652 Implementing a Forth (ratfactor.com) - ruthless simplicity
https://github.com/gmpalter/cl-forth/tree/main Common Lisp implementation of the Forth 2012 Standard, CL-Forth
https://compilercrim.es/bootstrap/miniforth/
https://ratfactor.com/forth/implementing ***
https://ratfactor.com/forth/the_programming_language_that_writes_itself.html
# Local Variables:
# coding: utf-8-unix
# End: