|
|
1.1 ! root 1: #ifndef STAK_SMALL ! 2: /* ! 3: * David Korn ! 4: * AT&T Bell Laboratories ! 5: * ! 6: * Interface definitions for a stack-like storage library ! 7: * ! 8: */ ! 9: ! 10: #if defined(__STDC__) || __cplusplus || c_plusplus ! 11: # define __ARGS(args) args ! 12: #else ! 13: # define const /*empty*/ ! 14: # define __ARGS(args) () ! 15: #endif ! 16: ! 17: typedef struct _stak_ ! 18: { ! 19: int stakleft; /* number of bytes left in frame */ ! 20: char *staktop; /* current stack location */ ! 21: char *stakbot; /* last returned stack location */ ! 22: short stakref; /* reference count */ ! 23: #ifdef _STAK_PRIVATE ! 24: _STAK_PRIVATE ! 25: #endif /* _STAK_PRIVATE */ ! 26: } Stak_t; ! 27: ! 28: #define STAK_SMALL 1 /* argument to stakcreate */ ! 29: ! 30: #if __cplusplus ! 31: extern "C" ! 32: { ! 33: #endif ! 34: extern Stak_t *stakcreate __ARGS((int)); ! 35: extern Stak_t *stakinstall __ARGS((Stak_t*, char *(*)(int))); ! 36: extern int stakdelete __ARGS((Stak_t*)); ! 37: extern char *stakalloc __ARGS((unsigned)); ! 38: extern char *stakcopy __ARGS((const char*)); ! 39: extern char *stakset __ARGS((char*, unsigned)); ! 40: extern char *stakseek __ARGS((unsigned)); ! 41: extern int stakputs __ARGS((const char*)); ! 42: extern char *stakfreeze __ARGS((unsigned)); ! 43: extern char *_stakgrow __ARGS((unsigned)); ! 44: #if __cplusplus ! 45: } ! 46: #endif ! 47: ! 48: extern Stak_t _stak_cur; /* used by macros */ ! 49: ! 50: #define staklink(sp) ((sp)->stakref++) ! 51: #define stakptr(n) (_stak_cur.stakbot+(n)) ! 52: #define staktell() (_stak_cur.staktop-_stak_cur.stakbot) ! 53: #define stakputc(c) ((--_stak_cur.stakleft<0? _stakgrow(1):0), \ ! 54: *_stak_cur.staktop++=(c)) ! 55: ! 56: #endif /* STAK_SMALL */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.