Ported last of relevant jonesforth library code.
authorTim Vaughan <tgvaughan@gmail.com>
Sat, 30 Apr 2016 13:23:32 +0000 (01:23 +1200)
committerTim Vaughan <tgvaughan@gmail.com>
Sat, 30 Apr 2016 13:24:33 +0000 (01:24 +1200)
examples/mandelbrot.4th
src/lib.4th

index d31b028..b8195f4 100644 (file)
@@ -1,7 +1,7 @@
 ( --- Complex arithmetic --- )
 
 ( Location of floating point. )
-: precision 10000 ;
+10000 value precision
 
 : sign dup abs / ;
 
     2over 2swap csq c+
 ;
 
+100 value maxiter
+
 : inSet? ( cr ci -- res )
     0 0     ( z_0 = 0 )
     
     true    ( flag indicating set membership )
-    100 0 do
+    maxiter 0 do
         drop
 
         iterate
     -rot 2drop -rot 2drop
 ;
 
-: xsteps 100 ;
-: ysteps 30 ;
+100 value xsteps
+30 value ysteps
+
+: mandelDomain
+        -2 0 >scaled -1 0 >scaled 0 5 >scaled 1 0 >scaled
+;
 
 ( Draw the Mandelbrot Set!)
-: mandel ( x1 y1 x2 y2 -- )
+: mandelDraw ( x1 y1 x2 y2 -- )
 
     0 pick 3 pick - ysteps /
     1 pick 4 pick do
index 5d6507d..eae7a5d 100644 (file)
         ' EXIT ,        ( append the codeword EXIT )
 ;
 
+: ALLOT         ( n -- addr )
+        HERE @ SWAP     ( here n )
+        HERE +!         ( adds n to HERE, after this the old value of HERE is still on the stack )
+;
+
+: VARIABLE
+        1 CELLS ALLOT   ( allocate 1 cell of memory, push the pointer to this memory )
+        WORD CREATE     ( make the dictionary entry (the name follows VARIABLE) )
+        DOCOL ,         ( append DOCOL (the codeword field of this word) )
+        ' LIT ,         ( append the codeword LIT )
+        ,               ( append the pointer to the new memory )
+        ' EXIT ,        ( append the codeword EXIT )
+;
+
+
+: VALUE         ( n -- )
+        WORD CREATE     ( make the dictionary entry (the name follows VALUE) )
+        DOCOL ,         ( append DOCOL )
+        ' LIT ,         ( append the codeword LIT )
+        ,               ( append the initial value )
+        ' EXIT ,        ( append the codeword EXIT )
+;
+
+: TO IMMEDIATE  ( n -- )
+        WORD            ( get the name of the value )
+        FIND            ( look it up in the dictionary )
+        >DFA            ( get a pointer to the first data field (the 'LIT') )
+        1+              ( increment to point at the value )
+        STATE @ IF      ( compiling? )
+                ' LIT ,         ( compile LIT )
+                ,               ( compile the address of the value )
+                ' ! ,           ( compile ! )
+        ELSE            ( immediate mode )
+                !               ( update it straightaway )
+        THEN
+;
+
+( x +TO VAL adds x to VAL )
+: +TO IMMEDIATE
+        WORD            ( get the name of the value )
+        FIND            ( look it up in the dictionary )
+        >DFA            ( get a pointer to the first data field (the 'LIT') )
+        1+              ( increment to point at the value )
+        STATE @ IF      ( compiling? )
+                ' LIT ,         ( compile LIT )
+                ,               ( compile the address of the value )
+                ' +! ,          ( compile +! )
+        ELSE            ( immediate mode )
+                +!              ( update it straightaway )
+        THEN
+;
+
+
 ( PRINTING THE DICTIONARY ------------------------------------------------------ )
 
 : ID.