/*
 * myminrexx.h :
 * -------------
 * Auteur         : Xavier Mertens  
 * Version        : 1 
 * Révision       : 01 
 * Langage        : Lattice c v5.0
 * Compatibilité  : 1.3 - 2.x - Arexx   
 * Description    : Fichier include pour interface ARexx <-> C.  
 *
 */

#ifndef MINREXX_H
#define MINREXX_H

#include <exec/libraries.h>

#define RXSNAME  "rexxsyslib.library"
#define RXSID    "rexxsyslib 1.06 (07 MAR 88)\n"
#define RXSDIR   "REXX"
#define RXSTNAME "ARexx"

#define RXCOMM       0x01000000
#define RXFUNC       0x02000000
#define RXFF_NOIO    (1<<16)
#define RXFF_RESULT (1<<17)
#define RXFF_STRING (1<<18)
#define RXFF_TOKEN  (1<<19)
#define RXFF_NONRET (1<<20)

#define ERR_NUM_ARGS     { primary=10;secondary=17; }
#define ERR_BAD_TOKEN    { primary=10;secondary=8;  }
#define ERR_INVALID_ARGS { primary=10;secondary=18; }

struct RexxMsg {
  struct Message rm_Node;
  APTR rm_TaskBlock,
       rm_LibBase;
  LONG rm_Action,
       rm_Result1,
       rm_Result2;
  STRPTR rm_Args[16];
};

struct RxsLib {
   struct Library rl_Node;
   UBYTE    rl_Flags;     
   UBYTE    rl_pad;
   APTR     rl_SysBase;   
   APTR     rl_DOSBase;   
   APTR     rl_IeeeDPBase;
   LONG     rl_SegList;   
   LONG     rl_NIL;       
   LONG     rl_Chunk;     
   LONG     rl_MaxNest;   
   struct NexxStr *rl_NULL;    
   struct NexxStr *rl_FALSE;   
   struct NexxStr *rl_TRUE;    
   struct NexxStr *rl_REXX;    
   struct NexxStr *rl_COMMAND; 
   struct NexxStr *rl_STDIN;   
   struct NexxStr *rl_STDOUT;  
   struct NexxStr *rl_STDERR;  
   STRPTR    rl_Version;       

   STRPTR    rl_TaskName;      
   LONG      rl_TaskPri;       
   LONG      rl_TaskSeg;       
   LONG      rl_StackSize;     
   STRPTR    rl_RexxDir;       
   STRPTR    rl_CTABLE;        
   struct NexxStr *rl_Notice;  

   struct MsgPort rl_RexxPort; 
   UWORD     rl_ReadLock;      
   LONG      rl_TraceFH;       
   struct List rl_TaskList;    
   WORD      rl_NumTask;       
   struct List rl_LibList;     
   WORD      rl_NumLib;        
   struct List rl_ClipList;    
   WORD      rl_NumClip;       
   struct List rl_MsgList;     
   WORD      rl_NumMsg;        
   struct List rl_PgmList;     
   WORD      rl_NumMsg2;       

   UWORD     rl_TraceCnt;      
   WORD      rl_avail;
};

STRPTR CreateArgstring(char *String,long Length);
void DeleteArgstring(STRPTR String);
struct RexxMsg *CreateRexxMsg(struct Port *ReplyPort,char *Extension,char *Host);
struct RexxMsg *DeleteRexxMsg(struct RexxMsg *Msg);
struct MsgPort *SetupMyPort(char *Name);
void FreeRexxCommand(struct RexxMsg *RxMsg);
void ReplyRexxCommand(struct RexxMsg *RxMsg,long primary,long secondary,char *result);

#endif

/* Eof */
