#ifndef PTYCON_H #define PTYCON_H #include #include #include "ptycon_api.h" #ifdef __cplusplus extern "C" { #endif /* pre-alpha */ #ifndef PTYC_APP #ifndef PTYC_PRE_ALPHA #error libptycon: pre-alpha: ABI is not final! #error to use the library, please pass -DPTYC_PRE_ALPHA to the compiler. #endif #endif /* daemon */ #define PTYC_PORT_GUID_DAEMON {0x38a31275, \ 0x8c52, \ 0x4285, \ {0xaa,0x34,0x70,0xe0,0x6c,0x30,0x6d,0xe5}} /* status codes */ #define PTYC_OK 0x00 #define PTYC_USAGE 0x01 #define PTYC_ERROR 0x02 /* driver flags */ #define PTYC_DRIVER_VERBOSITY_NONE 0x0000 #define PTYC_DRIVER_VERBOSITY_ERRORS 0x0001 #define PTYC_DRIVER_VERBOSITY_STATUS 0x0002 #define PTYC_DRIVER_VERBOSITY_USAGE 0x0004 #define PTYC_DRIVER_CLONE_VECTOR 0x0008 #define PTYC_DRIVER_VERSION 0x0010 #define PTYC_DRIVER_BELL 0x0020 #define PTYC_DRIVER_DBG_EVENT 0x0100 #define PTYC_DRIVER_DBG_OVEN 0x0200 #define PTYC_DRIVER_DBG_RAW 0x0400 #define PTYC_DRIVER_DBG_WAIT 0x0800 #define PTYC_DRIVER_DAEMON_ALWAYS 0x1000 #define PTYC_DRIVER_DAEMON_NEVER 0x2000 #define PTYC_DRIVER_DBG_MODE (PTYC_DRIVER_DBG_EVENT \ | PTYC_DRIVER_DBG_OVEN \ | PTYC_DRIVER_DBG_RAW) struct ptyc_source_version { int major; int minor; int revision; const char * commit; }; struct ptyc_common_ctx { uint64_t drvflags; uint64_t actflags; uint64_t fmtflags; nt_pty * hpts; nt_pty * hptm; void * hroot; const char * sysroot; char ** catv; char ** eargv; }; struct ptyc_driver_ctx { const char ** units; const char * program; const char * module; const struct ptyc_common_ctx * cctx; void * any; int status; int nerrors; }; /* package info */ ptyc_api const struct ptyc_source_version * ptyc_source_version(void); /* driver api */ ptyc_api int ptyc_get_driver_ctx (char ** argv, char ** envp, uint32_t flags, struct ptyc_driver_ctx **); ptyc_api void ptyc_free_driver_ctx (struct ptyc_driver_ctx *); /* pty api */ ptyc_api int ptyc_alloc_pty (struct ptyc_driver_ctx *); ptyc_api void ptyc_free_pty (struct ptyc_driver_ctx *); ptyc_api int ptyc_spawn (struct ptyc_driver_ctx *); /* console api */ ptyc_api int ptyc_alloc_console (struct ptyc_driver_ctx *); ptyc_api int ptyc_wait_for_console (struct ptyc_driver_ctx *); ptyc_api void ptyc_free_console (struct ptyc_driver_ctx *); /* utility api */ ptyc_api int ptyc_main (char **, char **); #ifdef __cplusplus } #endif #endif