TABLE OF CONTENTS

arexx.class/--datasheet--
arexx.class/AM_EXECUTE
arexx.class/AM_FLUSH
arexx.class/AM_HANDLEEVENT
arexx.class/AREXX_GetClass
arexx.class/--datasheet--                           arexx.class/--datasheet--

    NAME
	arexx_cl -- ARexx interface class.

    SUPERCLASS
	rootclass

    DESCRIPTION
	This class provides you with a very easy way to implement an ARexx
	interface. It will setup a unique ARexx port, start ARexx macros,
	parse commands and dispatch command handler functions.

	All ARexx class methods and the callbacks you provide it are run in
	the context of the task you call ARexx class from. Thus if your
	application is a Process, DOS is safe to use.

    METHODS
	OM_NEW -- Passed to superclass first. Sets up the port.

	OM_GET -- Returns requested attributes. Passed onto superclass.

	OM_DISPOSE -- Closes the port and frees all resources. Passed onto
	              superclass.

	AM_EXECUTE -- Executes an ARexx command or macro.

	AM_HANDLEEVENT -- Handles ARexx messages.

	AM_FLUSH -- Flush all pending ARexx messages.

    ATTRIBUTES
	AREXX_HostName (CONST_STRPTR)
	    The name of the host. The ARexx portname is derived from this.
	    In pretty much all cases, this should the same as your
	    application's basename. You should refrain from using names
	    like "MYPROG_RX" or others with unnecessary suffixes.

	    To create the port name, the hostname will be uppercased and
	    unless AREXX_NoSlot is specified, a slot number will be
	    appended.

	    Applicability is (OM_NEW, OM_GET)

	AREXX_NoSlot (BOOL)
	    Specifies that no slot number should be appended to the port
	    name when it is being created. This greatly increases the
	    chances that your requested portname is in use so your code
	    must be sure to handle this situation.

	    Defaults to FALSE.

	    Applicability is (OM_NEW)

	AREXX_DefExtension (CONST_STRPTR)
	    Default filename extension for macros started by your app. Do
	    not include the ".", just the extension text. In pretty much
	    all cases, this should be the same as your application's
	    basename. You should refrain from using extensions like "myrx".

	    Defaults to "rexx".

	    Applicability is (OM_NEW)

	AREXX_Commands (struct ARexxCmd *)
	    The table of the commands supported by your ARexx interface.
	    This will be a pointer to an array of struct ARexxCmd. If this
	    array is not passed then your host will not be able to process
	    any ARexx commands.

	    The following fields must be setup initially by the application
	    before OM_NEW:

	      ac_Name (CONST_STRPTR)
	        The name of the command. By convention this is usually all
	        uppercase though a case-insensitive comparisons will be done.

	      ac_ID (uint16)
	        A unique number identifying this command.

	      ac_Func (*()(struct ARexxCmd *, struct RexxMsg *))
	        A pointer to the function that will be called when this
	        command is received by your programme. The function will
	        get past a pointer to its ARexxCmd entry and the RexxMsg
	        structure received for the command. You may use this
	        for setting ARexx variables but please note that it may
	        be NULL.

	      ac_ArgTemplate (CONST_STRPTR)
	        ReadArgs()-style argument template for this command.

	      ac_Flags (uint32)
	        Command flags. Currently unused, but in order to remain
	        compatable you must ensure that this is NULL.

	    These fields are ignored in OM_NEW and are set by the class
	    when calling the ac_Func command callback.

	      ac_ArgList (uint32 *)
	        Result of ReadArgs() using the arguments received with the
	        command and ac_ArgTemplate as the template.

	      ac_RC (int32)
	        Primary result, the RC variable. Also causes the RC2
	        variable to return and will cause RESULT to NOT be set.

	      ac_RC2 (int32)
	        Secondary result, the RC2 variable. This will not be set
	        unless RC is non-zero.

	      ac_Result (STRPTR)
	        RESULT variable, this should be a string. If you want to
	        return a number you will have to convert it to a string
	        first. This string will not be set if RC is non-zero.

	    The array must be terminated with a NULL ac_Name field.

	    Applicability is (OM_NEW)

	AREXX_ErrorCode (uint32 *)
	    A pointer to storage space for OM_NEW to store an error code
	    when it fails trying to create the object. Possible values are:

	    RXERR_NO_COMMAND_LIST     - No command list was provided.
	    RXERR_NO_PORT_NAME        - No host base name was provided.
	    RXERR_PORT_ALREADY_EXISTS - The class  was unable to create a
	                                unique name of the base name you
	                                provided.
	    RXERR_OUT_OF_MEMORY       - Not enough free memory.

	    No error code will be returned if you provide a NULL pointer.

	    Defaults to NULL.

	    Applicability is (OM_NEW)

	AREXX_SigMask (uint32)
	    The signal mask for the object's message port. This is the
	    signal you will want to Wait() on so you know when there is
	    activity at the ARexx port.

	    Applicability is (OM_GET)

	AREXX_ReplyHook (struct Hook *)
	    This is a function hook that will get called whenever your host
	    replies to an ARexx message. This generally happens after your
	    host has sent a message (eg. via AM_EXECUTE) and the task
	    receiving the message has completed its processing with the
	    message. This is most useful for checking return codes from
	    commands sent via AM_EXECUTE.

	    The object parameter in the hook function will point to the
	    Object * that is your host and the message parameter will be
	    the ARexx message that is being replied to (from which you
	    could extract result codes).

	    Defaults to NULL.

	    Applicability is (OM_NEW, OM_GET)

	AREXX_MsgPort (struct MsgPort *)
	    The message port to use for all communications instead of
	    creating a port. Do not specify AREXX_HostName when using
	    this tag. The user supplied message port is not automatically
	    freed.

	    Applicability is (OM_NEW)

	BUGS
	    AREXX_HostName must be all uppercase in V40 otherwise the
	    checks for an already existing port won't work correctly.

	    The message port supplied with AREXX_MsgPort was being
	    implicitly freed until version 53.5. With 53.5 and higher the
	    message port will not be freed and it is the responsibility
	    of the application to do so.

arexx.class/AM_EXECUTE                                 arexx.class/AM_EXECUTE

    NAME
	AM_EXECUTE -- Execute an ARexx macro.

    SYNOPSIS
	uint32 result = IDoMethodA(APTR obj, struct apExecute* msg);

    FUNCTION
	This method allows you to execute a macro in another host. The
	default host is the ARexx server. This is how you would execute
	disk-based ARexx macros, by passing the name of the file as the
	command string to the ARexx server.

	This method uses the following custom message structure:

	struct apExecute
	{
	    uint32       MethodID;
	    CONST_STRPTR ape_CommandString;
	    CONST_STRPTR ape_PortName;
	    int32 *      ape_RC;
	    int32 *      ape_RC2;
	    STRPTR *     ape_Result;
	    BPTR         ape_IO;
	};

	ape_CommandString (CONST_STRPTR)
	    This must point to the command including arguments to execute.
	    If the command is found in the host command list it will be
	    executed. Unknown commands will be shipped off to the ARexx
	    server.

	ape_RC, ape_RC2, ape_Result (int32 *, int32 *, STRPTR *)
	    After the command executed you will find the results in here if
	    the command was one in your host or if there was a problem
	    sending the command to the specified host. You will NOT get the
	    result of the command if it is sent to another host since the
	    command is sent asychronously. Use AREXX_ReplyHook for this.

	ape_IO (BPTR)
	    If you execute a script using this method you can pass a pointer
	    to the IO channel ARexx must use here. This IO channel will be
	    closed automatically for you after the command executed.


    INPUTS
	obj - arexx object pointer
	msg - struct apExecute pointer
	      (see <classes/arexx.h>)

    RESULT
	As errors are reported in acme_RC and acme_RC2 this method has no
	specific return code.

arexx.class/AM_FLUSH                                     arexx.class/AM_FLUSH

    NAME
	AM_FLUSH -- Flush all ARexx messages.

    SYNOPSIS
	uint32 result = IDoMethodA(APTR obj, Msg msg);

    FUNCTION
	This method will flush all the currently pending ARexx messages.

    INPUTS
	obj - arexx object pointer
	msg - Msg with MethodID = AM_FLUSH
	      (see <intuition/classusr.h>)

    RESULT
	No return code is specified for this method.

arexx.class/AM_HANDLEEVENT                         arexx.class/AM_HANDLEEVENT

    NAME
	AM_HANDLEEVENT -- Handles ARexx messages.

    SYNOPSIS
	uint32 result = IDoMethodA(APTR obj, Msg msg);

    FUNCTION
	This method will handle all incoming and outgoing message traffic
	from your host. When you are signalled you simply call this method
	and everything is done for you.

    INPUTS
	obj - arexx object pointer
	msg - Msg with MethodID = AM_HANDLEEVENT
	      (see <intuition/classusr.h>)

    RESULT
	No return code is specified for this method.

arexx.class/AREXX_GetClass                         arexx.class/AREXX_GetClass

    NAME
	AREXX_GetClass -- Gets pointer to the ARexx class.

    SYNOPSIS
	Class * class = AREXX_GetClass();

    FUNCTION
	This function is deprecated as of V52.
	Use the "arexx.class" public class ID instead.

    RESULT
	class - Pointer to the ARexx class.