home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / c / laserlib / inc / stack.inc < prev   
Encoding:
Text File  |  1994-09-22  |  3.3 KB  |  79 lines

  1. /**************************************************************************/
  2. /*                                                                        */
  3. /*  NAME:         stack.inc                                               */
  4. /*                                                                        */
  5. /*  DATUM:        14.06.89                                                */
  6. /*                                                                        */
  7. /*  BESCHREIBUNG: Include-Datei fuer stack.c.                             */
  8. /*                                                                        */
  9. /**************************************************************************/
  10.  
  11. #ifndef STACKINC
  12.  
  13. #define STACKINC
  14. #include <portab.h>
  15.  
  16. struct _ste
  17. {
  18.    WORD         ste_type;   /* Typ des Elementes                          */
  19.    BYTE        *ste_buf;    /* Zeiger auf Inhalt des Elementes            */
  20.    struct _ste *ste_prev;   /* Zeiger auf Vorgaenger-Element              */
  21. };
  22. typedef struct _ste  STE;
  23.  
  24. struct _stk
  25. {
  26.    BYTE  *stk_name;         /* Name des Stacks                            */
  27.    STE   *stk_top;          /* Zeiger auf oberstes Stack-Element          */
  28.    WORD   stk_flag;         /* Attribut-Flag des Stacks                   */
  29.    WORD   stk_mdepth;       /* max. Tiefe des Stacks                      */
  30.    WORD   stk_cdepth;       /* akt. Tiefe des Stacks                      */
  31. };
  32. typedef struct _stk  STK;
  33.  
  34. #define STKNULP     ((STK *) 0L)
  35. #define STENULP     ((STE *) 0L)
  36.  
  37. #define STKNORMAL   0
  38. #define STKVARDEPTH 1
  39.  
  40. #define STKEMPTY    0
  41.  
  42. #define STKBYTE     1       /* char                                       */
  43. #define STKBOOL     2       /* short int                                  */
  44. #define STKWORD     3       /* short int                                  */
  45. #define STKUWORD    4       /* unsigned short int                         */
  46. #define STKLONG     5       /* long int                                   */
  47. #define STKULONG    6       /* unsigned long int                          */
  48. #define STKFLOAT    7       /* float                                      */
  49. #define STKDOUBLE   8       /* long float                                 */
  50. #define STKSTRING   9       /* char *                                     */
  51. #define STKPOINTER 10       /* char * oder int * oder ...                 */
  52.  
  53. extern STK  *stacknew();
  54. extern VOID  stackdel();
  55. extern VOID  stackshow();
  56. extern BOOL  stackpush();
  57. extern BOOL  stackpop();
  58. extern BOOL  stacktop();
  59.  
  60. #define StackNew()       (stacknew ("", STKVARDEPTH, 0))
  61. #define PushBYTE(s,c)    (stackpush (s, STKBYTE, c))
  62. #define PushWORD(s,c)    (stackpush (s, STKWORD, c))
  63. #define PushUWORD(s,c)   (stackpush (s, STKUWORD, c))
  64. #define PushBOOL(s,c)    (stackpush (s, STKBOOL, c))
  65. #define PushLONG(s,c)    (stackpush (s, STKLONG, c))
  66. #define PushULONG(s,c)   (stackpush (s, STKULONG, c))
  67. #define PushFLOAT(s,c)   (stackpush (s, STKFLOAT, c))
  68. #define PushDOUBLE(s,c)  (stackpush (s, STKDOUBLE, c))
  69. #define PushSTRING(s,c)  (stackpush (s, STKSTRING, c))
  70. #define PushPOINTER(s,c) (stackpush (s, STKPOINTER, c))
  71.  
  72. #define stackempty(s)    (s->stk_cdepth == 0)
  73. #define stackdepth(s)    (s->stk_cdepth)
  74. #define stackname(s)     (s->stk_name)
  75. #define stacktype(s)     (stackempty(s) ? STKEMPTY : s->stk_top->ste_type)
  76.  
  77. #endif STACKINC
  78.  
  79.