EvenMore ©1996-2016 Chris Perver
Escape Code Interpreter
The Amiga operating system is well designed, but for some reason it has always lacked a decent textviewer. Commodore developed the More tool for reading plain text, and Amiga Guide and MultiView offered more enhanced features, including datatype recognition and such like. I wanted a textviewer which would look good and blend in with all my other Workbench patches. I started developing EvenMore in 1996 as a hobby. It started off fairly basic as textviewers go, but now EvenMore offers functions such as proportional font support, multi-coloured text, file conversion plugins, and more. EvenMore is entirely programmed in AmigaE and ECX, which is an excellent programming language developed by Wouter van Oortmerssen and Leif Salomonsson.
Those requirements in red are essential for EvenMore to run. Those in black are libraries used by EvenMore if available.
OpenURL library (for clickable links in HTML files)
CyberGraphics library (for detection of true colour graphics cards modes)
Lha, Lzx and Unzip commands for browsing archives
Installation is simple. EvenMore should run from the directory it is in, without any need of setup, as long as you have the required libraries already on your system.
EvenMore can load multiple files when launching through the Shell or Workbench.
EvenMore Docs:EvenMore SYS:Utilities S:User-startup S:Startup-sequence
You can shift-select multiple files or drawers with the EvenMore executable (holding shift, left click on the EvenMore icon, then double click on a file). EvenMore also supports dragging and dropping files or directories on to its main window. Just drag a file or drawer on to the EvenMore window, or onto the icon when EvenMore is iconified, and EvenMore will open the file or directory.
If you try to launch EvenMore and a copy of the program is already running, then EvenMore will pass the files you have selected on to the open copy via ARexx, and will close itself.
EvenMore will detect on start-up what type of files you have selected to open. If you are running the FileTypes plugin module, EvenMore will first scan through what filetypes have been configured, and then launch the applications associated with the files listed in filetypes.txt. If there are any files remaining to be opened, the EvenMore window should then appear.
Along the top of the window you will see two string gadgets. The large one on the left displays the full path of the currently opened file. You can also type a new file or directory into this string gadget and EvenMore will open it. To the left of this gadget there are three arrow buttons. The first two buttons browse between the currently opened files. The third arrow button opens the parent directory of the currently opened file. If you have the dir2text.plugin installed, this directory will be displayed in the main EvenMore text window. The string gadget to the right of this is a search box into which you can enter a word. EvenMore will then perform a case insensitive search on the currently viewed file, beginning at the first line displayed in the window. You can repeat the search using the arrow buttons or the keyboard commands listed in this document. At the top right-hand side of the window you will see a gadget with a plus sign in it. Clicking this gadget will store the currently viewed file and line number in the bookmarks list.
Below these gadgets you will see the information bar. This displays information as to where you are in the document, what plugin has been used to open the document, etc. At the right hand side of this information bar you will see several small icons. These are for performing operations on the currently opened file. They are close file, re-open file, save file (modified version displayed by EvenMore), edit file, print file, information, view bookmarks and preferences.
EvenMore will automatically look for a file called "quickload.txt" in the EvenMore directory. This is a simple text file containing a list of strings, something like the following...
Open in Multiview,sys:utilities/multiview "%s"
Each of these files will then be loaded into the Quickload menu in EvenMore for easy access. The keyword 'BAR' will create a menu break. 'SUB' will place the subsequent lines in a sub menu, with the preceding line containing the name of the sub menu. 'ITEM' designates the end of the declaration of sub menu items, and the beginning of the main menu items again. 'EXE' will cause EvenMore to treat the following lines as strings to execute from the shell rather than text files for opening. These lines can be preceded by a short description and a comma, to give them an intelligible name. The text after the comma contains the command to execute. EvenMore will replace the text %s in the strings with the currently opened file, so it is possible to pass this on to external programs with the click of the mouse. 'FILE' will revert EvenMore to treating subsequent strings as text files for loading in the text viewer again.
Any files that are loaded into EvenMore are stored in memory. EvenMore will allow you to open up to 1000 files at one time. You can move between the files you have opened using the keyboard or the interface.
|Up arrow, 8 on numeric keypad||Scroll up one line|
|Down arrow, 2 on numeric keypad||Scroll down one line|
|Left arrow, 4 on numeric keypad||Scroll left 10 pixels|
|Right arrow, 6 on numeric keypad||Scroll right 10 pixels|
|7 on numeric keypad||Move to the start of the document|
|1 on numeric keypad||Move to the end of the document|
|Shift + Up arrow, Page up, 9 on numeric keypad||Scroll up one page|
|Shift + Down arrow, Page down, 3 on numeric keypad||Scroll down one page|
|Shift + Left arrow||Scroll left one page|
|Shift + Right arrow||Scroll right one page|
|t||Scroll to top of document|
|b||Scroll to bottom of document|
|n||Repeat search forwards|
|Enter||Repeat search forwards|
|l||Repeat search backwards|
|c||Close current file|
|RAmiga + o||Open file|
|RAmiga + r||Reload current file|
|RAmiga + e||Edit current file|
|RAmiga + p||Print current file|
|RAmiga + i||Information on current file|
|RAmiga + c||Copy highlighted text|
|Tab||Activate file string|
|f||Activate search string|
|Control + Left arrow||Move to previous opened document|
|Control + Right arrow||Move to next opened document|
|Shift + ESC||Iconify|
You can edit the preferences by clicking Edit preferences in the File menu or by pressing the preferences button on the interface. Across the bottom of the window are 3 buttons marked Save (save settings to current preference file), Use (accept settings without saving them) and Cancel (reject any changes made). To the left is a listview where you can select different preference pages. These are as follows...
|File||Default||Document(s) loaded when EvenMore starts with no arguments.|
|Editor||Contains the path of your favourite text editor to use
when editing files. Note that the string you enter here is basically a command line. So you can
include options other than just the editor path.
Keyword... Replaced with...
|Text||Font||The font to use to display the file.|
|Leading||Extra space in pixels between the lines in a file.|
|Tab||How many spaces a tab character will use (default is 8).|
|Right to left||Display text in the reverse format in the window for languages that read right to left.|
|Info bar||The format of the file information bar.
Keyword... replaced with...
%fs File size
In addition there may be other preference pages in the list that appear depending on which plugins you have installed.
You can use EvenMore's ARexx port to control EvenMore remotely. The port's name is 'EVENMORE.1'. It supports the standard MUI ARexx commands for controlling the main application, plus several additional commands for controlling document functions.
The commands are:-
|CLOSE||Close current file|
|r = GETFILENAME||Return name of current file|
|OPEN <name>||Open a new file|
|VIEWFILE <number>||View a file already opened|
|r = CURRENTFILE||Get number of current file displayed|
|SAVE <name>||Save current file to disk|
|Print current file|
|r = GETLINE <number>||Return text of line number|
|r = GETFIRSTLINE||Get number of first line in window|
|r = GETLASTLINE||Get number of last line in window|
|r = GETFIRSTCOL||Same as above but for column numbers|
|r = GETLASTCOL||Same as above but for column numbers|
|r = GETTOTALLINES||Get total number of lines in window|
|r = GETTOTALCOLS||Same as above but for columns|
|SCROLLTOLINE <number>||Scroll to a line number in the window|
|r = SEARCH <string>||Search for this string in the current document|
|r = OCCURANCE <string>||Find how many times this string occurs in the document|
|HIDE/SHOW||Toggle iconifying of EvenMore|
'r = ' indicates the command returns a value. To use one of these commands from a shell, you could simply type the following:-
RX "ADDRESS 'EVENMORE.1'; OPEN 's:startup-sequence "ram disk:my file"'"
Note the quotes which must be put around some strings when characters like ':' are present in them.
EvenMore supports most of the standard Amiga escape code sequences for setting font styles. EvenMore also has an extended set of escape codes for customized styles and commands.
|ESC[0m||Undo all styles|
|ESC[21m||Undo bold style|
|ESC[22m||Undo highlight style|
|ESC[23m||Undo italic style|
|ESC[24m||Undo underline style|
|ESC[27m||Undo inverse style|
|ESC[30m||Set pen colour to 0|
|ESC[31m||Set pen colour to 1|
|ESC[32m||Set pen colour to 2|
|ESC[33m||Set pen colour to 3|
|ESC[34m||Set pen colour to 4|
|ESC[35m||Set pen colour to 5|
|ESC[36m||Set pen colour to 6|
|ESC[37m||Set pen colour to 7|
|ESC[40m||Set paper colour to 0|
|ESC[41m||Set paper colour to 1|
|ESC[42m||Set paper colour to 2|
|ESC[43m||Set paper colour to 3|
|ESC[44m||Set paper colour to 4|
|ESC[45m||Set paper colour to 5|
|ESC[46m||Set paper colour to 6|
|ESC[47m||Set paper colour to 7|
|ESC[50;<r>;<g>;<b>m||Set pen colour to the RGB colour value specified by the following three integers <r>, <g> and <b>|
|ESC[51;<r>;<g>;<b>m||Set paper colour to the RGB colour value specified by the following three integers <r>, <g> and <b>|
|ESC[52m||Turn on outline text style|
|ESC[53m||Turn off outline text style|
|ESC[54m||Set to main font specified in preferences|
|ESC[55m||Set to default fixed width font|
|ESC[56m||Turn on shadow text style|
|ESC[57m||Turn off shadow text style|
|ESC[58m||Turn on strikethrough text style|
|ESC[59m||Turn off strikethrough text style|
|ESC[60m||Turn on overline text style|
|ESC[61m||Turn off overline text style|
|ESC[62m||Turn on bevel text style|
|ESC[63m||Turn off bevel text style|
|ESC[64m||Right align text following|
|ESC[65m||Left align text following|
|ESC[66m||Centre align text following|
|ESC[67m||Turn on emboss text|
|ESC[68m||Turn off emboss text|
|ESC[69m||Turn on engrave text|
|ESC[70m||Turn off engrave text|
|ESC*CBAR||Draw a horizontal dividing line across the window|
|ESC*NODE,<str>||Specifies a hidden search string named <str> to be used with the ESC*LINK command|
|ESC*LINK,<linkname>,<line>,<file>,<displaytext>||A hyperlink command. Takes three optional arguments,
followed by the text to display
<linkname> is the name of the NODE string to search for
<line> is the line number to scroll to in the current file in the current file or the file we are about to open
<file> is an external web address or text file to open
<displaytext> is the link text to display
|ESC*CEND||Specifies the end of a NODE command or LINK command|
There are quite a few plugins I have created for use with EvenMore, ranging from MSWord file conversion, HTML, RTF, and many more formats. When EvenMore loads, it will automatically check the file it is loading against each of the plugins that are installed in the plugins directory. When a match is found, this plugin will then convert the file data into a readable format. Now full colour text is possible in EvenMore, and many plugins will support this (see RTF, HTML plugins, WordWorth, etc). The function of each of the plugins will vary. One such plugin is the Filetypes plugin. This plugin looks for a file called "filetypes.txt" in the EvenMore directory. This is a file containing wildcard matches for files and an associated program path to launch the selected file with, eg:-
This string would cause EvenMore to pass any file ending in ".guide" over to MultiView to open. The '%s' in the line is replaced with the file selected for loading. Other plugins are designed to unarchive files, wordwrap text, and so on. Some plugins allow you to create your own preferences in the EvenMore preference window. This will allow more complicated plugins to be developed in the future.
Creating your own plugins
The plugins are fairly simple to code, and anyone
with a basic understanding of any compiling language is able to create
these. There are a few basic types of plugins you can create. These are identified by
EvenMore using the TYPE string in the plugin's object.
When EvenMore opens a file, it is passed through these plugin types in the following order...
FTYP: This plugin type is loaded whenever the user has selected which file they want to
load, but before the file is actually opened. The name of the file is passed on to the plugin,
and the plugin returns either TRUE or FALSE to EvenMore depending on whether a match was made.
will stop EvenMore from opening the file itself. The plugin will then be
responsible for what actually happens after this.
ARCH: ARCH plugins can be used for browsing archived files and directories. EvenMore does not open the file at this stage, but passes only the name of the file onto the plugin. It is then up to the plugin to analyze the file and construct a textual version of its contents if necessary. There is a subfilename string which can be set in order to extract and browse a particular file in the archive.
FILE: This is the main type of plugin. Whenever EvenMore opens a file, this plugin will return a value depending on whether the file matched the plugin's criteria. If so, the conversion function will then be called, which will convert the file format.
DTYP: The DTYP plugins will check the file against any text datatypes the user has installed on the operating system. As these datatypes generally do not allow for ANSI escape code sequences, they are called after the main file conversion plugins. But if there is a particular filetype you want the DTYP plugin to handle instead of the FILE plugin, it is just a case of deleting that particular FILE plugin.
GENE: If the file does not match the criteria of any of the file conversion or datatype plugins, it will be checked against the generic plugins. These are fall-back plugins which will analyze the file for ASCII text and discard anything that is unprintable. Sometimes this works for more obscure document formats that do not have a particular plugin made for them.
FRMT: This plugin type is used after all other plugin types have been checked
against the file and if none of the other FILE plugins have been used. The plugins that use
this identifier should only change the formatting of a document if necessary,
and not affect the file in any other way. An example of a plugin that would use
the FRMT identifier would be a word wrapping plugin.
Other plugins which don't relate to loading files...
PREF: This plugin will create its own page on the preference window of EvenMore.
This can be used to store user settings for created plugins. The preference
plugin will have its own separate configuration file, which will be loaded or
saved whenever the main EvenMore configuration file is loaded or saved.
MPRF: This plugin is used to create the preferences window for EvenMore. The current preference plugin is created in EasyGUI, but could be replaced by an MUI interface or any other GUI. Because the preference window and settings are set through a plugin, it would also be possible for programmers to customize and expand their EvenMore preferences, either for plugins they create or for the main EvenMore program.
For examples of these plugins, please refer to the EvenMore website where their source code can be freely downloaded.
You can contact me at the following addresses.
| Chris Perver
6 Gransha Road
I cannot expect to be able to develop this program much further, as I am a Christian and believe Jesus Christ will return very soon. If I do not reply to any mail for months and months, then the development of this program has ceased.
If anyone wishes to help in the distribution files, please email me. You could design a few NewIcons, MagicWB icons, Iconographics icons, plugins, or anything. If you have any suggestions or contributions for the distribution files, again email me :). Suggestions for the program are always welcome.
Mum & dad - RKRM manuals, Amiga 3000... (you name it,
they provided it)
Johan Björnson - AmigaGuide, program icons...
Per Reidar Verlo - Norsk Install script, locale translations
Girish Nath - Program icons
Per Reidar Verlo
Roland de Herder
Per Reidar Verlo - Norsk
Roland de Herder - Nederlands
Victor Gutiérrez - Español
Jerome Chesnot - Français
Raul Silva - Português, Glowicon and Newicon sets, program, drawer and document icons
Vitaliy Chepeleff - Russian
Alfred Faust - Deutsch
Jan Zahurancik - Slovak
Pär Boberg - Svensk
ATO-PL - Polski
Members which working on it:
Mariusz Danilewicz - firstname.lastname@example.org
Without the following people, writing this program would have been virtually impossible...
Oortmerssen - AmigaE and EasyGUI
J R Hulance - AmigaE and EasyGUI help