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

#ifndef REXX_RXSLIB_H
#define REXX_RXSLIB_H
/*
**      $Filename: rexx/rxslib.h $
**      $Release: 2.04 Includes, V37.4 $
**      $Revision: 1.6 $
**      $Date: 91/11/08 $
**
**      The header file for the REXX Systems Library
**
**      (C) Copyright 1987,1988,1989,1990 William S. Hawes
**      (C) Copyright 1990-1999 Amiga, Inc.
**              All Rights Reserved
*/

#ifndef REXX_STORAGE_H
#include "rexx/storage.h"
#endif

#define RXSNAME  "rexxsyslib.library"
#define RXSDIR   "REXX"
#define RXSTNAME "ARexx"

/* The REXX systems library structure.  This should be considered as    */
/* semi-private and read-only, except for documented exceptions.       */

struct RxsLib {
   struct Library rl_Node;            /* EXEC library node             */
   UBYTE    rl_Flags;                 /* global flags                  */
   UBYTE    rl_Shadow;                /* shadow flags                  */
   APTR     rl_SysBase;               /* EXEC library base             */
   APTR     rl_DOSBase;               /* DOS library base              */
   APTR     rl_IeeeDPBase;            /* IEEE DP math library base     */
   LONG     rl_SegList;               /* library seglist               */
   LONG     rl_NIL;                   /* global NIL: filehandle        */
   LONG     rl_Chunk;                 /* allocation quantum            */
   LONG     rl_MaxNest;               /* maximum expression nesting    */
   struct NexxStr *rl_NULL;           /* static string: NULL           */
   struct NexxStr *rl_FALSE;          /* static string: FALSE          */
   struct NexxStr *rl_TRUE;           /* static string: TRUE           */
   struct NexxStr *rl_REXX;           /* static string: REXX           */
   struct NexxStr *rl_COMMAND;        /* static string: COMMAND        */
   struct NexxStr *rl_STDIN;          /* static string: STDIN          */
   struct NexxStr *rl_STDOUT;         /* static string: STDOUT */
   struct NexxStr *rl_STDERR;          /* static string: STDERR */
   STRPTR    rl_Version;              /* version string                */

   STRPTR    rl_TaskName;             /* name string for tasks */
   LONG      rl_TaskPri;              /* starting priority             */
   LONG      rl_TaskSeg;              /* startup seglist               */
   LONG      rl_StackSize;            /* stack size                    */
   STRPTR    rl_RexxDir;              /* REXX directory                */
   STRPTR    rl_CTABLE;        /* character attribute table     */
   STRPTR    rl_Notice;               /* copyright notice              */

   struct MsgPort rl_RexxPort;        /* REXX public port              */
   UWORD     rl_ReadLock;             /* lock count                    */
   LONG      rl_TraceFH;              /* global trace console          */
   struct List rl_TaskList;           /* REXX task list                */
   WORD      rl_NumTask;              /* task count                    */
   struct List rl_LibList;            /* Library List header           */
   WORD      rl_NumLib;               /* library count         */
   struct List rl_ClipList;           /* ClipList header               */
   WORD      rl_NumClip;              /* clip node count               */
   struct List rl_MsgList;            /* pending messages              */
   WORD      rl_NumMsg;               /* pending count         */
   struct List rl_PgmList;             /* cached programs               */
   WORD      rl_NumPgm;               /* program count         */

   UWORD     rl_TraceCnt;              /* usage count for trace console */
   WORD      rl_avail;
   };

/* Global flag bit definitions for RexxMaster                          */
#define RLFB_TRACE RTFB_TRACE         /* interactive tracing?          */
#define RLFB_HALT  RTFB_HALT          /* halt execution?               */
#define RLFB_SUSP  RTFB_SUSP          /* suspend execution?            */
#define RLFB_STOP  6                   /* deny further invocations      */
#define RLFB_CLOSE 7                  /* close the master              */

#define RLFMASK    (1<<RLFB_TRACE) | (1<<RLFB_HALT) | (1<<RLFB_SUSP)

/* Initialization constants                                            */
#define RXSCHUNK   1024               /* allocation quantum            */
#define RXSNEST    32                 /* expression nesting limit      */
#define RXSTPRI    0                   /* task priority         */
#define RXSSTACK   4096        /* stack size                    */

/* Character attribute flag bits used in REXX.                         */
#define CTB_SPACE   0                 /* white space characters        */
#define CTB_DIGIT   1                 /* decimal digits 0-9            */
#define CTB_ALPHA   2                 /* alphabetic characters */
#define CTB_REXXSYM 3                 /* REXX symbol characters        */
#define CTB_REXXOPR 4                 /* REXX operator characters      */
#define CTB_REXXSPC 5                 /* REXX special symbols          */
#define CTB_UPPER   6                  /* UPPERCASE alphabetic          */
#define CTB_LOWER   7                  /* lowercase alphabetic          */

/* Attribute flags                                                     */
#define CTF_SPACE   (1 << CTB_SPACE)
#define CTF_DIGIT   (1 << CTB_DIGIT)
#define CTF_ALPHA   (1 << CTB_ALPHA)
#define CTF_REXXSYM (1 << CTB_REXXSYM)
#define CTF_REXXOPR (1 << CTB_REXXOPR)
#define CTF_REXXSPC (1 << CTB_REXXSPC)
#define CTF_UPPER   (1 << CTB_UPPER)
#define CTF_LOWER   (1 << CTB_LOWER)

#endif