home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 January / macformat-033.iso / mac / Shareware City / Developers / CGIshell Folder / Pocket 6.4 / Documents / Questions Answered < prev   
Encoding:
Text File  |  1994-12-10  |  7.3 KB  |  202 lines  |  [TEXT/ttxt]

  1.  
  2. To learn Forth: _Starting FORTH_ by Leo Brodie          (ISBN 0-13-843079-9).
  3.   Some other Forth books that I have read are:
  4.     _Thinking FORTH_ also by Brodie                     (ISBN 0-13-917568-7)
  5.     _Forth Fundamentals_ by McCabe                      (ISBN 0-88056-091-6)
  6.     _Library of Forth Routines and Utilities_ by Terry  (ISBN 0-452-25841-3)
  7.     _Threaded Interpretive Languages_ by Loeliger       (ISBN 0-07-038360-X)
  8.     _Dr Dobbs Toolbook of Forth_ by Dr. Dobbs           (ISBN 0-934375-41-0)
  9.  
  10.  
  11.  
  12.  
  13.  
  14. Here are some books that apply to Macintosh assembly or toolbox
  15. programming:
  16.   _Inside Macintosh_, many volumes, by Apple Computer, Addison Wesley
  17.   _Apple Numerics Manual_ by Apple Computer, Addison Wesley
  18.   _Macintosh Revealed_ vols 1-4 by Stephen Chernicoff, Hayden Books
  19.   _M68000 16/32-Bit Microprossor Programmer's Reference Manual_,
  20.     Motorola Inc.
  21.   _The Complete Book of Macntosh Assembly Language Programming_,
  22.     vol 1 and 2 by Dan Weston, Scott Foresman and Company
  23.   _How to Write Macintosh Software_, by Scott Knaster, Addison Wesley
  24.   _Macintosh Programming Secrets_, by Scott Knaster and Keith Rollin,
  25.     Addison Wesley
  26.   _System 7 Revealed_ by Anthony Meadow, Addison Wesley
  27.   _Programming for System 7_ by Gary Little and Tim Swihart, Addison
  28.     Wesley
  29.  
  30.  
  31.  
  32. To make a Turnkey application
  33.   1) Make a copy of the Pocket Forth application.  Rename it.
  34.  
  35.   2) Add resources that your application will need to the copy with
  36. Resedit or equivalent. (Since you may have to do this several times, it
  37. is convienent to put all the necessary resources into a file for safe
  38. keeping.)
  39.  
  40.   3) Run Pocket Forth and extend the language to handle whatever task
  41. you want your application to do.  Write an event loop as demonstrated in
  42. the Turnkey section of the manual.  Debug your code interactivly at this
  43. point.
  44.  
  45.   4) Assign handlers to the pertinant event variables and set other
  46. variables to their default values.  See the Events section of the
  47. manual.
  48.  
  49.   5) Finally save the Pocket Forth dictionary from the File menu or just
  50. type save.  Quit Pocket Forth
  51.  
  52.   If all goes well, great, you've just created a program with Pocket
  53. Forth.  If the program crashes or otherwise functions incorrectly, start
  54. over, but spend more time with step 3.
  55.  
  56.   6) When finally the program works as you like, go back to resedit,
  57. change the icons, BNDL, FREF, and creator signature, as well as the
  58. balloon help resources. If you don't use Apple Events, remove the aete
  59. resource.
  60.  
  61.   That's about it. There is a trivial example in the manual, and a more
  62. complex example with the Read Me application.  The source is in the
  63. example file, reader.
  64.  
  65.  
  66. How Dictionary entries are defined:
  67.   Pocket Forth stores its own code in a DICT resource. The
  68. DICT contains only machine language and header data. For
  69. example a word like '+' compiles the header:
  70.     DC.B  1,'+',0,0  
  71. which is the number of characters followed by the first three
  72. characters of the word's name. If the name is less than three
  73. characters (as in this case), zeros are compiled to fill the
  74. four byte name field. (Only the 5 lsb's count for the length)
  75.  
  76.   Then a two byte link field is compiled:
  77.     DC.W  {relative address of the previous word in the list}
  78. This field is not important in this matter.
  79.  
  80.   Next comes machine code to implement the word:
  81.     MOVE  (A6)+,D0  ; A6 is the parameter stack pointer
  82.     ADD   D0,(A6)
  83.     RTS
  84. Notice the code ends with RTS. This is because the inner
  85. interpreter of Pocket Forth is nothing more than the JSR/RTS
  86. mechanism built into the processor. That also means that words
  87. can only be pure machine code.
  88.  
  89.  
  90.  
  91. How do I draw curves with Pocket Forth.
  92. Here then is an excerpt from the Bezier code that draws Bezier curves.
  93.   Just paste the following code into the Pocket Forth window then type
  94.  
  95. TEST
  96.  
  97. to run the program:
  98.  
  99. -------------------------Cut Here------------------------------------
  100.  
  101. ( BCurves  Mon May 2, 1988 15:17:20 )
  102. ( the cubic bezier algorithm is from an article by )
  103. ( R. H. Turpin in MICRO no. 70 )
  104. ( Minimalized for clarity 10/28/93 )
  105.  
  106. 2variable P0  \    Start point
  107. 2variable P1   \   Start Control point
  108. 2variable P2    \  End control point
  109. 2variable P3     \ End point
  110.  
  111. 2variable P0' 2variable P1'
  112. 2variable P2' 2variable P3'
  113. variable N
  114.  
  115. ( point math )
  116. : P- ( h0 v0 h1 v1 -- h0-h1 v0-v1 )
  117.     rot swap - rot rot - swap ;
  118. : P* ( h v n -- n*h n*v ) rot over * rot rot * ;
  119. : P*/ ( h v m n -- m*h/n m*v/n )
  120.     rot >r over over 2>r */  ( m*h/n )
  121.     2r> r> swap */ ;  ( m*v/n )
  122.  
  123. : COMPUTE.P' ( -- ) \ fill in the primed variables
  124.     p1 2@ p0 2@ p- 3 p*
  125.     2dup  p2 2@ p1 2@ p- 3 p*
  126.     2dup  p3 2@ p0 2@ p- 2swap p-
  127.     p3' 2!  2swap p- p2' 2!
  128.     p1' 2!  p0 2@ p0' 2! ;
  129.  
  130. : POINTS ( -- h0' v0' h1' v1' h2' v2' h3' v3' )  \ get primed points
  131.     p0' 2@ p1' 2@ p2' 2@ p3' 2@ ;
  132. : P[T] ( p0' p1' p2' p3' t -- h[t] v[t] )  \ t= the step number
  133.     3 0 DO dup >r n @ p*/ d+ r> LOOP drop ;
  134.  
  135. : FIX.N ( -- )  \ set the number of steps
  136.     points 2 n !  1 p[t]
  137.     p0 2@ p-  abs swap abs max
  138.     3 max  100 min  n ! ;
  139.  
  140. : >P0 ( -- ) p0 2@ !pen ;  \  put the pen at the start point
  141. : CURVE ( -- )  \ draw from point to point 
  142.     @pen                 \    hold the pen location
  143.     >p0  n @ 1+  1 DO     \   repeat the following with r=1 to n+1
  144.       points  r p[t]  -to  \  calculate and draw to the next point
  145.     LOOP !pen ;             \ restore the pen location
  146.  
  147. : BDRAW ( -- )  \ draw the curve described in P0,P1,P2,P3
  148.     compute.p'  fix.n  curve  ;
  149.  
  150. : TEST  ( Set points, then draw )
  151.      300  50 p0 2!  \     start point
  152.     -100 150 p1 2!   \    start control
  153.      500 200 p2 2!    \   end control
  154.       75  20 p3 2!     \  end point
  155.     page bdraw ;        \ draw the curve
  156.  
  157.  
  158. ---------------------------Cut To Here-------------------------------
  159.  
  160.  
  161.  
  162. How to add menus:
  163.   o  Make a copy of Pocket Forth and open it with ResEdit.
  164.   o  First create a new menu resource.
  165.   o  Then set the menu resource number to 4 (press cmd-I).
  166.   o  You get a dialog to update the menu id to 4.  Say yes!
  167.   o  Type in a menu title and add a menu item (cmd-K).
  168.   o  Title the item and add a cmd key and color if you like.
  169.   o  Quit ResEdit saving the _COPY_ of Pocket Forth.
  170.   o  Run the doctored copy of Pocket Forth.
  171.   o  Paste in the following code:
  172.  
  173. +++++++++++++++>> CUT FROM THE NEXT LINE <<+++++++++++++++++++
  174.  
  175. ( Menu example for Sheldon.         Eek-lips day 4 Jan 1992. )
  176. : util beep beep beep ;     ( this represents your menu code )
  177.  
  178. create UteMenu         ( a list of words for your menu items )
  179.     ' util ,            ( there is just one item, see above. )
  180.  
  181. create NewMenuList         ( a list of lists of your menubar )
  182.     18 +md @ @ ,           ( comma in addr of File menu list )
  183.     18 +md @ 2+ @ ,        ( ditto for Edit menu list )
  184.     UteMenu ,              ( and now Your menu )
  185.  
  186. 2variable nmenuh           ( to hold the handle to the menu  )
  187.  
  188. : close  ( Menus leave memory blocks that must be cleaned up )
  189.     nmenuh 2@ 2>r  ,$ A9A3  ( _ReleaseResource )
  190.     [ 22 +md @ compile         ( do the regular quit routine )
  191.     ' close 22 +md !           ( store the new close routine )
  192.  
  193. : +menu                               ( Turn the new menu on.)
  194.     NewMenuList 18 +md !        ( store the new menubar list )
  195.     0 0 2>r 4 >r ,$ A9BF  ( _GetRMenu )
  196.     2r> 2dup 2>r 0 >r ,$ A935  ( _InsertMenu )
  197.     nmenuh 2!  ,$ A937 ;  ( _DrawMenuBar )
  198.  
  199. +menu
  200.  
  201. ++++++++++++++>> CUT TO THE PREVIOUS LINE <<++++++++++++++++++
  202.