home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 31 / CDASC_31_1996_juillet_aout.iso / vrac / dflogo12.zip / LOGO.DOC < prev    next >
Text File  |  1996-04-19  |  26KB  |  684 lines

  1.  
  2.                                    DFP LOGO
  3.  
  4.  
  5.  
  6.                                   Version 1.2
  7.  
  8.  
  9.  
  10.  
  11. Shareware notice:
  12.  
  13. DFP LOGO version 1.2 may be copied and distributed without charge, except the 
  14. cost of materials and handling, under the condition that the program and 
  15. accompanying documentation are not modified or changed in any way without the 
  16. written consent of the authors. 
  17.  
  18.        IF YOU WISH TO USE DFP LOGO YOU ARE REQUIRED BY LAW TO PAY FOR IT
  19.  
  20. You are free to try DFP Logo for a period of thirty days. Aftwer which you 
  21. must either register it, by sending £19.95 to the author, or stop using it. 
  22.  
  23. Comments and suggestions should be addressed to the address at the end of this 
  24. document.
  25.  
  26.  
  27.  
  28.  
  29. 2
  30. Getting started:
  31.  
  32. The LOGO language was invented at the Massachusettes Institute of Technology 
  33. (M.I.T.) during the 1960s by a combined group of educationalists and computer 
  34. scientists. The purpose was to produce a computer language that would assist 
  35. children with learning how to communicate with a computer. Since then various 
  36. variations of LOGO have been developed for most popular micro computers, DFP 
  37. LOGO is a LOGO language interpreter for IBM personal computers equipped with 
  38. a VGA colour monitor. The advances in the technology of the IBM personal 
  39. computer have been considered when developing this latest version of LOGO. We 
  40. have tried to retain the original M.I.T. flavour as much as possible, and 
  41. added to it where appropriate. We suggest anyone interested in LOGO 
  42. in general should obtain more detailed literature. A list of known sources of 
  43. information is at the end of this document.
  44.  
  45.  
  46.  
  47. Turtle Graphics:
  48.  
  49. LOGO has achieved fame for its system of moving a pointer around which leaves 
  50. a trail behind it. Originally this pointer was a pen carrying robot. Today the 
  51. robot has been replaced with a screen icon. Still refereed to as the "turtle". 
  52. With turtle graphics a child can instruct (program) the turtle to move, raise 
  53. and lower its pen, and to see the result instantly. This allows stimulation to 
  54. children of all levels of ability, and encourages thought along the lines of 
  55. "what if...".  Just with other computer programs, mistakes may be made, and 
  56. the turtle will not do what the child intended. Introducing the idea that 
  57. computers only do precisely what they are told, and that they are not 
  58. intelligent, thinking machines as depicted in many science fiction programs. 
  59.  
  60. When started, DFP LOGO shows a black screen with a blue arrow head in the 
  61. centre, and a white question mark at the bottom left corner. The arrow head is 
  62. the "turtle" which can be instructed to move. The question mark is called a 
  63. "prompt", and shows that DFP LOGO is awaiting a command from the operator, 
  64. you. To leave DFP LOGO enter the command QUIT.
  65.  
  66. Turtle graphics commands are as follows; FORWARD, RIGHT, LEFT, PENDOWN, PENUP, 
  67. PENCOLOUR, SETXY, SETHEADING and HOME. To start type FORWARD 50 and press the 
  68. return key which is marked <-┘. The turtle moves up the screen. An instant 
  69. response to the instruction provided. Now type in RIGHT 90 and press the 
  70. return key. The turtle rotates ninety degrees to the right. Another way to 
  71. point the turtle in a new direction is with SETHEADING. SETHEADING is similar 
  72. to RIGHT and LEFT, except that it turns the turtle to the specified angle. As 
  73. well as forward you can use SETXY to move the turtle to a known point.
  74.  
  75. Coordinates:
  76.  
  77. DFP LOGO uses a coordinate system which extends from -300 to +300 horizontally 
  78. and from -150 to +150 vertically. The origin, or coordinate 0,0 is in the 
  79. centre of the screen. The turtle can be moved to any screen coordinate with 
  80. SETXY which accepts two values, each enclosed in parenthesis. The first value 
  81. is the horizontal (or X) coordinate to move to. The second value is the 
  82. vertical (or Y) coordinate to move to. When a SETXY command is issued, the 
  83. turtle turns to face the new coordinate and then travels in a straight line to 
  84. 3
  85. it. If the pen is down a trail will be left.
  86.  
  87.  
  88. Text mode:
  89.  
  90. DFP LOGO can be switched from graphics mode into text mode with the command 
  91. TEXTSCREEN. Any drawing on the screen is lost, and the turtle disappears. When 
  92. in text mode all DFP LOGO commands are recognised, but turtle graphics 
  93. commands have no effect. This is the best mode for writing procedures and 
  94. investigating lists. To return to turtle graphics, enter the command 
  95. FULLSCREEN.
  96.  
  97.  
  98. Variables:
  99.  
  100. When a procedure starts, it may define local variables. These local 
  101. variables are lost when the procedure ends. If a procedure calls another 
  102. procedure, any local variables are hidden from the subsequent procedure. 
  103. Variables which are defined without the "LOCAL" description are termed global 
  104. variables and are available to all procedures. Any parameters specified in a 
  105. procedure's definition line are stored as LOCAL variables.
  106.  
  107. The following program illustrates the idea of local and global variables;
  108.  
  109. TO TESTVAR
  110. LOCAL "Y
  111.         MAKE "X [GLOBAL VARIABLE]
  112.         MAKE "Y [LOCAL VARIABLE]
  113.         DISPLAY.VARS
  114. END
  115.  
  116. TO DISPLAY.VARS
  117.         PRINT :X
  118.         PRINT :Y
  119. END
  120.  
  121. The program displays the value of X, "GLOBAL VARIABLE". But the variable Y is 
  122. unknown to procedure DISPLAY.VARS and an error message is displayed. This 
  123. example accepts two parameter variables and uses them to draw a regular 
  124. polygon;
  125.  
  126. TO POLYGON :RADIUS :SIDES
  127.         REPEAT :SIDES [FORWARD :RADIUS RIGHT 360 / :SIDES]
  128. END
  129.  
  130.  
  131. Recursion:
  132.  
  133. The term "recursion" refers to a procedure which calls itself. DFP LOGO allows 
  134. recursion. When ever a procedure calls another procedure, the computer must 
  135. remember where it was before the procedure was called. Remembering uses up 
  136. computer memory called the "program stack". With recursion it is easy to 
  137. exceed the available memory. When this happens the program will stop running 
  138. with the error message "Program stack overflow" displayed. 
  139.  
  140.  
  141. 4
  142. Repeat:
  143.  
  144. REPEAT is LOGO's looping command. It carries out a list of instructions a 
  145. specified number of times. For example; to draw a square we could say;
  146.  
  147.         FORWARD 50
  148.         RIGHT 90
  149.         FORWARD 50
  150.         RIGHT 90
  151.         FORWARD 50
  152.         RIGHT 90
  153.         FORWARD 50
  154.         RIGHT 90
  155.         
  156. Or we could use repeat;
  157.  
  158.         REPEAT 4 [FORWARD 50 RIGHT 90]
  159.  
  160. This example uses REPEAT to draw a circle;
  161.  
  162. TO CIRCLE :RADIUS
  163.      PENDOWN
  164.      REPEAT 360 [FORWARD :RADIUS RIGHT 1]
  165. END
  166.  
  167. And here is a rather pretty spiral drawing procedure. Try it with parameters 
  168. of 10 2 and 117; SPIRAL 10 2 117.
  169.  
  170. TO SPIRAL :SIDE :INC :ANGLE
  171.      PENDOWN
  172.      REPEAT 150 [FORWARD :SIDE RIGHT :ANGLE MAKE "SIDE :SIDE + :INC]
  173.      PENUP
  174. END
  175.  
  176.  
  177. Mathematics:
  178.  
  179. Traditional LOGO does not cater for mathematicians. DFP LOGO changes all that 
  180. by including a new type of command, the function command. A function command 
  181. is one which takes a parameter within parenthesis and applies a mathematical 
  182. function to it. The result is then returned. Traditional LOGO would calculate 
  183. the sine of an angle with the command SIN. DFP LOGO uses SIN(). So for 
  184. example, to calculate the sine of ninety degress in DFP LOGO you use; SIN(90).
  185.  
  186. Addition is represented by the usual plus sign; "+". Subtraction by the 
  187. familiar minus sign; "-". Multiplication is represented by the standard 
  188. computer symbol "*". Division is represented by the computer symbol for 
  189. division; "/". Normal arithmetic rules of precedence apply to mathematics 
  190. carried out with DFP LOGO. Parenthesis can be used just like in non-computer 
  191. mathematics.
  192.  
  193. This is an interesting program which draws "star" shapes. However, the values 
  194. for the parameters must be carefully chosen or the resulting design may not be 
  195. what is expected!
  196.  
  197. 5
  198. TO STAR :NUMBER :MULTIPLIER
  199.         REPEAT :NUMBER [FORWARD 100 RIGHT (360 / :NUMBER) * :MULTIPLIER]
  200. END
  201.  
  202.  
  203. Lists:
  204.  
  205. DFP LOGO includes full list handling facilities as found in other LOGOs. A 
  206. list is a sequence of words, such as; Matthew Mark Luke John. Logo defines 
  207. lists by enclosing the items within square brackets, []. Strings are defined 
  208. by a leading single quote, ". So, for example, [THIS IS A VALID LIST] and 
  209. "A.STRING. To see lists in action try entering, MAKE "MYLIST [THE FAT CAT SAT 
  210. ON THE MAT]. Now enter PRINT :MYLIST. DFP LOGO responds by displaying THE FAT 
  211. CAT SAT ON THE MAT. 
  212.  
  213. Logo allows elements of a list to be accessed individually. The command FIRST 
  214. returns the first item of a list. If we enter FIRST :MYLIST. DFP LOGO responds 
  215. by displaying THE. Another command is LAST which returns the last element in a 
  216. list. For example, LAST :MYLIST returns MAT. The command COUNT returns the 
  217. number of elements within a list. Here is a simple program to try;
  218.  
  219. TO TESTLIST
  220.         MAKE "MYLIST [THE FAT CAT SAT ON THE MAT]
  221.         MAKE "IC COUNT :MYLIST
  222.         MAKE "CI 1
  223.         REPEAT :IC [PRINT ITEM :CI :MYLIST MAKE "CI :CI+1]
  224. END
  225.  
  226. This program gives the output;
  227.  
  228.         THE
  229.         FAT
  230.         CAT
  231.         SAT
  232.         ON
  233.         THE
  234.         MAT
  235.  
  236. The new command ITEM returns the specified element from the list. Lists can be 
  237. enclosed within lists. If we change the example program to;
  238.  
  239. TO TESTLIST
  240.         MAKE "MYLIST [[THE FAT CAT] [SAT ON THE MAT]]
  241.         MAKE "IC COUNT :MYLIST
  242.         MAKE "CI 1
  243.         REPEAT :IC [PRINT ITEM :CI :MYLIST MAKE "CI :CI+1]
  244. END
  245.  
  246. The output from the program changes to;
  247.  
  248.         [THE FAT CAT]
  249.         [SAT ON THE MAT]
  250.  
  251.  
  252. 6
  253. Logo provides the means to test if a word or list is contained within another 
  254. list. This is with the command MEMBER? We can test if the word FAT occurs 
  255. within our list with;
  256.  
  257.         MEMBER? "FAT :MYLIST
  258.  
  259. Which will display;
  260.  
  261.                 1
  262.  
  263. Also we can test if the list [THE FAT CAT] occurs within our list using;
  264.  
  265.         MEMBER? [THE FAT CAT] :MYLIST
  266.  
  267. Lists can be added to, either at the start or at the end, using the commands 
  268. FPUT and LPUT. FPUT, which is short for FIRST PUT adds a word or list to the 
  269. start of another list. LPUT, which is short for LAST PUT, adds a word or list 
  270. to the end of a list. For example;
  271.  
  272.         MAKE "MYLIST [THE QUICK BROWN FOX]
  273.         MAKE :MYLIST LPUT [JUMPS OVER THE LAZY DOG] :MYLIST
  274.         PRINT :MYLIST
  275.         
  276. The output from this program may not be quite what you expect. As we have 
  277. added a list to the end of our existing list, the output looks like this;
  278.  
  279.         THE QUICK BROWN FOX [JUMPS OVER THE LAZY DOG]
  280.  
  281. If we want to join lists together we can use the command SENTENCE. SENTENCE 
  282. takes two lists, and returns a new list, which is the second list appended to 
  283. the end of the first one. So our previous program could be improved by using 
  284. SENTENCE in place of LPUT;
  285.  
  286.         MAKE "MYLIST [THE QUICK BROWN FOX]
  287.         MAKE :MYLIST SENTENCE :MYLIST [JUMPS OVER THE LAZY DOG] 
  288.         PRINT :MYLIST
  289.         
  290.  
  291. SENTENCE only joins two lists together. To join more than two we have the 
  292. command (SENTENCE). This works just like SENTENCE, but accepts any number of 
  293. lists. The last list must be followed by a space and a closing parenthesis. 
  294. For example; 
  295.  
  296.         MAKE "MYLIST [THE QUICK BROWN FOX]
  297.         MAKE :MYLIST (SENTENCE :MYLIST [JUMPS OVER] [THE LAZY DOG] )
  298.         PRINT :MYLIST
  299.         
  300.  
  301. The Editor:
  302.  
  303. Procedures and programs are written with the DFP LOGO editor. To select the 
  304. editor, enter EDIT from the question mark prompt. The screen changes to the 
  305. editor screen. The editor will search the current DOS directory for a file 
  306. called "logo.def". If the file is found it is automatically loaded into the 
  307. 7
  308. editor, if not a new file is created. When the editor is in "edit" mode the 
  309. current cursor coordinates and the name of the file being edited are displayed 
  310. at the bottom of the screen. Procedures can now be typed in. Press the key 
  311. marked Esc to exit edit mode. If the file has been changed you will be asked 
  312. if you wish to save it. Press the key marked Y to save the file, or the key 
  313. marked N if you want to lose the changes. The editor is now in command mode, 
  314. shown by a > prompt at the bottom left of the screen.
  315.  
  316.  
  317. Command mode commands:
  318.  
  319. COMMAND         FUNCTION
  320. EDIT            Edit current file.
  321. LOAD            Load new file from disk.
  322. SAVE            Save current file to disk.
  323. RUN             Leave editor.
  324.  
  325.  
  326. Edit mode function keys:
  327.  
  328. Key             Function
  329.  
  330.                Cursor left one character
  331.                Cursor right one character
  332. Up arrow        Cursor up one line
  333. Down arrow      Cursor down one line
  334. Ctrl           Cursor left one word
  335. Ctrl           Cursor right one word
  336. Home            Start of current line
  337. End             End of current line
  338. Tab             Cursor to next tab stop
  339. Page Down       Next page
  340. Page Up         Previous page
  341. Ctrl Page Down  End of file
  342. Ctrl Page Up    Start of file
  343. <-┘             Insert blank line
  344. Ctrl Y          Delete current line
  345. Backspace       Delete character to left of cursor
  346. Delete          Delete character under cursor
  347. Esc             Exit edit mode
  348.  
  349.  
  350.  
  351.  
  352. Procedures:
  353.  
  354. A procedure is comprised of a heading line, some command lines and an 
  355. end line. The heading line starts with the word "TO". This tells DFP LOGO that 
  356. this line is the start of a procedure. After the "TO" must be a space and then 
  357. the name of the procedure. For example TO SQUARE would tell DFP LOGO that this 
  358. is the start of a procedure called "SQUARE". Any parameters which are to be 
  359. supplied to the procedure are defined on the heading line. Each parameter is 
  360. defined by a colon (:) followed by the parameter's name. For example ":SIDE" 
  361. describes a parameter called "SIDE". The end line consists solely of the word 
  362. 8
  363. "END". A complete procedure to draw a square may be thus written;
  364.  
  365. TO SQUARE :SIDE
  366.     REPEAT 4 [FORWARD :SIDE RIGHT 90]
  367. END
  368.  
  369. Once written in the editor, procedures can be accessed like built in DFP LOGO 
  370. commands from the question mark prompt. 
  371.  
  372.  
  373.  
  374.  
  375. Summary of DFP LOGO commands:
  376.  
  377.  
  378. COMMAND         ACTION
  379.  
  380. ABS()           Returns the absolute value of the number within the
  381.                 parenthesis.
  382.                 Example:        PRINT ABS(-56)
  383.                  
  384. ACOS()          Returns the arc cosine value of the number within the
  385.                 parenthesis.
  386.                 Example:        PRINT ACOS(0.5)
  387.                  
  388. ASIN()          Returns the arc sine value of the number within the
  389.                 parenthesis.
  390.                 Example:        PRINT ASIN(0.5)
  391.  
  392. ASSOC           Returns any list in second parameter which is associated with 
  393.                 first parameter.
  394.                 Example:        PRINT ASSOC "HUSBAND [[NAME SALLY] [HUSBAND 
  395.                                              FRED]]
  396.  
  397.                  
  398. ATAN()          Returns the arc tangent value of the number within the
  399.                 parenthesis.
  400.                 Example:        PRINT ATAN(0.5)
  401.                  
  402.  
  403.  
  404. ALLOF           Used with IF to test multiple conditions, returning TRUE if 
  405.                 all of the conditions are true.
  406.                 Example:        IF ALLOF [XCOR < 20 YCOR < 20] THEN FORWARD 50
  407.                 
  408. ANYOF           Used with IF to test multiple conditions, returning TRUE if 
  409.                 any of the conditions are true.
  410.                 Example:        IF ANYOF [XCOR < 20 YCOR < 20] THEN FORWARD 50
  411.                 
  412. BUTFIRST        Returns all but the first letter of the supplied input string,
  413.                 or all but the first item of the supplied input list.
  414.                 Example:        PRINT BUTFIRST [ONE TWO THREE]
  415.                 Example:        PRINT BUTFIRST "ABCDEFGHIJKLM
  416.                 
  417. 9
  418. BUTLAST         Returns all but the last letter of the supplied input string,
  419.                 or all but the last item of the supplied input list.
  420.                 Example:        PRINT BUTLAST [ONE TWO THREE]
  421.                 Example:        PRINT BUTLAST "ABCDEFGHIJKLM
  422.                 
  423. CLEARSCREEN     Clear the display.
  424.                 Example:        CLEARSCREEN
  425.                  
  426. COS()           Returns the cosine of the angle (measured in degrees) within 
  427.                 the parenthesis. 
  428.                 Example:        RIGHT COS(:MYVAR)
  429.                  
  430. COSH()          Returns the hyperbolic cosine of the angle specified within 
  431.                 the parenthesis.
  432.                 Example:        COSH(90)
  433.  
  434.  
  435. COUNT           Returns the letters in the string, or items in the list
  436.                 following.
  437.                 Example:        PRINT COUNT "MATTHEW
  438.                 Example:        PRINT COUNT [THE QUICK BROWN FOX]
  439.  
  440. EMPTY?          Returns 1 if the string/list following is empty
  441.                 Example:        PRINT EMPTY? "
  442.                 Example:        PRINT EMPTY? []
  443.  
  444. END             Defines end of a user procedure.
  445.                 Example:        END
  446.  
  447. EXP()           Returns the exponential e raised to the power of the number in 
  448.                 the parenthesis.
  449.                 Example:        EXP(4)
  450.  
  451. FIRST           Returns the first letter of the supplied input string, or the
  452.                 first item of the supplied input list.
  453.                 Example:        PRINT FIRST [ONE TWO THREE]
  454.                 Example:        PRINT FIRST "ABCDEFGHIJKLM
  455.                 
  456. FORWARD         Move turtle forward.
  457.                 Example:        FORWARD 50
  458.                 
  459. FULLSCREEN      Switch to turtle graphics mode.
  460.                 Example:        FULLSCREEN
  461.                  
  462. HIDETURTLE      Hide turtle from display. This makes drawing very much faster.
  463.                 Example:        HIDETURTLE
  464.                  
  465. HOME            Causes the turtle to return to the centre of the screen in a
  466.                 straight line, and turn due north.
  467.                 Example:        HOME
  468.  
  469. IF   THEN       Tests a condition and if it is true, executes the commands
  470.                 following the THEN.
  471.                 Example:        IF XCOR > 20 THEN FORWARD 50
  472.  
  473. 10
  474. LAST            Returns the last letter of the supplied input string, or the
  475.                 last item of the supplied input list.
  476.                 Example:        PRINT LAST [ONE TWO THREE]
  477.                 Example:        PRINT LAST "ABCDEFGHIJKLM
  478.                 
  479. LEFT            Turn turtle anitclockwise.
  480.                 Example:        LEFT 90
  481.                 
  482. LOCAL           Declares a variable known only to the current procedure
  483.                 Example:        LOCAL "MYVAR
  484.  
  485. (LOCAL ... )    Declares several variables known only to the current
  486.                 procedure.
  487.                 Example:        (LOCAL "X "Y "Z )
  488.  
  489.  
  490. LOG()           Returns the natural logarithm of the number within the 
  491.                 parenthesis.
  492.                 Example:        LOG(8)
  493.                 
  494. LOG10()         Returns the logarithm of the number within the 
  495.                 parenthesis.
  496.                 Example:        LOG10(800)
  497.                 
  498. MAKE            Assigns a value to a variable.
  499.                 Example:        MAKE "MYVAR :OLDVAR
  500.                 Example:        MAKE :MYVAR 10
  501.  
  502. MEMBER?         Returns TRUE if the first input is contained within the 
  503.                 second.
  504.                 Example:        PRINT MEMBER? "QUICK [THE QUICK BROWN FOX]
  505.                 Example:        PRINT MEMBER? "A "MATTHEW
  506.  
  507. NUMBER?         Returns TRUE if the input is a number.
  508.                 Example:        PRINT NUMBER? "NOT_NUMBER
  509.                 
  510. PENCOLOUR       Select turtle's pen colour (0 - 14).
  511.                 Example:        PENCOLOUR 12
  512.                  
  513. PENDOWN         Lower turtle's pen.
  514.                 Example:        PENDOWN
  515.                  
  516. PENUP           Raise turtle's pen.
  517.                 Example:        PENUP
  518.                  
  519. POW10()         Returns 10 raised to the power of the number in the 
  520.                 parenthesis.
  521.                 Example:        POW10(5)
  522.  
  523. PRINT           Displays a single input.
  524.                 Example:        PRINT [DFP LOGO RULES OKAY!]
  525.                 Example:        PRINT SIN(90)
  526.  
  527. (PRINT ... )    Displays input before the closing parenthesis.
  528. 11
  529.                 Example:        (PRINT "DFP "LOGO "RULES "OKAY )
  530.  
  531. QUIT            Terminates DFP LOGO.
  532.                 Example:        QUIT
  533.  
  534. RANDOM()        Returns a random number between 0 and one less than the number 
  535.                 within the parenthesis.
  536.                 Example:        PRINT RANDOM(100)
  537.  
  538. RANDOMIZE       Forces initialisation of the random number generator.
  539.                 Example:        RANDOMIZE
  540.  
  541.  
  542. READCHAR        Waits for a key to be pressed and returns it.
  543.                 Example:        MAKE "KEY READCHAR
  544.                  
  545. REPEAT          Do commands in second input field, which must be a list, the
  546.                 number of times indicated by the first input field.
  547.                 Example:        REPEAT 4 [FORWARD 50 RIGHT 90]
  548.                  
  549.  
  550. REQUEST         Accepts a list from the operator.
  551.                 Example:        MAKE "INPUT REQUEST
  552.                  
  553.                 
  554.  
  555. RIGHT           Turn turtle clockwise.
  556.                 Example:        RIGHT 90
  557.                 
  558.  
  559. ROUND()         Returns the number within the parenthesis rounded to the
  560.                 nearest whole number.
  561.                 Example:        RIGHT ROUND(COS(:MYVAR))
  562.                  
  563. RUN             Do commands recorded in the input field which must be a list.
  564.                 Example:        RUN :MYVAR
  565.  
  566. SETHEADING      Turn turtle to new bearing.
  567.                 Example:        SETHEADING 90
  568.                 
  569. SETXY           Move turtle in a straight line to specified coordinates.
  570.                 Example:        SETXY (10) (-50)
  571.                 
  572. SHOWTURTLE      Reveal turtle.
  573.                 Example:        SHOWTURTLE
  574.                  
  575. SIN()           Returns the sine of the angle within the parenthesis.
  576.                 Example:        RIGHT SIN(:MYVAR)
  577.                  
  578.  
  579. SINH()          Returns the hyperbolic sine of the angle specified within the 
  580.                 parenthesis.
  581.                 Example:        SINH(90)
  582.  
  583.  
  584. 12
  585. SQRT()          Returns the square root of the number within the parenthesis.
  586.                 Example:        PRINT SQRT(25)
  587.                  
  588. TAN()           Returns the tangent of the angle within the parenthesis.
  589.                 Example:        RIGHT COS(:MYVAR)
  590.  
  591. TANH()          Returns the hyperbolic tangent of the angle specified within 
  592.                 the parenthesis.
  593.                 Example:        TANH(45)
  594.                  
  595. TEXTSCREEN      Switch to text mode.
  596.                 Example:        TEXTSCREEN
  597.                  
  598. THING?          Takes a variable name as input and returns TRUE if the 
  599.                 variable has a value assigned to it.
  600.                 Example:        PRINT THING? :MYVAR
  601.                 
  602.  
  603. TO              Defines start of a user procedure.
  604.                 Example:        TO SQUARE
  605.  
  606.  
  607. UNTIL           Loops whilst a condition is false.
  608.                 Example:        UNTIL :COUNTER = 100 [PRINT :COUNTER MAKE 
  609.                                        "COUNTER :COUNTER + 1]
  610.  
  611.  
  612. WHILE           Loops whilst a condition is true.
  613.                 Example:        WHILE :COUNTER < 100 [PRINT :COUNTER MAKE 
  614.                                        "COUNTER :COUNTER + 1]
  615.  
  616.  
  617. XCOR            Returns the turtle's horizontal coordinate.
  618.                 Example:        MAKE "LASTX XCOR
  619.                  
  620. YCOR            Returns the turtle's vertical coordinate.
  621.                 Example:        MAKE "LASTY YCOR
  622.                  
  623.  
  624.  
  625. General specification:
  626.  
  627. DFP LOGO can accomodate nested calls to procedures to a depth of 100 calls.
  628. 100 global variables can be defined.
  629. 100 Local variables can be defined.
  630. Program files can have up to 2000 lines.
  631. Variables may be up to 500 characters in length.
  632. Variable names are up to twenty characters long.
  633.  
  634.  
  635.  
  636. Further Reading:
  637.  
  638. Introducing Logo, Boris Allan, Granada Publishing Ltd, 1984, 
  639. 13
  640.                   ISBN 0 246 12323 0
  641.  
  642. Logo For Beginners, J.W.Penfold, Bernard Babani Ltd, 1988, ISBN 0 85934 167 4
  643.  
  644. Learning Commodore 64 Logo Together, Kenneth P. Goldberg, Microsoft Press, 
  645. 1984, ISBN 0 914845 24 1
  646.  
  647.  
  648.  
  649. Revision History
  650.  
  651. Version 0.1     The original.
  652.  
  653. Version 0.2     Following comments received the procedure for drawing the 
  654.                 turtle has been speeded up.
  655.                 Text output has been speeded up.
  656.                 The command interpreter has been speeded up.
  657.                 Recursion depth has been increased to 100.
  658.                 Available local variables increased to 100.
  659.                 Bug fix - The input parser now handles expressions with
  660.                           multiple arithmetic.
  661.  
  662. Version 1.0     First production release
  663.  
  664. Version 1.1     Addition of three new commands: ASSOC, UNTIL and WHILE
  665.  
  666.                                COPYRIGHT NOTICE
  667.  
  668.                 DFP LOGO is copyright (c)1993 Sservile Software
  669.  
  670. All rights reserved. We make no claims as to the suitability of this product 
  671. for any purpose. DFP LOGO is supplied "as is" and is used solely at the users 
  672. risk. 
  673.  
  674.  
  675.     Servile Software
  676.     5 Longcroft Close
  677.     Basingstoke
  678.     Hampshire
  679.     RG21 1XG
  680.     England
  681.  
  682. Telephone: 0256 414072
  683.  
  684.