2021-10-11 19:38:01 -03:00

59 lines
1.5 KiB
C
Executable File

#ident "@(#)stak.h 1.6 93/06/08 SMI" /* From AT&T Toolchest */
#ifndef STAK_SMALL
/*
* David Korn
* AT&T Bell Laboratories
*
* Interface definitions for a stack-like storage library
*
*/
#if defined(__STDC__) || __cplusplus || c_plusplus
# define __ARGS(args) args
#else
# define const /*empty*/
# define __ARGS(args) ()
#endif
typedef struct _stak_
{
int stakleft; /* number of bytes left in frame */
char *staktop; /* current stack location */
char *stakbot; /* last returned stack location */
short stakref; /* reference count */
#ifdef _STAK_PRIVATE
_STAK_PRIVATE
#endif /* _STAK_PRIVATE */
} Stak_t;
#define STAK_SMALL 1 /* argument to stakcreate */
#if __cplusplus
extern "C"
{
#endif
extern Stak_t *stakcreate __ARGS((int));
extern Stak_t *stakinstall __ARGS((Stak_t*, char *(*)(int)));
extern int stakdelete __ARGS((Stak_t*));
extern char *stakalloc __ARGS((unsigned));
extern char *stakcopy __ARGS((const char*));
extern char *stakset __ARGS((char*, unsigned));
extern char *stakseek __ARGS((unsigned));
extern int stakputs __ARGS((const char*));
extern char *stakfreeze __ARGS((unsigned));
extern char *_stakgrow __ARGS((unsigned));
#if __cplusplus
}
#endif
extern Stak_t _stak_cur; /* used by macros */
#define staklink(sp) ((sp)->stakref++)
#define stakptr(n) (_stak_cur.stakbot+(n))
#define staktell() (_stak_cur.staktop-_stak_cur.stakbot)
#define stakputc(c) ((--_stak_cur.stakleft<=0? _stakgrow(1):0), \
*_stak_cur.staktop++=(c))
#endif /* STAK_SMALL */