## The File' Menu

This opens a file read-write. However, if you don't have write permissions, it will be opened read-only automatically (see section The Menu Entry File/View'). If the file is already open, this will just open a new editor (see section The Menu Entry File/New editor'), without changing the read-write/read-only status.

If the file does not exist (but its directory exists), this function will open a new empty text editor which will be written to that file name when you save it (see section The Menu Entry File/Save').

### The Menu Entry File/Open file at cursor'

This works like File/Open' (see section The Menu Entry File/Open'), but copies the word under the cursor from the current editor window as the initial content and allows you to copy characters from the current editor window.

### The Menu Entry File/View'

This opens a file read-only. Read-only files can be viewed and copied from with the usual editor keys, but they cannot be modified. They can be written to a new file name, however (see section The Menu Entry File/Save as'). If the file is already open, this will just create a new editor (see section The Menu Entry File/New editor'), without changing the read-write/read-only status.

### The Menu Entry File/View file at cursor'

This works like File/View' (see section The Menu Entry File/View'), but copies the word under the cursor from the current editor window as the initial content and allows you to copy characters from the current editor window.

### The Menu Entry File/New file'

This opens a new (read-write) unnamed text editor. When you try to save it (see section The Menu Entry File/Save'), you will be prompted for a file name.

If you want to give the filename immediately, you can do this with File/Open' (see section The Menu Entry File/Open') instaed.

### The Menu Entry File/New editor'

Opens a new editor for the file in the current editor. The new editor will start at the same position as the current one (so one might be misled into thinking the function didn't work...). Several editors for one file will be marked by :n', with consecutive numbers n.

### The Menu Entry File/Close'

Closes the current window. This is equivalent to Window/Close' (see section The Menu Entry Window/Close') to suit different preferences. :-)

### The Menu Entry File/Change directory'

Changes the current working directory for PENG as well as OS shells (see section The Menu Entry File/OS shell') and tools (see section Tools) subsequently spawned by PENG.

Saves the current editor. If it is read-only, it will ask for a new file name to save it to, just like File/Save as' (see section The Menu Entry File/Save as').

### The Menu Entry File/Save as'

Saves the current editor under a new file name. This also makes it possible to save read-only files and non-file windows, e.g., the message window or info readers, to a file.

### The Menu Entry File/Save all'

Saves all editor windows which contain modified changes. If Options/Auto save options' (see section The Menu Entry Options/Auto save options') is on, it also saves the configuration to the current config file.

### The Menu Entry File/Shortcut paths'

In this menu, you can enter some path shortcuts which you can easily access in file selection boxes (see section Keys Used In File Selection Boxes).

### The Menu Entry File/OS shell'

Invokes an OS shell and resumes to PENG when you leave the shell (in most shells, this is done by entering exit'). The name of the shell is taken from the usual environment variable containing it (SHELL' under Unix, COMSPEC' under Dos).

Suspends PENG if your system and shell support job control (just like CTRL-Z does with most programs).

You can also use CTRL-Z to suspend PENG if Options/Environment/Control-Z to suspend' (see section The Menu Entry Options/Environment/Control-Z to suspend') is enabled.

If any editor window contains unsaved changes, PENG will save them automatically if autosave is active (see section The Menu Entry Options/Autosave/Autosave').

PENG can be continued with the normal continue command of your shell, usually called fg'.

### The Menu Entry File/Exit'

Exits PENG. If any editor window contains unsaved changes, PENG will save them automatically if autosave is active (see section The Menu Entry Options/Autosave/Autosave'), and otherwise ask you whether you want to save them.

You can also use CTRL-C to exit PENG if Options/Environment/Control-C to exit' (see section The Menu Entry Options/Environment/Control-C to exit') is enabled.

## The Edit' Menu

Undoes the effect of the last operation(s) in an editor. Several operations of the same kind (movement, insertion, deletion) are undone by a single undo. It is possible to use undo multiple times (up to 128 times currently) in a row.

An operation undone inadvertently can be redone (see section The Menu Entry Edit/Redo'), but only immediately after the undo.

Please note: undos may not be correct if the same file is opened in several windows, and changes are made in one window between an operation and the corresponding undo in another window.

Redoes an operation that was undone in an editor (see section The Menu Entry Edit/Undo'). It works only immediately after the undo.

Cuts the marked text from a text editor or an input box to the clipboard.

### The Menu Entry Edit/Copy'

Copies the marked text from a text editor or an input box to the clipboard, without removing it from the text editor or input box.

Pastes the active text in the clipboard to a text editor or an input box.

### The Menu Entry Edit/Delete'

Deletes the marked text from a text editor or an input box, without copying it to the clipboard.

This brings you to the topmost window. Pressing ESC while in the main menu or a top-level submenu does the same. The hotkey ALT-. can be used to get from several menu levels or input boxes to the window faster than by repeatedly pressing ESC.

### The Menu Entry Edit/Open clipboard'

Opens the clipboard so you can edit it. Text cut or copied from elsewhere is always appended at the end of the clipboard, but you can mark text anywhere within the clipboard to select it for following paste operations.

### The Menu Entry Edit/Clear clipboard'

Clears the clipboard. Especially useful if you store the clipboard in a permanent file (see section The Menu Entry Options/Editor2/Clipboard file').

### The Menu Entry Search/Search'

Finds an occurrence of a string or regular expression in the current editor, depending on various options in the Search' menu (see section The Search' Menu).

Replaces one or all occurrences of a string or regular expression in the current editor by another string, depending on various options in the Search' menu (see section The Search' Menu).

C-like escape sequences (in particular \n', but not \007' because of conflicts with the backreference syntax, see below) are recognized in the replacement string.

If Search/Regular expression' (see section The Menu Entry Search/Regular expression') is enabled, the replacement string may also contain backreferences, i.e., it can reference

• the whole matched expression with &' or \0',
• the 7'th subexpression with \7' (just like in regular expressions, but using it in replacements is not slow :-),
• the 7'th subexpression converted to upper/lower case with \u7' or \l7', respectively,
• the whole matched expression converted to upper/lower case with \u0' or \l0', of course, and
• a verbatim &' or \' with \&' or \\', respectively.

### The Menu Entry Search/Search or replace again'

Repeats the last search or replace operation. The new operation will always start after the current cursor position, regardless of the setting of Search/From cursor' (see section The Menu Entry Search/From cursor').

### The Menu Entry Search/Case sensitive'

Besides the usual two options (Never' and Always') there is the option Smart' which causes a search to be case sensitive if and only if the search string contains any upper case letter (just like the -i' option to less(1)').

### The Menu Entry Search/Whole words only'

If this option is on, search (see section The Menu Entry Search/Search') and replace (see section The Menu Entry Search/Replace') operations will only find whole words, consisting of letters, digits and underscores (_').

### The Menu Entry Search/Regular expression'

If this is enabled, you can search for regular expressions, and replace them using subexpression references. The difference between basic and extended regular expressions (see section The Menu Entry Search/Extended regex') is not functionality, but only syntax. These concepts are explained more extensively in the man pages of programs like grep(1)' and sed(1)', so here's only a short reference on regular expressions:

Basic .'[aei-z]'[^aei-z]'[[:alnum:]]'[^[:digit:]]'[a[:space:]]'... \w'\W'^'$'*'\+'\?'\{n\}'\{m,n\}'a b'a\|b''\7'\'rest  Extended Meaning .' matches any single character [aei-z]' matches either a', e', or any character from i' to z' [^aei-z]' matches any character but a', e', or i' .. z' To include in such a list the characters ]', ^', or -', put them first, anywhere but first, or first or last, respectively. [[:alnum:]]' matches any alphanumeric character [^[:digit:]]' matches anything but a digit [a[:space:]]' matches the letter a' or a space character (space, tab, ...) (there are more classes available) \w' = [[:alnum:]]' \W' = [^[:alnum:]]' ^' matches the empty string at the beginning of a line $' matches the empty string at the end of a line *' matches zero or more occurences of the preceding expression +' matches one or more occurences of the preceding expression ?' matches zero or one occurence of the preceding expression {n}' matches exactly n occurences of the preceding expression (n is an integer number) {m,n}' matches m to n occurences of the preceding expression (m and n are integer numbers, m <= n) a b' matches a followed by b (a and b are regular expressions) a|b' matches a or b (a and b are regular expressions) (   )' forms a subexpression, to override precedence, and for subexpression references \7' matches the 7'th subexpression (counted by their start in the regex), where 7 is a number from 1 to 9 ;-). Please note: using this feature can be very slow or take very much memory (exponential time and space in the worst case, if you know what that means...). \' quotes the following character if it's special (i.e., listed above) rest any other character matches itself
Precedence, from highest to lowest:
• parentheses (' or (   )')
• repetition (*', \+' or +', \?' or ?', \{   \}' or {   }')
• concatenation
• alternation (\|' or |')
Regular expression matches follow the principle leftmost longest, i.e., if there are several possible matches, they will find the one that starts leftmost, and if there are several ones starting at the same leftmost position, the longest one of those. The length is particularly important when replacing. Of course, continued searches will also find matches further to the right, but they will not find shorter ones starting at the same position. E.g., if you search for f.*o' in the text foofo', the search will first find the whole text (foofo'), and then the right fo', but never the left foo'. Please note: when you're surprised about a regex search not finding what you expect, please check (besides the regex syntax, of course) the setting of Search/Whole words only' (see section The Menu Entry Search/Whole words only'). This switch is respected in regex searches as well, but might be confusing sometimes.

### The Menu Entry Search/Extended regex'

This option selects between basic and extended regular expressions if regular expressions are enabled for searching (see section The Menu Entry Search/Regular expression').

### The Menu Entry Search/Backwards'

If this option is on, search and replace operations will go through the text in backward direction, from the ending towards the beginning -- but note Search/From cursor' (see section The Menu Entry Search/From cursor').

### The Menu Entry Search/From cursor'

If this option is on, search and replace operations will only consider the text from the current cursor position to the end of the file -- or to the beginning if Search/Backwards' (see section The Menu Entry Search/Backwards') is on. Otherwise, they will start at the beginning (ending) of the file. But note Search/Marked text only' (see section The Menu Entry Search/Marked text only').

### The Menu Entry Search/Marked text only'

If this option is on, PENG will only consider marked text for search and replace operations, whenever some text is marked (otherwise the whole file).

This is in addition to restrictions set by Search/From cursor' (see section The Menu Entry Search/From cursor').

### The Menu Entry Search/Prompt on replace'

If this option is on, PENG will ask for confirmation before each replacement caused by Search/Replace' (see section The Menu Entry Search/Replace'). An answer of y' will do the replacement, n' will skip it, and ESC will abort the replacement operation altogether.

If the replacement string contains back-references to regular expressions (see section The Menu Entry Search/Regular expression'), PENG will also show the actual replacement text for each possible replacement while asking for confirmation.

### The Menu Entry Search/Replace all'

If this option is on, replacement operations (see section The Menu Entry Search/Replace') will only consider the first match found, otherwise every match found.

### The Menu Entry Search/Go to line'

This lets you enter a line number to go to in the current file.

### The Menu Entry Search/Replace identifier'

This function replaces an identifier in all open windows, after verifying that the new identifier does not exist in any window (unless the new identifier matches the original one except for case). This is useful for changing identifiers in large projects without missing them in some files and without getting conflicting identifiers. Of course, all files that belong to the project must be open in order for this to work correctly. OTOH, be sure not to do unwanted replacements in windows opened that don't belong to the project. The search and replacement used here is always case-insensitive.

Besides the items listed here, this menu may contain additional tools and variables defined with a /Run' prefix (see section Tools).

### The PENG Built-In Tool Run/Run'

Compiles and links a source file, automatically updating the units used when necessary, like Compile/Make' (see section The PENG Built-In Tool Compile/Make') does, and then starts the resulting executable. The file to compile is the one in the current editor, or the one given under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file') if it is given.

Currently implemented for Pascal using GPC (see section GNU Pascal' in the GNU Pascal manual), C using GCC (see section Introduction' in the GCC manual), LaTeX (see section Overview' in the LaTeX manual) and Texinfo (see section Texinfo' in the Texinfo manual). For LaTeX and Texinfo, starting the executable means opening the document created in xdvi' (if possible) or in PENG's info reader, respectively.

### The PENG Built-In Tool Variable Run/Arguments'

Here you can specify command line arguments that are given when running a compiled executable with Run/Run' (see section The PENG Built-In Tool Run/Run').

Effective for Pascal and C.

## The Compile' Menu

Besides the items listed here, this menu may contain additional tools and variables defined with a /Compile' prefix (see section Tools).

### The PENG Built-In Tool Compile/Compile'

Compiles a source file without trying to link it. The file to compile is the one in the current editor, or the one given under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file') if it is given.

Currently implemented for Pascal using GPC (see section GNU Pascal' in the GNU Pascal manual), C using GCC (see section Introduction' in the GCC manual), LaTeX (see section Overview' in the LaTeX manual) and Texinfo (see section Texinfo' in the Texinfo manual).

### The PENG Built-In Tool Compile/Make'

Compiles and links a source file, automatically updating the units used when necessary. The file to compile is the one in the current editor, or the one given under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file') if it is given.

Currently implemented for Pascal using GPC (see section GNU Pascal' in the GNU Pascal manual), C using GCC (see section Introduction' in the GCC manual), LaTeX (see section Overview' in the LaTeX manual) and Texinfo (see section Texinfo' in the Texinfo manual). For LaTeX and Texinfo, it does the same as Compile/Compile' (see section The PENG Built-In Tool Compile/Compile').

### The PENG Built-In Tool Compile/Build'

Compiles a source file, recompiling all units used whether changed or not. The file to compile is the one in the current editor, or the one given under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file') if it is given.

Currently implemented only for Pascal using GPC (see section GNU Pascal' in the GNU Pascal manual).

### The PENG Built-In Tool Compile/Set current file as main file'

Sets the file name of the current editor as the main file, as if you had entered it under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file').

### The PENG Built-In Tool Compile/Clear main file'

Clears the main file, as if you had entered an empty string under Compile/Main file' (see section The PENG Built-In Tool Variable Compile/Main file').

### The PENG Built-In Tool Variable Compile/Main file'

If you enter a file name here, this file will be used rather than the current file for all compile operations such as Compile/Compile' (see section The PENG Built-In Tool Compile/Compile'), Compile/Make' (see section The PENG Built-In Tool Compile/Make'), Compile/Build' (see section The PENG Built-In Tool Compile/Build') and Run/Run' (see section The PENG Built-In Tool Run/Run').

You can also set or clear this entry with Compile/Set current file as main file' (see section The PENG Built-In Tool Compile/Set current file as main file') or Compile/Clear main file' (see section The PENG Built-In Tool Compile/Clear main file'), respectively.

Besides the items listed here, this menu may contain additional tools and variables defined with a /Tools' prefix or no prefix at all (see section Tools).

#### The PENG Built-In Tool Tools/Macros/Pascal/New program'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new Pascal program in the current text editor.

#### The PENG Built-In Tool Tools/Macros/Pascal/New program with units'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new Pascal program with an uses' statement (see section uses' in the GNU Pascal manual) in the current text editor.

#### The PENG Built-In Tool Tools/Macros/Pascal/procedure'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a procedure declaration (see section procedure' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/function'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a function declaration (see section function' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/block'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a begin ... end' block (see section begin' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/if then'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts an if ... then' statement (see section if' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/if then else'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts an if ... then ... else' statement (see section else' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/case'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a case' statement (see section case' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/while loop'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a while' loop (see section while' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/repeat loop'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a repeat' loop (see section repeat' in the GNU Pascal manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/Pascal/list type'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts a list type declaration at the current cursor position, after prompting for its name. The name will automatically be prefixed with a P' for the pointer type and T' for the actual record.

#### The PENG Built-In Tool Tools/Macros/Pascal/object type'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts an object type declaration (see section object' in the GNU Pascal manual) at the current cursor position, after prompting for its name. The name will automatically be prefixed with a P' for the pointer type and T' for the actual object.

#### The PENG Built-In Tool Tools/Macros/Pascal/walk through a list'

This Pascal syntax macro (see section PENG Tools Used As Syntax Macros) inserts code to walk a pointer through a single linked list at the current cursor position, after prompting for the name of the variable to be used.

#### The PENG Built-In Tool Tools/Macros/C/New program'

This C syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new C program in the current text editor.

#### The PENG Built-In Tool Tools/Macros/C/New program with includes'

This C syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new C program with some #include' directives in the current text editor.

#### The PENG Built-In Tool Tools/Macros/C/void function'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a void' function declaration at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/function'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a function declaration at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/block'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a { ... }' block at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/if'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts an if' statement at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/if else'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts an if ... else' statement at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/switch'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a switch' statement at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/while loop'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a while' loop at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/do while loop'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a do ... while' loop at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/C/list type'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts a list type declaration at the current cursor position, after prompting for its name.

#### The PENG Built-In Tool Tools/Macros/C/walk through a list'

This C syntax macro (see section PENG Tools Used As Syntax Macros) inserts code to walk a pointer through a single linked list at the current cursor position, after prompting for the name of the variable to be used.

#### The PENG Built-In Tool Tools/Macros/LaTeX/New text'

This LaTeX syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new LaTeX document in the current text editor.

#### The PENG Built-In Tool Tools/Macros/LaTeX/block'

This LaTeX syntax macro (see section PENG Tools Used As Syntax Macros) inserts a \begin{foo} ... \end{foo}' environment (see section Environments' in the LaTeX manual) at the current cursor position, after prompting for its name (foo).

#### The PENG Built-In Tool Tools/Macros/LaTeX/enumerate'

This LaTeX syntax macro (see section PENG Tools Used As Syntax Macros) inserts a skeleton for an enumeration (see section enumerate' in the LaTeX manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/New text'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) creates the skeleton for a new Texinfo file in the current text editor.

#### The PENG Built-In Tool Tools/Macros/texi/chapter'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a node for a new chapter (see section chapter' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/section'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a node for a new section (see section section' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/subsection'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a node for a new subsection (see section subsection' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/subsubsection'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a node for a new subsubsection (see section subsubsection' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/menu'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a menu (see section Menus' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/itemize'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts an @itemize' command (see section itemize' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/table'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @table' (see section Two-column Tables' in the Texinfo manual) command at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/multitabe'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @multitable' command (see section Multi-column Tables' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/emph'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts an @emph{}' command (see section emph & strong' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/strong'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @strong{}' command (see section emph & strong' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/samp'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @samp{}' command (see section samp' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/code'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @code{}' command (see section code' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/var'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @var{}' command (see section var' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/dfn'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @dfn{}' command (see section dfn' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/file'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @file{}' command (see section file' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/email'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts an @email{}' command (see section email' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/uref'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts an @uref{}' command (see section uref' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/kbd'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @kbd{@key{}}' command (see section kbd' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/key'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @key{}' command (see section key' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/pxref'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts an @pxref{}' command (see section pxref' in the Texinfo manual) at the current cursor position.

#### The PENG Built-In Tool Tools/Macros/texi/ref'

This Texinfo syntax macro (see section PENG Tools Used As Syntax Macros) inserts a @ref{}' command (see section ref' in the Texinfo manual) at the current cursor position.

### The PENG Built-In Tool Tools/Grep'

Invokes grep' to find something (by default, the current word in the current editor) in a list of files (by default, all source files in the current directory), and shows the results in PENG's message window, so you can easily view or edit the places found in a text editor.

Under Tools/Files to grep' (see section The PENG Built-In Tool Variable Tools/Files to grep'), you can change the default list of files, e.g., to provide a list of directories where you keep your source files, so they will always be searched.

### The PENG Built-In Tool Tools/Calculator'

Lets you enter a mathematical expression using real or complex numbers, and evaluates it. (What a surprise! ;-) For the operations available, see section MATH' (*).

### The PENG Built-In Tool Tools/Evaluate'

Lets you enter an expression to be evaluated. Currently, this is the same as Tools/Calculator' (see section The PENG Built-In Tool Tools/Calculator'), but when PENG will support a debugger, it will use the debugger's functionality to evaluate expressions in the source language, using variables from the running program etc. ...

### The PENG Built-In Tool Tools/Man page'

Opens a man page in a read-only window, so you can easily copy and paste from it. Of course, you can also enter the man page section, e.g., 1 man' to get the manual of the man' program in section 1.

### The PENG Built-In Tool Tools/Create orig'

Copies the current file to a file name obtained by appending .orig' to the current file name. Useful if you want to make changes to a file and create a diff later (see section Overview' in the diff manual). Uses the -i' option to cp', so it won't overwrite an existing .orig' file without confirmation.

### The PENG Built-In Tool Tools/Insert uuencoded'

Lets you select a file, and inserts it into the current editor after uuencoding it. Removes the original file after asking for confirmation.

### The PENG Built-In Tool Tools/Insert gzipped and uuencoded'

Lets you select a file, and inserts it into the current editor after uuencoding and gzipping it. Removes the original file after asking for confirmation.

### The PENG Built-In Tool Tools/Rename'

Lets you select a file, and rename or move it, while you can edit the original file name to get the new one (especially useful for small changes in long file names).

Of course, PENG is not going to be a complete file manager, but some small jobs can easily be done using the available PENG tool functions (see section Tool Functions)...

### The PENG Built-In Tool Tools/ChangeLog entry'

Opens the ChangeLog file specified under Tools/Settings/ChangeLog file name' (see section The PENG Built-In Tool Variable Tools/Settings/ChangeLog file name') and inserts a new entry at the top, using the current date and your name and email address specified under Tools/Settings/Name' (see section The PENG Built-In Tool Variable Tools/Settings/Name') and Tools/Settings/Mail address' (see section The PENG Built-In Tool Variable Tools/Settings/Mail address').

### The PENG Built-In Tool Tools/Calendar'

Shows a calendar of the current month in a read-only window, using the gcal' program (see section Gcal' in the Gcal manual). I don't know why, but it seems that an IDE must have a calendar function... ;-)

### The PENG Built-In Tool Variable Tools/Files to grep'

Here you can specify a list of files that the Tools/Grep' tool (see section The PENG Built-In Tool Tools/Grep') will search by default. For any particular grep' invocation, you can override the default.

The string entered here is given to the shell, and therefore may contain any wildcard characters your shell understands. The default will search all files with some known source extensions in the current directory.

### The Tools/Settings' Submenu

#### The PENG Built-In Tool Variable Tools/Settings/Name'

Your real name which you can enter here will be used by the Tools/ChangeLog entry' tool (see section The PENG Built-In Tool Tools/ChangeLog entry'), but, of course, you can define other tools using this variable if they need the real name and you want to enter it in only one place.

#### The PENG Built-In Tool Variable Tools/Settings/Mail address'

Your email address which you can enter here will be used by the Tools/ChangeLog entry' tool (see section The PENG Built-In Tool Tools/ChangeLog entry'), but, of course, you can define other tools using this variable if they need the email address and you want to enter it in only one place.

#### The PENG Built-In Tool Variable Tools/Settings/ChangeLog file name'

Here you can specifiy the name of the ChangeLog file in which you want Tools/ChangeLog entry' (see section The PENG Built-In Tool Tools/ChangeLog entry') to insert your entries.

## The Options' Menu

Besides the items listed here, this menu may contain additional tools and variables defined with an /Options' prefix (see section Tools).

### The Options/Editor1' Submenu

The editor options have been split into two submenus, this one and Options/Editor2' (see section The Options/Editor2' Submenu), because they were becoming too many for one menu (though there is no limit on the size of a menu in PENG, considerations about screen size and available shortcut keys indicate the need for separate menus).

Generally, this menu contains those options that are typically changed more frequently, while Options/Editor2' contains those that are often only set once after installing PENG and rarely touched later. However, the distinction may be a bit arbitrary in some cases.

#### The Menu Entry Options/Editor1/Auto copy'

If this option is on, marked text will automatically be copied to the clipboard, like Edit/Copy' does (see section The Menu Entry Edit/Copy'). An exception is when it is deleted (with Edit/Delete' (see section The Menu Entry Edit/Delete') or CTRL-DEL) immediately after marking, because otherwise Edit/Delete' would do the same as Edit/Cut' (see section The Menu Entry Edit/Cut').

#### The Menu Entry Options/Editor1/Persistent blocks'

If this option is off, blocks can be marked with SHIFT and are cleared as soon as the cursor is moved while SHIFT is not pressed. If it is on, blocks can be marked with SHIFT or with CTRL-KB/CTRL-KK (see section Keys Used In The Text Editor), and the cursor can be moved independently of the marked block.

#### The Menu Entry Options/Editor1/Delete blocks'

If this option is on, DEL and BACKSPACE will delete a block if one is marked, and have their normal function otherwise.

#### The Menu Entry Options/Editor1/Volatile blocks'

If this option is on, marked blocks will be deleted before insertions, including TAB, CTRL-V, CTRL-N, and ENTER when used for insertion.

If this option is on, new lines inserted into a text editor will be indented with spaces, tabs and (possibly multiple) occurences of the quote string (see section The Menu Entry Options/Editor1/Quote string') and the mark string (see section The Menu Entry Options/Editor1/Mark string') to match the previous line.

#### The Menu Entry Options/Editor1/Paragraphs'

If this option is on, blocks of lines that have the same indentation and quotation level, determined by leading spaces and (possibly multiple) leading occurences of the quote string (see section The Menu Entry Options/Editor1/Quote string') and the mark string (see section The Menu Entry Options/Editor1/Mark string') are treated as paragraphs, separated by empty lines.

In particular, the cursor and words are wrapped automatically between the lines when they reach the length given under Options/Editor2/Line width' (see section The Menu Entry Options/Editor2/Line width'). ENTER and CTRL-N have twice the usual effect, so they create an empty line and start a new paragraph.

This mode is useful, e.g., for editing mail, news, TeX, HTML, etc. It can be applied to certain files only (see section The Menu Entry Options/Editor2/Paragraphs in files').

This mode implies Trim trailing spaces' (see section The Menu Entry Options/Editor2/Trim trailing spaces'), because the notion of "trailing" is quite pointless when considering lines as parts of paragraphs.

Please note: Block operations and line deletions with CTRL-Y are not affected, so they can be used as an escape to override the paragraph structure.

#### The Menu Entry Options/Editor1/Quote string'

Here you can specify a string considered to start each line of a quotation in a text (usually > ' in mail and news messages). This is relevant for quote protection (see section The Menu Entry Options/Editor1/Protect quotes'), indentation (see section The Menu Entry Options/Editor1/Indent'), and can be inserted before each line of a block of text (see section Keys Used In The Text Editor).

#### The Menu Entry Options/Editor1/Mark string'

Here you can specify a string considered to start each line of some markup in a text (e.g., : ' to mark some included foreign text in mail and news messages). This is relevant for indentation (see section The Menu Entry Options/Editor1/Indent'), and can be inserted before each line of a block of text (see section Keys Used In The Text Editor).

#### The Menu Entry Options/Editor1/Protect quotes'

If this option is on, quoted lines can only be split and merged, but not edited otherwise without special confirmation. If confirmation is given, it will remove the protection for the current file, until it is closed and reopened, or PENG is restarted.

When both quote protection and paragraph mode (see section The Menu Entry Options/Editor1/Paragraphs') are on, inserting a line with ENTER into a quoted line will also cause unquoted empty lines to be inserted between the parts of the line, and the cursor to be placed onto the empty lines, which is very practical for replying to mail and news.

Like paragraph mode, quote protection does not affect block operations, for the same reason. Quote protection also disables automatic reformatting of quoted paragraphs (e.g., after splitting or merging them) when paragraph mode is on.

#### The Menu Entry Options/Editor1/Line numbers'

If this option is on, text editors will show the line numbers of all lines on the screen at the left side. The width reserved for line numbers can be set under Options/Editor2/Line number width' (see section The Menu Entry Options/Editor2/Line number width').

### The Options/Editor2' Submenu

The editor options have been split into two submenus, this one and Options/Editor1' (see section The Options/Editor1' Submenu) (see the rationale given there).

Generally, this menu contains those options that are often only set once after installing PENG and rarely touched later, while Options/Editor1' contains those that are typically changed more frequently. However, the distinction may be a bit arbitrary in some cases.

#### The Menu Entry Options/Editor2/Backups'

PENG can make either simple or multiple (numbered) backups, each in either a short form (.bak'; .b00', .b01', ...) or a long form (~'; .~1~', .~2~', ...). Under Dos, of course, only the short form is available.

#### The Menu Entry Options/Editor2/Backup directory'

Directory in which to create backup files (see section The Menu Entry Options/Editor2/Backups'). Defaults to a temp directory, so that backup files don't clutter the data directories. It might be useful to have old files in that directory automatically removed by a cron job.

#### The Menu Entry Options/Editor2/Clipboard file'

If a file name is entered here, the clipboard will be stored in this file, so it survives quitting and restarting PENG. However, since PENG only appends to the clipboard, the file should regularly be cleared, either manually, or with Edit/Clear clipboard' (see section The Menu Entry Edit/Clear clipboard'), or by a cron job. If no file name is entered, the clipboard will not be saved in a file, and its contents will be lost when quitting PENG.

#### The Menu Entry Options/Editor2/Use lock files'

If this option is enabled, PENG will create a lock file for every file opened read-write, and if the lock file exists already, it won't open the file without confirmation.

This is to prevent two instances of PENG from editing the same file at the same time. The name of the lock file is the name of the file opened plus .swp', like in vim(1)' -- but note Options/Editor2/Lock files with leading dot' (see section The Menu Entry Options/Editor2/Lock files with leading dot'). Therefore, it also prevents PENG and vim' from editing the same file at the same time.

Unlike vim', PENG does not use the lock file to store any swap data, but maybe this will change. Currently, the only data stored in the lock file is a vim' compatible header block, so vim' will recognize PENG as the current editor of the file.

However, if PENG is terminated by a TERM' or HUP' signal (e.g., on system shutdown) while a file that has a lock file contains unsaved changes, a copy of the changed file is written into the lock file. Though PENG does not have a recovery function, it's possible to extract the modified file manually in emergency cases by just removing the header (the first 4096 bytes of the file). Editor windows that don't have a lock file are written without a header to a file with a temporary file name, usually in a temp directory. Since Dos can't handle the lock file name in most cases (and Dos programs usually don't get a SIGHUP' or SIGTERM' when the system is shut down ;-), this option is off by default in Dos.

If this option is on, the lock file name (see section The Menu Entry Options/Editor2/Use lock files') is preceded by a dot. That's what newer versions of vim' (since 5.0 or so) do, so this option is on by default.

#### The Menu Entry Options/Editor2/Leave editor with Esc'

If this option is on, you can go from a normal text editor window to the main menu with ESC. This option is on by default for the ease of first-time PENG users and users on terminals with limited function keys.

Please note: Info readers and message windows will always be closed with ESC, independently of this option.

#### The Menu Entry Options/Editor2/Delete empty files'

If this option is on, whenever a text editor (more precisely, the last text editor opened on a given file) is closed whose contents are completely empty, the file on the disk is removed. If the option is set to Ask', PENG will ask whether to remove it.

#### The Menu Entry Options/Editor2/Always check file time'

If this option is on, PENG checks the modification time of the current file after each key pressed, and offers to reload the file if it was modified. This gives additional security against accidentally editing a file that was already modified by other means (see section The Menu Entry Options/Editor2/Use lock files'), but can be time consuming on slower systems or when editing files on NFS mounted file systems. If the option is off, PENG only checks the time after selecting a function from a menu and at similar occasions.

If the option is on, PENG will also check the modification time of info files after each key pressed and, if modified, reload them without further request.

#### The Menu Entry Options/Editor2/Move behind paste'

If this option is on, the cursor will be placed behind the inserted text after each insertion into a text editor, e.g., with Edit/Paste' (see section The Menu Entry Edit/Paste'). If it is off, it will be placed before it.

#### The Menu Entry Options/Editor2/Multiple block operations'

If this option is on, the text editor allows multiple block operations to be done in a row without pressing CTRL-K every time (see section Keys Used In The Text Editor).

#### The Menu Entry Options/Editor2/Trim trailing spaces'

If this option in on, trailing spaces at the end of a line will be removed automatically as soon as the line is modified in any way.

Please note: Undo operations (see section The Menu Entry Edit/Undo') do not restore those spaces.

#### The Menu Entry Options/Editor2/Expand tabs'

If this option is active, tab characters (ASCII #9) in files opened in a text editor will automatically be replaced by an appropriate amount of spaces. The number of columns where the tab positions are assumed to be can be given under Options/Editor2/Tab size' (see section The Menu Entry Options/Editor2/Tab size').

Please note: Expanding tabs can break files where tab characters are significant, in particular makefiles, so be careful with this option!

#### The Menu Entry Options/Editor2/Use tabs'

If this option is active, the TAB key pressed in a text editor (see section Keys Used In The Text Editor) will insert a tab character (ASCII #9).

Otherwise it will indent the current line by filling with spaces up to the position after the next space in the previous (non-empty) line, and if there are no more spaces, insert the number of spaces given under Options/Editor2/Indent width' (see section The Menu Entry Options/Editor2/Indent width').

Note that even when this option is off, you can get a tab character by pressing CTRL-V TAB.

#### The Menu Entry Options/Editor2/Write with tabs'

If this option is active, PENG will replace large amounts of leading spaces in a line by tab characters when saving text editor files. The number of columns where the tab positions are assumed to be can be given under Options/Editor2/Tab size' (see section The Menu Entry Options/Editor2/Tab size').

#### The Menu Entry Options/Editor2/Tab size'

Here you can enter the tab size which is used for expanding tabs in text editor windows (see section The Menu Entry Options/Editor2/Expand tabs') and info files (which is done automatically) and for writing files with tabs (see section The Menu Entry Options/Editor2/Write with tabs'). The value is also set to the variable TABSIZE' (see section Variables Set Automatically) when invoking PENG tools (see section Tools).

#### The Menu Entry Options/Editor2/Indent width'

If Options/Editor2/Use tabs' (see section The Menu Entry Options/Editor2/Use tabs') is off, and there are no more spaces in the previous (non-empty) line, pressing TAB in a text editor will insert the number of spaces given here.

It also determines the number of spaces \I' will expand to in an INSERT' tool function (see section INSERT' (*)), and, therefore, the indentation the syntax macros among the built-in PENG tools (see section PENG Tools Used As Syntax Macros) will use.

Set it to your favourite indentation depth.

#### The Menu Entry Options/Editor2/Paragraphs in files'

Since the paragraph mode (see section The Menu Entry Options/Editor1/Paragraphs') has a strong effect on editing, it can be enabled for only some kinds of files, e.g., for mail files, but not for associated data or program files that are often accessed while editing mail. Every file whose name (without directory, of course) matches the mask specified here will use the paragraph mode, if it is enabled at all.

#### The Menu Entry Options/Editor2/Line width'

This determines the length of lines in paragraphs (see section The Menu Entry Options/Editor1/Paragraphs').

#### The Menu Entry Options/Editor2/Line number width'

This determines the width that line numbers are displayed when Options/Editor1/Line numbers' (see section The Menu Entry Options/Editor1/Line numbers') is enabled. Line numbers longer than the width given here will be truncated, but marked with a left arrow to avoid confusion.

#### The Menu Entry Options/Editor2/Lexical highlighting'

Turns lexical highlighting in text editor windows on or off. Note that currently lexical highlighting is quite primitive.

The colors used for highlighting as well as the keywords recognized can be specified under Options/Colors/Lex' (see section The Options/Colors' Submenu).

### The Options/Environment' Submenu

#### The Menu Entry Options/Environment/Frame windows'

If this option is on, all editor and info reader windows get a frame around them, and their status information is written onto the frame rather than into the top line.

#### The Menu Entry Options/Environment/Screen size'

Shows the current screen size.

Under certain circumstances, it also allows you to change the screen size between 80x25 and 80x50 characters. Only implemented for DJGPP and local Linux consoles. For Linux consoles, it requires setfont to be installed and set up properly and to have the necessary permissions; if your current screen size is not 80x25 or 80x50, this might not work or produce unexpected screen sizes. If you prefer using other tools like SVGATextMode(8)', you can call them on the command line, or as a PENG tool (see section Tools). PENG will react to the changed screen size automatically. On Linux consoles, resizing will affect all virtual consoles, not just the current one.

Under X11, the window size can't be changed with this menu item, but you can simply resize your window with the mouse (and however else your window manager may support it). On how to determine the size at start-up, please see section Resources For The X11 Version Of PENG.

#### The Menu Entry Options/Environment/Clock'

Here you can choose if you want the current time, date, or both to be shown at the top right corner of PENG's screen.

#### The Menu Entry Options/Environment/Control-Z to suspend'

If this option is enabled, CTRL-Z will suspend PENG, just like File/Suspend' (see section The Menu Entry File/Suspend') does.

#### The Menu Entry Options/Environment/Control-C to exit'

If this option is enabled, CTRL-C will quit PENG, just like File/Exit' (see section The Menu Entry File/Exit') does.

#### The Menu Entry Options/Environment/Simulate block cursor'

In editors and input boxes, PENG indicates insert mode by a block cursor, but not all terminals support this. If this option is active, PENG will simulate the block cursor with graphic characters.

### The Options/Colors' Submenu

In these submenus, you can edit all the colors used by PENG. You can specify separate colors for color terminals, X11 and monochrome terminals. The reason there are distinct colors for X11 is that on X11 often dark colors on light background are preferred, while on color terminals often light colors on dark background are preferred.

The first two lines in a color selection box can be used to select the foreground and background color, respectively, on a color terminal. The next two lines correspond to the color on X11. The last line offers some attributes for monochrome terminals (not all of which are available on all terminals, of course). To the left of the three fields, there is a sample character. For a list of keys used in the color selection boxes, see section Keys Used In Color Selection Boxes.

Most color definitions are optional. This is indicated by a hyphen (-') on the left side of the color selection box. If no color is selected (i.e., the hyphen is selected), the next appropriate color will be used. E.g., the color of the main menu items defaults to that of normal menu items. It is possible to select a color only for one of foreground or background, and let the other one be determined by the next appropriate color. This is done a lot in the default settings, so you can easily change, e.g., the background color of the editor, by changing it under Normal text' without having to change it under many items (but, of course, you can still select different backgrounds for the other items if you like).

Some optional colors use inverted versions of other colors (e.g., the inverted color of normal text for the color for marked text), and a few optional colors are handled specially, e.g., the foreground color for tab characters in the text editor. If this is not selected, tab characters are displayed as control characters, i.e., as I' (because tab is ASCII #9 which is Control-I') in the color of control characters. If that is not selected, all control characters will be invisible. The same holds for non-breaking spaces.

Lets you define, modify or remove tools (see section Defining Tools).

### The Menu Entry Options/Variables'

Lets you define, modify or remove variables (see section Defining Variables).

### The Menu Entry Options/Try a tool'

Lets you enter a tool command and apply it immediately without defining it as a tool (see section Tools).

### The Options/Message window' Submenu

#### The Menu Entry Options/Message window/Message window size'

Specifies the number of lines the message window will occupy on the screen. This is independent of the number of messages it will accept (see section The Menu Entry Options/Message window/Maximum number of messages').

#### The Menu Entry Options/Message window/Message window at top'

Specifies if the message window will appear at the top or bottom of the screen.

#### The Menu Entry Options/Message window/Ignore files'

Files whose names match this mask will not be opened when messages refer to them. Useful for names of binary files, e.g., object files and libraries and the linker itself, which may appear in linker messages, but should not be loaded into an editor.

#### The Menu Entry Options/Message window/Automatically go to first message'

If this option is on, tools (see section Tools) with an M' or B' output redirection (see section Redirecting The Output Of Shell Tools) will automatically seek to the position of the first message in an editor window, so it can be edited immediately.

#### The Menu Entry Options/Message window/Skip messages without line number'

If this option is on, movements in the message window (see section Keys Used In The Message Window) will skip over messages without line numbers (which are usually comments). Those messages are still shown, of course, but this way you can go to the messages with line numbers more easily. An exception is only when you move beyond the first or last message with a line number.

#### The Menu Entry Options/Message window/Maximum number of messages'

Here you can specify the maximum number of messages the message window will accept. When a tool redirected to the message window (see section Redirecting The Output Of Shell Tools) produces more lines of output, it will be aborted.

This is independent of the size of the message window on the screen (see section The Menu Entry Options/Message window/Message window size').

#### The Menu Entry Options/Autosave/Autosave'

If this option is enabled, all modified files and configuration (see section The Menu Entry File/Save all') will automatically be saved repeatedly either after specified time intervals -- if the option is set to Time', see Options/Autosave/Autosave seconds' (see section The Menu Entry Options/Autosave/Autosave seconds') -- or after a specified number of keys pressed -- if the option is set to Keys', see Options/Autosave/Autosave keys' (see section The Menu Entry Options/Autosave/Autosave keys').

Please note: when unnamed files were modified, autosave will prompt for a file name to save. This can be irritating when it's unexpected.

#### The Menu Entry Options/Autosave/Autosave seconds'

If Options/Autosave/Autosave' (see section The Menu Entry Options/Autosave/Autosave') is set to Time', you can specify here the length in seconds of the intervals after which autosave happens.

#### The Menu Entry Options/Autosave/Autosave keys'

If Options/Autosave/Autosave' (see section The Menu Entry Options/Autosave/Autosave') is set to Keys', you can specify here the number of key presses after which autosave happens.

### The Menu Entry Options/Auto save options'

If this option is on, the configuration will be saved (see section The Menu Entry Options/Save config file') on File/Save all' (see section The Menu Entry File/Save all'), when autosave happens (see section The Menu Entry Options/Autosave/Autosave'), and when PENG is exited.

### The Menu Entry Options/Save minimal config'

If this option is on, only the permanent config settings are stored in config files. Temporary values such as the contents of input boxes, history lists, and the list of last windows are not.

To reduce an existing config file to the minimum, turn this option on, quit and restart PENG (otherwise the temporary values are still in memory), and turn the option back off if you want.

### The Menu Entry Options/Load config file'

Loads a configuration file (see section Format Of The Configuration Files).

### The Menu Entry Options/Save config file'

Saves the configuration to the current config file (see section Format Of The Configuration Files). If Options/Auto save options' (see section The Menu Entry Options/Auto save options') is on, this also happens automatically on File/Save all' (see section The Menu Entry File/Save all'), when autosave happens (see section The Menu Entry Options/Autosave/Autosave'), and when PENG is exited.

### The Menu Entry Options/Save config file as'

Saves the configuration to a new file (see section Format Of The Configuration Files).

### The Options/Pascal' Submenu

#### The PENG Built-In Tool Options/Pascal/Show sample GPC command line'

This shows the command line that would be given to GPC when applying the Compile/Make' (see section The PENG Built-In Tool Compile/Make') tool to a Pascal file.

It is dependent on the current settings in the Options/Pascal' menu.

#### The PENG Built-In Tool Variable Options/Pascal/Code generation'

Here you can select if you want to compile a draft (debugging) or a final (release) version of your Pascal programs.

This does not directly pass any switches to GPC, but decides whether the debug or release options (see section The PENG Built-In Tool Variable Options/Pascal/Debug options', and section The PENG Built-In Tool Variable Options/Pascal/Release options'; for cross-compilers see also section The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Extra debug options', and section The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Extra release options') will be given in addition to the general options (see section The PENG Built-In Tool Variable Options/Pascal/General options'), and whether the debug or release unit destination path will be used (see section The PENG Built-In Tool Variable Options/Pascal/Debug unit destination path', and section The PENG Built-In Tool Variable Options/Pascal/Release unit destination path').

#### The PENG Built-In Tool Variable Options/Pascal/Linking'

Here you can select if you want GPC to link the libraries used by your Pascal programs statically or dynamically.

Static linking is rarely recommendable, because it links all libraries, including e.g., libc', statically which easily makes executables very large. Dynamic linking will, of course, link those libraries statically for which no dynamic versions exist. (In particular, under DJGPP, where dynamic linking is not implemented, this option will have no effect.)

#### The PENG Built-In Tool Variable Options/Pascal/Language dialect'

Here you can select the dialect option given to GPC.

The default (GNU Pascal', i.e., no special dialect option at all) should be OK for most purposes unless you want to make sure that your program conforms to the Standard Pascal or Extended Pascal standards, or you have a program written for BP which uses a lot of "dirty tricks".

#### The PENG Built-In Tool Variable Options/Pascal/Target'

Here you can select the target platform for GPC.

The default (Native') compiles for your current system, the other choices compile for particular systems. Of course, you have to have the proper cross-compiler installed. The list of systems given here is more or less arbitrary. You can easily add or remove some of them by modifying the tools (e.g., edit the PENG config file in a text editor and search for all occurrences of the name of one system, to easily find all places that need changes).

#### The PENG Built-In Tool Variable Options/Pascal/Executable path'

Here you can select the directory in which GPC will store the executable created.

#### The PENG Built-In Tool Variable Options/Pascal/Debug unit destination path'

Here you can select the directory in which GPC will store the compiled units and modules (.o', .gpi' and .gpm' files) when compiling a debug version (see section The PENG Built-In Tool Variable Options/Pascal/Code generation') with a native compiler (see section The PENG Built-In Tool Variable Options/Pascal/Target'). When compiling with a cross-compiler, the name of the target platform will be appended to this directory automatically. The directory will be created if necessary.

You can specify a different directory for compilations for release (see section The PENG Built-In Tool Variable Options/Pascal/Release unit destination path') so you can have the same units compiled, say, with and without optimization, and GPC will always use the right ones.

#### The PENG Built-In Tool Variable Options/Pascal/Release unit destination path'

Here you can select the directory in which GPC will store the compiled units and modules (.o', .gpi' and .gpm' files) when compiling a release version (see section The PENG Built-In Tool Variable Options/Pascal/Code generation') with a native compiler (see section The PENG Built-In Tool Variable Options/Pascal/Target'). When compiling with a cross-compiler, the name of the target platform will be appended to this directory automatically. The directory will be created if necessary.

You can specify a different directory for compilations for debugging (see section The PENG Built-In Tool Variable Options/Pascal/Debug unit destination path') so you can have the same units compiled, say, with and without optimization, and GPC will always use the right ones.

#### The PENG Built-In Tool Variable Options/Pascal/Unit path'

Here you can specify a list of directories, spearated by :' (;' under Dos), where GPC will search for units used.

#### The PENG Built-In Tool Variable Options/Pascal/Object path'

Here you can specify a list of directories, spearated by :' (;' under Dos), where GPC will search for object files and files in other languages (e.g., C or assembler) used.

#### The PENG Built-In Tool Variable Options/Pascal/Include path'

Here you can specify a list of directories, spearated by :' (;' under Dos), where GPC will search for include files used.

#### The PENG Built-In Tool Variable Options/Pascal/Library path'

Here you can specify a list of directories, spearated by :' (;' under Dos), where GPC will search for libraries used.

#### The PENG Built-In Tool Variable Options/Pascal/Debug options'

Here you can specify any additional command line options which will be given to GPC for debug compilations (see section The PENG Built-In Tool Variable Options/Pascal/Code generation'), such as a define -DDEBUG' which can be tested in a program with {\$ifdef DEBUG}' to determine whether to do some additional sanity checks.

#### The PENG Built-In Tool Variable Options/Pascal/Release options'

Here you can specify any additional command line options which will be given to GPC for release compilations (see section The PENG Built-In Tool Variable Options/Pascal/Code generation'), such as optimization options (e.g., -O3').

#### The PENG Built-In Tool Variable Options/Pascal/General options'

Here you can specify command line options which will be given to GPC for any compilation. The --automake' option will be given automatically, but any other options you want every compilation to use, such as --executable-file-name' or some warning options, can be specified here.

#### The PENG Built-In Tool Variable Options/Pascal/Use GP'

Here you can specify if you want to call GPC directly with the --automake' and --executable-file-name' options or the GP make utility. GP will replace GPC's --automake' feature soon, and then, this option will disappear from the PENG tools.

#### The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Executable path'

These are actually several menu entries which have the respective target system name (see section The PENG Built-In Tool Variable Options/Pascal/Target') appended to them.

Here you can specify the directory where executables cross-compiled by GPC for the respective target will be stored rather than in the regular executable path (see section The PENG Built-In Tool Variable Options/Pascal/Executable path').

#### The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Extra options'

These are actually several menu entries which have the respective target system name (see section The PENG Built-In Tool Variable Options/Pascal/Target') appended to them.

Here you can specify command-line options which will be given to GPC for cross-compilations (see section The PENG Built-In Tool Variable Options/Pascal/Code generation') for the respective target system, in addition to the regular options (see section The PENG Built-In Tool Variable Options/Pascal/General options').

#### The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Extra debug options'

These are actually several menu entries which have the respective target system name (see section The PENG Built-In Tool Variable Options/Pascal/Target') appended to them.

Here you can specify command-line options which will be given to GPC for debugging cross-compilations (see section The PENG Built-In Tool Variable Options/Pascal/Code generation') for the respective target system, in addition to the regular debug options (see section The PENG Built-In Tool Variable Options/Pascal/Debug options').

#### The PENG Built-In Tool Variable Options/Pascal/Options for cross compilers/Extra release options'

These are actually several menu entries which have the respective target system name (see section The PENG Built-In Tool Variable Options/Pascal/Target') appended to them.

Here you can specify command-line options which will be given to GPC for release cross-compilations (see section The PENG Built-In Tool Variable Options/Pascal/Code generation') for the respective target system, in addition to the regular release options (see section The PENG Built-In Tool Variable Options/Pascal/Release options').

#### The PENG Built-In Tool Variable Options/C/General options'

Here you can specify command line options which will be given to GCC for any compilation.

The GCC options should probably be more elaborate, like the Pascal options, but perhaps some C programmer likes to do that...

### The Menu Entry Window/Redraw screen'

Redraws PENG's screen. Useful if it got corrputed, e.g., by some console messages.

Opens the message window, in which messages created by tools (see section Tools) are shown, see the m' and following tool output redirections (see section Redirecting The Output Of Shell Tools).

Note that tools will open the message window automatically when necessary, but you can use this function as a comfortable way to bring the message window back to the top, or even to re-open it after you have closed it. The messages in the message window will not be lost when you close it, until another tool redirects its output to the message window.

Brings the lowest window to the top.

### The Menu Entry Window/Previous'

Puts the topmost window to the bottom.

Closes the current window. This is equivalent to File/Close' (see section The Menu Entry File/Close') to suit different preferences. :-)

### The Menu Entry Window/List'

Shows you a list of all currently open windows. You can select one of them to bring it to the top, and you can close windows with DEL.

### The Menu Entry Window/Last windows'

Lets you select a window from a list of windows that were recently closed.

### The Menu Entry Window/Hotlist'

Lets you select a window from the Hotlist (see section The Menu Entry Window/Add to Hotlist').

### The Menu Entry Window/Add to Hotlist'

This allows you to keep a list of commonly opened files or other editors to be opened easily. After opening an editor in the usual way, you can add it to the Hotlist, and after that, open it easily from the Hotlist. You can remove items from the Hotlist with DEL, as usual. When you add an entry that's already in the Hotlist, it will become the first entry of the Hotlist. This can be used to reorder the Hotlist.

Besides the items listed here, this menu may contain additional tools and variables defined with an /Help' prefix (see section Tools).

Opens the PENG documentation in an info reader. You're reading it right now. :-)

This function is context-sensitive, i.e., it will try to find the info node most relevant to your current action. Note that some kinds of actions (e.g., menu selections and input boxes) get aborted by this function. This is because it opens an info reader as a normal window so you can use it in the usual way, e.g., follow links in it.

About the keys that work in an info reader, see section Keys Used In The Info Reader.

### The Menu Entry Help/PENG Help'

Opens the top node of the PENG documentation in an info reader, from which you can read the whole PENG documentation by going through the info menus.

About the keys that work in an info reader, see section Keys Used In The Info Reader.

Opens the top of the info tree, provided you got a dir' or dir.info' file installed in the info path.

This is the node (dir)' in the info node format (see section The Format Of An Info Node Description).

### The Menu Entry Help/Info node'

Lets you enter an info node to be opened in an info reader (see section The Format Of An Info Node Description).

### The Menu Entry Help/Info file'

Opens the info file whose name you enter in an info reader. This is the same as entering the file name in parentheses in Help/Info node' (see section The Menu Entry Help/Info node'), see section The Format Of An Info Node Description.

### The Format Of An Info Node Description

An info node in PENG can be specified in the same format as accepted by other info readers (see section Adding a new node to Info' in the info manual).

The general format is (filename) nodename'.

filename, together with the parentheses, may be omitted. In this case, the node is assumed to be in the current file (or the PENG documentation when opening a new info reader).

If filename is given, is it searched for in the directories given in the INFOPATH' (or INFODIR' if INFOPATH' is not set) environment variable, unless it contains an absolute path or a path starting with ./'.

The file extension .info' is appended automatically if necessary. As an extension, PENG also recognizes the extension .inf' which may have been used for info files created on filename-challenged operating systems.

Info nodes compressed by compress(1)', gzip(1)' or bzip2(1)' are uncompressed automatically, provided the uncompressor (uncompress', gunzip' or bunzip2', respectively) can be found in your path. File names are case-sensitive on most systems, but PENG will also try the lower case version of an info file name that contains any capital letters.

nodename specifies the name of the node in the file. Node names are sensitive to special characters including embedded whitespace, but case-insensitive.

nodename can be omitted. Then it defaults to Top' which is by convention the main node in most info files.

If nodename is *', it refers to the whole file given by filename.

PENG's info reader contains a caching mechanism which will keep info files in memory even for some time after they have been closed. This is done to reduce the time needed to go back to the info file, e.g., with Help/Last help' (see section The Menu Entry Help/Last help') -- especially for compressed info files which will not have to be uncompressed again.

PENG will reload info files when they change. It will check for changes at the same times that text editors do, see Options/Editor2/Always check file time' (see section The Menu Entry Options/Editor2/Always check file time'), and whenever you go to a new info node.

### The Menu Entry Help/Last help'

This function depends on the info readers currently open:

If the foreground window contains an info reader, it goes back to the previous info node. Multiple back-stepping in a row is possible (up to a maximum of currently 32 nodes).

If the foreground window does not contain an info reader, it brings the topmost info reader to the top.

If no info reader is opened, it re-opens the last info reader closed.

Finally, if no info reader has ever been open in this PENG session, it opens the top node of the PENG documentation in an info reader (see section The Menu Entry Help/PENG Help').

### The Menu Entry Help/ASCII table'

Opens a read-only editor which contains a table of the character set used on the system (usually ASCII with extensions, e.g., ISO-8859-1). In particular, you can copy and paste special characters from this table which you may not be able to enter on your keyboard.

### The Menu Entry Help/About'

Shows the About box of PENG with copyright notice. There are no hidden 3D adventures in it. ;-)

### The PENG Built-In Tool Help/Syntax help'

This function tries to find help on the current word in the current editor.

Depending on the language (as determined by the file extension), it uses the following information sources (where foo stands for the current word):

Pascal:
It tries to find the info node (gpc) foo', i.e., the topic foo in the GPC documentation (see section GNU Pascal' in the GNU Pascal manual). If this fails, it tries to find a man page for foo.
C:
It searches for foo in the function index of the libc documentation (see section Function Index' in the libc manual), and follows the link if found. If this fails, it tries to find a man page for foo.
Texinfo:
It searches for foo in the command and variable index of the Texinfo documentation (see section Command and Variable Index' in the Texinfo manual), and follows the link if found.
LaTeX:
It searches for foo in the command index of the LaTeX documentation (see section `Command Index' in the LaTeX manual), and follows the link if found.
Other files:
It tries to find a man page for foo.