76 lines
2.0 KiB
C
76 lines
2.0 KiB
C
|
|
/* @(#)misc.h 1.1 94/10/31 SMI */
|
|
|
|
/*
|
|
* Copyright (c) 1987 by Sun Microsystems, Inc.
|
|
*/
|
|
#ifndef _MISC_
|
|
#define _MISC_
|
|
|
|
/*
|
|
* This file contains declarations pertaining to the miscellaneous routines.
|
|
*/
|
|
#include <setjmp.h>
|
|
|
|
/*
|
|
* This defines the structure of a saved environment. It consists of the
|
|
* environment itself, a pointer to the next environment on the stack, and
|
|
* flags to tell whether the environment is active, etc.
|
|
*/
|
|
struct env {
|
|
jmp_buf env; /* environment buf */
|
|
struct env *ptr; /* ptr to next on list */
|
|
char flags; /* flags */
|
|
};
|
|
extern struct env *current_env;
|
|
/*
|
|
* This macro saves the current environment in the given structure and
|
|
* pushes the structure onto our enivornment stack. It initializes the
|
|
* flags to zero (inactive).
|
|
*/
|
|
#define saveenv(x) { \
|
|
x.ptr = current_env; \
|
|
current_env = &x; \
|
|
(void) setjmp(x.env); \
|
|
x.flags = 0; \
|
|
}
|
|
/*
|
|
* This macro marks the environment on the top of the stack active. It
|
|
* assumes that there is an environment on the stack.
|
|
*/
|
|
#define useenv() (current_env->flags |= ENV_USE)
|
|
/*
|
|
* This macro marks the environment on the top of the stack inactive. It
|
|
* assumes that there is an environment on the stack.
|
|
*/
|
|
#define unuseenv() (current_env->flags &= ~ENV_USE)
|
|
/*
|
|
* This macro pops an environment off the top of the stack. It
|
|
* assumes that there is an environment on the stack.
|
|
*/
|
|
#define clearenv() (current_env = current_env->ptr)
|
|
/*
|
|
* These are the flags for the environment struct.
|
|
*/
|
|
#define ENV_USE 0x01 /* active */
|
|
#define ENV_CRITICAL 0x02 /* in critical zone */
|
|
#define ENV_ABORT 0x04 /* abort pending */
|
|
|
|
/*
|
|
* This structure is used to keep track of the state of the tty. This
|
|
* is necessary because some of the commands turn off echoing.
|
|
*/
|
|
struct ttystate {
|
|
struct sgttyb ttystate; /* buffer for ioctls */
|
|
int modified; /* echoing off flag */
|
|
int ttyfile; /* file for ioctls */
|
|
};
|
|
/*
|
|
* This is the number lines assumed for the tty. It is designed to work
|
|
* on terminals as well as sun monitors.
|
|
*/
|
|
#define TTY_LINES 24
|
|
|
|
#endif !_MISC_
|
|
|