#ifdef HAVE_SYS_WAIT_H
# ifdef WNOHANG_REQUIRES_POSIX_SOURCE
# define _POSIX_SOURCE
# endif
# include <sys/wait.h>
# ifdef WNOHANG_REQUIRES_POSIX_SOURCE
# undef _POSIX_SOURCE
# endif
#endif
#include <tclPort.h>
#define EXP_CHANNELNAMELEN (16 + TCL_INTEGER_SPACE)
EXTERN char * exp_get_var _ANSI_ARGS_((Tcl_Interp *,char *));
EXTERN int exp_default_match_max;
EXTERN int exp_default_parity;
EXTERN int exp_default_rm_nulls;
EXTERN int exp_one_arg_braced _ANSI_ARGS_((Tcl_Obj *));
EXTERN int exp_eval_with_one_arg _ANSI_ARGS_((ClientData,
Tcl_Interp *, struct Tcl_Obj * CONST objv[]));
EXTERN void exp_lowmemcpy _ANSI_ARGS_((char *,char *,int));
EXTERN int exp_flageq_code _ANSI_ARGS_((char *,char *,int));
#define exp_flageq(flag,string,minlen) \
(((string)[0] == (flag)[0]) && (exp_flageq_code(((flag)+1),((string)+1),((minlen)-1))))
#define exp_flageq1(flag,string) \
((string[0] == flag) && (string[1] == '\0'))
#define EXP_SPAWN_ID_USER 0
#define EXP_SPAWN_ID_ANY_LIT "-1"
#define EXP_CHANNEL_PREFIX "exp"
#define EXP_CHANNEL_PREFIX_LENGTH 3
#define isExpChannelName(name) \
(0 == strncmp(name,EXP_CHANNEL_PREFIX,EXP_CHANNEL_PREFIX_LENGTH))
#define exp_is_stdinfd(x) ((x) == 0)
#define exp_is_devttyfd(x) ((x) == exp_dev_tty)
#define EXP_NOPID 0
#define EXP_NOFD -1
#define EXP_CMD_BEFORE 0
#define EXP_CMD_AFTER 1
#define EXP_CMD_BG 2
#define EXP_CMD_FG 3
typedef struct ExpState {
Tcl_Channel channel;
char name[EXP_CHANNELNAMELEN+1];
int fdin;
int fdout;
Tcl_Channel channel_orig;
int fd_slave;
int validMask;
int pid;
Tcl_Obj *buffer;
int msize;
int umsize;
int printed;
int echoed;
int rm_nulls;
int open;
int user_waited;
int sys_waited;
int registered;
WAIT_STATUS_TYPE wait;
int parity;
int key;
int force_read;
int notified;
int notifiedMask;
int fg_armed;
#ifdef HAVE_PTYTRAP
char *slave_name;
#endif
int leaveopen;
Tcl_Interp *bg_interp;
int bg_ecount;
enum {
blocked,
armed,
unarmed,
disarm_req_while_blocked
} bg_status;
int freeWhenBgHandlerUnblocked;
int fdBusy;
int keepForever;
int valid;
struct ExpState *nextPtr;
} ExpState;
#define EXP_SPAWN_ID_BAD ((ExpState *)0)
#define EXP_TIME_INFINITY -1
extern Tcl_ChannelType expChannelType;
#define EXP_TEMPORARY 1
#define EXP_PERMANENT 2
#define EXP_DIRECT 1
#define EXP_INDIRECT 2
EXTERN void expAdjust _ANSI_ARGS_((ExpState *));
EXTERN void exp_buffer_shuffle _ANSI_ARGS_((Tcl_Interp *,ExpState *,int,char *,char *));
EXTERN int exp_close _ANSI_ARGS_((Tcl_Interp *,ExpState *));
EXTERN void exp_close_all _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_ecmd_remove_fd_direct_and_indirect
_ANSI_ARGS_((Tcl_Interp *,int));
EXTERN void exp_trap_on _ANSI_ARGS_((int));
EXTERN int exp_trap_off _ANSI_ARGS_((char *));
EXTERN void exp_strftime();
#define exp_deleteProc (void (*)())0
#define exp_deleteObjProc (void (*)())0
EXTERN int expect_key;
EXTERN int exp_configure_count;
EXTERN int exp_nostack_dump;
EXTERN void exp_init_pty _ANSI_ARGS_((void));
EXTERN void exp_pty_exit _ANSI_ARGS_((void));
EXTERN void exp_init_tty _ANSI_ARGS_((void));
EXTERN void exp_init_stdio _ANSI_ARGS_((void));
EXTERN void exp_init_spawn_ids _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_spawn_id_vars _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_trap _ANSI_ARGS_((void));
EXTERN void exp_init_send _ANSI_ARGS_((void));
EXTERN void exp_init_unit_random _ANSI_ARGS_((void));
EXTERN void exp_init_sig _ANSI_ARGS_((void));
EXTERN void expChannelInit _ANSI_ARGS_((void));
EXTERN int expChannelCountGet _ANSI_ARGS_((void));
EXTERN int exp_tcl2_returnvalue _ANSI_ARGS_((int));
EXTERN int exp_2tcl_returnvalue _ANSI_ARGS_((int));
EXTERN void exp_rearm_sigchld _ANSI_ARGS_((Tcl_Interp *));
EXTERN int exp_string_to_signal _ANSI_ARGS_((Tcl_Interp *,char *));
EXTERN char *exp_onexit_action;
#define exp_new(x) (x *)malloc(sizeof(x))
struct exp_state_list {
ExpState *esPtr;
struct exp_state_list *next;
};
struct exp_i {
int cmdtype;
int direct;
int duration;
char *variable;
char *value;
int ecount;
struct exp_state_list *state_list;
struct exp_i *next;
};
EXTERN struct exp_i * exp_new_i_complex _ANSI_ARGS_((Tcl_Interp *,
char *, int, Tcl_VarTraceProc *));
EXTERN struct exp_i * exp_new_i_simple _ANSI_ARGS_((ExpState *,int));
EXTERN struct exp_state_list *exp_new_state _ANSI_ARGS_((ExpState *));
EXTERN void exp_free_i _ANSI_ARGS_((Tcl_Interp *,struct exp_i *,
Tcl_VarTraceProc *));
EXTERN void exp_free_state _ANSI_ARGS_((struct exp_state_list *));
EXTERN void exp_free_state_single _ANSI_ARGS_((struct exp_state_list *));
EXTERN int exp_i_update _ANSI_ARGS_((Tcl_Interp *,
struct exp_i *));
#define EXP_NOPREFIX 1
#define EXP_REDEFINE 2
#define exp_proc(cmdproc) 0, cmdproc
struct exp_cmd_data {
char *name;
Tcl_ObjCmdProc *objproc;
Tcl_CmdProc *proc;
ClientData data;
int flags;
};
EXTERN void exp_create_commands _ANSI_ARGS_((Tcl_Interp *,
struct exp_cmd_data *));
EXTERN void exp_init_main_cmds _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_expect_cmds _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_most_cmds _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_trap_cmds _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_interact_cmds _ANSI_ARGS_((Tcl_Interp *));
EXTERN void exp_init_tty_cmds();
EXTERN ExpState * expStateCheck _ANSI_ARGS_((Tcl_Interp *,ExpState *,int,int,char *));
EXTERN ExpState * expStateCurrent _ANSI_ARGS_((Tcl_Interp *,int,int,int));
EXTERN ExpState * expStateFromChannelName _ANSI_ARGS_((Tcl_Interp *,char *,int,int,int,char *));
EXTERN void expStateFree _ANSI_ARGS_((ExpState *));
EXTERN ExpState * expCreateChannel _ANSI_ARGS_((Tcl_Interp *,int,int,int));
EXTERN ExpState * expWaitOnAny _ANSI_ARGS_((void));
EXTERN ExpState * expWaitOnOne _ANSI_ARGS_((void));
EXTERN void expExpectVarsInit _ANSI_ARGS_((void));
EXTERN int expStateAnyIs _ANSI_ARGS_((ExpState *));
EXTERN int expDevttyIs _ANSI_ARGS_((ExpState *));
EXTERN int expStdinOutIs _ANSI_ARGS_((ExpState *));
EXTERN ExpState * expStdinoutGet _ANSI_ARGS_((void));
EXTERN ExpState * expDevttyGet _ANSI_ARGS_((void));
EXTERN int expSizeGet _ANSI_ARGS_((ExpState *));
EXTERN int expSizeZero _ANSI_ARGS_((ExpState *));