[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 3. Communication

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 3.1 Transmitters

Note: If there is a variable named `PRINTDEPTHLIMIT` with a nonnegative integer value, then complex list and array structures will be printed only to the allowed depth. That is, members of members of... of members will be allowed only so far. The members omitted because they are just past the depth limit are indicated by an ellipsis for each one, so a too-deep list of two members will print as `[... ...]`.

If there is a variable named `PRINTWIDTHLIMIT` with a nonnegative integer value, then only the first so many members of any array or list will be printed. A single ellipsis replaces all missing data within the structure. The width limit also applies to the number of characters printed in a word, except that a `PRINTWIDTHLIMIT` between 0 and 9 will be treated as if it were 10 when applied to words. This limit applies not only to the top-level printed datum but to any substructures within it.

See section printdepthlimit , printwidthlimit

If there is a variable named `FULLPRINTP` whose value is `TRUE`, then words that were created using backslash or vertical bar (to include characters that would otherwise not be treated as part of a word) are printed with the backslashes or vertical bars shown, so that the printed result could be re-read by Logo to produce the same value. If `FULLPRINTP` is `TRUE` then the empty word (however it was created) prints as `||`. (Otherwise it prints as nothing at all.)

See section fullprintp .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### print

    PRINT thing
    PR thing
    (PRINT thing1 thing2 ...)
    (PR thing1 thing2 ...)

command. Prints the input or inputs to the current write stream (initially the screen). All the inputs are printed on a single line, separated by spaces, ending with a newline. If an input is a list, square brackets are not printed around it, but brackets are printed around sublists. Braces are always printed around arrays.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### type

    TYPE thing
    (TYPE thing1 thing2 ...)

command. Prints the input or inputs like `PRINT`, except that no newline character is printed at the end and multiple inputs are not separated by spaces. Note: printing to the screen is ordinarily line buffered; that is, the characters you print using `TYPE` will not actually appear on the screen until either a newline character is printed (for example, by `PRINT` or `SHOW`) or Logo tries to read from the keyboard (either at the request of your program or after an instruction prompt). This buffering makes the program much faster than it would be if each character appeared immediately, and in most cases the effect is not disconcerting. To accommodate programs that do a lot of positioned text display using `TYPE`, Logo will force printing whenever `SETCURSOR` is invoked. This solves most buffering problems. Still, on occasion you may find it necessary to force the buffered characters to be printed explicitly; this can be done using the `WAIT` command. `WAIT 0` will force printing without actually waiting.

See section setcursor , wait

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### show

    SHOW thing
    (SHOW thing1 thing2 ...)

command. Prints the input or inputs like `PRINT`, except that if an input is a list it is printed inside square brackets.

See section print .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 3.2 Receivers

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readlist

    READLIST
    RL

reads a line from the read stream (initially the keyboard) and outputs that line as a list. The line is separated into members as though it were typed in square brackets in an instruction. If the read stream is a file, and the end of file is reached, `READLIST` outputs the empty word (not the empty list). `READLIST` processes backslash, vertical bar, and tilde characters in the read stream; the output list will not contain these characters but they will have had their usual effect. `READLIST` does not, however, treat semicolon as a comment character.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readword

    READWORD
    RW

reads a line from the read stream and outputs that line as a word. The output is a single word even if the line contains spaces, brackets, etc. If the read stream is a file, and the end of file is reached, `READWORD` outputs the empty list (not the empty word). `READWORD` processes backslash, vertical bar, and tilde characters in the read stream. In the case of a tilde used for line continuation, the output word does include the tilde and the newline characters, so that the user program can tell exactly what the user entered. Vertical bars in the line are also preserved in the output. Backslash characters are not preserved in the output.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readrawline

    READRAWLINE

reads a line from the read stream and outputs that line as a word. The output is a single word even if the line contains spaces, brackets, etc. If the read stream is a file, and the end of file is reached, `READRAWLINE` outputs the empty list (not the empty word). `READRAWLINE` outputs the exact string of characters as they appear in the line, with no special meaning for backslash, vertical bar, tilde, or any other formatting characters.

See section readword .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readchar

    READCHAR
    RC

reads a single character from the read stream and outputs that character as a word. If the read stream is a file, and the end of file is reached, `READCHAR` outputs the empty list (not the empty word). If the read stream is the keyboard, echoing is turned off when `READCHAR` is invoked, and remains off until `READLIST` or `READWORD` is invoked or a Logo prompt is printed. Backslash, vertical bar, and tilde characters have no special meaning in this context.

See section readlist .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readchars

    READCHARS num
    RCS num

reads num characters from the read stream and outputs those characters as a word. If the read stream is a file, and the end of file is reached, `READCHARS` outputs the empty list (not the empty word). If the read stream is the keyboard, echoing is turned off when `READCHARS` is invoked, and remains off until `READLIST` or `READWORD` is invoked or a Logo prompt is printed. Backslash, vertical bar, and tilde characters have no special meaning in this context.

See section readlist , readword

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### shell

    SHELL command
    (SHELL command wordflag)

Under Unix, outputs the result of running command as a shell command. (The command is sent to ‘`/bin/sh`’, not ‘`csh`’ or other alternatives.) If the command is a literal list in the instruction line, and if you want a backslash character sent to the shell, you must use `\\` to get the backslash through Logo's reader intact. The output is a list containing one member for each line generated by the shell command. Ordinarily each such line is represented by a list in the output, as though the line were read using `READLIST`. If a second input is given, regardless of the value of the input, each line is represented by a word in the output as though it were read with `READWORD`. Example:

    to dayofweek
    output first first shell [date]
    end

This is `first first` to extract the first word of the first (and only) line of the shell output.

Under MacOS X, `SHELL` works as under Unix. `SHELL` is not available under Mac Classic.

Under DOS, `SHELL` is a command, not an operation; it sends its input to a DOS command processor but does not collect the result of the command.

Under Windows, the wxWidgets version of Logo behaves as under Unix (except that DOS-style commands are understood; use `dir` rather than `ls`). The non-wxWidgets version behaves like the DOS version.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 3.3 File Access

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setprefix

    SETPREFIX string

command. Sets a prefix that will be used as the implicit beginning of filenames in `OPENREAD`, `OPENWRITE`, `OPENAPPEND`, `OPENUPDATE`, `LOAD`, and `SAVE` commands. Logo will put the appropriate separator character (slash for Unix, backslash for DOS/Windows, colon for MacOS Classic) between the prefix and the filename entered by the user. The input to `SETPREFIX` must be a word, unless it is the empty list, to indicate that there should be no prefix.

See section openread , See section openwrite , See section openappend , See section openupdate , See section load , See section save .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### prefix

    PREFIX

outputs the current file prefix, or [] if there is no prefix.

See section setprefix .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### openread

    OPENREAD filename

command. Opens the named file for reading. The read position is initially at the beginning of the file.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### openwrite

    OPENWRITE filename

command. Opens the named file for writing. If the file already existed, the old version is deleted and a new, empty file created.

`OPENWRITE`, but not the other `OPEN` variants, will accept as input a two-element list, in which the first element must be a variable name, and the second must be a positive integer. A character buffer of the specified size will be created. When a `SETWRITE` is done with this same list (in the sense of .EQ, not a copy, so you must do something like

    ? make "buf [foo 100]
    ? openwrite :buf
    ? setwrite :buf
        [...]
    ? close :buf

and not just

    ? openwrite [foo 100]
    ? setwrite [foo 100]

and so on), the printed characters are stored in the buffer; when a `CLOSE` is done with the same list as input, the characters from the buffer (treated as one long word, even if spaces and newlines are included) become the value of the specified variable.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### openappend

    OPENAPPEND filename

command. Opens the named file for writing. If the file already exists, the write position is initially set to the end of the old file, so that newly written data will be appended to it.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### openupdate

    OPENUPDATE filename

command. Opens the named file for reading and writing. The read and write position is initially set to the end of the old file, if any. Note: each open file has only one position, for both reading and writing. If a file opened for update is both `READER` and `WRITER` at the same time, then `SETREADPOS` will also affect `WRITEPOS` and vice versa. Also, if you alternate reading and writing the same file, you must `SETREADPOS` between a write and a read, and `SETWRITEPOS` between a read and a write.

See section reader , writer , setreadpos , setwritepos

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### close

    CLOSE filename

command. Closes the named file. If the file was currently the reader or writer, then the reader or writer is changed to the keyboard or screen, as if `SETREAD []` or `SETWRITE []` had been done.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### allopen

    ALLOPEN

outputs a list whose members are the names of all files currently open. This list does not include the dribble file, if any.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### closeall

    CLOSEALL					(library procedure)

command. Closes all open files. Abbreviates `FOREACH ALLOPEN [CLOSE ?]`

See section foreach , close

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### erasefile

    ERASEFILE filename
    ERF filename

command. Erases (deletes, removes) the named file, which should not currently be open.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### dribble

    DRIBBLE filename

command. Creates a new file whose name is the input, like `OPENWRITE`, and begins recording in that file everything that is read from the keyboard or written to the terminal. That is, this writing is in addition to the writing to `WRITER`. The intent is to create a transcript of a Logo session, including things like prompt characters and interactions.

See section openwrite , writer

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### nodribble

    NODRIBBLE

command. Stops copying information into the dribble file, and closes the file.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setread

    SETREAD filename

command. Makes the named file the read stream, used for `READLIST`, etc. The file must already be open with `OPENREAD` or `OPENUPDATE`. If the input is the empty list, then the read stream becomes the keyboard, as usual. Changing the read stream does not close the file that was previously the read stream, so it is possible to alternate between files.

See section readlist , openread , openupdate

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setwrite

    SETWRITE filename

command. Makes the named file the write stream, used for `PRINT`, etc. The file must already be open with `OPENWRITE`, `OPENAPPEND`, or `OPENUPDATE`. If the input is the empty list, then the write stream becomes the screen, as usual. Changing the write stream does not close the file that was previously the write stream, so it is possible to alternate between files.

If the input is a list, then its first element must be a variable name, and its second and last element must be a positive integer; a buffer of that many characters will be allocated, and will become the writestream. If the same list (same in the `.EQ` sense, not a copy) has been used as input to `OPENWRITE`, then the already-allocated buffer will be used, and the writer can be changed to and from this buffer, with all the characters accumulated as in a file. When the same list is used as input to `CLOSE`, the contents of the buffer (as an unparsed word, which may contain newline characters) will become the value of the named variable. For compatibility with earlier versions, if the list has not been opened when the `SETWRITE` is done, it will be opened implicitly, but the first `SETWRITE` after this one will implicitly close it, setting the variable and freeing the allocated buffer.

See section print , openwrite ; openappend ; openupdate

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### reader

    READER

outputs the name of the current read stream file, or the empty list if the read stream is the terminal.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### writer

    WRITER

outputs the name of the current write stream file, or the empty list if the write stream is the screen.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setreadpos

    SETREADPOS charpos

command. Sets the file pointer of the read stream file so that the next `READLIST`, etc., will begin reading at the charposth character in the file, counting from 0. (That is, `SETREADPOS 0` will start reading from the beginning of the file.) Meaningless if the read stream is the keyboard.

See section readlist .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setwritepos

    SETWRITEPOS charpos

command. Sets the file pointer of the write stream file so that the next `PRINT`, etc., will begin writing at the charposth character in the file, counting from 0. (That is, `SETWRITEPOS 0` will start writing from the beginning of the file.) Meaningless if the write stream is the screen.

See section print .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### readpos

    READPOS

outputs the file position of the current read stream file.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### writepos

    WRITEPOS

outputs the file position of the current write stream file.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### eofp

    EOFP
    EOF?

predicate, outputs `TRUE` if there are no more characters to be read in the read stream file, `FALSE` otherwise.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### filep

    FILEP filename
    FILE? filename					(library procedure)

predicate, outputs `TRUE` if a file of the specified name exists and can be read, `FALSE` otherwise.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 3.4 Terminal Access

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### keyp

    KEYP
    KEY?

predicate, outputs `TRUE` if there are characters waiting to be read from the read stream. If the read stream is a file, this is equivalent to `NOT EOFP`. If the read stream is the terminal, then echoing is turned off and the terminal is set to `cbreak` (character at a time instead of line at a time) mode. It remains in this mode until some line-mode reading is requested (e.g., `READLIST`). The Unix operating system forgets about any pending characters when it switches modes, so the first `KEYP` invocation will always output `FALSE`.

See section eofp , readlist

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### cleartext

    CLEARTEXT
    CT

command. Clears the text window.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setcursor

    SETCURSOR vector

command. The input is a list of two numbers, the x and y coordinates of a text window position (origin in the upper left corner, positive direction is southeast). The text cursor is moved to the requested position. This command also forces the immediate printing of any buffered characters.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### cursor

    CURSOR

outputs a list containing the current x and y coordinates of the text cursor. Logo may get confused about the current cursor position if, e.g., you type in a long line that wraps around or your program prints escape codes that affect the screen strangely.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setmargins

    SETMARGINS vector

command. The input must be a list of two numbers, as for `SETCURSOR`. The effect is to clear the screen and then arrange for all further printing to be shifted down and to the right according to the indicated margins. Specifically, every time a newline character is printed (explicitly or implicitly) Logo will type x_margin spaces, and on every invocation of `SETCURSOR` the margins will be added to the input x and y coordinates. (`CURSOR` will report the cursor position relative to the margins, so that this shift will be invisible to Logo programs.) The purpose of this command is to accommodate the display of terminal screens in lecture halls with inadequate TV monitors that miss the top and left edges of the screen.

See section setcursor .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### settextcolor

    SETTEXTCOLOR foreground background
    SETTC foreground background

command (wxWidgets only). The inputs are color numbers, or RGB color lists, as for turtle graphics. The foreground and background colors for the textscreen/splitscreen text window are changed to the given values. The change affects text already printed as well as future text printing; there is only one text color for the entire window.

Command (non-wxWidgets Windows and DOS extended only). The inputs are color numbers, as for turtle graphics. Future printing to the text window will use the specified colors for foreground (the characters printed) and background (the space under those characters). Using `STANDOUT` will revert to the default text window colors. In the DOS extended (‘`ucblogo.exe`’) version, colors in textscreen mode are limited to numbers 0-7, and the coloring applies only to text printed by the program, not to the echoing of text typed by the user. Neither limitation applies to the text portion of splitscreen mode, which is actually drawn as graphics internally.

See section standout .

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### increasefont

    INCREASEFONT
    DECREASEFONT

command (wxWidgets only). Increase or decrease the size of the font used in the text and edit windows to the next larger or smaller available size.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### settextsize

    SETTEXTSIZE height

command (wxWidgets only). Set the "point size" of the font used in the text and edit windows to the given integer input. The desired size may not be available, in which case the nearest available size will be used. Note: There is only a slight correlation between these integers and pixel sizes. Our rough estimate is that the number of pixels of height is about 1.5 times the point size, but it varies for different fonts. See `SETLABELHEIGHT` for a different approach used for the graphics window.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### textsize

    TEXTSIZE

(wxWidgets only) outputs the "point size" of the font used in the text and edit windows. See `SETTEXTSIZE` for a discussion of font sizing. See `LABELSIZE` for a different approach used for the graphics window.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### setfont

    SETFONT fontname

command (wxWidgets only). Set the font family used in all windows to the one named by the input. Try ‘`Courier`’ or ‘`Monospace`’ as likely possibilities. Not all computers have the same fonts installed. It's a good idea to stick with monospace fonts (ones in which all characters have the same width).

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### font

    FONT

(wxWidgets only) outputs the name of the font family used in all windows.

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by Brian Harvey on September, 3 2008 using texi2html 1.78.