home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / me34src.zip / me3 / mc / mc.h < prev    next >
C/C++ Source or Header  |  1995-01-14  |  4KB  |  147 lines

  1. /* mc.h : stuff for Mutt compiler
  2.  */
  3.  
  4. /* Craig Durland    Public Domain
  5.  *   Distributed "as is", without warranties of any kind, but comments,
  6.  *     suggestions and bug reports are welcome.
  7.  */
  8.  
  9. #define MAXSTRLEN 255    /* max length of a string (MUST be < RSIZ!) */
  10. #define MAXDIM 2    /* max dimensions for an array */
  11.  
  12. typedef struct
  13. {
  14.   char *name;
  15.   short int type, token;
  16. } KeyWord;
  17.  
  18.     /* KeyWord types */
  19. #define KWMutt        0    /* Mutt keyword (like if, while, etc) */
  20. #define KWoMutt        1    /* Other Mutt keywords (like ask, concat) */
  21. #define KWXToken    2    /* External token */
  22. #define KWGlobalVar    3    /* Global Vars */
  23. #define KWLocalVar    4    /* Local Vars */
  24. #define KWConst        5    /* Constants */
  25. #define KWProgram    6    /* Programs */
  26. #define KWProto        7    /* Prototypes */
  27.  
  28. typedef struct
  29. {
  30.   char *name;
  31.   short int token;
  32. } MuttCmd;
  33.  
  34. typedef struct
  35. {
  36.   char *name;
  37.   short int token;
  38.   unsigned short int class;
  39. } oMuttCmd;
  40.  
  41. typedef struct
  42. {
  43.   char *name;
  44.   unsigned int type, sub_type;
  45.     /* offset:
  46.      *   from var base (first var of same scope)
  47.      *   nth object object 
  48.      */
  49.   int offset;
  50.   uint8 scope;    /* LOCAL, GLOBAL or PROTYPE */
  51.   int blobs;    /* if this is a protoype or structure */
  52.   int dims, dim[MAXDIM];    /* if its an array */
  53. } Var;
  54.  
  55.     /*  Var types */
  56. #define LOCAL        1
  57. #define GLOBAL        2
  58. #define PROTOTYPE    3
  59.  
  60. #define NIL 0
  61.  
  62.     /* pgm modifiers */
  63. #define HIDDEN    0x01
  64. #define MAIN    0x02
  65. #define LEAR    0x04
  66.  
  67.     /* additional token classes returned by get_token()
  68.      * these MUST NOT overlap val types (in mm.h)
  69.      */
  70.     /* OR'able values */
  71. #define POINTER       0x0100
  72.     /* Can't OR the following.  Use low byte for value. */
  73. #define MCTYPE       0x4000
  74. #define TOKEN       0x4001
  75. #define DELIMITER  0x4002
  76. #define SEOF       0x4003
  77. #define VAROK       0x4004
  78. #define PUSHEDARGS 0x4005
  79. #define UNKNOWN    0x4006
  80. #define ARRAY       0x4007
  81. #define EMPTY       0x4008
  82.  
  83.  
  84.     /* DELIMITER types */
  85. #define START_EXP    '('
  86. #define END_EXP        ')'
  87.  
  88. #define START_PGM    '{'
  89. #define END_PGM        '}'
  90.  
  91. #define START_IPGM    '<'
  92. #define END_IPGM    '>'
  93.  
  94.  
  95.  
  96. #if 0        /* Some interesting macros I don't use anymore */
  97.  
  98. /* ******************************************************************** */
  99. /* ********************* TABLES *************************************** */
  100. /* ******************************************************************** */
  101.  
  102. extern char *malloc(), *realloc();
  103.  
  104. #define DYNO(type,table,n,initial_size,step)            \
  105. {                                \
  106.   static int table_max = 0;                    \
  107.   if (n==table_max)    /* table not big enough */        \
  108.   {                                \
  109.     if (table_max==0)    /* table not allocated yet */        \
  110.     {                                \
  111.       table_max = initial_size;                    \
  112.       if ((table = (type *)malloc(table_max*sizeof(type)))==NULL)    \
  113.     bitch("Can't malloc table");                \
  114.     }                                \
  115.     else    /* table full, make bigger */            \
  116.     {                                \
  117.       table_max += step;                    \
  118.       if ((table = (type *)realloc(                \
  119.     (char *)table,table_max*sizeof(type)))==NULL)        \
  120.         bitch("Can't realloc table");            \
  121.     }                                \
  122.   }                                \
  123. }
  124.  
  125. #define DYNAMO(type,table,n,bump,initial_size,step)        \
  126. {                                \
  127.   static int table_max = 0;                    \
  128.   if (n+bump>=table_max)    /* table not big enough */    \
  129.   {                                \
  130.     if (table_max==0)    /* table not allocated yet */        \
  131.     {                                \
  132.       table_max = initial_size;                    \
  133.       if ((table = (type *)malloc(table_max*sizeof(type)))==NULL)    \
  134.     bitch("Can't malloc table");                \
  135.     }                                \
  136.     else    /* table full, make bigger */            \
  137.     {                                \
  138.       table_max += imax(n+bump-table_max,step);            \
  139.       if ((table = (type *)realloc(                \
  140.     (char *)table,table_max*sizeof(type)))==NULL)        \
  141.         bitch("Can't realloc table");            \
  142.     }                                \
  143.   }                                \
  144. }
  145.  
  146. #endif
  147.