home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / doc / chaptr10.txt < prev    next >
Text File  |  1989-10-30  |  29KB  |  736 lines

  1. CHAPTER 10.  USER CONTRIBUTIONS
  2.  
  3.  
  4.  
  5.  
  6.  
  7. This is the fun part of this manual because it shows the human side of
  8. F-PC.  F-PC is a platform, from which one can launch whatever his
  9. imagination carries him.  Here you will see how different people use this
  10. platform to build a wide variety of programs doing totally different
  11. things.  Many of them deal with very serious subjects, like object
  12. oriented programming, floating point mathematics, etc.  Many of them are
  13. very lighthearted, drawing pictures, running a clock, printing a banner,
  14. and so forth.  With such a broad spectrum of topics, you will surely find
  15. many programs useful and enlightening.  We hope that in seeing these
  16. applications, you will also be motivated to polish up some of your
  17. programs by adapting them to the F-PC environment and contribute them to
  18. this section.
  19.  
  20. In F-PC 2.25 there were a set of .ARC files containing contributions from
  21. many users:
  22.  
  23.         ZIMMER.ARC      Utilities provided by Tom Zimmer.
  24.         SMITH.ARC       Floating pointing packages by Bob Smith.
  25.         CURLEY.ARC      Disassembler by Charles Cureley.
  26.         TING.ARC        Multitasking and other applications by C. H. Ting.
  27.         SMILEY.ARC      Graphics by Mark Smiley.
  28.         SLICE_FF.ARC    Slice data base by Robert Gesswein.
  29.         MISC.ARC        Extended data objects by George Hawkins.
  30.         MODROW.ARC      Clock by Jerry Modrow.
  31.         TANG.ARC        Multiple precision integer math by S. Y. Tang.
  32.  
  33. In F-PC 3.5,  only the ZIMMER, SMITH, and CURLEY files are retained in
  34. the ZIP format, because there is not enough space on the diskettes and
  35. there is not enough time to test all the user contributions on the
  36. enhanced platform.  The contributions not included will be distributed
  37. separately from F-PC by the Silicon Valley FIG Chapter after they are
  38. tested and verified.
  39.  
  40.  
  41. 10.1.   FROM TOM ZIMMER
  42.  
  43.  
  44. Tom Zimmer is the principal author of F-PC, besides many other Forth
  45. systems and applications. The files in ZIMMER.ARC are examples of his
  46. minor works tailored for F-PC.
  47.  
  48. AUTOFOR.SEQ
  49.  
  50. This file contains the tools to allow automatic forward reference
  51. resolution of Forth words.  There is a runtime overhead which is
  52. equivalent to a DEFERred word.  Words that are forward referenced are
  53. automatically defined, and then when really defined, they are
  54. automatically resolved.
  55.  
  56. AUTOLOAD.SEQ
  57.  
  58. A simple utility to make F-PC load a file automatically at boot time. Add
  59. this to the system and resave the system.  Place your forth commands in
  60. the file F-PC.CFG and they will be executed before F-PC handles the
  61. command line.
  62.  
  63. BLKTOSEQ.SEQ
  64.  
  65. This file contains the source for a utility to convert your  .BLK files
  66. into .SEQ files.  Type the following to convert a file:
  67.  
  68.         FLOAD BLKTOSEQ <enter>
  69.         CONV <enter>
  70.         <file_to_convert> <enter>
  71.  
  72. You will be prompted for a name of a block file.  The .BLK file will be
  73. converted to a sequential file, with the new extension .SEQ.  All extra
  74. blank lines will be omitted.  Shadow screens in .BLK files will be
  75. enclosed in F-PC's "Comment:" mechanism, and appended to each source
  76. block.  If a BLOCK file does not have shadows, then change its extension
  77. to .SCR, and F-PC will convert all screens sequentially.
  78.  
  79. BLOCK.SEQ
  80.  
  81. A new virtual block system for Forth.  This is Tom's own implementation.
  82. It is very fast, and uses a true 'Least Recently Used' buffer allocation
  83. mechanism.  You can also change the block size to be anything you want,
  84. as well as specify as many or as few block buffers as you can hold in
  85. memory.
  86.  
  87. BOOKMARK.SEQ
  88.  
  89. A Bookmark utility for the F-PC editor, allows saving and restoring 5
  90. different file and line offsets. For example:
  91.  
  92.         OPEN F-PC 3 LIST        \ Open a file and specify a line.
  93.         M1                      \ Save place with Bookmark # 1
  94.         OPEN SEDITOR            \ Open the editor
  95.         400 LIST                \ Specify line 400
  96.         M2                      \ Save place with Bookmark # 2
  97.         BM1                     \ Go Back to bookMark # 1
  98.         L                       \ List line 3 of F-PC
  99.         BM2                     \ Go Back to bookMark # 2
  100.         L                       \ List line 400 of SEDITOR
  101.  
  102. M1 to M5 and BM1 to BM5 are valid bookmarks.
  103.  
  104. CARDFILE.SEQ
  105.  
  106. A card contains 1024 characters arranged in 16 lines of 64 characters.
  107. CARDFILE uses menus and windows to edit and manipulate cards.  Back to
  108. blocks!
  109.  
  110. CODEHIGH.SEQ
  111.  
  112. Utility to allow calling high level words from assembly (code)
  113. definitions.
  114.  
  115. COMMAND.SEQ
  116.  
  117. A nestable comment line entry routine.  Can be placed in a program to
  118. allow entering Forth commands without fear of aborting the currently
  119. running Forth word.
  120.  
  121. CONSTANT.SEQ
  122.  
  123. A utility to allow defining multiple constants and variables as follows:
  124.  
  125.         CONSTANTS       3 george        12 robert
  126.                         14 betty        72 bongo    ;
  127.  
  128.         VARIABLES       Gort!           clatoo
  129.                         borada  nicto       ;
  130.  
  131. Note the ";" terminating the list of constants. If you use multiple
  132. lines, you can put "\" delimited comments on the same line as the
  133. constants or variables.
  134.  
  135. DOSIO.SEQ
  136.  
  137. A conversion utility to allow F-PC to accept re-directed input and output
  138. from the DOS command line.  You can make filters that use all of the
  139. power of Forth.
  140.  
  141. EVAL.SEQ
  142.  
  143. A utility to allow run-time interpretation of compiled strings.  This
  144. implements text macros.
  145.  
  146. EMMEXMPL.SEQ
  147.  
  148. An example of how to use the Expanded Memory Manager. Tests and uses
  149. expanded memory to save a bunch of screens and display them on the screen
  150. very quickly.
  151.  
  152. EMMHEADS.SEQ
  153.  
  154. After loading EXPANDED.SEQ, you can load this file and save the system to
  155. a new file. The new resulting .EXE file will use expanded memory for
  156. HEADS, freeing up 64k of normal RAM for other uses. This will mostly be
  157. useful if you are trying to write a LARGE application.
  158.  
  159. EXPANDED.SEQ
  160.  
  161. An interface to EMM (Expanded Memory Manager). Most of this file was
  162. developed by using the examples right out of the INTEL book.
  163.  
  164. FORWARD.SEQ
  165.  
  166. A neat mechanism to handle forward references, and have them
  167. automatically resolved.
  168.  
  169. FUNKEY.SEQ
  170.  
  171. A simple utility to allow the 10 function keys to be assigned to Forth
  172. words.  Saves some key strokes.
  173.  
  174. HANOI.SEQ
  175.  
  176. A cute demo of a character graphics Towers of Hanoi.
  177.  
  178. LOCALS.SEQ
  179.  
  180. An implementation of local variables for F-PC, places then in a separate
  181. stack for flexibility. Four locals are defined, LOCALA through LOCALD. A
  182. simple syntax is provided for allocating these variables, and
  183. deallocation is automatic at definition end.
  184.  
  185. MONITOR.SEQ
  186.  
  187. An on screen editor, allows you to cursor up and change all the stuff on
  188. the screen, then re-enter it by pressing <enter> on a line.
  189.  
  190. NEWCOM.SEQ
  191.  
  192. A utility to allow the easy creation of VERY SMALL .COM files.
  193.  
  194. OBJECT.SEQ
  195.  
  196. Object oriented utility words from Forth Dimensions Volume 10, number 2
  197. by Rick Hoselton. Sightly modified to run on F-PC.
  198.  
  199. SCROLL.SEQ
  200.  
  201. Some simple code utilities to allow scrolling an area of the screen as
  202. specified by two pairs of x/y coordinates up or down one line.
  203.  
  204. SEQTOBLK.SEQ
  205.  
  206. This file contains the source for a utility to convert your .SEQ files
  207. back to .SCR files.  Type the following to convert a file:
  208.  
  209.         FLOAD SEQTOBLK <enter>
  210.         CONV <enter>
  211.         <file_to_convert> <enter>
  212.  
  213. You will be prompted for a name of the sequential file.  The .SEQ file
  214. will be converted to a BLOCK file, with the new extension .SCR.  Screen 0
  215. will be blank.  The first line of each block will be blank, preceded by a
  216. "\".  The last line of each block will also be blank.  The resulting will
  217. be an exact multiple of 1024 bytes in length.  The resulting file will
  218. need to be substantially edited, to move entire definitions onto one
  219. screen, as they are likely to be split across screens in the move.
  220.  
  221. WINDEX.SEQ
  222.  
  223. Displays a more or less alphabetized list of Forth words showing
  224. vocabulary and file where it was defined.  Just type
  225.  
  226.         ALLWORDS <enter>
  227.  
  228. to display an index of all forth words.  Load PRINT.SEQ and use PFILE
  229. <name>, then print the file to disk with
  230.  
  231.         PRINT ALLWORDS.
  232.  
  233. WINDOW.SEQ
  234.  
  235. A nice window package for Forth.  Much is in assembly, so its very fast.
  236. Primarily useful in an application package.  Try the demo.
  237.  
  238. WYSE50.SEQ
  239.  
  240. A simple package to allow EMITted Wyse 50 terminal escape codes to be
  241. emulated on the IBM screen.  This has limited functionality, since only a
  242. few of the sequences are implemented.
  243.  
  244.  
  245. 10.2.   FROM CHARLES CURLEY
  246.  
  247.  
  248. Charles Curley is the F-PC team's devil's advocate.  His lean, mean,
  249. implementations of real- FORTH run on 6502, 6809, LSI-11, 80X8X and
  250. 680XX, both under operating systems and stand alone.  Prior to working at
  251. Maxtor he worked at or contracted to Rockwell International, Jet
  252. Propulsion Lab, Hughes Aircraft, Strand Lighting and other companies.
  253. His code has been used to check out the Gallileo spacecraft, write and
  254. debug rock shooting games, and light exhibits at world fairs. He sees
  255. F-PC as a sneaky plot to sell more Maxtor hard disk drives.
  256.  
  257. DISASSEM.SEQ
  258.  
  259. A 8086 disassembler.  This disassembler is patched into SEE, so all you
  260. have to do is type:
  261.  
  262.         SEE <code_word> <enter>
  263.  
  264. You will see a line of Assembly code.  Continuing to press <enter> after
  265. each line shows additional instructions.  Press ESC to terminate
  266. disassembly.
  267.  
  268. You can also disassemble from an address:
  269.  
  270.         <addr> DISASSEM <enter>
  271.  
  272. The disassembler displays Postfix notation ala F83.
  273.  
  274. FDIS.SEQ
  275.  
  276. A disassembler for 8087 machine code.  Extension of the F-PC
  277. disassembler.  Bob Smith did it, but the file is grouped here.
  278.  
  279. DIS8086.SEQ
  280.  
  281. Donation from Bill Muench, is a modified version of Curley's DISASSEM.SEQ
  282. above, adjusted to disassemble in PREFIX mode.  The disassembly can be
  283. sent to a file from either of the above files by using PFILE to specify a
  284. <printfile>, then typing:
  285.  
  286.         PFILE EXIT.SEQ <enter>
  287.         PRINT SEE EXIT <enter>
  288.         PCLOSE <enter>
  289.  
  290. to disassemble EXIT to the file EXIT.SEQ.
  291.  
  292.  
  293. 10.3.   FROM BOB SMITH
  294.  
  295.  
  296. Dr. Robert L. Smith was a member of IEEE Floating Point Standards
  297. Committee.  He was also a member of the Forth Implementation Team which
  298. gave us figForth.  He has heavily participated in the Forth Standards
  299. Team and the current ANS Forth Standards Committee.  Bob is well know for
  300. his meticulous coding style and his attention to precision to the last
  301. half bit.  He generously contributed his 8087 floating point package and
  302. a software floating point package to F-PC.
  303.  
  304. COMPLEX.SEQ
  305.  
  306. Some complex number routines, notably, a complex square root algorithm.
  307. Requires HFLOAT or SFLOAT and FLT-EXT.
  308.  
  309. DMULDIV.SEQ
  310.  
  311. A 64 bit by 32 bit mixed divide, with a 32 bit quotient and a 32 bit
  312. remainder result.  Also, a 32 bit by 32 bit multiply, yielding a 64 bit
  313. product (all unsigned).  Written by Robert L. Smith in 8086 assembly.
  314.  
  315. HFLOAT.SEQ
  316.  
  317. Software support for the 8087 floating point chip. This package was
  318. modified from a version by Mark Smiley to support the prefix assembler
  319. used in F-PC.
  320.  
  321. SFLOAT.SEQ
  322.  
  323. Software floating point package for those of us who don't have an 8087.
  324. It is compatible with the Forth Venders Group floating point standard.
  325. Several files are loaded by SFLOAT.SEQ.  This IS a COPYRIGHTed package,
  326. and may be used for your personal purposes only.  You may not sell it as
  327. part of any software package without the consent of Robert Smith.
  328.  
  329. This is a software floating point package for use with the F-PC Forth
  330. system.  It follows most of the recommendations of the FVG (Forth Vendors
  331. Group) Standard Floating-Point Extension.  The intention is that the
  332. functions be as accurate as is reasonable, consistent with speed as the
  333. secondary goal.  The basic four functions plus square root should be
  334. precise to one half a bit in the least significant bit of the
  335. representation.  The higher functions have intrinsic errors no larger
  336. than one bit in the least significant place.
  337.  
  338. The representation uses a 16 bit word for the sign and biased exponent of
  339. the floating point number, and 32 bits for the significand (sometimes
  340. called the "mantissa").  That means that the intrinsic accuracy is
  341. approximately 9 and a half decimal digits.  The largest and smallest
  342. representable numbers cover roughly the range from 10 to the plus and
  343. minus 4000 power, which is far greater than almost anyone would ever
  344. need.  The representation does NOT include special cases for infinity,
  345. unnormalized numbers, and Not-A-Number.  The format is definitely NOT the
  346. IEEE Floating Point Standard format.  The reason is basically one of
  347. speed.  The functions in this package are approximately 5 (FIVE) times
  348. faster than software implementations using the IEEE standard.  In spite
  349. of that, it does meet the basic requirement of having the basic four
  350. functions be accurate to within one-half a bit.  The precision is
  351. somewhat greater than one would obtain from the 32-bit IEEE format.
  352.  
  353. To load the package from F-PC, type  FLOAD SFLOAT  followed by a carriage
  354. return.  After SFLOAT has been loaded, you may enter floating point
  355. numbers in exponential format.  The following is a list of possible
  356. entries:
  357.  
  358.                 -1.2345E4
  359.                 .9876E-3
  360.                 123.456(10)
  361.  
  362. The rules are: If the number is negative, it must be preceded with a
  363. minus sign.  Do not use "+" with positive numbers.  The separator between
  364. the mantissa and exponent must be either the letter "E" or a left
  365. parenthesis.  In the examples above, the "E" is used for compliance with
  366. FVG, but the left parenthesis may be used, especially if you desire to
  367. enter your numbers in another base.  The terminating symbol may be
  368. omitted, but you may wish to use a right parenthesis, as in the third
  369. example above.
  370.  
  371. The simplest numeric output is  E. .  Other possible functions are: E.R ,
  372. F. , and F.R .  There is also a floating point stack printout word, .FS .
  373. If you wish to turn off the Floating Point interpreter, enter  NOFLOATING
  374. .  To re-enter the floating point interpreter, enter  FLOATING .
  375.  
  376. FLOATING POINT GLOSSARY
  377.  
  378. The low level words in the HFLOAT and SFLOAT packages differ
  379. significantly because of the hardware facilities.  However, the high
  380. level application words are very similar, based on the proposed FVG
  381. floating point standard.  These high level words will be used in
  382. applications requiring floating point numbers.  It is thus appropriate to
  383. summarize this set of high level floating point words common to both
  384. HFLOAT and SFLOAT.
  385.  
  386.  
  387. HFLOAT/SFLOAT GLOSSARY
  388.  
  389.  
  390. FLOATING POINT STACK  WORDS
  391.  
  392.  
  393. FDUP            ( F: r -- r r )
  394.         Duplicate the floating point number at the top  of the stack.
  395.  
  396. FDROP           ( F: r -- )
  397.         Drop the top floating point number from the  stack.
  398.  
  399. FNIP            ( F: r1 r2 -- r1 )
  400.         Remove the second floating point number  from the stack.
  401.         Equivalent to FSWAP FDROP .
  402.  
  403. FOVER           ( F: r1 r2 -- r1 r2 r1 )
  404.         Push a copy of the floating point number  second on the stack.
  405.  
  406. FSWAP           ( F: r1 r2 -- r2 r1 )
  407.         Interchange the top two floating point  numbers on the stack.
  408.  
  409. FROT            ( F: r1 r2 r3 -- r2 r3 r1 )
  410.         Rotate the top three elements on the floating  point stack,
  411.         bringing the third element to the top.
  412.  
  413. F-ROT           ( F: r1 r2 r3 -- r3 r1 r2 )
  414.         Reverse rotate the top three elements on the  floating point
  415.         stack, putting the top element to the third position.
  416.  
  417. FPICK           ( F: rn rn-1 ... r0 -- rn rn-1 ... r0 rn ; n -- )
  418.         Using a zero referenced value of n , pick the n-th value from the
  419.         floating point stack and push it onto the floating point stack.
  420.         Thus 0 FPICK  is equivalent to FDUP .
  421.  
  422. FNSWAP          ( F: rn rn-1 ... r0 -- r0 rn-1 ... r1 rn ; n -- )
  423.         Exchange the floating point value at the n-th location on the
  424.         floating point stack with the floating point value at the top of
  425.         the floating point stack.  Thus  1 FNSWAP  is equivalent to FSWAP
  426.         .
  427.  
  428.  
  429. FLOATING POINT MATH WORDS
  430.  
  431.  
  432. F-              ( F: r1 r2 -- r3 )
  433.         Subtract the floating point number at the top  of the stack from
  434.         the floating point number second on the stack. Report overflow
  435.         errors.
  436.  
  437. F\-             ( F: r1 r2 -- r3 )
  438.         Reverse subtraction.  Subtract the floating  point number second
  439.         on the stack from the floating point number at the top of the
  440.         stack. Report overflow   errors.
  441.  
  442. F+              ( F: r1 r2 -- r3 )
  443.         Add the two floating point numbers at the top  of the stack. The
  444.         result is placed back on the stack. Report overflow errors.
  445.  
  446. F*              ( F: r1 r2 -- r3 )
  447.         Multiply the top two floating point numbers  on the stack. Report
  448.         overflow errors.
  449.  
  450. F/              ( F: r1 r2 -- r3 )
  451.         Divide the floating point number second on  the stack by the
  452.         floating point number at the top of the stack. Report overflow
  453.         errors and division by zero.
  454.  
  455. FSQRT           ( F: r1 -- r2 )
  456.         Replace the floating point number at the top  of the stack with
  457.         its square root.  Report an error if r1 is negative.
  458.  
  459. FMAX            ( F: r1 r2 -- r3 )
  460.         Replace the top two numbers on the floating  point stack with the
  461.         greater of the two.
  462.  
  463. FMIN            ( F: r1 r2 -- r3 )
  464.         Replace the top two numbers on the floating  point stack with the
  465.         smaller of the two.
  466.  
  467. FABS            ( F: r1 -- r2 )
  468.         Replace the floating point number at the top  of the floating
  469.         point stack with its absolute value.
  470.  
  471. FNEGATE         ( F: r1 -- r2 )
  472.         Negate the floating point number at the top of  the floating
  473.         point stack.
  474.  
  475. 1/F             ( F: r1 -- r2 )
  476.         Take the reciprocal of the floating point  argument.
  477.  
  478.  
  479. FLOATING POINT LOGIC WORDS
  480.  
  481.  
  482. F0<             ( F: r1 -- ; -- flag )
  483.         Test the floating point number at the top of  the floating point
  484.         stack. If the number is less than zero, push a -1 flag on the
  485.         parameter stack. If the floating point number is greater than or
  486.         equal to zero, push a 0 flag on the parameter stack. In either
  487.         case, drop the floating point number from the floating point
  488.         stack.
  489.  
  490. F0>             ( F: r1 -- ; -- flag )
  491.         Test the floating point number at the top of  the stack, then
  492.         drop the number.  If the number was greater than zero, push a -1
  493.         flag on the parameter stack.  Otherwise push a zero.
  494.  
  495. F0=             ( F: r -- ; -- flag )
  496.         Test the floating point number at the top of  the stack, then
  497.         drop it. If the number is zero, push a -1 on the parameter stack.
  498.         The flag is set to 0 if the floating point number was not zero.
  499.  
  500. F=              ( F: r1 r2 -- ; -- flag )
  501.         Compare the top two floating point numbers.   If the numbers are
  502.         equal, push a flag of -1 on the parameter stack. If the two
  503.         numbers are not equal, push a zero.  In either case, drop the two
  504.         numbers from the floating point stack.
  505.  
  506. F<              ( F: r1 r2 -- ; -- flag )
  507.         Compare the top two floating point numbers.   If the number
  508.         second on the floating point stack is less than the top number,
  509.         push a flag of -1 onto the parameter stack. Otherwise push a 0
  510.         onto the parameter stack. In either case, the top two numbers on
  511.         the floating point stack are dropped.
  512.  
  513. F>              ( F: r1 r2 -- ; -- flag )
  514.         Compare the top two floating point numbers.   If the number
  515.         second on the floating point stack is greater than the top
  516.         number, push a flag of -1 onto the parameter stack. Otherwise
  517.         push a 0 onto the parameter stack.  In either case, the top two
  518.         numbers on the floating point stack are dropped.
  519.  
  520.  
  521. TRANSDENTIAL FUNCTIONS
  522.  
  523.  
  524. FLN             ( F: r1 -- r2 )
  525.         Natural logarithm function.   Time: 1260  usec.
  526.  
  527. FLOG            ( F: r1 -- r2 )
  528.         Logarithm of base 10.
  529.  
  530. FEXP            ( F: r1 -- r2 )
  531.         Floating point exponential function  e^x
  532.  
  533. FALN            ( F: r1 -- r2 )
  534.         Alternative name for the exponential function.   This is the name
  535.         specified in the FVG Standard Floating Point Extension.
  536.  
  537. FALOG           ( F: r1 -- r2 )
  538.         Take the inverse log of r1, i.e., raise 10 to  the power of r1.
  539.  
  540. FTAN            ( F: r1 -- r2 )
  541.         The input is a floating point number in  radians. The output is
  542.         is the tangent of the number. An error condition exists for
  543.         sufficiently large input values.
  544.  
  545. FSIN            ( F: r1 -- r2 )
  546.         Returns the sine of the input number in  radians. Input and
  547.         output values are floating point numbers. An error condition
  548.         exists for sufficiently large input values.
  549.  
  550. FCOS            ( F: r1 -- r2 )
  551.         Returns the cosine of the floating point  argument in radians. An
  552.         error condition exists for sufficiently large input arguments.
  553.  
  554. FATAN           ( F: r1 -- r2 )
  555.         Returns a floating point value equal to the  arctangent of the
  556.         input argument.  The result is expressed in radians.
  557.  
  558. FASIN           ( F: r1 -- r2 )
  559.         Returns a floating point value equal to the  arcsine of the input
  560.         argument.  The result is expressed in radians. If the input
  561.         argument exceeds 1.0 in value, an error condition results.
  562.  
  563. FACOS           ( F: r1 -- r2 )
  564.         Returns a floating point value equal to the  arccosine of the
  565.         input argument.  The result is expressed in radians. If the input
  566.         argument exceeds 1.0 in value, an error condition results.
  567.  
  568. FSINH           ( F: r1 -- r2 )
  569.         Hyberbolic sin function.  Not in HFLOAT.
  570.  
  571. FCOSH           ( F: r1 -- r2 )
  572.         Hyperbolic cosine function.  Not in  HFLOAT.
  573.  
  574. FTANH           ( F: r1 -- r2 )
  575.         Hyperbolic tangent function.  Not in  HFLOAT.
  576.  
  577. FASINH          ( F: r1 -- r2 )
  578.         Inverse hyperbolic sin function.  Not in  HFLOAT.
  579.  
  580. FACOSH          ( F: r1 -- r2 )
  581.         Inverse hyperbolic cosine function.  Not in  HFLOAT.
  582.  
  583. FATANH          ( F: r1 -- r2 )
  584.         Inverse hyperbolic tangent function.  Not in  HFLOAT.
  585.  
  586. FTRIG0          ( F: r1 -- r2 )
  587.         Returns a floating point value equal to the  square root of the
  588.         absolute value of (1.0 - (r1^2)). This is a useful auxiliary
  589.         function suggested in APL.  Not in HFLOAT.
  590.  
  591. FLN2            ( F: -- r1 )
  592.         Push a floating point number with a value  approximately equal to
  593.         the natural logarithm of 2. Not in HFLOAT.
  594.  
  595. F**N            ( F: r1 -- r2 ; n -- )
  596.         Raise the floating point number to the integral  power specified
  597.         by the number on top of the parameter stack. Not in HFLOAT.
  598.  
  599. F/LN2           ( F: r -- r/ln2 )
  600.         Divide the floating point number by the  natural logarithm of 2.
  601.         Not in HFLOAT.
  602.  
  603.  
  604. MISCELLANEOUS WORDS
  605.  
  606.  
  607. FCONSTANT       ( F: -- r )
  608.         Create a floating point constant.
  609.  
  610. FVARIABLE       ( -- addr )
  611.         Create a floating point variable.
  612.  
  613. PI              ( F: -- r1 )
  614.         Push a floating point number with a value  approximately equal to
  615. pi.
  616.  
  617. F0.0            ( F: -- r1 )
  618.         Push a floating point number with a value  equal to 0.
  619.  
  620. F1.0            ( F: -- r1 )
  621.         Push a floating point number with a value  equal to 1.
  622.  
  623. FINFINITY       ( F: -- r1 )
  624.         Push the floating point number representing  the largest
  625.         representable number onto the floating point stack.
  626.  
  627. E.              ( F: r -- )
  628.         Print a floating point number in exponential  (power of ten)
  629.         format
  630.  
  631. .FSINH          ( F: r1 -- r2 )
  632.         Hyberbolic sin function. Not in HFLOAT.
  633.  
  634. E.R             ( F: r -- ; n1 n2 )
  635.         Display the floating point number r on the  currently selected
  636.         output device in exponential form with n1 digits to the right of
  637.         the decimal point, right justified in a field of width n2. Not in
  638.         HFLOAT.
  639.  
  640. F.              ( F: r -- )
  641.         Display the floating point number on the  currently selected
  642.         output device in fixed-point form; i.e., the location of the
  643.         decimal point is adjusted so that no exponent need be displayed.
  644.         The number of digits to the right of the decimal point specified
  645.         by the most recent execution of the word PLACES are printed to
  646.         the right of the decimal point. A trailing blank follows.  For
  647.         example, 4 PLACES 1.2345E02 F. will display as 123.4500b (where
  648.         the "b" denotes an ASCII blank). If the number of digits to the
  649.         left of the decimal point is greater than 14, the error routine
  650.         is called.  Not in HFLOAT.
  651.  
  652. F.R             ( F: r -- ; n1 n2 )
  653.         Display r on the currently selected output  device in fixed point
  654.         form with n1 digits to the right of the decimal place, right
  655.         justified in a field of width n2.  If the number cannot be
  656.         represented within the given field width, the error routine is
  657.         called and the value is printed in exponent form.  For example,
  658.         1.2345e2 4 12 F.R will display as bbbb123.4500 (where each "b"
  659.         character denotes an ASCII blank). Not in HFLOAT.
  660.  
  661. FLOATS          ( -- )
  662.         Set the flag FLTS .  Allows floating point  numbers to be input
  663.         using imbedded decimal points and optional exponent fields. For
  664.         example:
  665.                 FLOATS    1.234   -5.4
  666.         will produce two floating point numbers. Note, however, that a
  667.         single precision integer, such as 7 , will remain a single
  668.         precision integer, and a double number with a terminating decimal
  669.         point, such as 1234. , will remain a double number.
  670.  
  671. FNUMBER         ( F: -- r ; adr -- -1 )
  672.                 ( adr -- d 1 )
  673.         Convert the string at the specified address  into a real or
  674.         integer number, with a flag of -1 or 1, respectively. If the
  675.         number cannot be converted, print an error message.  Not in
  676.         HFLOAT.
  677.  
  678. F#              ( F: -- r )
  679.         Convert the string following F# into a  floating point number.
  680.         This includes numbers with or without decimal points. Thus F# 34
  681.         yields the equivalent of 34X0 .  If SFLOAT is loaded, even if in
  682.         NOFLOATING mode, F# still converts the following number and
  683.         pushes it onto the floating point stack.  Not in HFLOAT.
  684.  
  685. #?              ( number --- d 1 )
  686.                 ( F: -- r ; number --- -1 )
  687.         If possible, convert the following word in the  input stream into
  688.         a number.  If the string converts to a floating point number, the
  689.         flag is set to -1 .  If the string converts to an integer, the
  690.         flag is set to 1. If the string cannot be converted, a standard
  691.         error message is sent. Not in HFLOAT.
  692.  
  693. FLITERAL        ( F: -- r )
  694.         Create an in-line literal.
  695.  
  696. F@              ( F: -- r ; addr -- )
  697.         Fetch the floating point number at the  specified address and
  698.         push it onto the floating point stack. Drop the address from the
  699.         parameter stack.
  700.  
  701. F!              ( F: r -- ; addr -- )
  702.         Store the floating point number at the top of  the floating point
  703.         stack in the area specified by the address at the top of the
  704.         parameter stack. Drop the address from the parameter stack and
  705.         drop the top element from the floating point stack.
  706.  
  707. F,              ( F: r -- )
  708.         Allot space at HERE and store the floating  point number. Similar
  709.         to , . Not in HFLOAT.
  710.  
  711. FLOAT           ( F: -- r ; dbl -- )
  712.         Convert the double number at the top of the  parameter stack to a
  713.         floating point number which is then pushed onto the floating
  714.         point stack.  As with all double numbers, the location of the
  715.         decimal point is effectively ignored.
  716.  
  717. FIX             ( F: r -- ; -- d )
  718.         Convert a floating point number to the nearest  signed double
  719.         integer equivalent, removing the real number from the floating
  720.         point stack and leaving the double integer result on the Forth
  721.         parameter stack. When the real number lies exactly halfway
  722.         between two integers, the result is the nearest EVEN number.
  723.         Underflow gives a zero result. An error condition results if the
  724.         resulting number is too large to be represented as an UNSIGNED
  725.         double number.  If more error control is desired, you may create
  726.         your own version using DINTABS.
  727.  
  728. INT             ( F: r -- ; -- d )
  729.         Convert a signed floating point number to its  truncated double
  730.         integer value.  If the conversion did not succeed, report an
  731.         error.
  732.  
  733.  
  734.  
  735.  
  736.