This is the intro file for QForth. I will be available at tm@polari.UUCP
for about one more week, then I'll have to find another account (I'm moving).
 
 
: newdefs
 
;
 
: title
 
  page
 
  1 cv 30 ch
  ." QForth 2.0 Alpha 1.0 "
 
  3 cv 16 ch
  ." (c) 1988 Toshiyasu Morita, all rights reserved "
 
  5 cv 18 ch
  ." (Type 'read intro' to execute this file) "
 
  8 cv 18 ch
  ." 1) QForth overview "
 
  9 cv 18 ch
  ." 2) QForth conditionals & loop statements "
 
  10 cv 18 ch
  ." 3) QForth stack manipulation statements "
 
  11 cv 18 ch
  ." 4) QForth miscellaneous statements "
 
  12 cv 18 ch
  ." 5) Exit this menu "
 
  15 cv 20 ch
  ." Please select help file to view:  "
 
;
 
: overview
 
  page
 
  1 cv 32 ch
  ." QForth Overview "
 
  3 cv 6 ch
  ." QForth is a fast, integer Forth designed for developing small "
  4 cv 6 ch
  ." applications. QForth currently supports only unsigned integer "
  5 cv 6 ch
  ." arithmetic, making it unsuitable for number-crunching applications. "
 
  7 cv 6 ch
  ." QForth is, however, well-suited for developing small applications "
  8 cv 6 ch
  ." that need to run quickly using little memory. QForth is perfect "
  9 cv 6 ch
  ." for this task, since source compiles directly into machine language "
  10 cv 6 ch
  ." and the kernel (presently) occupies a mere 6k. "
 
  12 cv 6 ch
  ." This package does not include an editor as part of the language, so an "
  13 cv 6 ch
  ." external full-screen editor is suggested. (Applewriter 2.1 is highly "
  14 cv 6 ch
  ." recommended) "
 
  16 cv 6 ch
  ." Since this is an alpha version, bugs and/or crashes are highly likely. "
  17 cv 6 ch
  ." Please keep backups of your source files for safety! "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop 0
 
;
 
: conditionals
 
  page
 
  1 cv 22 ch
  ." QForth conditionals & loop operators "
 
  3 cv 6 ch
  ." DO-LOOP: counts from top item in stack to 2nd item on stack. "
  4 cv 6 ch
  ."          loop variable is accessed through i and j. i will push "
  5 cv 6 ch
  ."          the innermost loop counter on the stack, and j will push "
  6 cv 6 ch
  ."          the next-to-innermost loop counter on the stack. "
 
  8 cv 6 ch
  ." DO-+LOOP: Same as DO-LOOP except top item on stack is used at +LOOP "
  9 cv 6 ch
  ."           to increment the loop counter. "
 
  11 cv 6 ch
  ." IF-ELSE-THEN: Basic Forth conditional. Top of stack is evaluated "
  12 cv 6 ch
  ."               at IF. If the value is true then execution continues "
  13 cv 6 ch
  ."               after IF to ELSE, then resumes execution at THEN. "
  14 cv 6 ch
  ."               If value is false then execution continues after ELSE "
  15 cv 6 ch
  ."               and on through THEN. "
 
  17 cv 6 ch
  ." BEGIN-UNTIL: Executes statements between BEGIN and UNTIL, then top "
  18 cv 6 ch
  ."              of stack is evaluated at UNTIL. If value is true then "
  19 cv 6 ch
  ."              then execution exits loop, otherwise it loops to BEGIN. "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop
 
  page
 
  1 cv 22 ch
  ." Qforth conditionals & loop operators "
 
  3 cv 6 ch
  ." BEGIN-REPEAT-WHILE: Execution proceeds from BEGIN to REPEAT, then "
  4 cv 6 ch
  ."                     the the top of stack is tested at REPEAT. If top "
  5 cv 6 ch
  ."                     of stack is true, then execution continues to "
  6 cv 6 ch
  ."                     REPEAT and loops back to BEGIN otherwise the loop "
  7 cv 6 ch
  ."                     terminates. "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop
 
;
 
: stack
 
  page
 
  1 cv 22 ch
  ." QForth stack manipulation statements "
 
  3 cv 6 ch
  ." +, -, *, /, MOD: Performs specified operation on stack in "
  4 cv 6 ch
  ."                  reverse-polish notation. "
 
  6 cv 6 ch
  ." DUP: Duplicates top item on stack so that there are two copies. "
 
  8 cv 6 ch
  ." DROP: Discards top item on stack. "
 
  10 cv 6 ch
  ." SWAP: Reverses order of top two stack items, e.g. x, y becomes y, x. "
 
  12 cv 6 ch
  ." OVER: Makes a copy of next-to-top stack item and pushes it on stack. "
 
  14 cv 6 ch
  ." ROT: Rotates third item on stack to top, e.g. x, y, z becomes y, z, x. "
 
  16 cv 6 ch
  ." >R: Moves top item on data stack to return stack. "
 
  18 cv 6 ch
  ." R>: Moves top item on return stack to data stack. "
 
  20 cv 6 ch
  ." R@: Copies top return stack item to data stack without removing it. "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop
 
  page
 
  1 cv 22 ch
  ." QForth stack manipulation statements "
 
  3 cv 6 ch
  ." .: Prints out top item on stack followed by a space. "
 
  5 cv 6 ch
  ." NOT, AND, OR, XOR, <, >, =: Performs specified operation on stack, "
  6 cv 6 ch
  ."                             leaves result on stack. "
 
  8 cv 6 ch
  ." 1+, 1-, 2+, 2-: Performs equivalent of 1 + or 1 -, etc. except words "
  9 cv 6 ch
  ."                 are optimized for speed. "
 
  11 cv 6 ch
  ." 2*, 2/: Arithmetic left shift and right shift, respectively. "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop
 
;
 
: other
 
  page
 
  1 cv 28 ch
  ." QForth other statements "
 
  3 cv 6 ch
  ." !, @: Store and fetch two bytes from address to & from stack. "
 
  5 cv 6 ch
  ." C!, C@: Store and fetch single bytes from address to & from stack. "
 
  7 cv 6 ch
  ." PAGE: Clear screen and home cursor. "
 
  9 cv 6 ch
  ." CV: Set cursor vertical position to top value on stack. "
 
  11 cv 6 ch
  ." CH: Set cursor horizontal position to top value on stack. "
 
  13 cv 6 ch
  ." KEY: Wait for a keypress, push ASCII value on stack. (high bit clear) "
 
  15 cv 6 ch
  ." EMIT: Output to screen the ASCII value on stack. (high bit ignored) "
 
  17 cv 6 ch
  ." CR, SPC: Output return and space to screen, respectively. "
 
  19 cv 6 ch
  ." . " 34 emit ." : Output string to screen, must be terminated by another "
  ."  quote. "
 
  22 cv 32 ch
  ." Press any key:  "
 
  key drop
 
;
 
: main
 
  title
 
    begin
 
      key 48 -
 
      dup 1 =
        if
          overview
          title
        else
        then
 
      dup 2 =
        if
          conditionals
          title
        else
        then
 
      dup 3 =
        if
          stack
          title
        else
        then
 
      dup 4 =
        if
          other
          title
        else
        then
 
    5 =
    until
 
    forget newdefs
 
;
 
close main
