home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / source / l6p030.seq < prev    next >
Text File  |  1990-04-22  |  4KB  |  89 lines

  1. \ Lesson 6 Part 3 ( F-PC 3.5 Tutorial by Jack Brown )
  2. COMMENT:
  3. We begin with an example and a problem.
  4. Example:  Here are number of ways to make a dashed line using 10 dash
  5. characters.
  6. COMMENT;
  7. : DASHED1  ( -- ) CR ." ----------" ;
  8.   CREATE DASH  ," ----------"
  9. : DASHED2  ( -- ) CR DASH COUNT TYPE ;
  10. : DASHED3  ( -- ) CR " ----------" TYPE ;
  11. : DASHED4  ( -- ) CR 10 0 DO  ASCII - EMIT LOOP ;
  12. COMMENT:                                      **
  13. Problem 6.3                                  ****
  14. Use each of the four techniques             ******
  15. above to produce the display               ********
  16. shown at the right.                       **********
  17.                                               **
  18.  
  19. The Forth words FILL and ERASE  which were studied earlier are often
  20. used as string initialization primitives.
  21.  
  22. FILL  ( addr n c -- )   Fill string at addr with n copies of c .
  23. ERASE ( addr n -- )     Fill string at addr with n null's or 0's.
  24.  
  25. Try the following:
  26. NAME$ ," George Smith" <enter>  ok
  27. NAME$ COUNT TYPE <enter> George Smith ok
  28. NAME$ COUNT ASCII * FILL <enter>  ok
  29. NAME$ COUNT TYPE <enter> ************ ok
  30. NAME$ COUNT BL FILL <enter>
  31. NAME$ COUNT TYPE <enter>              ok
  32.  
  33. Forth String Input Techniques.
  34.  
  35. The Forth word EXPECT is used to input a string of up to length n to a
  36. buffer at address, addr . The actual number of characters entered is
  37. stored in a variable called SPAN for use by the application program. The
  38. Forth 83 implementation of EXPECT will return control to the calling
  39. program when the nth character has been received.  Pressing <enter>
  40. before the nth character will also return control to the calling program
  41. The string placed in the buffer at addr by EXPECT is not a counted
  42. string, the application program must determine the actual number of
  43. characters entered by the user by interrogating the variable SPAN.
  44.  
  45. EXPECT ( addr n -- ) \ Input up to n characters to buffer at addr
  46. COMMENT;
  47. CREATE BUFFER1  80 C, 80 ALLOT       VARIABLE LEN
  48.  
  49. \ Accept a string up to 80 characters long from the console.
  50. : READLINE  ( -- )
  51.            BUFFER1 COUNT BL FILL    \ Clear BUFFER1 to blanks.
  52.         CR BUFFER1 COUNT  EXPECT    \ Input up to 80 characters
  53.          \ SPAN @ BUFFER1 C!        \ Alternate to below method.
  54.            SPAN @ LEN ! ;           \ Save actual character count
  55. COMMENT:
  56. Note:  Actual character count is returned in variable SPAN and is saved
  57. for our own use in the VARIABLE LEN .   This must be done because the
  58. Forth system itself uses EXPECT to input characters and our value stored
  59. in SPAN would be lost.
  60. COMMENT;
  61. \ Display string stored in BUFFER1
  62. : SHOWLINE  ( -- )
  63.      CR  BUFFER1 1+  \  skip of buffer length of 80
  64.      LEN @  TYPE ;   \  display actual number entered.
  65.  
  66. COMMENT:
  67. Problem 6.4
  68. Write a simple ELIZA program that will interact with a user.  Your
  69. program should use EXPECT for string input.  Your program should find
  70. and save at least the following information about the user:  NAME  SEX
  71. and EYE-COLOUR saving the information.  Your program should ask at least
  72. two questions that can be answered with  a yes or no answer.  Save the
  73. yes/now response in a string called ANSWER .  You program should only
  74. check the first letter of the entered string and case should not matter
  75. so that  Y YES yes yah  etc would all be interpreted as a  YES and   No
  76. no N Nah Nyet etc would all be taken as a NO.  Your program should
  77. provide alternate paths depending upon the answers given.
  78.  
  79. Hints:
  80. COMMENT;
  81.    CREATE EYE-COLOUR ," **********"
  82.  : EYE-COLOUR? ( -- )
  83.           ." What colour are your eyes? "
  84.           EYE-COLOUR COUNT BL FILL
  85.           EYE-COLOUR COUNT EXPECT
  86.           SPAN @ EYE-COLOUR C!   ;
  87.  
  88.  
  89.