Iconv Module API
================

If using C, then you really should be using the libiconv stubs provided
(or UnixLib, if appropriate). See the iconv.h header file for further 
documentation of these calls.

Iconv_Open (&57540)
-------------------

  Create a conversion descriptor

  On Entry: r0 -> string containing name of destination encoding (eg "UTF-8")
            r1 -> string containing name of source encoding (eg "CP1252")

  On Exit:  r0 = conversion descriptor
            All others preserved

  Either encoding name may have a number of parameters appended to them.
  Parameters are separated by a pair of forward-slashes ("//").
  Currently defined parameters are:
  
	Parameter:	Destination:			Source:

	TRANSLIT	Transliterate unrepresentable	None
			output.

  The conversion descriptor is an opaque value. The user should not, 
  therefore, assume anything about its meaning, nor modify it in any way. 
  Doing so is guaranteed to result in undefined behaviour.


Iconv_Iconv (&57541)
--------------------

  This SWI is deprecated and Iconv_Convert should be used instead.


Iconv_Close (&57542)
--------------------

  Destroy a conversion descriptor

  On Entry: r0 = conversion descriptor to destroy
  
  On Exit:  r0 = 0
            All others preserved


Iconv_Convert (&57543)
---------------------

  Convert a byte sequence to another encoding
  
  On Entry: r0 = conversion descriptor returned by Iconv_Open
            r1 -> input buffer (or NULL to reset encoding context)
            r2 = length of buffer pointed to by r1
            r3 -> output buffer
            r4 = length of buffer pointed to by r3

  On Exit:  r0 = number of non-reversible conversions performed (always 0)
            r1 -> updated input buffer pointer (after last input read)
            r2 = number of bytes remaining in input buffer
            r3 -> updated output buffer pointer (i.e. end of output)
            r4 = number of free bytes in the output buffer
            All others preserved

  Note that all strings should be NUL-terminated so, if calling from BASIC, 
  some terminating character munging may be needed.


Errors:

Should an error occur, the SWI will return with V set and r0 -> error buffer.
Note that only the error number will be filled in and may be one of:

  ICONV_NOMEM (&81b900)
  ICONV_INVAL (&81b901)
  ICONV_2BIG  (&81b902)
  ICONV_ILSEQ (&81b903)

These map directly to the corresponding C errno values.


Iconv_CreateMenu (&57544)
-------------------------

  Create a menu data structure containing all available encodings.

  On Entry: r0 = flags. All bits reserved, must be 0
            r1 -> buffer, or 0 to read required length
            r2 = length of buffer in r1
            r3 -> currently selected encoding name, or 0 if none selected
            r4 -> buffer for indirected data, or 0 to read length
            r5 = length of buffer in r4
  
  On Exit:  r2 = required size of buffer in r1 if r1 = 0 on entry,
                 or length of data placed in buffer
            r5 = required size of buffer in r4 if r4 = 0 on entry,
                 or length of data placed in buffer

  Menu titles are direct form text buffers. Menu entries are indirect text.
  Entry text is stored in the buffer pointed to by R4 on entry to this call.


Iconv_DecodeMenu (&57545)
-------------------------

  Decode a selection in a menu generated by Iconv_CreateMenu.
  Places the corresponding encoding name in the result buffer.
  
  On Entry: r0 = flags. All bits reserved, must be 0
            r1 -> menu definition
            r2 -> menu selections, as per Wimp_Poll
            r3 -> buffer for result or 0 to read required length
            r4 = buffer length
  
  On Exit:  r4 = required size of buffer if r3 = 0 on entry,
                 or length of data placed in buffer (0 if no selected 
                 encoding)

  The menu selections block pointed to by r2 on entry should be based at
  the root of the encodings menu structure (i.e. index 0 in the block
  should correspond to the selection in the main encoding menu).
  
  This call will update the selection status of the menu(s) appropriately.


Example Code:
=============

Example code may be found in the IconvEg BASIC file.
