<category name="DataCmd">
   setitem make
</category>

<category name="DataCons">
   array fput list lput sentence word
   se
</category>

<category name="DataPred">
   empty? member?
   emptyp memberp
</category>

<category name="Directive">
   bye end newturtle printprocs printstack printtext talkto to
   trace turtles untrace nt pp pt ctrl-t
</category>

<category name="EdCmd">
   backspace bol bottom copy cut deleol delete downarrow eol
   leftarrow openline pagedn pageup paste revsrch rightarrow
   search top undo uparrow
   ctrl-a ctrl-b ctrl-c ctrl-d ctrl-e ctrl-f ctrl-h ctrl-k
   ctrl-n ctrl-o ctrl-p ctrl-r ctrl-s ctrl-v ctrl-x ctrl-z
   escgt esclt
</category>

<category name="FloCtl">
   if ifelse output stop repcount repeat tell wait
   op
</category>

<category name="GrafCmd">
   back cg fill forward hideturtle home label left
   pendown penup right setbackground setheading setlabelheight
   setpencolor setpensize setpos setshape setx setxy sety showturtle
   bk clean fd ht lt pd pu rt setbg seth setlh setpc setps setsh st
</category>

<category name="GrafOpr">
   canvasheight canvaswidth colorunder heading pencolor pendown?
   pensize pos towards xcor ycor
</category>

<category name="LogOpr">
    and or not
</category>

<category name="NumOpr">
    abs ceil cos difference equal? floor greater? int less? minus
    power product quotient random remainder round sin sqrt sum tan
    equalp greaterp lessp pow
</category>

<category name="NumPred">
   equal? greater? less?
   equalp greaterp lessp
</category>

<category name="Other">
   ascii char count lowercase tg uppercase who
</category>

<category name="Selector">
   butfirst butlast first item last thing
   bf bl
</category>

<category name="UserIO">
   cleartext keypressed mouseclicked mousemoved mousepos
   mousex mousey print println readlist readword ct pr type
</category>


<item name="abs">
ABS number

Outputs the absolute value of number.
</item>

<item name="and">
AND trueFalse1 trueFalse2

Outputs true if trueFalse1 AND trueFalse2 are true,
otherwise it outputs false.

Example: IF AND (EQUAL? XCOR 0) (EQUAL? YCOR 0) [PRINTLN "Home]
</item>

<item name="array">
ARRAY size

Outputs an array of size members, each of which is initially an
empty list.  Size must be a positive integer.

Example: MAKE "ARY ARRAY 5
</item>

<item name="ascii">
ASCII character

Outputs the integer (between 0 and 127) that represents the
character in the ASCII code.

Example: ASCII "A
</item>

<item name="back,bk">
BACK number
BK number

Moves the turtle backward, i.e., exactly opposite to the direction
that it's facing, by the specified number of turtle steps.

Example: BACK 150
</item>

<item name="butfirst,bf">
BUTFIRST word-or-list
BF word-or-list

If the input is a word, all characters except its first are output.
If the input is a list, all members except the first are output.
</item>

<item name="butlast,bl">
BUTLAST word-or-list
BL word-or-list

If the input is a word, all characters except its last are output.
If the input is a list, all members except the last one are output.
</item>

<item name="bye">
BYE

Terminates the TG application.
</item>

<item name="canvasheight">
CANVASHEIGHT

Outputs the height of the graphics window in turtle steps.
</item>

<item name="canvaswidth">
CANVASWIDTH

Outputs the width of the graphics window in turtle steps.
</item>

<item name="ceil">
CEIL number

Outputs the smallest integer (closest to negative infinity) that is
not less than number.

Example: CEIL 44.223
</item>

<item name="char">
CHAR number

Outputs a single character word that is the ASCII code corresponding
to the input (an integer between 0 and 127).

Example: PRINTLN CHAR 65
</item>
  
<item name="cg,clean">
CG
CLEAN

Erases everything that the turtle has drawn in the graphics window.
The turtle's state (position, heading, pen color, etc.) is not changed.
</item>

<item name="cleartext,ct">
CLEARTEXT
CT

Erases all of the text in the CommandCenter.
</item>

<item name="colorunder">
COLORUNDER

The color under the turtle, the center pixel of the turtle's image,
is output.

Example: IF EQUAL? COLORUNDER 0 [RT 180]
</item>

<item name="cos">
COS number

Outputs the trigonometric cosine of number which is in degrees.
</item>

<item name="count">
COUNT word-or-list-or-array

If the input is a word, the number of characters in it is output.
If the input is a list, the number of words in it is output.

Example: ITEM (RANDOM SUM 1 COUNT :SENT) :SENT
</item>

<item name="difference">
DIFFERENCE number1 number2

Outputs the result of subtracting number2 from number1.

Example: DIFFERENCE 15 7
</item>

<item name="empty?,emptyp">
EMPTY?word-or-list
EMPTYP word-or-list

Outputs true if its input is a word that has no characters in it,
otherwise false. Outputs true if its input is a list that has
no members in it, otherwise false.

Example: EMPTY? :SENT
</item>

<item name="end">
END

Completes the definition of a procedure.
</item>

<item name="equal?,equalp">
EQUAL? value1 value2
EQUALP value1 value2

If value1 is equal to value2, true is output; otherwise false is output.

Example: EQUAL? MOUSEX 0
</item>

<item name="fill">
FILL

Whatever color is under the turtle is changed to the turtle's color,
and this process is repeated in an outward manner for all pixels that
are neighbors and match the original color.
</item>

<item name="first">
FIRST word-or-list

If the input is a word, its first character is output. If the input
is a list, its first member is output.
</item>

<item name="floor">
FLOOR number

Outputs the largest integer (closest to positive infinity) that is
not greater than number.

Example: FLOOR 12.875
</item>

<item name="forward,fd">
FORWARD number
FD number

Moves the turtle forward, in the direction it is facing, by the
specified number of turtle steps.

Example: FORWARD 100
</item>

<item name="fput">
FPUT thing list

Outputs a list equal to its second input with one extra member,
the first input, at the beginning.  If the second input is a
word, then the first input must be a one-letter word, and FPUT
is equivalent to WORD.
</item>

<item name="greater?,greaterp">
GREATER? value1 value2
GREATERP value1 value2

If value1 is greater than value2, true is output; otherwise false
is output.

Example: GREATER? MOUSEX 0
</item>

<item name="heading">
HEADING

Outputs the turtle's heading (degrees).

Example: PRINTLN HEADING
</item>

<item name="hideturtle,ht">
HIDETURTLE
HT

Makes the turtle invisible.
</item>
  
<item name="home">
HOME

Moves the turtle to the center of the graphics window,
i.e., coordinates 0,0.
</item>
 
<item name="if">
IF trueFalse [ instructions ]

The instructions enclosed in the square brackets are performed if the
trueFalse value is true, nothing is done if it's false.  The trueFalse
value must be either true or false.

Example: IF LESS? :INPUT 0 [ STOP ]
</item>
 
<item name="ifelse">
IFELSE trueFalse [ true-stuff ] [ false-stuff ]

The instructions enclosed in the first set of square brackets are
performed if the trueFalse value is true, The instructions enclosed
in the second set of square brackets if it's false.  The trueFalse
value must be either true or false.

Example: IFELSE EMPTY? :WD [PRINTLN "***] [PRINTLN :WD]
</item>

<item name="int">
INT number

Outputs number with its fractional part removed.
</item>

<item name="item">
ITEM number word-or-list-or-array

Outputs the number-th element of its second input.  If its second input
is a word, it outputs a word consisting on the number-th character.
If its second input is a list, it outputs the number-th member of it.
If its second input is an array, it outputs the number-th element of it.
</item>

<item name="keypressed">
KEYPRESSED

When a keyboard key is pressed, the jLogo interpreter receives an
event.  If a user-defined procedure with the name KEYPRESSED (expecting
one input) exists, it is performed.

Example: TO keyPressed :keyNum
           PRINTLN SENTENCE "keyPressed= :keyNum
           END

Key numbers that jLogo passes on are:

Number(s)   Key
---------   ----------------
    10      Enter
 32 - 127   ASCII Characters
   128      Down-Arrow
   129      Left-Arrow
   130      Right-Arrow
   131      Up-Arrow
</item>
  
<item name="label">
LABEL word
LABEL sentence

The text representing LABEL's input is drawn in the graphics window.
</item>

<item name="last">
LAST word-or-list

If the input is a word, its last character is output.  If the input
is a list, its last member is output.
</item>

<item name="left,lt">
LEFT number
LT number

Turns the turtle counterclockwise by the specified angle measured by
a number of degrees (1/360 of a circle).

Example: LEFT 180
</item>

<item name="less?,lessp">
LESS? value1 value2
LESSP value1 value2

If value1 is less than value2, true is output; otherwise false is output.

Example: LESS? MOUSEX 0
</item>

<item name="list">
LIST thing1 thing2

Outputs a list whose members are its inputs, which can be any jLogo datum
(arrays, lists, and words).
</item>

<item name="lowercase">
LOWERCASE word

Outputs a copy of the input word, but with all uppercase letters
changed to the corresponding lowercase letters.
</item>

<item name="lput">
LPUT thing list

Outputs a list equal to its second input with one extra member, the first
input, at the end.  If the second input is a word, then the first input
must be a one-letter word, and the output:
</item>

<item name="make">
MAKE name value

Creates a variable named name if it doesn't already exist.  The contents
of the variable is set to value.

Example: MAKE "WHITE 7
</item>

<item name="member?,memberp">
MEMBER? character word
MEMBER? word list
MEMBERP character word
MEMBERP word list

Outputs true if its first input is in its second input,
otherwise it outputs false.
</item>

<item name="minus">
MINUS number

Outputs the negative of number.

Example: MINUS 10
</item>

<item name="mouseclicked">
MOUSECLICKED

When the left mouse button is clicked in the graphics area of TG,
the jLogo interpreter receives an event. If a user-defined procedure
with the name MOUSECLICKED exists, it is performed.

Example: TO mouseClicked
           PRINTLN "mouseclicked
           END
</item>

<item name="mousemoved">
MOUSEMOVED

When the mouse is moved in the graphics area, the jLogo interpreter
receives an event.  If a user-defined procedure with the name
MOUSEMOVED exists, it is performed.

Example: TO mouseMoved
           SETXY MOUSEX MOUSEY
           END
</item>

<item name="mousepos">
MOUSEPOS

Outputs the X and Y coordinates where the mouse was when it was
last clicked or moved as a two member list.
</item>

<item name="mousex">
MOUSEX

Outputs the X-coordinate where the mouse was when it was last
clicked or moved somewhere.
</item>

<item name="mousey">
MOUSEY

Outputs the Y-coordinate where the mouse was when it was last
clicked or moved somewhere.
</item>

<item name="newturtle,nt">
NEWTURTLE word
NT word

Creates a new turtle with the name word.  The current turtle is
not effected and remains the current turtle.
</item>

item name='not');
NOT trueFalse

Outputs false if trueFalse is true, else false.
</item>

<item name="or">
OR trueFalse1 trueFalse2

Outputs true if trueFalse1 OR trueFalse2 is true, otherwise it
outputs false.

Example: IF OR EQUAL? XCOR 0 EQUAL? YCOR 0 PRINTLN [On Axis]
</item>

<item name="output,op">
OUTPUT value
OP value

The current invocation of the procedure in which OUTPUT exists is
terminated and value is output.

Example: TO randomColor
           OUTPUT RANDOM 16
           END
</item>

<item name="pencolor">
PENCOLOR

Outputs the current color number of the turtle's pen.
</item>

<item name="pendown,pd">
PENDOWN
PD

Puts the turtle's pen down so that it leaves a trace when it moves.
</item>

<item name="pendown?">
PENDOWN?

Outputs true if the turtle's pen is in the down position, else false.
</item>

<item name="pensize">
PENSIZE

Outputs the size of the turtle's pen, its width in turtleSteps.
</item>

<item name="penup,pu">
PENUP
PU

Lifts the turtle's pen up so that it leaves no trace when it moves.
</item>

<item name="pos">
POS

Outputs the current coordinates of the turtle as a sentence. The
X coordinate is the FIRST of the sentence; the Y coordinate is the
LAST of the sentence.

Example: MAKE "CURLOC POS
</item>

<item name="power,pow">
POWER num1 num2
POW num1 num2

Outputs num1 to the num2 power.
</item>

<item name="print,type">
PRINT datum
TYPE datum

The text representing PRINT's input is drawn in the CommandCenter.
</item>

<item name="println,pr">
PRINTLN datum
PR datum

The text representing PRINT's input is drawn in the CommandCenter
and the line is finished off by moving the cursor to the start of
the next line.
</item>

<item name="printprocs,pp">
PRINTPROCS
PP

Prints the names and inputs of all the user-defined procedures.
</item>

<item name="printstack,ps">
PRINTSTACK
PS

Prints the procedure invocation stack collected upon last runtime
error.
</item>

<item name="printtext,pt">
PRINTTEXT name
PT name

Prints the source code representation of the user-defined procedure
named name.
</item>
 
<item name="product">
PRODUCT number1 number2

Outputs the result of multiplying number1 by number2.

Example: PRODUCT 64 8
</item>

<item name="quotient">
QUOTIENT number1 number2

Outputs the result of dividing number1 by number2.

Example: QUOTIENT 16384 4096
</item>

<item name="random">
RANDOM number

Outputs some integer greater-than or equal-to zero AND
less-than number.

Example: RANDOM 16
</item>

<item name="readlist">
READLIST

Reads a line from the CommandCenter and outputs that line
as a list. The line is separated into members as if it were
typed in square brackets in an instruction.

Example: MAKE "INPTXT READLIST
</item>

<item name="readword">
READWORD

Reads a line from the CommandCenter and outputs that line
as a word. The output is a single word even if the line
contains spaces, brackets, etc.

Example: MAKE "INPTXT READWORD
</item>

<item name="repcount">
REPCOUNT

Outputs the current value of the counter controlling iteration
in the REPEAT command in which it is invoked.

Example: REPEAT 20 [FD PRODUCT 10 REPCOUNT RT 90]
</item>

<item name="remainder">
REMAINDER number1 number2

Output the remainder left after dividing number1 by number2.

Example: REMAINDER 1234 10
</item>

<item name="repeat">
REPEAT number [ instructions ]

Repeats the instructions enclosed in the square brackets the
specified number of times.

Example: REPEAT 4 [ FD 100 RT 90 ]
</item>

<item name="right,rt">
RIGHT number
RT number

Turns the turtle clockwise by the specified angle, measured in
degrees (1/360 of a circle).

Example: RIGHT 90
</item>

<item name="round">
ROUND number

Outputs the closest integer to number.

Example: ROUND 22.45
</item>

<item name="sentence,se">
SENTENCE word word
SENTENCE word list
SENTENCE list word
SENTENCE list list
SE word word
SE word list
SE list word
SE list list

Outputs a list consisting of its first input concatenated with
its second input.
</item>
  
<item name="setbackground,setbg">
SETBACKGROUND number
SETBG number

Sets the background color of the GraphicsCanvas to a
specified color.  Color is expressed as a number.
The available colors are:

Number  Color       Number  Color
------  -------     ------  -------
   0    black          8    brown
   1    blue           9    tan
   2    green         10    forest
   3    cyan          11    aqua
   4    red           12    salmon
   5    magenta       13    purple
   6    yellow        14    orange
   7    white         15    grey

If number is greater than 15, it is assumed to be a
24-bit RGB color value.

Example: SETBG 0
</item>
  
<item name="setheading,seth">
SETHEADING number
SETH number

Turns the turtle to a new absolute heading.  The input, number,
is the heading in degrees clockwise from the positive Y axis, i.e.,

      0 is due North (up),
     90 is due East  (right),
    180 is due South (down), and
    270 is due West  (left). 

Example: SETH 90
</item>

<item name="setitem">
SETITEM index array value

Replaces the indexth member of array with value.

Example: SETITEM 2 :nums "two
</item>

<item name="setlabelheight,setlh">
SETLABELHEIGHT number
SETLH number

The height of characters drawn with the LABEL procedure is set
to the input.

Number    Char Height    Char Width
------    -----------    ----------
  12           9              7
  14          10              9
  16          11             10
  18          12             11
  24          16             14
  32          21             19

Example: SETLABELHEIGHT 24
</item>
  
<item name="setpencolor,setpc">
SETPENCOLOR number
SETPC number

Sets the turtle's color - the color of its pen. Color is
expressed as a number.  The available colors are:

Number  Color       Number  Color
------  -------     ------  -------
   0    black          8    brown
   1    blue           9    tan
   2    green         10    forest
   3    cyan          11    aqua
   4    red           12    salmon
   5    magenta       13    purple
   6    yellow        14    orange
   7    white         15    grey

If number is greater than 15, it is assumed to be a
24-bit RGB color value.

Example: SETPC 10
</item>
  
<item name="setpensize,setps">
SETPENSIZE number
SETPS number

Sets the width of the turtle's pen, which determines the thickness of
the trace it leaves, the line it draws.

Example: SETPENSIZE 5
</item>
  
<item name="setpos">
SETPOS two-number-sentence

Moves the turtle to an absolute position, specified by a sentence
containing two numbers.  The two numbers are (FIRST) a new horizontal
(X) coordinate and (LAST) a new vertical (Y) coordinate.

Example: SETPOS [100 100]
</item>
  
<item name="setshape,setsh">
SETSHAPE number
SETSH number

Sets the turtle's shape to a specified shape.  Shape is expressed as
a number.  The available shapes are:

   Number  Shape
   ------  -------
      0    Turtle
      1    Arrow
      2    Ball
      3    Box
      4    Cross
      5    Triangle
  
SETSHAPE number-sentence
SETSH number-sentence

Sets the turtle's shape to a specified shape and size.  The first number
in the sentence is the shape number (see SETSHAPE number) and subsequent
numbers specify a preferred size, which is shape dependent.

Example: SETSHAPE [3 100 10]
</item>
  
<item name="setx">
SETX number

Moves the turtle horizontally to the specified absolute window position.

Example: SETX 100
</item>
  
<item name="setxy">
SETXY number1 number2

Moves the turtle to an absolute position, specified as two numbers:
the new horizontal (X) and vertical (Y) coordinates.

Example: SETXY 50 -30 
</item>
  
<item name="sety">
SETY number

Moves the turtle vertically to the specified absolute window position.  

Example: SETY 100
</item>

<item name="showturtle,st">
SHOWTURTLE
ST

Makes the turtle visible.
</item>

<item name="sin">
SIN number

Outputs the trigonometric sine of number which is in degrees.

Example: SIN 45
</item>

<item name="sqrt">
SQRT number

Outputs the square root of number.

Example: SQRT 64
</item>

<item name="stop">
STOP

The current invocation of the procedure in which STOP exists terminates.

Example: IF EQUAL? :input 0 [STOP]
</item>

<item name="sum">
SUM number1 number2

Outputs the result of adding number1 and number2.

Example: SUM 123 456
</item>

<item name="talkto">
TALKTO turtleName

Directs TG to pass input instructions typed into the CommandCenter
to turtleName.  This turtle becomes the current turtle.

Example: TALKTO ball
</item>

<item name="tell">
TELL turtleName [ instructions ]

Gives the turtle named turtleName a list of instructions to perform.
The current turtle is not effected and remains the current turtle.

Example: TELL "paddle [SETSHAPE [3 100 10] penup home]
</item>

<item name="tan">
TAN degrees

Outputs the trigonometric tangent of degrees, which is in degrees.
</item>

<item name="thing">
THING name

Outputs the value in its input, a global variable named name.
Dots name (":NAME") can be thought of as an abbreviation for
THING "NAME.  But, the real need for THING is when the names
of global variables are constructed dynamically.

Example: THING :curSequence
</item>

<item name="to">
TO procname :input1 :input2 ...

Initiates definition of a procedure. It will be named procname.
Inputs, which are optional, are given the names input1, input2,
etc. All names are case-insensitive.

Example: TO box :size
</item>

<item name="towards">
TOWARDS two-number-sentence

Outputs a number, the heading at which the turtle should be facing
so that it would point from its current position to the position
given as an input - a sentence consisting of two numbers.

Example: SETHEADING TOWARDS [0 0]
</item>

<item name="trace">
TRACE procedure-name

Tells the jLogo interpreter to print a pair of lines each time
procedure-name is invoked. The first line consists of the procedure's
name and the actual values of its inputs. The second line is printed
after the procedure completes. It consists of the procedure's name
and an output value if one is produced.
</item>

<item name="turtles,ctrl-t">
TURTLES
Ctrl-t

Prints out the current state of all turtles.
</item>

<item name="uppercase">
UPPERCASE word

Outputs a copy of the input word, but with all lowercase letters
changed to the corresponding uppercase letters.
</item>

<item name="untrace">
UNTRACE procedure-name

Tells the jLogo interpreter to quit tracing procedure-name.
</item>

<item name="wait">
WAIT number

Execution of the program is suspended for number of milliseconds
(1/1000 of a second).
</item>

<item name="who">
WHO

Outputs the name of the current turtle.
</item>

<item name="word">
WORD word word

Outputs a word consisting of its first input concatenated with its
second input.
</item>

<item name="xcor">
XCOR

Outputs the turtle's X coordinate.

Example: MAKE "curX XCOR
</item>

<item name="ycor">
YCOR

Outputs the turtle's Y coordinate.

Example: LABEL YCOR
</item>

<item name="bol,ctrl-a">
BOL
[HOME]
Ctrl-a

Moves the cursor to the beginning of the current line.
</item>

<item name="leftarrow,ctrl-b">
[LEFT ARROW]
Ctrl-b

Moves the cursor backwards one character.
</item>

<item name="copy,ctrl-c">
COPY
Ctrl-c

Copys highlighted text (the current selection) to a
temporary holding area.
</item>

<item name="delete,Ctrl-d">
[DELETE]
Ctrl-d

Deletes the character to the right of the cursor.
</item>

<item name="eol,ctrl-e">
EOL
[END]
Ctrl-e

Moves the cursor to the end of the current line.
</item>

<item name="rightarrow,ctrl-f">
[RIGHT ARROW]
Ctrl-f

Moves the cursor forward one character.
</item>

<item name="backspace,ctrl-h">
[BACKSPACE]
Ctrl-h

Deletes the character to the left of the cursor.
</item>

<item name="deleol,ctrl-k">
DELEOL
Ctrl-k

Deletes all characters on the current line to the right of
the cursor unless the cursor is at the end of the line.
In this case, the following line is joined with the current.
</item>

<item name="downarrow,ctrl-n">
[DOWN ARROW]
Ctrl-n

Moves the cursor down to the next line.
</item>

<item name="openline,ctrl-o">
OPENLINE
Ctrl-o

Opens a blank line above the line containing the cursor.
</item>

<item name="uparrow,ctrl-p">
[UP ARROW]
Ctrl-p

Moves the cursor up to the previous line.
</item>

<item name="revsrch,ctrl-r">
REVSRCH
Ctrl-r

Reverse search, i.e., search backwards for a sequence of
characters, toward the first character in the buffer. An
[Esc] aborts the search.

Typing Ctrl-r twice in quick succession repeats a search.
</item>

<item name="search,ctrl-s">
SEARCH
Ctrl-s

Search for a sequence of characters. A search prompt bar
pops up for entering the desired sequence of characters.
An [Esc] aborts the search.

Typing Ctrl-s twice in quick succession repeats a search.
</item>

<item name="paste,ctrl-v">
PASTE
Ctrl-v

Inserts the contents of the temporary holding area in
front of the cursor.
</item>

<item name="cut,ctrl-x">
CUT
Ctrl-x

Copys highlighted text (the current selection) to a
temporary holding area and then deletes it.
</item>

<item name="undo,ctrl-z">
UNDO
Ctrl-z

Reverses previous change to text in editor buffer.
Can be used to back out mutiple changes, both
additions and deletions.
</item>

<item name="top,escgt">
TOP
Esc &lt;

Move the cursor to the first line in the buffer.
</item>

<item name="bottom,esclt">
BOTTOM
Esc &gt;

Move the cursor to the last line in the buffer.
</item>

<item name="pagedn">
[PAGEDOWN]

Replaces the lines displayed with the lines below them,
i.e., the next page.
</item>

<item name="pageup">
[PAGEUP]

Replaces the lines displayed with the lines above them,
i.e., the previous page.
</item>

<item name="tg">
TG (which stands for Turtle Graphics) is a program which provides
a programming environment for writing programs in jLogo.  jLogo is
a subset of Berkeley Logo, written in Java with Java extensions.

TG can run as an applet or as an application. The applet is embedded
at appropriate places in BFOIT's Introduction to Programming lessons;
as new concepts are presented, it can be used to experiment.  But,
running TG as an application is a must when full programs are being
written since it allows saving and loading code to/from files.

TG has three parts to it:
(1) a Canvas for drawing,
(2) a CommandCenter for interaction with the jLogo interpreter, and
(3) an editor for writing/modifying procedure libraries or programs.

The Canvas (optional)
-------------------------------
A window in which the turtle draws.  It also can provide keyboard
and mouse input events to a jLogo program.

The center of the canvas window is the coordinate 0,0.  Positive X
is to the right; positive Y is up.  Headings (angles) are measured
in degrees clockwise from the positive Y axis, not in the standard
mathematical convention of measuring angles counterclockwise from
the positive X axis.)  Turtles are initially displayed at 0,0.

The CommandCenter
-----------------
A window that provides a mechanism for interacting with the jLogo
interpreter.  Most instructions typed in this area are passed to
the interpreter, output from the interpreter and/or jLogo programs
(as an example via PRINTLN commands) is displayed here.

Program management commands are also typed in this window. They
control operation of the interpreter, but are not part of the
jLogo language.

The up-arrow and down-arrow keys access a history list of most
recently entered lines of input.

The Editor (optional)
---------------------
A window that supports editing procedures.

In the application flavor of TG, the editor's contents can
be saved to a file for reloading at a future point.  A file's
contents are passed to the interpreter as it is loaded.

Another way of getting code into or out of the editor when
running in application mode is COPY, CUT, and PASTE.

NOTE THAT NO IMMEDIATE INTERACTION OCCURS BETWEEN THE EDITOR
AND THE INTERPRETER.

Changes to procedures in the editor are passed on to the
interpreter.  BUT, this happens when you move focus out of
the editor window into either the Canvas or CommandCenter.

As an example, typing the command "FORWARD 100" will enter it
into the editor, but it will not be interpreted/executed. To
force interpretation of the contents of the editor's buffer,
choose the "Editor Contents" option of the "Interpret" menu.

Resizing the Windows
--------------------
To change the height of one of the windows, hold down the LEFT
mouse button while positioned on its namestripe and drag it up
or down.
</item>
