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.