home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
forth
/
compiler
/
fpc
/
tutor
/
l6p030
< prev
next >
Wrap
Text File
|
1990-07-15
|
5KB
|
111 lines
╔════════════════════════════════════════════════════╗
║ Lesson 6 Part 030 F-PC 3.5 Tutorial by Jack Brown ║
╚════════════════════════════════════════════════════╝
┌───────────────────┐
│ A Dashed Example │
└───────────────────┘
Example: Here are number of ways to make a dashed line using 10 dash
characters.
: DASHED1 ( -- ) CR ." ----------" ;
CREATE DASH ," ----------"
: DASHED2 ( -- ) CR DASH COUNT TYPE ;
: DASHED3 ( -- ) CR " ----------" TYPE ;
: DASHED4 ( -- ) CR 10 0 DO ASCII - EMIT LOOP ;
╓──────────────╖ **
║ Problem 6.3 ║ ****
╙──────────────╜ ******
Use each of the four techniques ********
above to produce the display **********
shown at the right. **
┌─────────────────────────────────────┐
│ String Initialization Primitives │
└─────────────────────────────────────┘
The Forth words FILL and ERASE which were studied earlier are often
used as string initialization primitives.
FILL ( addr n c -- ) Fill string at addr with n copies of c .
ERASE ( addr n -- ) Fill string at addr with n null's or 0's.
Try the following:
NAME$ ," George Smith" <enter> ok
NAME$ COUNT TYPE <enter> George Smith ok
NAME$ COUNT ASCII * FILL <enter> ok
NAME$ COUNT TYPE <enter> ************ ok
NAME$ COUNT BL FILL <enter>
NAME$ COUNT TYPE <enter> ok
┌─────────────────────────────────┐
│ Forth String Input Techniques. │
└─────────────────────────────────┘
The Forth word EXPECT is used to input a string of up to length n to a
buffer at address, addr . The actual number of characters entered is
stored in a variable called SPAN for use by the application program. The
Forth 83 implementation of EXPECT will return control to the calling
program when the nth character has been received. Pressing <enter>
before the nth character will also return control to the calling program
The string placed in the buffer at addr by EXPECT is not a counted
string, the application program must determine the actual number of
characters entered by the user by interrogating the variable SPAN.
EXPECT ( addr n -- ) \ Input up to n characters to buffer at addr
CREATE BUFFER1 80 C, 80 ALLOT VARIABLE LEN
\ Accept a string up to 80 characters long from the console.
: READLINE ( -- )
BUFFER1 COUNT BL FILL \ Clear BUFFER1 to blanks.
CR BUFFER1 COUNT EXPECT \ Input up to 80 characters
\ SPAN @ BUFFER1 C! \ Alternate to below method.
SPAN @ LEN ! ; \ Save actual character count
Note: Actual character count is returned in variable SPAN and is saved
for our own use in the VARIABLE LEN . This must be done because the
Forth system itself uses EXPECT to input characters and our value stored
in SPAN would be lost.
\ Display string stored in BUFFER1
: SHOWLINE ( -- )
CR BUFFER1 1+ \ skip of buffer length of 80
LEN @ TYPE ; \ display actual number entered.
READLINE <enter>
Now is the time for a party! ok
SHOWLINE <enter>
Now is the time for a party! ok
╓─────────────╖
║ Problem 6.4 ║
╙─────────────╜
Write a simple ELIZA program that will interact with a user. Your
program should use EXPECT for string input. Your program should find
and save at least the following information about the user: NAME SEX
and EYE-COLOUR saving the information. Your program should ask at least
two questions that can be answered with a yes or no answer. Save the
yes/now response in a string called ANSWER . You program should only
check the first letter of the entered string and case should not matter
so that Y YES yes yah etc would all be interpreted as a YES and No
no N Nah Nyet etc would all be taken as a NO. Your program should
provide alternate paths depending upon the answers given.
Hints:
CREATE EYE-COLOUR ," **********"
: EYE-COLOUR? ( -- )
." What colour are your eyes? "
EYE-COLOUR COUNT BL FILL
EYE-COLOUR COUNT EXPECT
SPAN @ EYE-COLOUR C! ;
EYE-COLOUR? <enter> What colour are your eyes? blue <enter> ok
EYE-COLOUR COUNT TYPE <enter> blue ok
┌────────────────────────────────────┐
│ Please Move to Lesson 6 Part 040 │
└────────────────────────────────────┘