Short: EvenMore textviewer plugins source Author: chris@prophecynews.co.uk (Chris Perver) Uploader: chris prophecynews co uk (Chris Perver) Type: text/show Version: 0.89 Replaces: text/show/EvenMorePlugins.lha Requires: ECX or AmigaE Architecture: generic These are the source code for the plugins for EvenMore. They are written in the AmigaE and ECX programming languages, but there is no reason why you should not be able to create plugins using any programming language. USAGE ===== These source codes have been uploaded to Aminet so that others can see how to create their own plugins for EvenMore. You are free to use and modify this code for your own personal use. The only thing I would ask is, if you are interested in writing a plugin for EvenMore, to let me know so I can put it up on my website. If you do want to use some of this code for your own programming, I have no objection to that, so long as you mention where you got it from in your documentation. Apart from some example code taken from the ROM Kernel manuals, this is all my own work, and represents many years work. I also take no responsibility for any bugs left in it! THE PLUGIN SYSTEM ================= The old EvenMore plugin system used the Amiga library system. EvenMore would open these libraries sequentially and check to see if the plugin criteria matched those of the open file. If a match was found, EvenMore passed the file onto the plugin, which then processed the file and returned the results. This system worked well for AmigaE, but when I moved onto the ECX compiler to make a MorphOS version of EvenMore, I found it was not able to compile Amiga libraries. So I had to come up with an alternative method of creating the plugins. Now each plugin is compiled as an executable file. When EvenMore opens, it launches these plugins. Each plugin opens a port through which it communicates with the main program, and passes information to and from it as necessary. While this uses up a little more memory than your average plugin system, it is quite fast as the plugin code is always resident in memory. The only real processor power being used is to convert the file. PLUGIN TYPES ============ There are several main types of file plugin that can be created for EvenMore. Each of these has a specific ID tag. They are as follows, and are called by EvenMore in this order. FTYP | No-+-Yes | ARCH | No-+-Yes | | PACK | | | FILE | | | No-+-Yes-+ | | DTYP | | | No-+-Yes----+ | | GENE | | | No-+-Yes-------+ | | +--------------+ | FRMT FTYP The FTYP plugins will be called before the file is opened by EvenMore. These plugins just check the extension name of the file to see if it needs to be passed onto another program specified in the filetypes.txt file rather than opened in EvenMore. For example, PDF files, picture or sound files. 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. PACK PACK plugins enable EvenMore to open compressed files such as XPK and PowerPacker. They are called before the main file conversion plugins. EvenMore opens the file and passes it onto these plugins. The plugin then analyzes it, performs any necessary operations and returns the buffer back to the main program. EvenMore then passes the updated buffer onto the file conversion plugins. FILE The FILE plugins are used to convert one document format into another. For example, MSWord files, AmigaGuide, etc into plain text. If the file does not match the criteria of any of these plugins, it is passed onto the following two plugin types. 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 EvenMore will then pass the file onto the FRMT plugins for formatting. Even if a plugin has already been found for the file, EvenMore will still pass it on to these plugins. These will make minor formatting changes to the document. One such plugin is the wordwrapping plugin, which ensures that the document appears in a format that is easy to read. The other two plugins that EvenMore uses are for controlling the preferences. MPRF The MPRF plugin holds the main GUI and settings for the EvenMore preference window. PREF The PREF plugins are used for creating additional pages in the preference window to store settings for specific plugins. HOW THEY WORK ============= The plugins are executable files that EvenMore launches whenever the main program starts. EvenMore opens a special port called EVENMOREP and then executes the plugin. The plugin initializes itself and passes a message back to the EVENMOREP port to signal that it is ready. When EvenMore is opening a file, it will scan through all the plugin ports, passing a status ID and file information to them. The status ID tells the plugin what function to execute in relation to the file. STATUS -1 - Close the plugin, EvenMore is quitting 0 - Not used 1 - Initialize the plugin, open libraries, etc if necessary 2 - Examine the filename or file contents to see if we can process it RETURNS: FALSE - The file did not match the criteria specified TRUE - A match has been found but we do not need to allocate memory, just modify the original text buffer in place 1 - Signal EvenMore to allocate an area of memory for a new file buffer 2 - Signal EvenMore to create a linked list for a new file buffer 3 - Run the file conversion routine on the file 4 - Load the plugin preference file 5 - Save the plugin preference file 6 - Open the plugin preference GUI 7 - Return plugin title for the information page EvenMore used to always allocate a section of memory for file conversion, but this was unstable because there was a chance the output format could overrun the buffer allocated. I have tried to get as many of the plugins to use the linked list format as possible, as this memory is dynamically allocated. I hope this source code can be of some benefit to the Amiga community.