[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef CLASSES_AREXX_H
#define CLASSES_AREXX_H
/*
**      $VER: arexx.h 44.1 (19.10.1999)
**      Includes Release 44.1
**
**      arexx.class definitions
**
**      (C) Copyright 1987-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif

#ifndef DOS_DOS_H
#include <dos/dos.h>
#endif

#ifndef DOS_RDARGS_H
#include <dos/rdargs.h>
#endif

#ifndef REXX_STORAGE_H
#include <rexx/storage.h>
#endif

#ifndef REXX_RXSLIB_H
#include <rexx/rxslib.h>
#endif

#ifndef REXX_ERRORS_H
#include <rexx/errors.h>
#endif

#ifndef INTUITION_CLASSES_H
#include <intuition/classes.h>
#endif

#ifndef INTUITION_CLASSUSR_H
#include <intuition/classusr.h>
#endif

#ifndef UTILITY_HOOKS_H
#include <utility/hooks.h>
#endif

/*****************************************************************************/

/* Tags supported by the arexx class
 */
#define AREXX_Dummy                             (REACTION_Dummy+0x30000)

#define AREXX_HostName                  (AREXX_Dummy+1)
        /* (STRPTR) */
#define AREXX_DefExtension              (AREXX_Dummy+2)
        /* (STRPTR) */
#define AREXX_Commands                  (AREXX_Dummy+3)
        /* (struct ARexxCmd *) */
#define AREXX_ErrorCode                 (AREXX_Dummy+4)
        /* (ULONG *) */
#define AREXX_SigMask                   (AREXX_Dummy+5)
        /* (ULONG) */
#define AREXX_NoSlot                    (AREXX_Dummy+6)
        /* (BOOL) */
#define AREXX_ReplyHook                 (AREXX_Dummy+7)
        /* (struct Hook *) */
#define AREXX_MsgPort                   (AREXX_Dummy+8)
        /* (struct MsgPort *) */

/* Possible error result codes
 */
#define RXERR_NO_COMMAND_LIST     (1L)
#define RXERR_NO_PORT_NAME        (2L)
#define RXERR_PORT_ALREADY_EXISTS (3L)
#define RXERR_OUT_OF_MEMORY       (4L)

/* I can't spell, don't use this.
 */
#define AREXX_DefExtention      AREXX_DefExtension

/*****************************************************************************/

/* Methods Supported by the ARexx Class.
 */
#define AM_HANDLEEVENT                (0x590001)
        /* ARexx class event-handler. */

#define AM_EXECUTE                    (0x590002)
        /* Execute a host command. */

#define AM_FLUSH                      (0x590003)
        /* Flush rexx port. */

/* AM_EXECUTE message.
 */
struct apExecute
{
        ULONG MethodID;                         /* AM_EXECUTE */
        STRPTR ape_CommandString;       /* Command string to execute */
        STRPTR ape_PortName;            /* Port to send to (usually RXSDIR) */
        LONG *ape_RC;                           /* RC pointer */
        LONG *ape_RC2;                          /* RC2 pointer */
        STRPTR *ape_Result;                     /* Result pointer */
        BPTR ape_IO;                            /* I/O handle */
};


/*****************************************************************************/

/* An array of these structures must be passed at object-create time.
 */
struct ARexxCmd
{
        STRPTR ac_Name;                 /* Command name */
        UWORD ac_ID;                    /* Unique ID */

        /* NOTE: The function pointed to by ac_Func() will be called
         *       with parameters in CPU registers. Register usage
         *       is as follows:
         *
         *       VOID ac_Func(struct ARexxCmd * cmd, struct RexxMsg * rm)
         *                                       A0                   A1
         */
        VOID (*ac_Func)();

        STRPTR ac_ArgTemplate;  /* DOS-style argument template */
        ULONG ac_Flags;                 /* Unused, make NULL */
        ULONG *ac_ArgList;              /* Result of ReadArgs() */
        LONG ac_RC;                             /* Primary result */
        LONG ac_RC2;                    /* Secondary result */
        STRPTR ac_Result;               /* RESULT variable */
};

#endif /* CLASSES_AREXX_H */