
\ This file is filled with more example commands for you
\ to try out.
\
\ Type them in, as displayed, and observe the results.
\ After some commands is a short description of the
\ action the command performs.  (Remember, JForth is
\ NOT case-sensitive, so the text may be entered in
\ either upper- or lower-case.)
\
\ NOTE: some of the following include command SEQUENCES.
\       This means that those lines which do not have at least
\       one blank line between then need to be typed in
\       in order.  (Remember, text after '\' characters or
\       between a single parentheses and its 'mate' are
\       comments and need not be typed in, like this text.
\
\ TIME-SAVERS...
\
\ Don't forget that the F1 key will save you the trouble of having
\ to type in INCLUDE each time.  Also, remember that SHIFT-UP-ARROW
\ is how to use JForth's COMMAND LINE HISTORY to recall a previous
\ line to the screen for another entry with or without editing.
\
\ NOTE: It IS possible to INCLUDE this file, but for purposes of
\       learning, it is much better to follow through the commands
\       by hand.



\ In the programs directory is the source for an IFF picture viewer
\ using JForth's IFF support files.  These command compile it, then
\ display a lo-res IFF picture we've put in the Tutorials directory.

INCLUDE PROGRAMS/SHOW_IFF
JSHOW TUTORIALS/STORM.IFF
\ Click in the top-left corner of the picture to close it.
\ When you're done experimenting with LINES, enter:
FORGET TASK-SHOW_IFF



: ADD3  16 32 +  64 +  .  ;
ADD3
DEF ADD3

\ The above compiles a word which adds 3 numbers and prints the answer.
\ It then executes the word.
\ The 3rd line displays the code the compiler put together.



FORGET ADD3
DEBUG{
: ADD3  16 32 +  64 +  .  ;
}DEBUG
DEBUG ADD3
\ then press the SPACE BAR repeatedly, until the Debugger window goes away.

\ The above compiled ADD3 again, this time with DEBUG turned on.
\ The last line executed ADD3, using the 'single-step' function of
\ the Debugger.
\ The user then presses the SPACE BAR to single-step the program.  Note
\ the data stack manipulations are displayed with each action.
\ Note that pressing the '?' key will display a list of debugger commands
\ (while inside the debugger) and that any key will pause the list, then
\ any key will continue.



TYPEFILE S:STARTUP-SEQUENCE

\ Pause with SPACE-BAR, then RETURN to continue.  Many JForth display
\ words pause like this... provided by the word ?PAUSE.  For example...

: JUSTHELLO
  100 0
  DO
      ." HELLO"  ?PAUSE CR
  LOOP
;
JUSTHELLO

\ Before the above word finishes, hit the SPACE-BAR and the stream
\ of HELLOs will stop.  Hit RETURN to continue.  Enter JUSTHELLO again
\ if it finishes before you have a chance to try the PAUSE feature.



INCLUDE PROGRAMS/QUARTERS.F
8239 QUARTERS
\ When you're done experimenting with Quarters, enter:
FORGET TASK-QUARTERS.F



INCLUDE PROGRAMS/DEMO_LINES
LINES
\ This demo runs until you click the lines windows closebox.
\ When you're done experimenting with LINES, enter:
FORGET TASK-DEMO_LINES



\ Interactive graphics example...

GR.INIT
GR.OPENTEST
20 20 GR.MOVE
80 20 GR.DRAW
20 30 GR.MOVE
" HERE IS SOME TEXT" GR.TEXT
40 40 120 60 GR.RECT
GR.CLOSECURW


\ That's about if for the example commands, unless you're interested
\ in JForth's assembler interface.  If so, continue...

\ Assembly examples

ASM PUSH.5.ON.STACK   ( -- 5 )
    MOVE.L  D7,-(A6)    \ push current top-of-stack out
    MOVEQ.L #5,D7       \ put a '5' in the top-of-stack register
END-CODE

\ The above word illustrates JForth's "cached data stack"...
\ The topmost "item on the stack" is really kept in data reg 7,
\ and the memory for the "rest of the stack" is pointed to by
\ addr reg 6.

\ JForth allows these registers to be specified with names more
\ descriptive of these functions.  Data reg 7 can be called TOS
\ and addr reg 6's other name is DSP (for Data Stack Pointer)
\ So the following word is identical to the previous one.

ASM PUSH.ANOTHER.5   ( -- 5 )
    MOVE.L  TOS,-(DSP)    \ push current top-of-stack out
    MOVEQ.L #5,TOS        \ put a '5' in the top-of-stack register
END-CODE

\ NOTE: You can tell the disassembler to display either standard
\ Motorola register names, or JForth's custom names, by setting
\ a variable called DISM-NAMES.  Entering:  DISM-NAMES OFF
\ will tell the disassembler to use standard names,  DISM-NAMES ON
\ will cause the custom names to appear.

\ NOTE:  All assembly words have to start with ASM and the name
\ of the function, and end with the single statement END-CODE in
\ the first column.

\ The following assembly word illustrates some common
\ assembly operations such as:
\
\ 1. defining and branching to a local label
\ 2. Interactively referencing JForth words (like constant values)
\ 3. CALLing other high-level words.

ASM EXAMPLE.CODE  ( n -- n*2 , just a bunch of example code, double 'n' )
    ASL.L    TOS  \ do the 'real work and double the passed in parameter
    \
    \ the rest is just example.   First let's DUP the answer then
    \ print its value (with .HEX)
    \
    CALLCFA   DUP   \ we'll see what the compiler puts together later
    CALLCFA   .HEX  \   by using DEF
    \
    \ zero the value if it is negative or equal to MEMF_CHIP
    \
    TST.L     TOS
    BPL       2$
1$: MOVEQ.L   #0,TOS
    BRA       3$
2$: CMP.L     #[MEMF_CHIP],TOS
    BEQ       1$
3$: RTS
    \
    \ That's it!
    \
END-CODE

6 EXAMPLE.CODE .  ( should print double )
DEF EXAMPLE.CODE
