1 #ifndef REXX_STORAGE_H
    2 #define REXX_STORAGE_H
    3 
    4 /*
    5 	rexx storage defines
    6 
    7 	Copyright © 2002 The MorphOS Development Team, All Rights Reserved.
    8 */
    9 
   10 #ifndef EXEC_TYPES_H
   11 # include <exec/types.h>
   12 #endif
   13 
   14 #ifndef EXEC_NODES_H
   15 # include <exec/nodes.h>
   16 #endif
   17 
   18 #ifndef EXEC_LISTS_H
   19 # include <exec/lists.h>
   20 #endif
   21 
   22 #ifndef EXEC_PORTS_H
   23 # include <exec/ports.h>
   24 #endif
   25 
   26 #ifndef EXEC_LIBRARIES_H
   27 # include <exec/libraries.h>
   28 #endif
   29 
   30 #pragma pack(2)
   31 
   32 
   33 struct NexxStr
   34 {
   35 	LONG  ns_Ivalue;
   36 	UWORD ns_Length;
   37 	UBYTE ns_Flags;
   38 	UBYTE ns_Hash;
   39 	BYTE  ns_Buff[8];
   40 };
   41 
   42 
   43 #define NXADDLEN  9
   44 #define IVALUE(nsPtr)  (nsPtr->ns_Ivalue)
   45 
   46 
   47 /* String attribute flag-bits */
   48 
   49 #define NSB_KEEP    0
   50 #define NSB_STRING  1
   51 #define NSB_NOTNUM  2
   52 #define NSB_NUMBER  3
   53 #define NSB_BINARY  4
   54 #define NSB_FLOAT   5
   55 #define NSB_EXT     6
   56 #define NSB_SOURCE  7
   57 
   58 #define NSF_KEEP    (1 << NSB_KEEP)
   59 #define NSF_STRING  (1 << NSB_STRING)
   60 #define NSF_NOTNUM  (1 << NSB_NOTNUM)
   61 #define NSF_NUMBER  (1 << NSB_NUMBER)
   62 #define NSF_BINARY  (1 << NSB_BINARY)
   63 #define NSF_FLOAT   (1 << NSB_FLOAT)
   64 #define NSF_EXT     (1 << NSB_EXT)
   65 #define NSF_SOURCE  (1 << NSB_SOURCE)
   66 
   67 
   68 /* Combinations of flags */
   69 
   70 #define NSF_INTNUM  (NSF_NUMBER | NSF_BINARY | NSF_STRING)
   71 #define NSF_DPNUM   (NSF_NUMBER | NSF_FLOAT)
   72 #define NSF_ALPHA   (NSF_NOTNUM | NSF_STRING)
   73 #define NSF_OWNED   (NSF_SOURCE | NSF_EXT    | NSF_KEEP)
   74 #define KEEPSTR     (NSF_STRING | NSF_SOURCE | NSF_NOTNUM)
   75 #define KEEPNUM     (NSF_STRING | NSF_SOURCE | NSF_NUMBER | NSF_BINARY)
   76 
   77 
   78 struct RexxArg
   79 {
   80 	LONG  ra_Size;
   81 	UWORD ra_Length;
   82 	UBYTE ra_Flags;
   83 	UBYTE ra_Hash;
   84 	BYTE  ra_Buff[8];
   85 };
   86 
   87 
   88 struct RexxMsg
   89 {
   90 	struct Message  rm_Node;
   91 	APTR            rm_TaskBlock;
   92 	APTR            rm_LibBase;
   93 	LONG            rm_Action;
   94 	LONG            rm_Result1;
   95 	LONG            rm_Result2;
   96 	STRPTR          rm_Args[16];
   97 
   98 	struct MsgPort *rm_PassPort;
   99 	STRPTR          rm_CommAddr;
  100 	STRPTR          rm_FileExt;
  101 	LONG            rm_Stdin;
  102 	LONG            rm_Stdout;
  103 	LONG            rm_avail;
  104 };
  105 
  106 
  107 /* Field definitions */
  108 
  109 #define ARG0(rmp)  (rmp->rm_Args[0])
  110 #define ARG1(rmp)  (rmp->rm_Args[1])
  111 #define ARG2(rmp)  (rmp->rm_Args[2])
  112 
  113 #define MAXRMARG  15
  114 
  115 
  116 /* Message-packet commands */
  117 
  118 #define RXCOMM    0x01000000
  119 #define RXFUNC    0x02000000
  120 #define RXCLOSE   0x03000000
  121 #define RXQUERY   0x04000000
  122 #define RXADDFH   0x07000000
  123 #define RXADDLIB  0x08000000
  124 #define RXREMLIB  0x09000000
  125 #define RXADDCON  0x0A000000
  126 #define RXREMCON  0x0B000000
  127 #define RXTCOPN   0x0C000000
  128 #define RXTCCLS   0x0D000000
  129 
  130 
  131 /* Command modifier flag-bits */
  132 
  133 #define RXFB_NOIO    16
  134 #define RXFB_RESULT  17
  135 #define RXFB_STRING  18
  136 #define RXFB_TOKEN   19
  137 #define RXFB_NONRET  20
  138 
  139 #define RXFF_NOIO    (1 << RXFB_NOIO)
  140 #define RXFF_RESULT  (1 << RXFB_RESULT)
  141 #define RXFF_STRING  (1 << RXFB_STRING)
  142 #define RXFF_TOKEN   (1 << RXFB_TOKEN)
  143 #define RXFF_NONRET  (1 << RXFB_NONRET)
  144 
  145 #define RXCODEMASK   0xFF000000
  146 #define RXARGMASK    0x0000000F
  147 
  148 
  149 struct RexxRsrc
  150 {
  151 	struct Node rr_Node;
  152 	WORD        rr_Func;
  153 	APTR        rr_Base;
  154 	LONG        rr_Size;
  155 	LONG        rr_Arg1;
  156 	LONG        rr_Arg2;
  157 };
  158 
  159 
  160 /* Resource node-types */
  161 
  162 #define RRT_ANY   0
  163 #define RRT_LIB   1
  164 #define RRT_PORT  2
  165 #define RRT_FILE  3
  166 #define RRT_HOST  4
  167 #define RRT_CLIP  5
  168 
  169 
  170 #define GLOBALSZ  200
  171 
  172 
  173 struct RexxTask
  174 {
  175 	BYTE           rt_Global[GLOBALSZ];
  176 	struct MsgPort rt_MsgPort;
  177 	UBYTE          rt_Flags;
  178 	BYTE           rt_SigBit;
  179 
  180 	APTR           rt_ClientID;
  181 	APTR           rt_MsgPkt;
  182 	APTR           rt_TaskID;
  183 	APTR           rt_RexxPort;
  184 
  185 	APTR           rt_ErrTrap;
  186 	APTR           rt_StackPtr;
  187 
  188 	struct List    rt_Header1;
  189 	struct List    rt_Header2;
  190 	struct List    rt_Header3;
  191 	struct List    rt_Header4;
  192 	struct List    rt_Header5;
  193 };
  194 
  195 
  196 /* RexxTask flag-bits */
  197 
  198 #define RTFB_TRACE  0
  199 #define RTFB_HALT   1
  200 #define RTFB_SUSP   2
  201 #define RTFB_TCUSE  3
  202 #define RTFB_WAIT   6
  203 #define RTFB_CLOSE  7
  204 
  205 
  206 /* Memory allocation constants */
  207 
  208 #define MEMQUANT  16L
  209 #define MEMMASK   0xFFFFFFF0
  210 
  211 #define MEMQUICK  (1 << 0)
  212 #define MEMCLEAR  (1 << 16)
  213 
  214 
  215 struct SrcNode
  216 {
  217 	struct SrcNode *sn_Succ;
  218 	struct SrcNode *sn_Pred;
  219 	APTR            sn_Ptr;
  220 	LONG            sn_Size;
  221 };
  222 
  223 
  224 #pragma pack()
  225 
  226 #endif