This is the documentation for SET's Editor.

Copyright (C) 1996, 1997, 1998 Salvador Eduardo Tropea

This documentation may be freely distributed, provided this copyright notice
is left intact on all copies.

EDITOR
******

  Table of Contents
  *****************

1 Introduction
  1.1 Copying
  1.2 What is SETs Editor?
  1.3 About the Author
2 Available commands and keys assignments
  2.1 Conventions
  2.2 Cursor movement
  2.3 Insert and Delete
  2.4 Blocks
  2.4.1 Block modes
  2.4.2 Selecting with the mouse or Shift
  2.4.2.1 Using the mouse
  2.4.2.2 Using the Shift key
  2.4.3 Indentation
  2.4.4 Rectangular Blocks
  2.5 Miscellaneous keyboard commands
3 Keyboard configuration
  3.1 How to configure the keyboard
  3.1.1 Assigning a sequence of commands
  3.1.2 Assigning a sLisp macro
  3.2 Alt key configuration
  3.3 Restoring the default keyboard assignments
  3.4 Consulting scan codes
4 Pull-down menues
  4.1 File
  4.1.1 Open
  4.1.2 New
  4.1.3 Save
  4.1.4 Save as
  4.1.5 Save as UNIX
  4.1.6 Save with same time
  4.1.7 Print
  4.1.8 Print Setup
  4.1.9 Change directory
  4.1.10 Shell
  4.1.11 Quit
  4.1.12 Exit
  4.2 Edit
  4.2.1 Undo
  4.2.2 Redo
  4.2.3 Cut
  4.2.4 Copy
  4.2.5 Paste
  4.2.6 Show clipboard
  4.2.7 Clear
  4.2.8 Set Local
  4.2.9 Set Global
  4.2.10 Expand all tabs
  4.2.11 Compact text
  4.2.12 Copy to Windows Clipoard
  4.2.13 Paste from Windows Clipboard
  4.3 Search
  4.3.1 Find
  4.3.1.1 Regular Expressions Options
  4.3.2 Replace
  4.3.3 Search again
  4.3.4 Jump to function
  4.3.5 Go to line
  4.4 Macro
  4.4.1 Record (Macro)
  4.4.2 Stop (Macro)
  4.4.3 Play (Macro)
  4.4.4 Choose (Macro)
  4.4.5 Repeat (Macro)
  4.4.6 Generate Code
  4.5 Rectangle
  4.5.1 Start (Rectangle)
  4.5.2 End (Rectangle)
  4.5.3 Hide (Rectangle)
  4.5.4 Copy (Rectangle)
  4.5.5 Paste (Rectangle)
  4.5.6 Cut (Rectangle)
  4.5.7 Clear (Rectangle)
  4.5.8 Move (Rectangle)
  4.6 Windows
  4.6.1 Size/move
  4.6.2 Zoom
  4.6.3 Tile
  4.6.4 Cascade
  4.6.5 Next (Window)
  4.6.6 Previous (Window)
  4.6.7 Close
  4.6.8 List
  4.6.9 User Screen
  4.7 Tool&Ops
  4.7.1 Options
  4.7.1.1 Colors
  4.7.1.2 Color Palette
  4.7.1.3 Editor General
  4.7.1.4 SDG Options
  4.7.1.5 Run program (which one)
  4.7.1.6 Keyboard
  4.7.1.7 Key assignment
  4.7.1.8 Setup Alt keys
  4.7.1.9 Key pad behavior
  4.7.1.10 Back to defaults
  4.7.1.11 Consult scan codes
  4.7.1.12 Screen Options
  4.7.2 Calculator (command/menu)
  4.7.3 SDG
  4.7.4 Run program
  4.7.5 Grep
  4.7.6 HTML Accents
  4.7.7 Profile Editor
  4.8 Project
  4.8.1 Open (Project)
  4.8.2 Close (Project)
  4.9 Help
  4.9.1 InfView
  4.9.2 Another InfView
  4.9.3 Tip of the day
  4.9.4 Syntax help
  4.9.4.1 Options (Syntax help)
  4.9.4.2 Files to search (Syntax help)
  4.9.4.3 Search (Syntax help)
5 Editing Modes
  5.1 Overwrite
  5.2 Autoindent
  5.3 Real Tabs
  5.4 Persistent Blocks
  5.5 Intelligent C indent
  5.5.1 Can you explain to me more about the behavior of this mode?
  5.5.2 Do you have more examples?
  5.6 Column cursor
  5.7 Row cursor
  5.8 Match pair highlight
  5.9 Transparent Blocks
  5.10 Optimal Fill
  5.11 Wrap Words
  5.12 Do not move the cursor on Paste
  5.13 Scroll Lock centers
  5.14 See Tabs
  5.15 Don't move inside tabs
  5.16 Syntax Highlight
6 Syntax Highlight File
  6.1 AllowedInsideNames
  6.2 CanStartAName
  6.3 Case
  6.4 CloseComment1
  6.5 EOLCInFirstCol
  6.6 EOLComment1
  6.7 Escape
  6.8 Files
  6.9 HexMarker
  6.10 Keywords
  6.11 Name
  6.12 NoCheckNumbers
  6.13 OpenComment1
  6.14 PMacros
  6.15 Preprocessor
  6.16 String1
  6.17 String2
  6.18 Symbols1
  6.19 Symbols2
  6.20 UseInternal
7 Pseudo Macros
  7.1 Please enlighten me - what is that?
  7.2 How can I customize that?
8 sLisp macros
  8.1 How to write a sLisp macro
  8.2 Running programs with a macro
  8.3 Editor specific commands
  8.3.1 defmacro
  8.3.2 GetSelection
  8.3.3 InsertText
  8.3.4 SendCommands
  8.3.5 WichEditor
  8.4 General sLisp commands
  8.4.1 eval
  8.4.2 gstr
  8.4.3 left
  8.4.4 Operator +
  8.4.5 right
  8.4.6 setv
  8.4.7 sstr
  8.4.8 substr
9 Calculator
10 How to contact me
  10.1 Bugs
11 Miscellaneous
  11.1 Clipboard
  11.2 Time and date modifiers formats
  11.3 Regular Expressions
  11.4 Desktop Files
  11.5 Text mode attributes
  11.6 File Open
12 Index
13 Index of key commands

1 Introduction
**************

   This document describes the use of the SET's editor; this editor was
designed for programmers and to be used alone or inside of the RHIDE.

   This documentation may be freely distributed with the editor or the RHIDE
package or any part thereof, provided this copyright notice is left intact on
all copies.

   Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission notice
identical to this one.

  People who helped me develop the editor:

   * ROBERT HHNE <Robert.Hoehne@Mathematik.TU-Chemnitz.DE>
     (with some base routines, a lot of patches and reports)

   * MOLNAR LASZLO <molnarl@cdata.tvnet.hu>
     (with the calculator, tests and a lot of ideas)

   * MAREK HABERSACK <grendel@ananke.amu.edu.pl>
     (with tests and a lot of ideas)

   * FRANK DONAHOE <fdonahoe@wilkes1.wilkes.edu>
     (with a lot of corrections to this text)

  The editor is distributed under the GPL license. Please read the files
included in the source distribution for more information.

  This editor is included in the Robert Hhne's RHIDE as a replacement for the
original Turbo Vision's editor class.

1.1 Copying
===========

  The editor is distributed under the GPL license:

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

  A copy of the license should be in the package, if not please tell me.

1.2 What is SETs Editor?
========================

  SET's editor is an editor designed to be used by programmers; the main target
of the editor is C and C++ code but Pascal and Clipper are supported too.

  The editor was designed to be very similar to the DOS standard editors for C,
especially to Borland's IDE editor. The editor supports a lot of WordStar
style commands plus some CUA commands, so if you have used any editor that
uses these kinds of commands you'll find my editor very familiar. On the
other hand if you have never used a DOS editor, especially if you use VI on
UNIX machines you'll feel lost. You can configure the keyboard.   (Section
3.1).

1.3 About the Author
====================

The editor was created by Salvador Eduardo Tropea with some code contributed
by Robert Hhne

     E-Mail: Salvador Eduardo Tropea <salvador@inti.gov.ar>
     
     Telephone: (+5411) 4759-0013
     Postal Address:
     Salvador E. Tropea
     Curapalige 2124
     (1678) Caseros - 3 de Febrero
     Prov: Buenos Aires
     Argentina

2 Available commands and keys assignments
*****************************************

  In this section I will explain the features of the editor and the default
configuration for the keyboard. If you want to change some assignment of a
key consult "configure the keyboard".   (Section 3.1).

  Read the conventions topic first to understand my way of indicating
keystrokes.

  In the description of each command I'll include the internal name used by the
editor because this name is needed to configure the keyboard.

2.1 Conventions
===============

  I'll use some conventions when talking about the keystrokes needed to trigger
some command. So here is what I use:

  The key named <Ctrl> or Control is represented as `^'; this key doesn't have
any effect used alone inside of the editor so the `^' symbol will be used only
in conjunction with the name of some key indicating that you must press the
two keys at the same time. For example, `^A' is <Ctrl> and <A> at the same
time.  When I say "at the same time" that means: press `<Ctrl>', hold it, and
press the other key; that's the reason to put <A> after <Ctrl>.

  To indicate a sequence of keystrokes I'll use a dash to separate the keys. For
example, `^K-B' is <Ctrl> and <K> at the same time, and then press <B>, of
course release `^K' first.

  To indicate keys pressed at the same time other than `^x' I'll use a plus.
For example, `Shift+^Insert' is the three keys at the same time!

  I don't think that you are stupid; the editor is written for programmers, but
I wanted to make that clear to avoid problems ;-).

2.2 Cursor movement
===================

   * Character left
     - Command: cmcCharLeft
     - Key: Left arrow
     - Alternate: ^S

   * Character right
     - Command: cmcCharRight
     - Key: Right arrow
     - Alternate: ^D

   * Word left
     - Command: cmcWordLeft
     - Key: ^Left arrow
     - Alternate: ^A

   * Word right
     - Command: cmcWordRight
     - Key: ^Right arrow
     - Alternate: ^F

   * Line up
     - Command: cmcLineUp
     - Key: Up arrow
     - Alternate: ^E

   * Line down
     - Command: cmcLineDown
     - Key: Down arrow
     - Alternate: ^X

   * Scroll the screen one line up
     - Command: cmcScrollUp
     - Key: ^W
     - Alternate:

   * Scroll the screen one line down
     - Command: cmcScrollDown
     - Key: ^Z
     - Alternate:

   * Page up
     - Command: cmcPageUp
     - Key: PgUp
     - Alternate: ^R

   * Page down
     - Command: cmcPageDown
     - Key: PgDn
     - Alternate: ^C

   * Beginning of line
     - Command: cmcLineStart
     - Key: Home
     - Alternate: ^Q-S

   * End of line
     - Command: cmcLineEnd
     - Key: End
     - Alternate: ^Q-D

   * Top of window
     - Command: cmcFirstLineInScreen
     - Key: ^Q-E
     - Alternate: ^Home

   * Bottom of window
     - Command: cmcLastLineInScreen
     - Key: ^Q-X
     - Alternate: ^End

   * Top of file
     - Command: cmcTextStart
     - Key: ^Q-R
     - Alternate: ^PgUp

   * Bottom of file
     - Command: cmcTextEnd
     - Key: ^Q-C
     - Alternate: ^PgDn

2.3 Insert and Delete
=====================

   * Delete the character under cursor
     - Command: cmcDelChar
     - Key: Del
     - Alternate: ^G

   * Delete character to left
     - Command: cmcBackSpace
     - Key: Backspace
     - Alternate: ^H

   * Delete line
     - Command: cmcDelLine
     - Key: ^Y
     - Alternate:

   * Delete to end of line
     - Command: cmcDelEnd
     - Key: ^Q-Y
     - Alternate: Shift+^Y

   * Delete to start of line
     - Command: cmcDelStart
     - Key: ^Q-H
     - Alternate:

   * Delete word at left
     - Command: cmcDelWord
     - Key: ^T
     - Alternate:

   * Delete word at right
     - Command: cmcDelPrevWord
     - Key: ^Backspace
     - Alternate:

   * Insert line
     - Command: cmcNewLine
     - Key: Enter
     - Alternate: ^N

   * Insert mode on/off
     - Command: cmcInsMode
     - Key: Ins
     - Alternate: ^V

  When you are in insert mode all the typed characters are inserted in the
text, but when the insert mode is off the typed characters replace the old
text. The editor starts with insert mode on. You can quickly know the mode by
the cursor shape. When the insert mode is on, the cursor is only a line, but
when it is off, the cursor is block shaped.

2.4 Blocks
==========

  A block is a selected portion of the text. You can copy, delete, etc. blocks
of text. The associated commands are:

   * Move to beginning of block
     - Command: cmcGoBeginBlock
     - Key: ^Q-B
     - Alternate:

   * Move to end of block
     - Command: cmcGoEndBlock
     - Key: ^Q-K
     - Alternate:

   * Set beginning of block
     - Command: cmcStartSelect
     - Key: ^K-B
     - Alternate:

   * Set end of block
     - Command: cmcEndSelect
     - Key: ^K-K
     - Alternate:

   * Hide/Show block
     - Command: cmcHideSelect
     - Key: ^K-H
     - Alternate:

   * Mark line
     - Command: cmcMarkLine
     - Key: ^K-L
     - Alternate:

   * Mark word
     - Command: cmcMarkWord
     - Key: ^K-T
     - Alternate:

   * Delete block and copy it to the Clipboard
     - Command: cmcCut
     - Key: ^K-Y
     - Alternate: Shift+Del

   * Copy the selected block
     - Command: cmcCopyBlock
     - Key: ^K-C
     - Alternate:

   * Move block
     - Command: cmcMoveBlock
     - Key: ^K+V
     - Alternate:

   * Copy to Clipboard
     - Command: cmcCopy
     - Key: ^Ins
     - Alternate:

   * Delete block
     - Command: cmcClear
     - Key: ^Del
     - Alternate:

   * Paste from Clipboard
     - Command: cmcPaste
     - Key: Shift+Ins
     - Alternate:

   * Read block from disk
     - Command: cmcReadBlock
     - Key: ^K-R
     - Alternate: Shift+^R

   * Write block to disk
     - Command: cmcWriteBlock
     - Key: ^K-W
     - Alternate: Shift+^W

   * Replace the block by the Clipboard block
     - Command: cmcReplaceSelect
     - Key: Shift+^Ins
     - Alternate:

   * Convert to Uppercase
     - Command: cmcToUpper
     - Key: ^K-M
     - Alternate:

   * Convert to Lowercase
     - Command: cmcToLower
     - Key: ^K-O
     - Alternate:

   * Report the length of the block
     - Command: cmcSelLength
     - Key: ^Q-L
     - Alternate:

2.4.1 Block modes
-----------------

  There are two block modes. One is the mode that the old editor of RHIDE used.
This mode is used in CUA programs. The other is called Persistent Blocks.

  In the normal mode each time you select a block and then insert anything in
it (with `cmcPaste' or by typing anything) the selected block is deleted and
is replaced by the new text.

  In persistent blocks the selection is not replaced and is not lost when you
move the cursor. From this comes the name "Persistent." In this mode you can
use `cmcMoveBlock' and `cmcCopyBlock' without using the Clipboard. In
addition you can apply indentations to the block ( (Section 2.4.3)), search
only inside it, etc. That's what makes this mode much more powerful than the
former. If you really like to replace the selected text by the selection of
the Clipboard, that's the default behaviour of the first mode. You can use
the `cmcReplaceSelect' command to achieve the same in the Persistent Blocks
mode.

2.4.2 Selecting with the mouse or Shift
---------------------------------------

  The described commands for selecting a block, `cmcStartSelect' and
`cmcEndSelect', are good but not so quick. There are other ways to do this.

2.4.2.1 Using the mouse
.......................

  Using the mouse you need only point to the start place, hold the left button
pressed and move the mouse to the end point of your block.

  To select a word with the mouse just double click on it.

2.4.2.2 Using the Shift key
...........................

  Using the <Shift> key you only need to move the cursor to the start point,
hold `<Shift>' pressed and move the cursor to the end point with any of the
available cursor commands.  (Section 2.2).

2.4.3 Indentation
-----------------

  You can indent or unindent a block of text using various commands, but you
must keep in mind that for now the editor is limited in the following:
(Section 5.3) If you are using tabs to indent your text, don't mix the tabs
with spaces and, if you are using spaces to indent, don't mix them with real
tabs.

   * Indent block one position adding a space
     - Command: cmcIndentBlkOne
     - Key: ^K-I
     - Alternate: Shift+^I

   * Unindent block one character - not an x position
     - Command: cmcUnIndentBlkOne
     - Key: ^K-U
     - Alternate: Shift+^U

   * Indent block
     - Command: cmcIndentBlk
     - Key: ^K-Tab
     - Alternate:

   * Unindent block
     - Command: cmcUnIndentBlk
     - Key: ^K-Shift+Tab
     - Alternate:

`cmcUnIndentBlkOne' unindents deleting one char at the start of the line so
if the line is indented with tabs the line will retract one tab.

`cmcIndentBlk' acts according to the mode. If you are using tabs, the editor
will put one tab beginning each line. If you aren't using tabs the editor
will operate the Tab command on the first line and then will use this amount
of indentation on the entire block.  (Section 5.3).

`cmcUnIndentBlk' acts according to the mode too.  (Section 5.3) mode. This is
just like `cmcUnIndentBlkOne' deleting one tab but if you don't use tabs the
editor uses Backspace on the first used column of the first line of the block
and unindents by the resulting amount all the block.

The following commands aren't applied to the whole block, they apply only to
the line where the cursor is positioned.

   * Smart Indent block
     - Command: cmcSmartIndent
     - Key: ^Tab

   * Smart Unindent block
     - Command: cmcSmartUnIndent
     - Key: Shift+^Tab

`cmcSmartIndent' and `cmcSmartUnIndent' indents taking as reference the { }
pair where the cursor is, for example:

       {
     line1
          line2
        line3
       }

After indenting line1 with `cmcSmartIndent' and line2 with `cmcSmartUnIndent'
you get:

       {
        line1
        line2
        line3
       }

The indentation is made with spaces and you must put the cursor in the first
letter of the line, the l in this example.

2.4.4 Rectangular Blocks
------------------------

  The editor includes a mode where you can select a rectangular portion of the
text and copy, cut, clear, paste, move, etc. this region.  This tool is very
useful for modifications on columns.

  Attention! The selected area is based on the X,Y coordinates. For this reason
if you insert lines before the bottom of the rectangle the area won't be
moved. I don't plan to move the area by now because that takes some CPU and I
think that this selection is made just before using it. So don't report that
like a bug. That is the way it works!

   * Set beginning of block
     - Command: cmcSelRectStart
     - Key: ^K-Shift+B

   * Set end of block
     - Command: cmcSelRectEnd
     - Key: ^K-Shift+K

   * Hide/Show block
     - Command: cmcSelRectHide
     - Key: ^K-Shift+H

   * Delete block and copy it to an special Clipboard
     - Command: cmcSelRectCut
     - Key: ^K-ShiftT

   * Move block
     - Command: cmcSelRectMove
     - Key: ^K+Shift+V

   * Copy to special Clipboard
     - Command: cmcSelRectCopy
     - Key: ^K-Shift+C

   * Delete block
     - Command: cmcSelRectDel
     - Key: ^K-Shift+L

   * Paste from special Clipboard
     - Command: cmcSelRectPaste
     - Key: ^K-Shift+P

2.5 Miscellaneous keyboard commands
===================================

   * Autoindent mode on/off
     - Command: cmcIndentMode
     - Key: ^O

   * Find place marker
     - Command: cmcGotoMarkn
     - Key: ^Q n*

   * Set marker
     - Command: cmcPutMarkn
     - Key: ^K n*

   * Search the open curly bracket where the cursor is
     - Command: cmcSearchStart
     - Key: ^[

   * Search the close curly bracket where the cursor is
     - Command: cmcSearchEnd
     - Key: ^]

   * Search the ( where the cursor is
     - Command: cmcSearchOpPar
     - Key: Shift+^9

   * Search the ) where the cursor is
     - Command: cmcSearchClPar
     - Key: Shift+^0

   * Search the [ where the cursor is
     - Command: cmcSearchOpCor
     - Key: Shift+^[

   * Search the ] where the cursor is
     - Command: cmcSearchClCor
     - Key: Shift+^]

   * Search the complementary pair
     - Command: cmcSearchComplement
     - Key: ^Q ESC

   * Undo
     - Command: cmcUndo
     - Key: Alt+Backspace

   * PMacro's Trigger
     - Command: cmcExpandCode
     - Key: ^Space

   * Goto Line
     - Command: cmcGotoEditorLine
     - Key: ^J

   * Set the options of the current window (Not in RHIDE)
     - Command: cmcSetLocalOptions
     - Key: Alt+L

   * Set the default options (Not in RHIDE)
     - Command: cmcSetGlobalOptions
     - Key: Alt+G

   * Convert all tabs in spaces
     - Command: cmcExpandAllTabs
     - Key: From menu

   * Compact the text using tabs
     - Command: cmcCompactBuffer
     - Key: From menu

   * Start recording a macro
     - Command: cmcRecordMacro
     - Key: Shift+F10

   * Stop recording a macro
     - Command: cmcStopMacro
     - Key: Alt+F10

   * Play a macro
     - Command: cmcPlayMacro
     - Key: ^F10

3 Keyboard configuration
************************

  The editor can be configured to trigger one or more commands pressing one key
or any arbitrary sequence of keys. Unlike old versions now the sequence of
keys isn't limited.  Additionally you no longer need to configure the editor
for non-US keyboards.

  If you used an old version of the editor you'll note that now the keyboard
configuration is much more easy and much more powerful.

3.1 How to configure the keyboard
=================================

  In the editor these options are located under the menu option called
Tool&Ops, submenu Options, submenu Keyboard, submenu Key assignment; yes is a
little deep in the menu.

  After selecting this option you'll get a window with the keyboard
assignments. This window shows entries of the type `Key sequence -> Commands
sequence'. You can delete an assignment just selecting it and choosing the
`Delete' button.

  The list is sorted by a internal criteria. The keys with <Shift> have an `S'
before, for <Ctrl> you'll see a `C' and for <Alt> an `A'. The editor can
distinguish the left and right <Alt> keys; if you enable it the right <Alt>
will be represented by an `a'.  (Section 3.2).

  To add a new assignment press the `Add' button. A window called Sequence of
keys will appear. This window is used to choose the sequence of keys that
will trigger an action in the editor. The sequence can be as large as you
want, so if you want to assign a sequence like this: `^A-Shift+^Insert-Alt+Z'
you can, I doubt you really want to use such a complex combination but the
editor is flexible enough.

  To add a new key to the sequence use the `Add' button, to delete a key use the
`Delete' button. The `Add' button ever adds a key at the end of the list; to
insert a key in the sequence use the `Insert' button button, it will insert
the key before the selected key. Finally select if you want to assign a
sequence of commands or a sLisp macro to this key sequence.  (Chapter 8).

3.1.1 Assigning a sequence of commands
--------------------------------------

  A window called Commands will appear. The mechanism to add, insert and delete
commands is the same used in for a keyboard sequence. This time when you add
or insert a new command to the sequence a window offering all the available
commands will pop-up.  The meaning of each command can be found in the
indeces of this help.

  To make a selection with the commands, like when holding <Shift>, you must use
the `SelectOn' and `SelectOff' commands. As an example you can see the
assignments for the `Shift+Left' or `Shift+Right' keys.

3.1.2 Assigning a sLisp macro
-----------------------------

  A window called Macros will appear. This window shows all the macros defined
in the `macros.slp' file.  (Chapter 8).

  The main advantage of using macros instead of command sequence is that macros
can insert text in your code.

3.2 Alt key configuration
=========================

  The editor can distinguish the left and right <Alt> keys. As old versions
didn't allowed that and as different users use different <Alt> keys the
editor doesn't make any difference as default.

  The Setup Alt keys menu option (under Tool&Ops | Options | Keyboard) allows to
enable it. Three options are offered:

   * Left Alt
     - Meaning: The menues are tiggered by the left Alt and you can use the
     right Alt for commands

   * Right Alt
     - Meaning: Right Alt is used for menues, in fact both are inverted

   * Both Alt
     - Meaning: Both keys can be used for menues

3.3 Restoring the default keyboard assignments
==============================================

  If you need to restore the original keyboard assignment because you did
something very wrong you can use this option for that. The option is located
under Tool&Ops | Options | Keyboard.

3.4 Consulting scan codes
=========================

  If you need to know the scan code of a key for your program you don't need to
use a table or another program. The editor have an option for it under
Tool&Ops | Options | Keyboard.

4 Pull-down menues
******************

The menues are configurable; for this reason the following structure is just
one of possible arrangements.

If you need or want to configure the keyboard look in the `menubind.smn'
file, the format is self explanatory and the editor supports syntax highlight
for these files.

4.1 File
========

This menu contains the files operations (save, load, print, etc.) and the
program exit functions.

4.1.1 Open
----------

This option brings the file open dialog ( (Section 11.6)). From this dialog
you can select a file to load and edit.

Choose the Open button or select a file with `<Enter>' to open the file. Use
`<Esc>' to abort.

If the file is read-only a dialog will ask you if you want to make the file
writable, in this case the editor will try to change the file attributes. Not
always is possible to change these attributes, as an example, the CDs are
read-only and you can't change it.

Name of the command: cmeOpen.
Assigned key: `F3'

4.1.2 New
---------

Use this option to create a new and empty editor window. The window have
Untitled as title.

An alternative way to do it is just using the Open option and give a new name
instead of selecting an existing file.  (Section 4.1.1). The advantage of this
methode is that the new window have a right title instead of Untitled.

Name of the command: cmeNew.

4.1.3 Save
----------

This option saves the contents of the current window. Only the contents of
this window are saved; not the rest. Additionally it only saves if the window
was modified.

If the window have Untitled as title this command acts like  (Section 4.1.4).

Name of the command: cmcSave.
Assigned key: `F2'

4.1.4 Save as
-------------

This option allows to save the contents of the current window specifying a
new name for the file. For this purpose the file open dialog is used (
(Section 11.6)).

If the file allready exists a dialog will pop-up asking for overwrite
confirmation.

The title of the window is changed to reflect the new file name.

Name of the command: cmcSaveAs.

4.1.5 Save as UNIX
------------------

This option is very similar to the Save as option ( (Section 4.1.4)). The
only difference is that the editor will use the ASCII 10 as line end instead
of the 13,10 DOS sequence. That's very usefull when you need to compile the
file under UNIX or you just want to save some bytes on your disk.

Additionally there are an option to save UNIX files as UNIX files without
converting it to DOS style. Tool&Ops|Options|Editor General (Section 4.7.1.3).

Name of the command: cmcSaveAsUNIX.

4.1.6 Save with same time
-------------------------

This option is very similar to the Save option ( (Section 4.1.3)). The only
difference is that the editor will let the creation time unmodified. This
option is very usefull to modify header files avoiding the recompilation of
the whole project. A common case is when you only add constants to a header
that is included by various files but only one will use the new constants.

Name of the command: cmcSaveSameTime.

4.1.7 Print
-----------

This option prints the current editor window. Don't use this option without
configuring the printer module.  (Section 4.1.8).

This option was designed to print source files, to print plain text files or
avoid all the formating features just select the portion of text to print and
save the block (`^K-W') to a file with the name of the device where your
printer is connected. As an example to print in the DOS LPT 1 device just
write the block to the `lpt1' file.

The editor will report the number of lines processed and printed in the
message box.

Name of the command: cmePrintEditor.

4.1.8 Print Setup
-----------------

This option brings a dialog to configure the printing module. After
configuring it you can print using the Print option.  (Section 4.1.7).  If
you want to print a plain text (without formating) consult the Print option
too.

The dialog asks for the following parameters:

   * Total lines per page: The total number of lines that fits in one page
     including the footer and header lines.

   * Columns w/o margin: The number of colums that fits in the page without
     counting the desired margin.

   * Left margin: The number of columns left blank at the left side of the
     page.

   * Print line numbers: Select this option to get the line numbers printed

   * Time format: The time format specified in the C style. ( (Section 11.2)).

   * Date format: The date format specified in the C style. ( (Section 11.2)).

   * Title: used in the header.

   * Author: used in the header.

   * Output file: Specify the printer device here. For example: the DOS LPT 1
     is the lpt1 file.

   * Printer initialization: The sequence of character used to initialize the
     printer. Normally it includes a reset and a font selection.  Specify the
     values separated by commas.

   * Before heading: Setting to send before the header.

   * After heading: Setting to send after the header.

   * Before footer: Setting to send before the footer.

   * After footer: Setting to send after the footer.

Use the Ok button to confirm or the Cancel button to reject.

The Epson button fills the values with the default settings for Epson
printers (ESCP2 language). The HP button fills the values with the default
settings for Hewlett Packard ink-jet printers.

The printer module was designed by me some years ago when I needed to present
a program in my University (Universidad Tecnologica Nacional) and I wanted to
format the source code adding a header, footer, lines number, page number,
date/time of the printing, project and author. So that's what the routines
does. I know they are limited but they generate a very good listing, much
better than just printing the text wothout any formating.

Name of the command: cmeSetUpPrinter.

4.1.9 Change directory
----------------------

[DOS]

By default the editor saves new files and loads files from the directory
where you started the editor. If you need to save or load various files from
a different directory select the directory here just once. For more
information about it See File Open.

Name of the command: cmeChangeDrct.

4.1.10 Shell
------------

Calls to the default commands interpreter indicated by the COMSPEC enviroment
variable. I guess you know that typing exit you'll go back to the editor.

Name of the command: cmeDosShell.

4.1.11 Quit
-----------

This option exits the editor deleting all the back-up, desktop and project
files located in the current directory. That's usefull if you want to let the
directory clean.

When you use this option a dialog will appear asking if for confirmation, you
can avoid this dialog in the future operations using the "don't show again"
option.

Name of the command: cmeQuitDelete.
Assigned key: `Alt+Q'

4.1.12 Exit
-----------

This option just exits the program. The editor asks for saving if any of the
files under edition were modified but not saved. All the settings are stored
in the desktop file automatically.

Name of the command: cmeQuit.
Assigned key: `Alt+X'

4.2 Edit
========

This menu contains all the edition operations that have a menu shortcut.

4.2.1 Undo
----------

This option reverts the last edit operation. Upto 32 operations can be
reverted.

Name of the command: cmcUndo.
Assigned key: `Alt+BackSpace'

4.2.2 Redo
----------

This option recreats the last operation that was reverted using the Undo
option.  (Section 4.2.1).

Name of the command: cmcRedo.

4.2.3 Cut
---------

The selected text is copied to the clipboard and deleted from the text.
(Section 11.1).

Name of the command: cmcCut.
Assigned key: `Shift+Del'

4.2.4 Copy
----------

The selected text is copied to the clipboard.  (Section 11.1).

Name of the command: cmcCopy.
Assigned key: `^Ins'

4.2.5 Paste
-----------

The text that's currently selected in the clipboard is inserted at the cursor
position.  (Section 11.1).

Name of the command: cmcPaste.
Assigned key: `Shift+Ins'

4.2.6 Show clipboard
--------------------

This option shows the clipboard window.  (Section 11.1).

Name of the command: cmeShowClip.

4.2.7 Clear
-----------

Deletes the selected text. It isn't copied to the clipboard.

Name of the command: cmcClear.
Assigned key: `^Del'

4.2.8 Set Local
---------------

This option pop-ups the local configuration dialog. All the values selected
in this dialog are valid only for the current editor window.

The first group of options are related to the editing modes.   (Chapter 5).

The syntax highlight group of options allows to choose the type of highlight.
(Section 5.16).

Additionally the window allows to indicate the tab size and the column where
the wrap cuts the lines.

Name of the command: cmcSetLocalOptions.
Assigned key: `Alt+L'

4.2.9 Set Global
----------------

This option pop-ups the global configuration dialog. All the values selected
in this dialog are used as default values. If you exit the dialog using the
Ok button these values aren't applied to any of the editor windows, they just
act as default values that are copied to the new opened and created files. If
you exit the dialog using the To all button these values are applied to all
the editor windows. To set the options of just one window  (Section 4.2.8).

The options are related to the editing modes.  (Chapter 5).

Additionally the window allows to indicate the tab size and the column where
the wrap cuts the lines.

Name of the command: cmcSetGlobalOptions.
Assigned key: `Alt+G'

4.2.10 Expand all tabs
----------------------

This option converts all the tabs in spaces.  (Section 5.3).

The tabs are expanded to the current tab size, check it before using this
option.

Name of the command: cmcExpandAllTabs.
Assigned key: `'

4.2.11 Compact text
-------------------

This option converts all the possible spaces in tabs.  (Section 5.3).

Be carefull, if the tabs size is too small the editor will generate tons of
tabs, even in places where you don't want a tab.

Name of the command: cmcCompactBuffer.
Assigned key: `'

4.2.12 Copy to Windows Clipoard
-------------------------------

Copies the selected text to the Windows clipboard. Of course you must be
running under Windows ;-)). Don't trust too much in this feature, Windows
have bugs in the WinOldAp module (used to make it).

Name of the command: cmcCopyClipWin.
Assigned key: `'

4.2.13 Paste from Windows Clipboard
-----------------------------------

Pastes the Windows clipboard content into the cursor position. Of course you
must be running under Windows and have some text in the clipboard.  Don't
trust too much in this feature, Windows have bugs in the WinOldAp module
(used to make it).

Name of the command: cmcPasteClipWin.
Assigned key: `'

4.3 Search
==========

This menu contains the search and replace commands of the editor.

4.3.1 Find
----------

This command searchs a string in the current editor. The dialog contains the
following fields:

   * Text to find: The text you want to search.

   * Case sensitive: Use this option is the case of the text to search is
     important.

   * Whole words only: When this option is on the editor searchs for whole
     words. If not the text to search can be only part of a word.

   * Regular expressions: Use this option if the text to search is a regular
     expression. A description of the syntax used by regular expressions can
     be found in the libc.  (Section 11.3). Three types of regular expression
     are supported.  (Section 4.3.1.1).

   * Scope - Global: The search will be done without taking in count the
     selected text.

   * Scope - Selected text: The search will be done only inside the selected
     text.

   * Origin - From cursor: The search will start from the position of the
     cursor.

   * Origin - Entire scope: The search will be start from the beginning of
     the text.

The regular expressions search is slow and this can be noticed in large
files. Don't use it if the search can be done without it. The editor will
automatically disable the regular expressions search if the Text to find
contains only alphanumeric characters. This can be disabled  (Section
4.3.1.1).

To repeat the search use the Search again command.  (Section 4.3.3).

Name of the command: cmcFind.
Assigned key: `^Q-F'

4.3.1.1 Regular Expressions Options
...................................

This dialog is accessed from the `RegEx Ops' button in the Find or Replace
dialogs. Here you can indicate some important options about the regular
expressions:

RegEx style:

   * Basic POSIX: old style POSIX regular expressions.

   * Extended POSIX: new style POSIX regular expressions.

   * Perl Compatible: Perl like regex, using the PCRE library.

Replace text:

   * Normal text: the match is replaced by the text in the replace text area.

   * Dollar tags: the text to replace is parsed searching for `$n' tags.
     These markers are replaced by the correspondent subexpression. If you
     know Perl that's just like using the $0, $1, etc. after a search, if you
     never used Perl and know what a subexpression means just play a little
     and you'll get the idea, just use $n where n is the desired
     subexpression.

Optimize:

   * Try to use normal search: if the editor detects that the search string
     contains plain text will use a simple search even when regular
     expressions are enabled. That's about ten times faster.

   * Ever use RegEx: the editor doesn't try to be smart and ever uses what
     you selected.

For more information about regular expressions  (Section 11.3).

4.3.2 Replace
-------------

This command searchs portions of text and replaces it with another text.  The
options for the search are the same as in the Find command.   (Section
4.3.1). The replace options are:

   * New text: The text used to replace the matching text.

   * Prompt on replace: When this option is enabled the editor asks for
     confirmation before doing the replace.

   * Replace all: Use it to replace all the possible ocurrences.

To repeat the search use the Search again command.  (Section 4.3.3).

Name of the command: cmcReplace.
Assigned key: `^Q-A'

4.3.3 Search again
------------------

This option repeats the last search.

Name of the command: cmcSearchAgain.
Assigned key: `^L'

4.3.4 Jump to function
----------------------

This option pop-ups a dialog with the list of C functions in your source
file. Then you can choose one to jump in there. The functions are searched in
the source file so you don't need to compile it. As the parser uses an
heuristic it can fail, specially if your code have an unbalanced number of
curly brackets.

Name of the command: cmcJumpToFunction.
Assigned key: `Alt+F2'

4.3.5 Go to line
----------------

Allows you to indicate to what line you want to jump.

Name of the command: cmcGotoEditorLine.
Assigned key: `^J'

4.4 Macro
=========

This submenu have the options to record and replay macros.

4.4.1 Record (Macro)
--------------------

Starts recording all the operations that you make in the current editor
window.

Name of the command: cmcRecordMacro.
Assigned key: `Shift+F10'

4.4.2 Stop (Macro)
------------------

Stops the macro recording.

Name of the command: cmcStopMacro.
Assigned key: `Alt+F10'

4.4.3 Play (Macro)
------------------

Replays the saved macro. A macro saved in one window can be used in another.

Name of the command: cmcPlayMacro.
Assigned key: `^F10'

4.4.4 Choose (Macro)
--------------------

This option lists all the available sLisp macros so you can choose one to
execute.

To learn more about these macros:  (Chapter 8).

Name of the command: cmcChooseMacro.

4.4.5 Repeat (Macro)
--------------------

It re-runs the last selected macro.  (Section 4.4.4). That's usefull if the
macro isn't assigned to a key and you need to use it various times.

To learn more about these macros:  (Chapter 8).

Name of the command: cmcRepeatMacro.
Assigned key: `Shift+F3'

4.4.6 Generate Code
-------------------

This option translates the recorded macro into an sLisp macro. The generated
code is inserted at the cursor position.

To learn how to record a macro:  (Section 4.4.1).

To learn more about these macros:  (Chapter 8).

Name of the command: cmcGenCodeForMacro.

4.5 Rectangle
=============

This menu contains the rectangular block operations. As they are a little
hard to type and normally this function is ignored by the users I put it in a
very visible menu.

4.5.1 Start (Rectangle)
-----------------------

Selects the top-left corner of the rectangular area.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectStart.
Assigned key: `^K-Shift+B'

4.5.2 End (Rectangle)
---------------------

Selects the bottom-right corner of the rectangular area.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectEnd.
Assigned key: `^K-Shift+K'

4.5.3 Hide (Rectangle)
----------------------

Hides the rectangular selection.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectHide.
Assigned key: `^K-Shift+H'

4.5.4 Copy (Rectangle)
----------------------

Copies the rectangular selection into the clipboard. This clipboard isn't the
same clipboard used by the normal selections and is overwritted each time you
copy to it.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectCopy.
Assigned key: `^K-Shift+C'

4.5.5 Paste (Rectangle)
-----------------------

Inserts the contents of the rectangular clipboard at the cursor position.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectPaste.
Assigned key: `^K-Shift+P'

4.5.6 Cut (Rectangle)
---------------------

Copies the rectangular selection into the clipboard and then deletes the
selected text.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectCut.
Assigned key: `^K-Shift+T'

4.5.7 Clear (Rectangle)
-----------------------

Deletes the selected text.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectDel.
Assigned key: `^K-Shift+L'

4.5.8 Move (Rectangle)
----------------------

Moves the selected text to the cursor's position.

To learn more about rectangular blocks:  (Section 2.4.4).

Name of the command: cmcSelRectMove.
Assigned key: `^K-Shift+M'

4.6 Windows
===========

This menu contains the options to handle the windows in the editor.

4.6.1 Size/move
---------------

You can resize the windows dragging the bottom right corner of the window.
You can move the windows dragging the title line of the window.

Additionally this command allows these operations to be done without the
mouse. Once you entered in this mode the border of the window chages its
color and you can move the window using the arrow keys. To resize the window
use the arrow keys holding the <Shift>. Additionally <Home>, <End>, <PgUp>
and <PgDown> can be used to move the window to one end of the desktop. Ones
you finished you can end this mode pressing <ESC> or <ENTER>.

Name of the command: cmeResize.
Assigned key: `^F5'

4.6.2 Zoom
----------

Changes the size of the window to be as large as the whole desktop. The
second time you use this command the window is resized to your original size.
Is the equivalent of the maximize and restore options of other editors.

Name of the command: cmeZoom.
Assigned key: `F5'

4.6.3 Tile
----------

Arranges all the windows in a way that you can see all at the same time.

Name of the command: cmeTile.

4.6.4 Cascade
-------------

Arranges all the windows overlapping.

Name of the command: cmeCascade.

4.6.5 Next (Window)
-------------------

Selects the next window. The windows are linked in circular list, this
command selects the next window in the list. To change the order you can
directly select a window with the mouse or <ALT> plus a number. Doing that
this window will become the current one, and the other will be the previous
window.

Use it to select the most recently selected windows.

Name of the command: cmeNext.
Assigned key: `F6'

4.6.6 Previous (Window)
-----------------------

Selects the previous window. The windows are linked in circular list, this
command selects the previous window in the list. To change the order you can
directly select a window with the mouse or <ALT> plus a number. Doing that
this window will become the current one, and the other will be the previous
window.

Use it to select the most recently selected windows.

Name of the command: cmePrev.
Assigned key: `Shift+F6'

4.6.7 Close
-----------

Closes the current window. If the content isn't saved the editor will ask for
saving.

Name of the command: cmeClose.
Assigned key: `Alt+F3'

4.6.8 List
----------

Pop-ups the List of Windows dialog. This dialog contains the list of all the
editor windows, the special windows and the closed windows.

The editor windows are numbered starting from two and the list is sorted by
number. If a window isn't saved an asterisk is placed between the number and
the name.

The special windows are: the message window (the number of lines is
indicated), the project window, the clipboard window (the bytes used by it is
indicated) and the InfView windows.

The closed windows list is sorted alphabetically and holds the last closed
windows. The editor stores important information about these windows so if
you close and re-open one of them the size of the window and other values are
restored.

You can jump to any of the windows selecting it with the mouse or the arrow
keys and then pressing <ENTER> or double clicking or using the Go button.

Pressing <Delete> or using the Delete button you can delete the closed
windows or close any editor window.

Name of the command: cmeListWin.
Assigned key: `Alt+0'

4.6.9 User Screen
-----------------

Shows the DOS screen. Press any key to go back to the editor.

Name of the command: cmeUserScreen.
Assigned key: `Alt+F5'

4.7 Tool&Ops
============

This menu contains all the configuration submenues and some usefull tools.

4.7.1 Options
-------------

This submenu contains the configuration submenues.

4.7.1.1 Colors
..............

This command allows to customize the colors used by the editor. Almost all
the colors are configurable.

The first list, called Group, is the list of things used by the editor.  Each
entry in the group list have one or more colors in the Item list.  First
select the group you want to customize and then press <Tab> to move the
cursor to the items list. To customize a color just select it in the list of
items; the dialog will show a text example in the bottom right corner and the
Foreground and Background colors will be indicated. Using the mouse or moving
with <Tab> and using the arrow keys you can select any of the available
colors; the sample text will show the resulting combination.

Exiting the dialog with <ENTER> or with the Ok button the new colors will be
applied. The colors are stored in the desktop file. If you are using one
centralized desktop file these colors will be used each time you run the
editor, if not the colors will be used only when you run the editor in this
directory.

To learn more about the scope of the desktop files and how to indicate
default values:  (Section 11.4).

If you want to use other colors don't listed in this dialog you must
customize the palette.  (Section 4.7.1.2).

Name of the command: cmeSetColors.

4.7.1.2 Color Palette
.....................

This option allows to configure the palette of colors used by the editor. I
think you know about palettes but I included a little of explanation, just in
case.  (Section 11.5).

The Color radio buttons are used to select the index you want to customize.
The Red, Green and Blue scroll bars can be used to customize the color. To
modify one of the components use the mouse or use the <R>, <G> and <B> to
increase the values and <Shift>+<R>, <Shift>+<G> and <Shift>+<B> to decrease
the values.

Exiting the dialog with <ESC> restores the values you had before entering to
this option. Choosing the Default button the colors are configured with the
deafult values used by the VGA cards.

These settings are stored in the desktop file.  (Section 11.4).

Name of the command: cmeEditPalette.

4.7.1.3 Editor General
......................

This option po-ups the general configuration dialog. This dialog contains
several options.

The Save options groups control various settings about what files creates the
editor and how are created.

   * Make backups: When enabled the editor keeps a backup of your files using
     the `.bkp' extension. It saved me many times.

   * Don't create desktop files: When enabled the editor creates only one
     desktop file and not one per directory.  (Section 11.4).

   * Save UNIX files as UNIX: When enabled the editor saves to disk UNIX
     files in UNIX format. That means that the conversion is done only
     internally and the format of the file in disk isn't altered when you
     save.

The Clock group allows to turn on/off the clock and to choose 0 to 24 hs or
AM/PM style. The clock is displayed in the top right corner of the screen.

The Screen Saver group customize the screen saver. Note the question mark at
the end of the words "screen saver" I did it because the plasma screen saver
isn't too good to be used as a real saver for your screen. You can enable and
disable it, choose the time the editor will wait before starting the screen
saver and the screen saver style. Plasma is by far the most pretty.

These settings are stored in the desktop file.  (Section 11.4).

Name of the command: cmeEdGralOptions.

4.7.1.4 SDG Options
...................

These options customize the SDG module (SET's Documentation Generator).  See
Section 'Top' in documentation for 'SDG'.

   * Format file: Indicates the name of the format file used to generate the
     documentation.

   * Intermediate file: The name of the temporal file used in the process.

   * Base output: The base name of the output file. Don't include the
     extension.

   * Directory of formats: The place where the editor will search for the
     format file.

   * Keep intermediate: When enabled the temporal file isn't deleted so you
     can see possible errors on it.

The SDG module uses the files listed in the project to collect the
documentation from the comments.  (Section 4.8).

These settings are stored in the desktop file.  (Section 11.4).

Name of the command: cmeSDGDialog.

4.7.1.5 Run program (which one)
...............................

The editor can run an external program and collect the errors reported by it
just pressing a key (`^F9'). A good example is the make program. Here you can
select the name of the program. If you need to run more than one command
separate it with `;'.

The editor will redirect the stderr and stdout of the program and then will
analize the output looking for errors. The algorithm is designed to work with
the GNU tools that reports errors in the form: file:line:error.

This setting is stored in the desktop file.  (Section 11.4).

Name of the command: cmeConfRunCommand.

4.7.1.6 Keyboard
................

This is a submenu but due to limitations in the documentation tools I was
forced to put it with the rest of the options listed in the Options submenu.

It contains all the options to customize the keyboard.

4.7.1.7 Key assignment
......................

With this command you can fully customize the keys used by the editor windows.
It doesn't include the menues, for that you must edit the `menubind.smn' file.

To learn how to use this command consult:  (Section 3.1).

Name of the command: cmeEditKeyBind.

4.7.1.8 Setup Alt keys
......................

It allows you to select how the editor interpretes the left and right alt
keys. For more information:  (Section 3.2).

Name of the command: cmeSetUpAltKeys.

4.7.1.9 Key pad behavior
........................

[DOS]

Here you can choose how the keypad is interpreted by the editor. Two options
are provided. One is the BIOS default, in this mode the <NumLock> changes
between arrows and numbers. In the other mode the behavior is similar, but
holding shift and pressing a number will behave like an arrow key shifted,
that's very common in DOS applications so that's the default.

Name of the command: cmeKeyPadBehavior.

4.7.1.10 Back to defaults
.........................

This option restore the default keys assignment of the editor. Use it if you
did a real dissaster in the keyboard configuration and you want to go back to
the original values.

Name of the command: cmeKbBackDefault.

4.7.1.11 Consult scan codes
...........................

Used to consult the keyboard scan codes:  (Section 3.4).

Name of the command: cmeSeeScanCodes.

4.7.1.12 Screen Options
.......................

This command po-ups the screen options configuration dialog. Here you can
customize the video mode, the fonts and the characters encoding. If you are
looking for the screen saver:  (Section 4.7.1.3).

The Screen Mode group allows you to select the video mode. The radio buttons
shows the modes fully supported by the editor. If you want to try an special
mode of your video card just enter the number of mode in the input line
located under the modes list. Finally you can choose to set the mode using an
external program. To make that enable the Use external program option and
enter the name of the program. I use SVGA Text Mode to setup 108x30 from time
to time.

The Primary font and Secondary font groups are used to indicate the fonts
used by the editor. If you don't know what a secondary font is:  (Section
11.5). For the primary font you can choose between using the ROM BIOS fonts
or one of the provided fonts. If you choose the ROM BIOS fonts then the
encoding doesn't have any effect and you can't use a secondary font. For the
secondary font you can choose if you want to use it or not.

The provided fonts works well with the list of supported video modes and
normally can be used with any video mode, but if you choose a very strange
video mode the editor won't be able to set the font and will use the ROM BIOS
fonts.

The Primary encoding and Secondary encoding options allows to select the code
page (encoding) used by the editor. Currently the editor supports twelve
encodings. That's usefull if you need to look files with a different encoding
and the encoding isn't supported by DOS or you just don't want to reconfigure
your machine for it. As an example in my country the DOS uses the CP850 as
default, as this code page destroys some graphic chars I never use it, but
there are people using it so if I want to look text written by this people in
the right way I must choose this encoding. Something similar happends with
Windows and Linux texts, they use ISO Latin 1 and that's totally unsuported
by DOS, so if I want to see the accents in the text I must use this encoding.

Name of the command: cmeSetScreenOps.

4.7.2 Calculator (command/menu)
-------------------------------

This command shows the calculator:  (Chapter 9).

Name of the command: cmeCalculator.
Assigned key: `Alt+F4'

4.7.3 SDG
---------

Runs the documentation module: See Section 'Top' in documentation for 'SDG'.

To configure the SDG module:  (Section 4.7.1.4).

Name of the command: cmeSDG.
Assigned key: `F9'

4.7.4 Run program
-----------------

Runs the desired program. To customize what program to run:  (Section
4.7.1.5).

Name of the command: cmeRunCommand.
Assigned key: `Ctrl+F9'

4.7.5 Grep
----------

This command pop-ups the Powered Grep dialog. Grep is a very powerfull tool
to search text in files. To be able to use it you must have the grep tool
installed in your system. It isn't shipped with the editor.

   * Pattern Box: The text you want to search for. You can use regular
     expressions here.  (Section 11.3).

   * Files to search: The mask used to select the files where grep will make
     the search. Wildcards and some limited basic regular expressions are
     supported here.

   * Directories to search: The list of directories where the search will be
     performed.

The Source of pattern options are used to select what text will be searched:

   * Pattern box is the pattern: grep will search the text indicated in the
     pattern box.

   * Pattern box is a file name: To search words contained in a text file.

   * Use clipboard selection: Use it to use the clipboard selection instead
     of the pattern box text.  (Section 11.1).

The Type of pattern option selects how the pattern is interpreted the options
are directly related to the grep switchs `-G', `-E' and `-F'. You can select
basic regular expressions, extended regular expressions or just a list of
matching values separated by carriage returns.   (Section 11.3).

The Place to search group is used to select what files are examined in the
search:

   * Use files to search: The files to search content is the mask.

   * Search in opened windows: The search is performed in all the opened text
     files.

   * Search in project: The search is performed in all the project files.
     (Section 4.8).

   * Recurse in subdirs: When enabled the editor will run search not only in
     the indicated directories but in any subdirectory contained by these
     directories. That's the main reason because I call it Powered Grep.

The Options group contains various options that are self-explanatory.  They
include: case sensitive search, whole word and whole line matching and
inverse matching. The last reports the lines that doesn't match, be carefull.

After the search the matched lines are displayed in the message window and
pressing `Alt+F7' and `Alt+F8' you can examine the matchings.

Name of the command: cmeGrepDialog.

4.7.6 HTML Accents
------------------

It converts all the accents in the text to ISO-Latin-1 HTML tags. That's
usefull when editing html files because you can type accents naturally and
when finished you simply use this option to generate the right tags. It works
for any code page selected.

Name of the command: cmeHTMLAccents.

4.7.7 Profile Editor
--------------------

This option is just used to meassure the speed of the editor. Use large files
and to compare results run it on the same file.

Name of the command: cmcProfileEditor.

4.8 Project
===========

The project files are used to indicate groups of files. Each project have
your own desktop file so you can have different settings for different groups
of files.  (Section 11.4).

There are several reasons to use projects:

   * If you want to work on a group of files and you will be editing these
     files for a long time use a project. Then you will be able to select what
     file to edit from the project window, as this window is sorted
     alphabetically is easy to make incremental searchs (typing the first
     letters) to find the file. Additionally the editor saves the window
     position and other stuff for all the files listed in the project, even
     if they aren't listed in the closed windows list. I use it for my web
     site files, they are over than 44 and the list of windows (`Alt+0')
     doesn't help.

   * If you are using the SDG module it will collect the comments of the
     files listed in the project, so you need to use a project to specify the
     files.

   * You can use a project to list a set of files to search with grep, then
     each time you want to search in these files you open this project and
     performe the search.

4.8.1 Open (Project)
--------------------

Opens a project file. To create a new file just enter a new name in the
dialog.

Name of the command: cmeOpenPrj.

4.8.2 Close (Project)
---------------------

Close the project file.

Name of the command: cmeClosePrj.

4.9 Help
========

4.9.1 InfView
-------------

Well I think you figured it out, that's the help.

Name of the command: cmeInfView.
Assigned key: `F1'

4.9.2 Another InfView
---------------------

It opens another InfView window. The editor ever opens one window that's used
by the help system. When you close this window the editor just hides it and
when you press <F1> the window is un-hided and the help is displayed.  That
allows the existence of the Previous help command. But some times you could
want to brise one or more help files without losing the help window, in this
case you need more than one InfView opened.

Name of the command: cmeAnotherInfView.

4.9.3 Tip of the day
--------------------

Once a day the editor shows a tip when you start. Each tip talks about one
interesting feature that most of the people overlook. Reading one tip by day
you'll discover a lot of interesting things about the editor.

Each tip have one or more buttons at the right, each button is a link to a
help topic related to this tip. If you want to learn more about the tip's
topic you can browse the help using the buttons.

There are three options at the bottom of the window, they are self
explanatory. The first disables the annoying tips ;-), the second shows the
tips in a dialog box once a day and the third shows the same text in the
message window (once a day of course). The third option is less annoying than
the second but you lose the link buttons.

The text displayed by the tips comes from the `editor.tip' file. You can edit
it to show anything but be careful because the parser isn't very tolerant to
typos.

Name of the command: cmeTipOfTheDay.

4.9.4 Syntax help
-----------------

When programming a language like C you can't remmember the exact name of all
the library functions. The djgpp libc help contains around 650 nodes and the
Allegro help around 400. Placing the cursor over the name of a library
function and pressing <^F1> you'll get help about this function. If the name
isn't exactly typed you'll get a list of the closest matches. The following
topics explain how to configure it.

4.9.4.1 Options (Syntax help)
.............................

This dialog box allows the configuration of the syntax help.  See Syntax help.

The search methode used can be:

   * Exact: Only exact matches are reported.

   * Substring: Partial matches are reported.

   * Fuzzy: It uses a special algorithm that reports words similar to the one
     you are searching.

The available options are:

   * Case sensitive: The search interprets lower case characters as different
     than uppercase characters.

   * Sort by score: The matches are sorted by score when reported. When
     disabled the sorting criteria is alphabetical. A greater score means the
     match is more similar to the word you are searching. A score of 1000
     means exact match.

   * Fuzzy value: That's used only when the selected mode is the fuzzy mode.
     It indicates what is minimal score a word must have to be displayed as a
     possible match. Experiment with different values and see the scores
     reported.

Name of the command: cmeSyntaxHelpOps.

4.9.4.2 Files to search (Syntax help)
.....................................

Here you can indicate in what info files the editor will search the name of
the function. the default is OS dependent. See Syntax help.

You can specify an info node or just the name of the file. In the first case
the editor will read all the cross references found in this node, in the
second the editor will use all the nodes of the file. Normally the node that
contains all the relevant references is called Index, but there are
exceptions one interesting case is libc.

In the dialog the editor shows what nodes are used to search. If the name
have a question mark at the left it means the editor didn't read the file
yet, pressing <^F1> over any word the editor will search it and hence will
read the help files. If the name have an asterisk it means some error was
encoutered when trying to read this file. Finally if no mark is indicated it
means the editor succesfully read the file, additionally the number of nodes
found is indicated at the right. You can add or remove nodes from the list.

Name of the command: cmeSyntaxHelpFiles.

4.9.4.3 Search (Syntax help)
............................

It makes the syntax search and reports the matches found. If only one match
was found the editor jumps to this node. See Syntax help.

Name of the command: cmeSyntaxHelp.
Assigned key: `^F1'

5 Editing Modes
***************

  The editor has various settings that control the function and aspect of the
editor.

  The settings are:

5.1 Overwrite
=============

  This setting controls if the typed characters are inserted in the buffer or
if the typed characters replace the original ones.  (Section 2.3) for a
detailed explanation.

5.2 Autoindent
==============

  This setting controls what happend when you press <ENTER>. If this setting is
off the cursor goes to the column 1 of a new line. If the mode is on the
editor will try to keep the indentation of the code inserting spaces or tabs.
(Section 5.10).

5.3 Real Tabs
=============

  This setting controls what happend when you press `<TAB>'. If this setting is
on the editor will insert an ASCII 9 in this place.

  An ASCII 9 is a TAB, that means that the width of this char is enough to move
the cursor to the next tabulator column. In the editor the tabulator columns
are equidistant and the positions are controled by the Tab Size value.

  If this setting is off the editor won't put any ASCII 9 in your text.
Instead the editor will insert enough spaces to move the cursor to the next
tab-stop, but if the cursor is positioned on the first character of the line
the editor will insert spaces to move this position to the next hole in the
line over the line where you are. Confused? Sorry for my English, an example
will clarify that:

This is a line over the line where you are

That's the line where the cursor is, at column one.

  After pressing TAB you'll get:

This is a line over the line where you are

     That's the line where the cursor is, at column one.

  Now can ask, Why this? Is that useful? The answer is that's very useful to
keep your code indented, experiment using that under a line with if, for, etc.

  Another thing controlled by this setting is the behaviour of the <Backspace>
key, when the setting is on the key is just 'delete the character at the left
of the cursor' but when the setting is off this key is the 'Unindent' key.

  The editor is much more coherent when you choose to use TABs or not use TABs.
If you mix the two modes you'll get some unexpected things, specially in the
indentation of the blocks.

  Is better if you always work in a file without tabs and with this setting
off. Then you'll get much from the editor.

  Now you can say: `But I really need tabs because I'm editing a make file!' or
`because I'll send the file using an ultra slow link and I want the
compression granted by the tabs.' In these cases you can first expand all
tabs, then work without real tabs and at the finish of your work compact all
possible spaces and generate a file with all the tabs that you need.
(Chapter 11) section.

5.4 Persistent Blocks
=====================

  This setting controls the behaviour of the selected area.

   (Section 2.4.1) chapter for a detailed explanation.

5.5 Intelligent C indent
========================

  This mode was designed to be used in jointly with the Pseudo Macros (
(Chapter 7)) and the Real Tabs mode in off to achieve an easy way to indent
the code making a better work than the Autoindent mode.

  In this mode the spaces inserted after pressing <ENTER> depend on the first
word in the last line. For example, if you have:

     if (a==b)_

  With the cursor in the '_' position and press <ENTER> you'll get:

     if (a==b)
       _

  Now you can do either of two things, 1) press space and write the code that
will be executed by the if, or 2) if this a multiline code press { and
<ENTER>.  In the last case you'll get:

     if (a==b)
       {
        _

  Now type your first line of code. Press <ENTER>. Write your next line.  Press
<ENTER> again and then <Backspace>:

     if (a==b)
       {
        1st line;
        2nd line;
       _

  Now type } and press <ENTER> one more time:

     if (a==b)
       {
        1st line;
        2nd line;
       }
     _

  As you can see the code is perfectly aligned without a significant work on
your part.

  I tried to make this mode as smart as possible, but needs more work. If you
have suggestions contact me.

  Another important thing is that this indentation has a personal style, my
style ;-), so maybe you don't like it. If that's your case you can do the
following things:

   * Use another way of indentation offered by the editor. For example, turn
     on the Real Tabs mode and indent with tabs.

   * Customize the `cpmacros.pmc' file ( (Chapter 7)), actually this file is
     coherent with this mode.

   * The editor isn't configurable like Emacs or Brief using a language, but
     is written in C++ and chances that you know C++ are over the 90% so
     contact me and I'll help you to write the routines that you need to get
     an indentation in your own style :-).

5.5.1 Can you explain to me more about the behavior of this mode?
-----------------------------------------------------------------

  I'll try to describe the behaviour of the mode:

  Each time you press <ENTER> the editor inserts a `\r\n' string in your text,
after that the editor searchs one line located above the new line that has at
least one character inside. This line is taken as reference. The editor
analyzes this line searching for:

   * The first non-blank character on this line.

   * The first word on this line.

   * The first parenthesis.

   * The balance of parentheses on the line.

   * The last non-blank and non-comment character in the line.

  Now, if the line contains { at the start the editor goes to the first column
after the {.

  If the line contains } at the start the editor will go to the same column of
the } and then will perform a <Backspace>. If the Real Tabs mode is off,
that's an unindent.  (Section 5.3).

  If the line starts with a C++ comment the effect is the same as in
Autoindent.  (Section 5.2).

  If the line starts with a C comment the editor will try to skip the comment
and analyze the rest of the line, but if the comment doesn't end on this line
the editor will go to the column where the `/' is.

  If the line starts with `/' the editor goes to this column.

  If the line has more `(' than `)' the editor will go to the column of the
first non-blank after the first `('.

  If the line has more `)' than `(' the editor will search the line where the
number of parentheses is balanced, then will analyze this line. If the whole
line still generates an unbalanced situation the editor will go to the first
used column in the line that was found the first time. But if this line lets
all balanced the editor will take the first word on the line and will use it
as reference.

  At last, and according to the word found, the editor will use this word as
reference. The editor recognises the following keywords:

   * `do'
     - Action: +2 but not if ... ;

   * `if'
     - Action: +2 but not if ... ;

   * `for'
     - Action: +3 but not if ... ;

   * `else'
     - Action: +2

   * `case'
     - Action: +5

   * `while'
     - Action: +2 but not if ... ;

   * `switch'
     - Action: +2

   * `break'
     - Action: unindent

   * `return'
     - Action: unindent

   * `default'
     - Action: +5

  The numbers are how many spaces are added with reference to the first letter
of the word.  'not if ... ;' specified means that, if the line ends with a
semicolon, the editor will do the same as for Autoindent.  (Section 5.2). The
unindent is performed with <Backspace>.

  Seasick?  (Section 5.5.2).

  Note: Some of these features were added in v0.2.14 of the editor based on a
suggestion of stud73@nortel.ca <Bradford L. Spencer> about the behaviour of
the mode on a line like this `printf("Num: %d",' with the rest of the
parameters on the next line.

5.5.2 Do you have more examples?
--------------------------------

  Well here are some examples. I used a strange convention, like this: if I say
type `a[ENTER]{', type the letter `a', then press `<ENTER>' and finally press
the `{' key.

Example 1: (Is similar to one explained before but is to show the convention)

     Type:
     if (a==1)[ENTER]{[ENTER]a=2;[ENTER]b=3;[ENTER][BACKSPACE]}[ENTER]
     
     You'll get:
     
     if (a==1)
       {
        a=2;
        b=3;
       }
     [<--- cursor here]

Example 2: A switch/case example

     Type:
     switch(a)[ENTER]{[ENTER]case 1:[ENTER]a=2;[ENTER]b=3;[ENTER]break;
     [ENTER]case 2:[ENTER]b=5;[ENTER]break;[ENTER][BACKSPACE]}[ENTER]
     
     You'll get:
     
     switch(a)
       {
        case 1:
             a=2;
             b=3;
             break;
        case 2:
             b=5;
             break;
       }
     [<--- cursor here]

Example 3: A call to a function that takes a lot of parameters

     Type:
     printf([SPACE]"Num: %d",[ENTER]a[SPACE]);[ENTER]
     
     You'll get:
     
     printf( "Num: %d",
             a );
     [<--- cursor here]

Example 4: A lot of parentheses

     Type:
     if[SPACE]([SPACE](a==1)[SPACE]||[ENTER](b==2)[SPACE]||[ENTER]
     c[SPACE])[ENTER]
     
     You'll get:
     
     if ( (a==1) ||
          (b==2) ||
          c )
       [<--- cursor here]

Example 5: Comment trying to interfere part 1

     Type:
     /*-a-*/for[SPACE](x=1;x;--x)[ENTER]
     
     You'll get:
     
     /*-a-*/for (x=1;x;--x)
               [<--- cursor here]

Example 6: Comment trying to interfere part 2

     Type:
     for[SPACE](x=1;x;--x);[SPACE]//-b[ENTER]
     
     You'll get:
     
     for (x=1;x;--x); //-b
     [<--- cursor here]

 Note: Of course you can fool the editor but as you can see it is relatively
smart ;-).

5.6 Column cursor
=================

  This setting enables an strange feature of the editor, when this mode is on
the column where the cursor is is highlighted. This feature is very good to
check if some part of your code is aligned.

  If you like this mode but is very uncomfortable to use all the time contact
me and if I get enough feedback I'll put this thing in a key to be turned
on/off quickly.

5.7 Row cursor
==============

  This setting is similar to the column cursor but acts on the row where the
cursor is. If you enable the two modes you'll get a cross on the screen
showing where the cursor is.

5.8 Match pair highlight
========================

  This mode acts showing the pairs of (/), [/] and {/} on the fly. Each time
you type one of these symbols the editor will search the matching pair, if
the editor finds it and the match is on the screen both will be highlighted,
if the match is outside the screen the editor will inform the position on the
status line, and if there is no match the editor will inform the situation in
the status line too.

  That's very useful when you are typing complex parenthetical expressions or a
very nested code. You can use it jointly with the cmcSearchStart,
cmcSearchEnd, cmcSearchOpPar, cmcSearchClPar, cmcSearchOpCor and
cmcSearchClCor commands. ( (Chapter 11)).

5.9 Transparent Blocks
======================

  When this mode is on you can see the syntax highlight of selected blocks.
Normally the selection affects the background and foreground colors, but when
using transparent blocks only the background is affected.

5.10 Optimal Fill
=================

  This mode was added for the people that uses ASCII 9 tabulators in your code
( (Section 5.3)). Normally the editor uses spaces to indent the code or, in
general, to fill any gap in the text. When you enable this mode the editor
will use as much tabs as possible to fill these gaps. That's what the tabs
users normally spects.

5.11 Wrap Words
===============

  Even when the editor is mainly intended for programmers I saw that some users
want it too.

  The word wrap added to the editor is a very simple one, it just inserts a new
line if you type a word beyond the wrap column, that's all. You won't get
automatic reformat functions like in text editors intended for love letters
(like the one from the Bill Gates company).

  The wrap column box is used to enter the column that triggers the wrap.

5.12 Do not move the cursor on Paste
====================================

  That's a global setting. When it's on the cursor isn't moved after pasting.
Normally the cursor is moved to the end of the pasted block, but sometimes is
better if the cursor isn't moved.

5.13 Scroll Lock centers
========================

  When this mode is on the Scroll Lock key have an special meaning. If the
Scroll Lock led of your keyboard is on then the editor centers the current
line in the window. The effect is very strange but the advantage is that you
don't need to follow the movement of the line with your eyes because it's
ever in the same place.

5.14 See Tabs
=============

  In this mode the tabs are highlighted, two colors are used for this purpose,
one for even and the other for odd tabs. In this way you can clearly see where
a tab is located and the size of the tab. The colors can be customized from
the Colors menu option. See Colors.

  This mode was introduced in v0.4.23 and is globally enabled by default.

5.15 Don't move inside tabs
===========================

  In this mode the cursor can't be place inside a tab character. This
definition is fuzzy and confusing so here I'll try to explain it better. One
tab character can be expanded to one or more characters when displayed in the
screen. Normally you can place the cursor in any of the spaces that belong to
a tab character. I think this behavior is the best because you are free to
move the cursor to any place you want, but tab's users get confused when they
type and discover they had the cursor in the middle of a tab. It produces a
cursor jump. To avoid this kind of surprises a lot of editors doesn't allow
to position the cursor in these spaces, only in the first space.

  This mode was introduced in v0.4.23 and is globally enabled by default.

5.16 Syntax Highlight
=====================

  The editor can highlight the syntax of your code. The available modes are:

   * No highlight, all the code is with the same color.

   * C/C++ Highlight.

   * Pascal Highlight.

   * Clipper Highlight.

   * User defined. Including already defined for:
        * 80x86 AT&T

        * 80x86 Intel

        * Ada

        * BASIC

        * C/C++

        * Clipper 5.x

        * HTML

        * Modula 2

        * Pascal

        * PMacros files

        * SDG format files

        * sLisp macros

        * The syntax highlight file itself

        * Perl

        * 8x51 assembler

  The kind of highlight is chosen automatically using the extension of the
file. Additionally the editor supports Emacs like mode selection. Emacs
searchs the name of the editing mode in the first kilobyte and last three
kilobytes of text. The editing mode is delimited by `-*-' and the editor will
use it instead of the file extension to select the highlight.  That's very
usefull for files without extensions like the new C++ headers.  To add even
more flexibility I'm supporting another technique used by some C++ headers
from Silicon Graphics and Hewlett Packard, in these hedears the mode is
located in the last lines unsing some special keywords.

  The C/C++ highlight was designed for the GNU C compiler.

  The Pascal highlight was designed for the GNU Pascal compiler.

  The Clipper highlight was designed for the CA-Clipper 5 compiler.

  The highlight can be customized,  (Chapter 6).

6 Syntax Highlight File
***********************

  The highlight can be customized editing the `syntaxhl.shl' file. You can add
syntax highlight to almost any kind of files, a good example is the fact that
the files used to configure the editor have your own syntax highlight.

  The file declares the settings for each kind of files. Each declaration ends
with an `End' marker. The `#' acts as a start of command if it appears in the
first column.

  When adding a new highlight make it ever at the end of the file. If you feel
that this new highlight can be used by other users send it to me and I'll
include it in the next release.

  The next sections covers the supported settings.

6.1 AllowedInsideNames
======================

  Some languages includes symbols inside names, you can list these symbols here.
Normally the editor allows letters, digits and underscore. These characters
are allowed inside the names and not at the start of the name.  (Section 6.2).

6.2 CanStartAName
=================

  Some languages includes symbols at the start of names, you can list these
symbols here. Normally the editor allows letters and underscore. These
characters are allowed at the start of the name and not inside.  (Section
6.1).

6.3 Case
========

  When this setting is 1 all the keywords becomes case sensitive. If the
keywords aren't case sensitive don't use it.

6.4 CloseComment1
=================

  Used to indicate the end of a multiline comment. The lenght is limited to four
characters. If the file format have two different ends use `CloseComment2' for
the second.

6.5 EOLCInFirstCol
==================

  When this setting is on the one line comments starts only if the sequence of
characters is present in the first column.

6.6 EOLComment1
===============

  Used to indicate the start of a comment that ends at the end of the line. The
lenght is limited to four characters. If the file format have two different
ends use `EOLComment2' for the second.

6.7 Escape
==========

  Indicates what character acts as escape character inside strings or to
concatenate lines.

6.8 Files
=========

  It indicates what extensions will use this highlight. The extensions must be
separated by commas. The extensions are case sensitive, be careful.
Additionally they can be the name of an Emacs editing mode.

6.9 HexMarker
=============

  This setting indicates what prefix is used for hexadecimal numbers. No postfix
supported yet. The lenght is limited to four characters.

6.10 Keywords
=============

  It can be used as many times as needed and is used to indicate the reserved
keywords of the language. The separator is the comma.

6.11 Name
=========

  It sets the name of the syntax highlight. This name is used in the local
settings dialog (cmcSetLocalOptions).

6.12 NoCheckNumbers
===================

  When this setting is on the numbers aren't highlighted.

6.13 OpenComment1
=================

  Used to indicate the start of a multiline comment. The lenght is limited to
four characters. If the file format have two different starts use
`OpenComment2' for the second.

6.14 PMacros
============

  Indicates the name of the pseudo macros file used for this kind of files.
Using different files for different formats you can assign common triggers to
different actions. For example, you can use i( to trigger an if() {} else {}
in C and an if then else in BASIC.  (Chapter 7).

6.15 Preprocessor
=================

  Indicates what symbol starts a preprocessor line.

6.16 String1
============

  Used to indicate the start and end of strings, used for long strings.

6.17 String2
============

  Used to indicate the start and end of strings, used for small strings or
characters.

6.18 Symbols1
=============

  Used to indicate what characters are allowed symbols, normally used for
boolean and arithmetic symbols.

6.19 Symbols2
=============

  Used to indicate what characters are allowed symbols, normally used for flow
control and subindex symbols.

6.20 UseInternal
================

  That's optional. When a highlight have this setting the editor will use the
internal routines and will ignore almost all the settings. Only the
extensions ( (Section 6.8)) and pseudo macros ( (Section 6.14)) settings are
used.

  The value assigned can be: 1 for GNU C highlight, 2 for standard Pascal and 3
for Clipper.

7 Pseudo Macros
***************

  This feature is very useful to save some keystrokes. With this feature you
can create a lot of shortcuts to make your life easier.

7.1 Please enlighten me - what is that?
=======================================

  So now, What's a Pseudo Macro? It's like a macro but is triggered by two
things: one the text behind the cursor, and two the `^Space' combination.

  And what's the result? The result is customizable, but by default there are
some predefined behaviours. For example, type in a C source window the
following two characters: `#i' and the press `^Space' ... (to create an empty
file with .c extension go to File|Open and type a new name, foo.c for
example).

  Surprised? I bet! You got: #include <.h> and the cursor just in the right
place to write the name of the header.

Now write the famous stdio word, press `<End>', then `<Enter>' twice and now
write the following two letters: `ma' and then `^Space' ...

  I bet this time you predicted better what will happen so you aren't so
surprised ;-). Anyways, Surprise! Now type `pr' and the magic keys and ...
`printf("");' appears. To end the happy history now type "Hello world!" That's
all. You wrote the hello world program at a very good speed.

  Now you know what I mean when I say pseudo-macros.

7.2 How can I customize that?
=============================

  Is very easy. Each syntax highlight have your own pseudo macros file. Which
file belongs to each syntax highlight is indicated in the `syntaxhl.shl'
file. See Syntax Highlight File. In the case of C/C++ the file is called
`cpmacros.pmc' and is located in the same directory where the rest of the
configuration files are installed. This file contains the definitions for each
pseudo macro that can be triggered in C/C++ files. You can define as many
pseudo macros as you want.

  Important: If you are using RHIDE consult the RHIDE documentation to know
where is stored the `cpmacros.pmc' file.

  The `cpmacros.pmc' file is a very good example and is self-explained but I'll
include here one example.

Trigger: "i("
Mode: 0,1,0,1,0
 "if (@0)\n"
 "  {@1\n"
   "}\n"
 "\belse\n"
 "  {@2\n"
   "}"

  The Trigger keyword defines the two letter behind the cursor that will
trigger the pseudo macro.

  The Mode keyword indicates the mode that the editor will use when inserting
the text. The modes are:

   * Overwrite                (Section 5.1)

   * Autoindent               (Section 5.2)

   * Use Tabs                 (Section 5.3)

   * Persistent blocks        (Section 2.4.1)

   * Intelligent C indent     (Section 5.5)

  Each mode can be 0 or 1. The editor will return to the original mode after
expanding the pseudo macro. In this case the macro is expanded in the No
overwrite, autoindent, don't use tabs, the blocks are persistent and don't be
smart when indenting.

  The rest is the code to insert surrounded by ". You can use \b to indicate
backspace, \n for newline and \\ to indicate a simple \. If you want to
insert a @ you have to type it twice @@, because this character has a special
meaning (see below).

  After the insertion the cursor is positioned in the place marked with @0.
Don't forget to signal this point or the cursor will positioned at the
beginning of the file. The places marked with @1, @2 and @3 are saved in the
markers 7, 8 and 9.

  Currently I defined pseudo macros only for C/C++ and Perl. I did it in a way
that you can use the same pseudo macro for both languages. For example: `#i'
is expanded to `#include <.h>' for C/C++ files and to `request "";' for Perl
files. If you write similar pseudo macros for other languages please send me
the file and I'll add it to the next release.

8 sLisp macros
**************

  The editor uses a lisp like language to store macros. The macros are stored
in a file called `macros.slp'.

  The macros can be assigned to keys ( (Section 3.1)), selected from the Macro
menu or from the menu. From the Macro menu you can choose a macro from the
list and then if you want to repeat it make it with one keystroke.

  To add a new macro to the list you must edit the `macros.slp' file. You can
write the new macro by hand or you can use the Macro menu to record a macro
and then generate the sLisp code for this macro.

  To assign a macro to a menu entry you must edit the `menubind.smn'. The macros
are called using `cm(name)' where name is the name of the macro you want to
trigger.

8.1 How to write a sLisp macro
==============================

  I'll show an example and then I'll explain each part of the example:

     (defmacro 'Testing 1 2 3 ;-)'
      (eval
       (SendCommands cmcLineEnd)
       (InsertText (+ 'Hi!' CR 'How are you?'))
       (SendCommands cmcLineUp cmcLineEnd)
      )
     )

  That defines a macro called "Testing 1 2 3 ;-)" that will be expanded to all
the code inside of the `eval' sentence. The `SendCommands' command sends one
or more commands to the editor. The `InsertText' command inserts one string
in the code.  To concatenate strings use the `+' operator. Currently you can
use the `\n' escape sequence inside a string to indicate a carriage return
but in the example I'm showing how to concatenate strings. The `CR' is a
defined constant.

  Actually the sLisp interpreter is limited to these commands but can be
expanded to support control structures, variables, etc. But I won't do it if
I don't get some feedback and even some help.

8.2 Running programs with a macro
=================================

  There are a sLisp command called `RunProgram'. It takes an string as
parameter it can contain one or more programs separated by `;' or the
commands separator used by your command shell.

  The standard output and error are redirected and the results are sent to the
Message Window. If the program is a GNU tool and reported errors the editor
will parse these errors and allow you to directly jump to the file and line
where the error was reported.

8.3 Editor specific commands
============================

  This section describes commands specifically related to files under edition.

8.3.1 defmacro
--------------

  (defmacro NAME EXPRESSION)

  Defines a new editor macro called NAME. When this macro is called the
EXPRESSION is evaluated.  (Section 8.1).

8.3.2 GetSelection
------------------

  (GetSelection)

  This command returns the selected text in the editor as a sLisp string.
(Section 8.1).

8.3.3 InsertText
----------------

  (InsertText STRING [SELECTED [MOVE]])

  Inserts the STRING at the cursor's position. By default the cursor is moved
after the insertion and the inserted text isn't selected. If SELECTED is 1
the text is selected. If the MOVE parameter is 0 the cursor isn't moved and if
the parameter is 1 the action depends on the current editor's setings.

8.3.4 SendCommands
------------------

  (SendCommands COMMAND ...)

  Sends all the listed commands to the editor. The editor commands are sLisp
constants that starts with `cmc'. These commands are the same explained in
the keyboard section as `cmcXXXXX'.

8.3.5 WichEditor
----------------

  (WichEditor [OPTION])

  This command takes one optional parameter and returns the file name of the
current file under edition.

  The optional parameter can be:

   * 0
     - Meaning: Full name and path
     - Example: `c:/temp/test.txt'

   * 1
     - Meaning: Same as 0 but without extension
     - Example: `c:/temp/test'

   * 2
     - Meaning: Path for the file
     - Example: `c:/temp/'

   * 3
     - Meaning: Disk drive
     - Example: `c:'

   * 4
     - Meaning: File extension
     - Example: `.txt'

   * 5
     - Meaning: Name without extension
     - Example: `test'

8.4 General sLisp commands
==========================

  This section describes general sLisp commands that can be used from the
editor and the SDG configuration files.

8.4.1 eval
----------

  (eval EXPRESSION ...)

  This command is used to specify more than one action where just one is
spected.  Additionally you could construct sLisp code in a string and then
evaluate it. The expressions are evaluated from left to right, the last
evaluated result is returned.

8.4.2 gstr
----------

  (gstr STRING POSITION)

  Returns the POSITIONth character of the STRING. The first character is in the
0 position.

  (gstr "hello" 4)
  Returns "o".

8.4.3 left
----------

  (left STRING NUMBER)

  Returns the first NUMBER characters of the STRING.

  (left "hello" 4)
  Returns "hell".

8.4.4 Operator +
----------------

  (+ VALUE1 VALUE2 ...)

  Returns the result of adding all the parameters. The type of the result is
determined by the first parameter. Currently you can't mix strings and
integers but if you bug me enough I'll add it. Adding strings means
concatenation.

  (+ "hel" "lo")
  Returns "hello".

  (+ 3 5)
  Returns 8.

  (+ "hello" 1)
  Gives syntax error.

8.4.5 right
-----------

  (right STRING NUMBER)

  Returns the last NUMBER characters of the STRING.

  (right "hello" 3)
  Returns "llo".

8.4.6 setv
----------

  (setv VARIABLE VALUE)

  Assigns VALUE to the VARIABLE. If the VARIABLE wasn't yet defined the
variable is created. The VARIABLE parameter must be a string representing the
name of the variable, it could be an expression.

  (setv "counter" 1)
  Assigns 1 to the COUNTER variable, if COUNTER doesn't exist counter is
created.

  (setv (+ "counter" "1") 1)
  Assigns 1 to the COUNTER1 variable, if COUNTER1 doesn't exist counter is
created.

8.4.7 sstr
----------

  (sstr STRING POSITION VALUE)

  Changes the POSITIONth character of STRING by the first character of VALUE.
The first character is in the 0 position.

  (sstr "hello" 1 "a")
  Returns "hallo".

8.4.8 substr
------------

  (substr STRING POSITION [LEN])

  Returns LEN characters of STRING starting at the indicated POSITION.  If LEN
is omitted all the characters in the string starting at POSITION are
returned. The first character is in the 0 position.

  (substr "hello" 1 3)
  Returns "ell".

  (substr "hello" 2)
  Returns "llo".

9 Calculator
************

  The calculator inside the editor was made by Laszlo Molnar. Laszlo is a
friend of mine from Hungary and is the author of the great DJP progam (a
djgpp exe's compressor and now UPX, the best EXE compressor in all the
categories).

  The sources of the calculator are in the `parser.c' file. They are free and
you can use it for any purpose.

  Here is the documentation of the calculator written by Laszlo:

  The purpose of this program, to provide a simple but powerful 'calculator'
for programmers, to help with coding and debugging, where GDB's expression
evaluator is not enough.

  You may say "Hey, I can write a better one with flex and bison", and you may
be right. I can make a better one too. But it'll be 4-5 times longer!  This
calculator is only 10 kbytes of C code. What I think? It's not that bad.

  The parser algorithm I use is called 'Operator Precedence Parsing' (I
translated this from Hungarian, so I may be wrong ;-). It works with
'operator precedence grammars' (a subset of LR(1) grammars), which means that
there can't be two non-terminating tokens next to each other on the right
side of your grammar rules. It's ideal for expression evaluation.

  With this parser you can use numbers, operators, parentheses and functions
like in C.

Here are the operators in decreasing precedence:

  1. `~' unary not `-' unary minus

  2. `**' power

  3. `*' multiplication `/' division `%' modulo

  4. `+' plus `-' binary minus

  5. `<<' shift left `>>' shift right

  6. `&' logical and

  7. `^' logical xor

  8. `|' logical or

  The calculator includes the following functions: sin\, cos\, tan\, sinh\,
cosh\, tanh\, asin\, acos\, atan\, log\, log10\, exp\, abs\, sqrt\, ceil and
floor.  They work as you expected.  Additionally the calculator provides some
radix conversion routines: bin\, oct\, dec and hex.

  The calculator uses doubles, but you can use numbers in the usual integer
formats also: 0x... for base 16, 0b... for base 2 and 0... for base 8.  The
result of the calculation is displayed as a double for base 10, and converted
to long long format for the other radixes.

Error codes:

   * -1
     - Meaning: yylex()   failed e.g.  `1+#'

   * -3
     - Meaning: yyparse() failed e.g.  `1+2)'

   * -4
     - Meaning: floating point exception e.g. `sqrt(-1)'

10 How to contact me
********************

  If you have any suggestions or bug report contact me at the address shown in
the author section.  (Section 1.3).

10.1 Bugs
=========

  If you find a bug please contact me, the Undo thing is the most complex one
and I know that needs some work on it.

  When reporting a bug please don't tell me: Some times some strange thing
happend ... Try to find a pattern to the problem. What situation triggers the
problem? ... with which file(s)? Then send me the file and the description.

  When sending to me a file UUEncode it to avoid problems related with the
e-mail.

11 Miscellaneous
****************

11.1 Clipboard
==============

The clipboard is just another editor window where you put text using the
`Cut' and `Copy' commands to then retreive it with the `Paste' command.

Unlike the windows clipboard the one provided with the editor doesn't lose
the old contents when you copy to it. This approach have the important
advantage that you can copy text from various parts to the clipboard and then
paste all the text in one place and with just one operation. To do it select
the clipboard window and then select the text to paste, the editor pastes the
text selected in the clipboard window.

The disadvantage is that all the texts copied to the clipboard remains there
and if you are running in a machine with low memory and handling huge files
you can fill all the memory. To avoid it check the clipboard size (with
`Alt+0') and exit the program if it gets huge. That normally isn't needed in
machines with enough free disk that can be used as swap.

11.2 Time and date modifiers formats
====================================

This values are the same used by the `strftime' function of the standard
`libc'. The editor uses it in the printing module.  (Section 4.1.8).

`%A'
     The full weekday name (`Friday')

`%a'
     The abbreviated weekday name (`Fri')

`%B'
     The full month name (`October')

`%b, %h'
     The abbreviated month name (`Oct')

`%C'
     Short for `%a %b %e %H:%M:%S %Y' (`Fri Oct  1 15:30:34 1993')

`%c'
     Short for `%m/%d/%y %H:%M:%S' (`10/01/93 15:30:34')

`%e'
     The day of the month, blank padded to two characters (` 2')

`%D'
     Short for `%m/%d/%y' (`10/01/93')

`%d'
     The day of the month, zero padded to two characters (`02')

`%H'
     The hour (0-24), zero padded to two characters (`15')

`%I'
     The hour (1-12), zero padded to two characters (`03')

`%j'
     The Julian day, zero padded to three characters (`275')

`%k'
     The hour (0-24), space padded to two characters (`15')

`%l'
     The hour (1-12), space padded to two characters(` 3')

`%M'
     The minutes, zero padded to two characters (`30')

`%m'
     The month (1-12), zero padded to two characters (`10')

`%n'
     A newline (`\n')

`%p'
     AM or PM (`PM')

`%R'
     Short for `%H:%M' (`15:30')

`%r'
     Short for `%I:%M:%S %p' (`03:30:35 PM')

`%S'
     The seconds, zero padded to two characters (`35')

`%T, %X'
     Short for `%H:%M:%S' (`15:30:35')

`%t'
     A tab (`\t')

`%U'
     The week of the year, with the first week defined by the first Sunday of
     the year, zero padded to two characters (`39')

`%W'
     The week of the year, with the first week defined by the first Monday of
     the year, zero padded to two characters (`39')

`%w'
     The day of the week (0-6) (`5')

`%x'
     Short for `%m/%d/%y' (`10/01/93')

`%y'
     The year (00-99) of the century (`93')

`%Y'
     The year, zero padded to four digits (`1993')

`%Z'
     The timezone abbreviation (`EDT')

`%%'
     A percent symbol (`%')

11.3 Regular Expressions
========================

The editor supports regular expressions in the search and replace commands,
here is a description of the syntax.

Regular expressions ("RE"s), as defined in POSIX 1003.2, come in two forms:
modern REs (roughly those of `egrep'; 1003.2 calls these *extended* REs) and
obsolete REs (roughly those of `ed'; 1003.2 *basic* REs).  Obsolete REs
mostly exist for backward compatibility in some old programs; they will be
discussed at the end.  1003.2 leaves some aspects of RE syntax and semantics
open; `(*)' marks decisions on these aspects that may not be fully portable
to other 1003.2 implementations.

A (modern) RE is one(*) or more non-empty(*) *branches*, separated by `|'.
It matches anything that matches one of the branches.

A branch is one(*) or more *pieces*, concatenated.  It matches a match for
the first, followed by a match for the second, etc.

A piece is an *atom* possibly followed by a single(*) `*', `+', `?', or
*bound*.  An atom followed by `*' matches a sequence of 0 or more matches of
the atom.  An atom followed by `+' matches a sequence of 1 or more matches of
the atom.  An atom followed by `?' matches a sequence of 0 or 1 matches of
the atom.

A *bound* is `{' followed by an unsigned decimal integer, possibly followed
by `,' possibly followed by another unsigned decimal integer, always followed
by `}'.  The integers must lie between 0 and `RE_DUP_MAX' (255(*)) inclusive,
and if there are two of them, the first may not exceed the second.  An atom
followed by a bound containing one integer `i' and no comma matches a
sequence of exactly `i' matches of the atom.  An atom followed by a bound
containing one integer `i' and a comma matches a sequence of `i' or more
matches of the atom.  An atom followed by a bound containing two integers `i'
and `j' matches a sequence of `i' through `j' (inclusive) matches of the atom.

An atom is a regular expression enclosed in `()' (matching a match for the
regular expression), an empty set of `()' (matching the null string(*)), a
*bracket expression* (see below), `.' (matching any single character), `^'
(matching the null string at the beginning of a line), `$' (matching the null
string at the end of a line), a `\\' followed by one of the characters
`^.[$()|*+?{\\' (matching that character taken as an ordinary character), a
`\\' followed by any other character(*) (matching that character taken as an
ordinary character, as if the `\\' had not been present(*)), or a single
character with no other significance (matching that character).  A `{'
followed by a character other than a digit is an ordinary character, not the
beginning of a bound(*).  It is illegal to end an RE with `\\'.

A *bracket expression* is a list of characters enclosed in `[]'.  It normally
matches any single character from the list (but see below).  If the list
begins with `^', it matches any single character (but see below) *not* from
the rest of the list.  If two characters in the list are separated by `-',
this is shorthand for the full *range* of characters between those two
(inclusive) in the collating sequence, e.g. `[0-9]' in ASCII matches any
decimal digit.  It is illegal(*) for two ranges to share an endpoint, e.g.
`a-c-e'.  Ranges are very collating-sequence-dependent, and portable programs
should avoid relying on them.

To include a literal `]' in the list, make it the first character (following
a possible `^').  To include a literal `-', make it the first or last
character, or the second endpoint of a range.  To use a literal `-' as the
first endpoint of a range, enclose it in `[.' and `.]' to make it a collating
element (see below).  With the exception of these and some combinations using
`[' (see next paragraphs), all other special characters, including `\\', lose
their special significance within a bracket expression.

Within a bracket expression, a collating element (a character, a
multi-character sequence that collates as if it were a single character, or a
collating-sequence name for either) enclosed in `[.' and `.]'  stands for the
sequence of characters of that collating element.  The sequence is a single
element of the bracket expression's list.  A bracket expression containing a
multi-character collating element can thus match more than one character,
e.g. if the collating sequence includes a `ch' collating element, then the RE
`[[.ch.]]*c' matches the first five characters of "chchcc".

Within a bracket expression, a collating element enclosed in `[=' and `=]' is
an equivalence class, standing for the sequences of characters of all
collating elements equivalent to that one, including itself.  (If there are
no other equivalent collating elements, the treatment is as if the enclosing
delimiters were `[.' and `.]'.)  For example, if o and \o'o^' are the members
of an equivalence class, then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are
all synonymous.  An equivalence class may not\(dg be an endpoint of a range.

Within a bracket expression, the name of a *character class* enclosed in `[:'
and `:]' stands for the list of all characters belonging to that class.
Standard character class names are:

     alnum	digit	punct
     alpha	graph	space
     blank	lower	upper
     cntrl	print	xdigit

These stand for the character classes defined by `isalnum', `isdigit',
`ispunct', `isalpha', `isgraph' , `isspace' (`blank' is the same as `space'),
`islower', `isupper', `iscntrl', `isprint', and `isxdigit', respectively.  A
locale may provide others.  A character class may not be used as an endpoint
of a range.

There are two special cases(*) of bracket expressions: the bracket
expressions `[[:<:]]' and `[[:>:]]' match the null string at the beginning
and end of a word respectively.  A word is defined as a sequence of word
characters which is neither preceded nor followed by word characters.  A word
character is an `alnum' character (as defined by `isalnum' library function)
or an underscore.  This is an extension, compatible with but not specified by
POSIX 1003.2, and should be used with caution in software intended to be
portable to other systems.

In the event that an RE could match more than one substring of a given
string, the RE matches the one starting earliest in the string.  If the RE
could match more than one substring starting at that point, it matches the
longest.  Subexpressions also match the longest possible substrings, subject
to the constraint that the whole match be as long as possible, with
subexpressions starting earlier in the RE taking priority over ones starting
later.  Note that higher-level subexpressions thus take priority over their
lower-level component subexpressions.

Match lengths are measured in characters, not collating elements.  A null
string is considered longer than no match at all.  For example, `bb*' matches
the three middle characters of `abbbc', `(wee|week)(knights|nights)' matches
all ten characters of `weeknights', when `(.*).*' is matched against `abc' the
parenthesized subexpression matches all three characters, and when `(a*)*' is
matched against `bc' both the whole RE and the parenthesized subexpression
match the null string.

If case-independent matching is specified, the effect is much as if all case
distinctions had vanished from the alphabet.  When an alphabetic that exists
in multiple cases appears as an ordinary character outside a bracket
expression, it is effectively transformed into a bracket expression
containing both cases, e.g. `x' becomes `[xX]'.  When it appears inside a
bracket expression, all case counterparts of it are added to the bracket
expression, so that (e.g.) `[x]' becomes `[xX]' and `[^x]' becomes `[^xX]'.

No particular limit is imposed on the length of REs(*).  Programs intended to
be portable should not employ REs longer than 256 bytes, as an implementation
can refuse to accept such REs and remain POSIX-compliant.

Obsolete (*basic*) regular expressions differ in several respects.  `|', `+',
and `?' are ordinary characters and there is no equivalent for their
functionality.  The delimiters for bounds are `\\{' and `\\}', with `{' and
`}' by themselves ordinary characters.  The parentheses for nested
subexpressions are `\(' and `\)', with `(' and `)' by themselves ordinary
characters.  `^' is an ordinary character except at the beginning of the RE
or(*) the beginning of a parenthesized subexpression, `$' is an ordinary
character except at the end of the RE or(*) the end of a parenthesized
subexpression, and `*' is an ordinary character if it appears at the
beginning of the RE or the beginning of a parenthesized subexpression (after
a possible leading `^').  Finally, there is one new type of atom, a *back
reference*: `\\' followed by a non-zero decimal digit *d* matches the same
sequence of characters matched by the *d*th parenthesized subexpression
(numbering subexpressions by the positions of their opening parentheses, left
to right), so that (e.g.) `\\([bc]\\)\\1' matches `bb' or `cc' but not `bc'.

11.4 Desktop Files
==================

Each time you run the editor it searchs for a desktop file in the current
directory, if the editor can find any desktop file it searchs in the
directory indicated by the enviroment variable `SET_FILES'. If no desktop
files are found the editor uses internal default values. As you can see
creating a desktop file in the `%SET_FILES%' directory you'll indicate
default values. To create a desktop file in this directory just run the
editor in the directory, customize it and leave the editor. This feature is
very usefull to customize things like: Colors, Palette, Global editor
options, etc.

When you exit from the editor it saves all the settings, windows positions,
etc. to a desktop file stored in the current directory. Some prople doesn't
like it for this reason there is special mode where the editor stores just
one desktop file in the `%SET_FILES%' directory and not in each directory.
This approach have the advantage of saving disk space, but you don't have
local settings. If you use this approarch and want to keep a local
configuration in a directory use a project.  (Section 4.8). To store only one
centralized desktop file:  (Section 4.7.1.3).

The destop files have `.dst' as extension.

11.5 Text mode attributes
=========================

Text modes uses up to 16 colors for forground and 16 colors for background,
that's because the attributes of each character are stored in a 1 byte
allowing just 256 combinations. So four bits are dedicated to the background
color giving 16 combinations and the other four bits for the foreground.

As we have only 16 colors there are a big chance that our predilect colors
aren't included. For this reason the VGA chip uses a palette of colors. That
means that these 16 colors aren't fixed and you can indicate what color is.
The values are just index values and you can assign to it any color.

The VGA chip supports 18 bits per color giving 262,144 combinations. The
colors are created using the RGB (Red Green and Blue) methode. That's simply
because the CRT (Cathode Rays Tube) of the monitor uses this methode to
create the colors. You have 6 bits per component giving 64 different levels.

There are a little more of complexity added to the VGA card. The most
significant bit of the background is used to create blinking text. The editor
avoids this mode because it restricts the background combinations to 8 and
the editor doesn't need blinking text. The other funny thing of the attribute
is the most significant bit of the foreground color. It have an special
meaning even when using it doesn't reduce the number of combinations. That
means that this bit can select two things at the same time. By now you'll be
asking: What? This bit can be used to select a second font, in this way you
can have upto 512 different characters on the screen. The editor can exploit
it but you must understand that this bit is used for the foreground color
too. You can customize the palette to reduce the number of foreground
combinations to 8 just defining the 9th color with the same value as the 0th
color and so on. Then you can assign different colors and different fonts to
the things in the editor. You can for example use a font for the menues and
other for the text, or a font for the code and other for the comments.  The
editor goes even further allowing different code page encodings for each
font. I really never saw it in any editor. You can use it for example to
write your code using a font with the ISO Latin 1 encoding (used by Linux and
Windows in USA and part of Europe) and have your comments in russian (using
cyrilic characters).

To learn how to customize the palette:  (Section 4.7.1.2).
To learn how to assign colors to the things used in the editor:  (Section
4.7.1.1).
To learn how to select a font and an encoding:  (Section 4.7.1.12).
11.6 File Open
==============

This dialog is used to select a file in various places. Even when it have
different names and purposes the dialog is ever the same.

The dialog is similar to the one used by most of the T/GUI programs so I'll
focus in special details and particularities.

All the files and directories are shown together, the directories have a
slash at the end. The current directory and selected file information is
shown at the bottom of the dialog.

To select a different disk, in DOS of course, you can simply type the drive
letter followed by a colon in the text input area and press <Enter>. You can
specify a mask in the text area too. Even under DOS a single asterisk matchs
with any filename, the *.* mask won't match with a filename that lacks
extension. You can use some asterisk and question marks in the mask, they
work like in most of the shells (DOS command.com included). Additionally the
mask can contain brackets, if your shell doesn't use it and you never used it
here is an example: `*.[ch]*' will match with test.c, test.h, test.cc,
test.cpp, etc. the brackets indicates the posible characters that will match,
in this case the first character after the point should be c or h.
Pressing the down arrow while you are in the text input area you'll get a
list of the paths from where you selected files in past. That's very useful
when you load files from two or more directories very differents.

The `Home' changes the directory to the one from where you started the
editor, that's very useful when you navigate a lot and you want to quickly
return to the directory from where you started.

The editor remmembers the last place where you selected a file the last time
you used it. This information is stored in the desktop file. This information
is unique for the following selections: open a file to edit, save a file,
open a help file, save a block of text, open/save a project, open an MP3 file
and save an MP3 file. In this way you can be opening files from a directory
and saving newlly created files to another at the same time without
indicating the directory each time you open/save a file.

12 Index
********

* Autoindent:                            Section 5.2
* Blocks:                                Section 2.4
* Blocks - Rectangular:                  Section 2.4.4
* Blocks, transparent:                   Section 5.9
* Bugs:                                  Section 10.1
* centering the screen while typing:     Section 5.13
* Column cursor:                         Section 5.6
* cpmacros.pmc:                          Chapter 7
* cursor through tabs:                   Section 5.15
* How to contact me:                     Chapter 10
* Indentation:                           Section 2.4.3
* Insert and Delete:                     Section 2.3
* Intelligent C indent:                  Section 5.5
* macros from menu:                      Chapter 8
* macros.slp:                            Section 3.1.2
* Match pair highlight:                  Section 5.8
* menues and macros:                     Chapter 8
* Movement:                              Section 2.2
* Overwrite:                             Section 5.1
* Paste, don't move the cursor:          Section 5.12
* Persistent Blocks:                     Section 2.4.1
* Pseudo Macros:                         Chapter 7
* Real Tabs:                             Section 5.3
* Real Tabs when indenting:              Section 5.10
* Row cursor:                            Section 5.7
* TABs:                                  Section 5.3
* TABs, highlight/see:                   Section 5.14
* TABs, indenting with:                  Section 5.10
* TABs, skipping/through:                Section 5.15
* Use Real Tabs:                         Section 5.3
* wrapping:                              Section 5.11

13 Index of key commands
************************

* Autoindent mode on/off <^O>:           Section 2.5
* Beginning of line <Home>:              Section 2.2
* Bottom of file <^Q-C>:                 Section 2.2
* Bottom of window <^Q-X>:               Section 2.2
* Character left <Left arrow>:           Section 2.2
* Character right <Right arrow>:         Section 2.2
* cmcBackSpace <Backspace>:              Section 2.3
* cmcCharLeft <Left arrow>:              Section 2.2
* cmcCharRight <Right arrow>:            Section 2.2
* cmcChooseMacro <From menu>:            Section 4.4.4
* cmcClear <^Del> <1>:                   Section 4.2.7
* cmcClear <^Del>:                       Section 2.4
* cmcCompactBuffer <>:                   Section 4.2.11
* cmcCompactBuffer <From menu>:          Section 2.5
* cmcCopy <^Ins> <1>:                    Section 4.2.4
* cmcCopy <^Ins>:                        Section 2.4
* cmcCopyBlock <^K-C>:                   Section 2.4
* cmcCopyClipWin <>:                     Section 4.2.12
* cmcCut <^K-Y>:                         Section 2.4
* cmcCut <Shift+Del>:                    Section 4.2.3
* cmcDelChar <Del>:                      Section 2.3
* cmcDelEnd <^Q-Y>:                      Section 2.3
* cmcDelLine <^Y>:                       Section 2.3
* cmcDelPrevWord <^Backspace>:           Section 2.3
* cmcDelStart <^Q-H>:                    Section 2.3
* cmcDelWord <^T>:                       Section 2.3
* cmcEndSelect <^K-K>:                   Section 2.4
* cmcExpandAllTabs <>:                   Section 4.2.10
* cmcExpandAllTabs <From menu>:          Section 2.5
* cmcExpandCode <^Space>:                Section 2.5
* cmcFind <^Q-F>:                        Section 4.3.1
* cmcFirstLineInScreen <^Q-E>:           Section 2.2
* cmcGenCodeForMacro <From menu>:        Section 4.4.6
* cmcGoBeginBlock <^Q-B>:                Section 2.4
* cmcGoEndBlock <^Q-K>:                  Section 2.4
* cmcGotoEditorLine <^J> <1>:            Section 4.3.5
* cmcGotoEditorLine <^J>:                Section 2.5
* cmcGotoMarkn <^Q n*>:                  Section 2.5
* cmcHideSelect <^K-H>:                  Section 2.4
* cmcIndentBlk <^K-Tab>:                 Section 2.4.3
* cmcIndentBlkOne <^K-I>:                Section 2.4.3
* cmcIndentMode <^O>:                    Section 2.5
* cmcInsMode <Ins>:                      Section 2.3
* cmcJumpToFunction <Alt+F2>:            Section 4.3.4
* cmcLastLineInScreen <^Q-X>:            Section 2.2
* cmcLineDown <Down arrow>:              Section 2.2
* cmcLineEnd <End>:                      Section 2.2
* cmcLineStart <Home>:                   Section 2.2
* cmcLineUp <Up arrow>:                  Section 2.2
* cmcMarkLine <^K-L>:                    Section 2.4
* cmcMarkWord <^K-T>:                    Section 2.4
* cmcMoveBlock <^K+V>:                   Section 2.4
* cmcNewLine <Enter>:                    Section 2.3
* cmcPageDown <PgDn>:                    Section 2.2
* cmcPageUp <PgUp>:                      Section 2.2
* cmcPaste <Shift+Ins> <1>:              Section 4.2.5
* cmcPaste <Shift+Ins>:                  Section 2.4
* cmcPasteClipWin <>:                    Section 4.2.13
* cmcPlayMacro <^F10> <1>:               Section 4.4.3
* cmcPlayMacro <^F10>:                   Section 2.5
* cmcProfileEditor <From menu>:          Section 4.7.7
* cmcPutMarkn <^K n*>:                   Section 2.5
* cmcReadBlock <^K-R>:                   Section 2.4
* cmcRecordMacro <Shift+F10> <1>:        Section 4.4.1
* cmcRecordMacro <Shift+F10>:            Section 2.5
* cmcRedo <From menu>:                   Section 4.2.2
* cmcRepeatMacro <Shift+F3>:             Section 4.4.5
* cmcReplace <^Q-A>:                     Section 4.3.2
* cmcReplaceSelect <Shift+^Ins>:         Section 2.4
* cmcSave <F2>:                          Section 4.1.3
* cmcSaveAs <From menu>:                 Section 4.1.4
* cmcSaveAsUNIX <From menu>:             Section 4.1.5
* cmcSaveSameTime <From menu>:           Section 4.1.6
* cmcScrollDown <^Z>:                    Section 2.2
* cmcScrollUp <^W>:                      Section 2.2
* cmcSearchAgain <^L>:                   Section 4.3.3
* cmcSearchClCor <Shift+^]>:             Section 2.5
* cmcSearchClPar <Shift+^0>:             Section 2.5
* cmcSearchComplement <^Q ESC>:          Section 2.5
* cmcSearchEnd <^]>:                     Section 2.5
* cmcSearchOpCor <Shift+^[>:             Section 2.5
* cmcSearchOpPar <Shift+^9>:             Section 2.5
* cmcSearchStart <^[>:                   Section 2.5
* cmcSelLength <^Q-L>:                   Section 2.4
* cmcSelRectCopy <^K-Shift+C> <1>:       Section 4.5.4
* cmcSelRectCopy <^K-Shift+C>:           Section 2.4.4
* cmcSelRectCut <^K-Shift+T>:            Section 4.5.6
* cmcSelRectCut <^K-ShiftT>:             Section 2.4.4
* cmcSelRectDel <^K-Shift+L> <1>:        Section 2.4.4
* cmcSelRectDel <^K-Shift+L>:            Section 4.5.7
* cmcSelRectEnd <^K-Shift+K> <1>:        Section 4.5.2
* cmcSelRectEnd <^K-Shift+K>:            Section 2.4.4
* cmcSelRectHide <^K-Shift+H> <1>:       Section 4.5.3
* cmcSelRectHide <^K-Shift+H>:           Section 2.4.4
* cmcSelRectMove <^K+Shift+V>:           Section 2.4.4
* cmcSelRectMove <^K-Shift+M>:           Section 4.5.8
* cmcSelRectPaste <^K-Shift+P> <1>:      Section 4.5.5
* cmcSelRectPaste <^K-Shift+P>:          Section 2.4.4
* cmcSelRectStart <^K-Shift+B> <1>:      Section 4.5.1
* cmcSelRectStart <^K-Shift+B>:          Section 2.4.4
* cmcSetGlobalOptions <Alt+G> <1>:       Section 2.5
* cmcSetGlobalOptions <Alt+G>:           Section 4.2.9
* cmcSetLocalOptions <Alt+L> <1>:        Section 2.5
* cmcSetLocalOptions <Alt+L>:            Section 4.2.8
* cmcSmartIndent <^Tab>:                 Section 2.4.3
* cmcSmartUnIndent <Shift+^Tab>:         Section 2.4.3
* cmcStartSelect <^K-B>:                 Section 2.4
* cmcStopMacro <Alt+F10> <1>:            Section 2.5
* cmcStopMacro <Alt+F10>:                Section 4.4.2
* cmcTextEnd <^Q-C>:                     Section 2.2
* cmcTextStart <^Q-R>:                   Section 2.2
* cmcToLower <^K-O>:                     Section 2.4
* cmcToUpper <^K-M>:                     Section 2.4
* cmcUndo <Alt+Backspace>:               Section 2.5
* cmcUndo <Alt+BackSpace>:               Section 4.2.1
* cmcUnIndentBlk <^K-Shift+Tab>:         Section 2.4.3
* cmcUnIndentBlkOne <^K-U>:              Section 2.4.3
* cmcWordLeft <^Left arrow>:             Section 2.2
* cmcWordRight <^Right arrow>:           Section 2.2
* cmcWriteBlock <^K-W>:                  Section 2.4
* cmeAnotherInfView <From menu>:         Section 4.9.2
* cmeCalculator <Alt+F4>:                Section 4.7.2
* cmeCascade <From menu>:                Section 4.6.4
* cmeChangeDrct <From menu>:             Section 4.1.9
* cmeClose <Alt+F3>:                     Section 4.6.7
* cmeClosePrj <From menu>:               Section 4.8.2
* cmeConfRunCommand <From menu>:         Section 4.7.1.5
* cmeDosShell <From menu>:               Section 4.1.10
* cmeEdGralOptions <From menu>:          Section 4.7.1.3
* cmeEditKeyBind <From menu>:            Section 4.7.1.7
* cmeEditPalette <From menu>:            Section 4.7.1.2
* cmeGrepDialog <From menu>:             Section 4.7.5
* cmeHTMLAccents <From menu>:            Section 4.7.6
* cmeInfView <F1>:                       Section 4.9.1
* cmeKbBackDefault <From menu>:          Section 4.7.1.10
* cmeKeyPadBehavior <From menu>:         Section 4.7.1.9
* cmeListWin <Alt+0>:                    Section 4.6.8
* cmeNew <From menu>:                    Section 4.1.2
* cmeNext <F6>:                          Section 4.6.5
* cmeOpen <F3>:                          Section 4.1.1
* cmeOpenPrj <From menu>:                Section 4.8.1
* cmePrev <Shift+F6>:                    Section 4.6.6
* cmePrintEditor <From menu>:            Section 4.1.7
* cmeQuit <Alt+X>:                       Section 4.1.12
* cmeQuitDelete <Alt+Q>:                 Section 4.1.11
* cmeResize <^F5>:                       Section 4.6.1
* cmeRunCommand <Ctrl+F9>:               Section 4.7.4
* cmeSDG <F9>:                           Section 4.7.3
* cmeSDGDialog <From menu>:              Section 4.7.1.4
* cmeSeeScanCodes <From menu>:           Section 4.7.1.11
* cmeSetColors <From menu>:              Section 4.7.1.1
* cmeSetScreenOps <From menu>:           Section 4.7.1.12
* cmeSetUpAltKeys <From menu>:           Section 4.7.1.8
* cmeSetUpPrinter <From menu>:           Section 4.1.8
* cmeShowClip <From menu>:               Section 4.2.6
* cmeSyntaxHelp <^F1>:                   Section 4.9.4.3
* cmeSyntaxHelpFiles <From menu>:        Section 4.9.4.2
* cmeSyntaxHelpOps <From menu>:          Section 4.9.4.1
* cmeTile <From menu>:                   Section 4.6.3
* cmeTipOfTheDay <From menu>:            Section 4.9.3
* cmeUserScreen <Alt+F5>:                Section 4.6.9
* cmeZoom <F5>:                          Section 4.6.2
* Compact the text using tabs <From menu>: Section 2.5
* Convert all tabs in spaces <From menu>: Section 2.5
* Convert to Lowercase <^K-O>:           Section 2.4
* Convert to Uppercase <^K-M>:           Section 2.4
* Copy the selected block <^K-C>:        Section 2.4
* Copy to Clipboard <^Ins>:              Section 2.4
* Copy to special Clipboard <^K-Shift+C>: Section 2.4.4
* Delete block <^Del>:                   Section 2.4
* Delete block <^K-Shift+L>:             Section 2.4.4
* Delete block and copy it to an special Clipboard <^K-ShiftT>: Section 2.4.4
* Delete block and copy it to the Clipboard <^K-Y>: Section 2.4
* Delete character to left <Backspace>:  Section 2.3
* Delete line <^Y>:                      Section 2.3
* Delete the character under cursor <Del>: Section 2.3
* Delete to end of line <^Q-Y>:          Section 2.3
* Delete to start of line <^Q-H>:        Section 2.3
* Delete word at left <^T>:              Section 2.3
* Delete word at right <^Backspace>:     Section 2.3
* End of line <End>:                     Section 2.2
* Find place marker <^Q n*>:             Section 2.5
* Goto Line <^J>:                        Section 2.5
* Hide/Show block <^K-H>:                Section 2.4
* Hide/Show block <^K-Shift+H>:          Section 2.4.4
* Indent block <^K-Tab>:                 Section 2.4.3
* Indent block one position adding a space <^K-I>: Section 2.4.3
* Insert line <Enter>:                   Section 2.3
* Insert mode on/off <Ins>:              Section 2.3
* Line down <Down arrow>:                Section 2.2
* Line up <Up arrow>:                    Section 2.2
* Mark line <^K-L>:                      Section 2.4
* Mark word <^K-T>:                      Section 2.4
* Move block <^K+Shift+V>:               Section 2.4.4
* Move block <^K+V>:                     Section 2.4
* Move to beginning of block <^Q-B>:     Section 2.4
* Move to end of block <^Q-K>:           Section 2.4
* Page down <PgDn>:                      Section 2.2
* Page up <PgUp>:                        Section 2.2
* Paste from Clipboard <Shift+Ins>:      Section 2.4
* Paste from special Clipboard <^K-Shift+P>: Section 2.4.4
* Play a macro <^F10>:                   Section 2.5
* PMacro's Trigger <^Space>:             Section 2.5
* Read block from disk <^K-R>:           Section 2.4
* Replace the block by the Clipboard block <Shift+^Ins>: Section 2.4
* Report the length of the block <^Q-L>: Section 2.4
* Scroll the screen one line down <^Z>:  Section 2.2
* Scroll the screen one line up <^W>:    Section 2.2
* Search the ( where the cursor is <Shift+^9>: Section 2.5
* Search the ) where the cursor is <Shift+^0>: Section 2.5
* Search the [ where the cursor is <Shift+^[>: Section 2.5
* Search the ] where the cursor is <Shift+^]>: Section 2.5
* Search the close curly bracket where the cursor is <^]>: Section 2.5
* Search the complementary pair <^Q ESC>: Section 2.5
* Search the open curly bracket where the cursor is <^[>: Section 2.5
* Set beginning of block <^K-B>:         Section 2.4
* Set beginning of block <^K-Shift+B>:   Section 2.4.4
* Set end of block <^K-K>:               Section 2.4
* Set end of block <^K-Shift+K>:         Section 2.4.4
* Set marker <^K n*>:                    Section 2.5
* Set the default options (Not in RHIDE) <Alt+G>: Section 2.5
* Set the options of the current window (Not in RHIDE) <Alt+L>: Section 2.5
* Smart Indent block <^Tab>:             Section 2.4.3
* Smart Unindent block <Shift+^Tab>:     Section 2.4.3
* Start recording a macro <Shift+F10>:   Section 2.5
* Stop recording a macro <Alt+F10>:      Section 2.5
* Top of file <^Q-R>:                    Section 2.2
* Top of window <^Q-E>:                  Section 2.2
* Undo <Alt+Backspace>:                  Section 2.5
* Unindent block <^K-Shift+Tab>:         Section 2.4.3
* Unindent block one character - not an x position <^K-U>: Section 2.4.3
* Word left <^Left arrow>:               Section 2.2
* Word right <^Right arrow>:             Section 2.2
* Write block to disk <^K-W>:            Section 2.4

