blob: 53cb4261ff4ab562d2306f1096c2327838ed22c2 [file] [log] [blame]
/*
* SHL - PTY Helpers
*
* Copyright (c) 2011-2013 David Herrmann <dh.herrmann@gmail.com>
* Dedicated to the Public Domain
*/
/*
* PTY Helpers
*/
#ifndef SHL_PTY_H
#define SHL_PTY_H
#include <errno.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/* pty */
struct shl_pty;
typedef void (*shl_pty_input_cb) (struct shl_pty *pty, char *u8,
size_t len, void *data);
pid_t shl_pty_open(struct shl_pty **out, shl_pty_input_cb cb, void *data,
unsigned short term_width, unsigned short term_height,
int pts_fd);
void shl_pty_ref(struct shl_pty *pty);
void shl_pty_unref(struct shl_pty *pty);
void shl_pty_close(struct shl_pty *pty);
bool shl_pty_is_open(struct shl_pty *pty);
int shl_pty_get_fd(struct shl_pty *pty);
pid_t shl_pty_get_child(struct shl_pty *pty);
int shl_pty_dispatch(struct shl_pty *pty);
int shl_pty_write(struct shl_pty *pty, const char *u8, size_t len);
int shl_pty_signal(struct shl_pty *pty, int sig);
int shl_pty_resize(struct shl_pty *pty, unsigned short term_width,
unsigned short term_height);
/* pty bridge */
int shl_pty_bridge_new(void);
void shl_pty_bridge_free(int bridge);
int shl_pty_bridge_dispatch(int bridge, int timeout);
int shl_pty_bridge_add(int bridge, struct shl_pty *pty);
void shl_pty_bridge_remove(int bridge, struct shl_pty *pty);
#endif /* SHL_PTY_H */