OmniClient¨ filename translation specs		Revision 0.410, Nick, 18/11/94
======================================		COMPANY CONFIDENTIAL

Changes
-------

18-11-94:0.401 - 0.410:
   22:  Mention of case sensitivity-on flag
   87:  Details of case sensitive 'c' flag
16-11-94:0.400 - 0.401:
   19:	Mention that extension matches are case-insensitive
03-11-94:draft#3 - 0.400:
  all:  Large number of changes since syntax of file format has changed

Terminology
-----------

client-name	Name of OmniClient module (filing system name in fact)
extension	Alien filing system extension string. This DOES NOT
		include the separator string (eg, '/' or '.') and may be
		wildcarded, with '?' for a single character and '*' for
		multiple characters. Matches are case-insensitive, unless
		set to case sensitive by use of an optional flag.
filetype	RISC OS numeric filetype, given as hex (0x000-0xFFF)
                a special filetype of 0x9999 is taken to be the default
                to allow all other RISCOS filetypes to be mapped to a
                given extension string. &NNN is accepted as well as 0xNNN
flags		Optional flags for this mapping (see below)


File format
-----------

The file consists of sequence of blocks of mappings for a given client/
protocol module. For simplicity, the punctuation is kept to a minimum.
eg, no requirements for semi-colons, quotes, tagged fields, etc.

There is always a block with a client-name of 'default'. This provides
default mappings that a Client module can override by having a mapping
entry in its own block.

The mapping strings are prioritised using the order in which they appear
in the file. ie, the higher up in the file they appear, the higher the
priority. Hence a '*' wildcard will match everything if it appears first
in the file (which is not what you want!)

Comments can appear anywhere in the file (started by a '#' character),
and last to the end of the line. A new block of mappings for a different
client module is marked by a valid client name with no extra punctuation
(so that it cannot be confused with a file extension string).

If the client name is not registered at the time the file is parsed,
mappings following are skipped. This has the result that if the filetype
mappings file is parsed before client modules are loaded, then no mappings
can take place. The solution to this problem that OmniClient uses is that
every time a client module registers, the filetypes mapping file is 
reparsed. However, this only occurs once during startup - it is only if
client modules register at some later time that the file is reparsed.

  # comment line
  client-name
  
  extension,filetype,flags
  extension,filetype,flags
  ...
  filetype,extension,flags
  filetype,extension,flags
  ...
  

Flags
-----

The flags string is optional for every mapping. It consists of a 
sequence of single characters, with no separators, that each relate to
a specific feature to turn on. The currently defined flags are;

  Flag char	Meaning
  ---------------------------------------------------------------------
  k		Keep file extension when Alien->RISC OS mapping. ie,
  		"READ.ME" can become "READ/ME" (type 0xFFF). The 
  		default action is to remove these extensions.
  s		Create a subdirectory when Alien->RISC OS mapping. ie,
  		"PROG.C" can become "C.PROG" (type 0xFFF). Note that
  		support for this flag is optional, and Client writers
  		may choose not to implement it.
  c		Extension matches are case sensitive (default is case-
  	 	insensitive). This would allow '.z' (gzip) and '.Z'
  	 	(compress) file extensions to be distinguished, for
  	 	example.

nas@ant.co.uk
---
Document ends
