ctlseqs/include/ctlseqs.h

470 lines
20 KiB
C++

/**
* ctlseqs.h - helper library for control sequences
*
* Copyright (C) 2020,2021 CismonX <admin@cismon.net>
*
* This file is part of the ctlseqs library.
*
* ctlseqs is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ctlseqs is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ctlseqs. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef CTLSEQS_H_
#define CTLSEQS_H_
#define CTLSEQS_VERSION_MAJOR 0x00
#define CTLSEQS_VERSION_MINOR 0x01
#define CTLSEQS_VERSION_PATCH 0x00
#define CTLSEQS_VERSION_ID 0x000100
#define CTLSEQS_VERSION_STRING "0.1.0"
/* C0 Control Functions */
#define CTLSEQS_NUL "\x00" // Null
#define CTLSEQS_SOH "\x01" // Start of Heading
#define CTLSEQS_STX "\x02" // Start of Text
#define CTLSEQS_ETX "\x03" // End of Text
#define CTLSEQS_EOT "\x04" // End of Transmission
#define CTLSEQS_ENQ "\x05" // Enquiry
#define CTLSEQS_ACK "\x06" // Acknowledge
#define CTLSEQS_BEL "\x07" // Bell
#define CTLSEQS_BS "\x08" // Backspace
#define CTLSEQS_HT "\x09" // Horizontal Tab
#define CTLSEQS_LF "\x0a" // Line Feed
#define CTLSEQS_VT "\x0b" // Vertical Tab
#define CTLSEQS_FF "\x0c" // Form Feed or New Page
#define CTLSEQS_CR "\x0d" // Carriage Return
#define CTLSEQS_SO "\x0e" // Shift Out
#define CTLSEQS_SI "\x0f" // Shift In
#define CTLSEQS_DLE "\x10" // Data Link Escape
#define CTLSEQS_DC1 "\x11" // Device Control 1
#define CTLSEQS_DC2 "\x12" // Device Control 2
#define CTLSEQS_DC3 "\x13" // Device Control 3
#define CTLSEQS_DC4 "\x14" // Device Control 4
#define CTLSEQS_NAK "\x15" // Negative Acknowledgement
#define CTLSEQS_SYN "\x16" // Synchronous Idle
#define CTLSEQS_ETB "\x17" // End of Transmission Block
#define CTLSEQS_CAN "\x18" // Cancel
#define CTLSEQS_EM "\x19" // End of Medium
#define CTLSEQS_SUB "\x1a" // Substitute
#define CTLSEQS_ESC "\x1b" // Escape
#define CTLSEQS_FS "\x1c" // File Separator
#define CTLSEQS_GS "\x1d" // Group Separator
#define CTLSEQS_RS "\x1e" // Record Separator
#define CTLSEQS_US "\x1f" // Unit Separator
#define CTLSEQS_SP "\x20" // Space
#define CTLSEQS_DEL "\x7f" // Delete
/* C1 Control Functions (2-character 7-bit representation) */
#define CTLSEQS_BPH CTLSEQS_ESC "B" // Break Permitted Here
#define CTLSEQS_NBH CTLSEQS_ESC "C" // No Break Here
#define CTLSEQS_IND CTLSEQS_ESC "D" // Index
#define CTLSEQS_NEL CTLSEQS_ESC "E" // Next Line
#define CTLSEQS_SSA CTLSEQS_ESC "F" // Start of Selected Area
#define CTLSEQS_ESA CTLSEQS_ESC "G" // End of Selected Area
#define CTLSEQS_HTS CTLSEQS_ESC "H" // Character Tabulation Set
#define CTLSEQS_VTS CTLSEQS_ESC "J" // Line Tabulation Set
#define CTLSEQS_PLD CTLSEQS_ESC "K" // Partial Line Forward
#define CTLSEQS_PLU CTLSEQS_ESC "L" // Partial Line Backward
#define CTLSEQS_RI CTLSEQS_ESC "M" // Reverse Index
#define CTLSEQS_SS2 CTLSEQS_ESC "N" // Single Shift 2
#define CTLSEQS_SS3 CTLSEQS_ESC "O" // Single Shift 3
#define CTLSEQS_DCS CTLSEQS_ESC "P" // Device Control String
#define CYLSEQS_PU1 CTLSEQS_ESC "Q" // Private Use 1
#define CYLSEQS_PU2 CTLSEQS_ESC "R" // Private Use 2
#define CYLSEQS_STS CTLSEQS_ESC "S" // Set Transmit State
#define CTLSEQS_CCH CTLSEQS_ESC "T" // Cancel Character
#define CTLSEQS_MW CTLSEQS_ESC "U" // Message Waiting
#define CTLSEQS_SPA CTLSEQS_ESC "V" // Start of Guarded Area
#define CTLSEQS_EPA CTLSEQS_ESC "W" // End of Guarded Area
#define CTLSEQS_SOS CTLSEQS_ESC "X" // Start of String
#define CTLSEQS_HTJ CTLSEQS_ESC "Y" // Character Tabulation with Justification
#define CYLSEQS_SCI CTLSEQS_ESC "Z" // Single Character Introducer
#define CTLSEQS_CSI CTLSEQS_ESC "[" // Control Sequence Introducer
#define CTLSEQS_ST CTLSEQS_ESC "\\" // String Terminator
#define CTLSEQS_OSC CTLSEQS_ESC "]" // Operating System Command
#define CTLSEQS_PM CTLSEQS_ESC "^" // Privacy Message
#define CTLSEQS_APC CTLSEQS_ESC "_" // Application Program Command
/* Controls beginning with ESC */
#define CTLSEQS_S7C1T() CTLSEQS_ESC " F" // 7-bit controls
#define CTLSEQS_S8C1T() CTLSEQS_ESC " G" // 8-bit controls
#define CTLSEQS_DECDHL_TOP() CTLSEQS_ESC "#3" // DEC double-height line, top half
#define CTLSEQS_DECDHL_BOTOM() CTLSEQS_ESC "#4" // DEC double-height line, bottom half
#define CTLSEQS_DECSWL() CTLSEQS_ESC "#5" // DEC single-width line
#define CTLSEQS_DECDWL() CTLSEQS_ESC "#6" // DEC double-width line
#define CTLSEQS_DECALN() CTLSEQS_ESC "#8" // DEC Screen Alignment Test
#define CTLSEQS_DECBI() CTLSEQS_ESC "6" // Back Index
#define CTLSEQS_DECSC() CTLSEQS_ESC "7" // Save Cursor
#define CTLSEQS_DECRC() CTLSEQS_ESC "8" // Restore Cursor
#define CTLSEQS_DECFI() CTLSEQS_ESC "9" // Forward Index
#define CTLSEQS_DECKPAM() CTLSEQS_ESC "=" // Application Keypad
#define CTLSEQS_DECKPNM() CTLSEQS_ESC ">" // Normal Keypad
#define CTLSEQS_RIS() CTLSEQS_ESC "c" // Full Reset
/* Device-Control functions */
// User-Defined Keys
#define CTLSEQS_DECUDK(i1, i2, s) CTLSEQS_DCS i1 ";" i2 "|" s CTLSEQS_ST
// Request Status String
#define CTLSEQS_DECRQSS(s) CTLSEQS_DCS "$q" s CTLSEQS_ST
// Restore presentation status
#define CTLSEQS_DECRSPS(i, s) CTLSEQS_DCS i "$t" s CTLSEQS_ST
// Request resource values
#define CTLSEQS_XTGETXRES(s) CTLSEQS_DCS "+Q" s CTLSEQS_ST
// Set Termcap/Terminfo Data
#define CTLSEQS_XTSETTCAP(s) CTLSEQS_DCS "+p" s CTLSEQS_ST
// Request Termcap/Terminfo String
#define CTLSEQS_XTGETTCAP(s) CTLSEQS_DCS "+q" s CTLSEQS_ST
/* Control Sequences */
// Insert $n (Blank) Character(s)
#define CTLSEQS_ICH(n) CTLSEQS_CSI n "@"
// Shift left $n columns(s)
#define CTLSEQS_SL(n) CTLSEQS_CSI n " @"
// Cursor Up $n Times
#define CTLSEQS_CUU(n) CTLSEQS_CSI n "A"
// Shift right $n columns(s)
#define CTLSEQS_SR(n) CTLSEQS_CSI n " A"
// Cursor Down $n Times
#define CTLSEQS_CUD(n) CTLSEQS_CSI n "B"
// Cursor Forward $n Times
#define CTLSEQS_CUF(n) CTLSEQS_CSI n "C"
// Cursor Backward $n Times
#define CTLSEQS_CUB(n) CTLSEQS_CSI n "D"
// Cursor Next Line $n Times
#define CTLSEQS_CNL(n) CTLSEQS_CSI n "E"
// Cursor Preceding Line $n Times
#define CTLSEQS_CPL(n) CTLSEQS_CSI n "F"
// Cursor Character Absolute
#define CTLSEQS_CHA(row) CTLSEQS_CSI row "G"
// Cursor Position
#define CTLSEQS_CUP(row, col) CTLSEQS_CSI row ";" col "H"
// Cursor Forward Tabulation $n tab stops
#define CTLSEQS_CHT(n) CTLSEQS_CSI n "I"
// Erase in Display
#define CTLSEQS_ED(i) CTLSEQS_CSI i "J"
// Erase in Display
#define CTLSEQS_DECSED(i) CTLSEQS_CSI "?" i "J"
// Erase in Line
#define CTLSEQS_EL(i) CTLSEQS_CSI i "K"
// Erase in Line
#define CTLSEQS_DECSEL(i) CTLSEQS_CSI "?" i "K"
// Insert $n Line(s)
#define CTLSEQS_IL(n) CTLSEQS_CSI n "L"
// Delete $n Line(s)
#define CTLSEQS_DL(n) CTLSEQS_CSI n "M"
// Delete $n Character(s)
#define CTLSEQS_DCH(n) CTLSEQS_CSI n "P"
// Scroll up $n Lines
#define CTLSEQS_SU(n) CTLSEQS_CSI n "S"
// Set or request graphics attribute
#define CTLSEQS_XTSMGRAPHICS(i1, i2, is) CTLSEQS_CSI "?" i1 ";" i2 ";" is "S"
// Scroll Down $n Line(s)
#define CTLSEQS_SD(n) CTLSEQS_CSI n "T"
// Initiate highlight mouse tracking
#define CTLSEQS_XTHIMOUSE(f, x, y, fr, lr) CTLSEQS_CSI f ";" x ";" y ";" fr ";" lr "T"
// Reset title mode features to default value
#define CTLSEQS_XTRMTITLE(is) CTLSEQS_CSI ">" is "T"
// Erase $n Character(s)
#define CTLSEQS_ECH(n) CTLSEQS_CSI n "X"
// Cursor Backward Tabulation $n tab stops
#define CTLSEQS_CBT(n) CTLSEQS_CSI n "Z"
// Character Position Absolute
#define CTLSEQS_HPA(n) CTLSEQS_CSI n "`"
// Character Position Relative
#define CTLSEQS_HPR(n) CTLSEQS_CSI n "a"
// Repeat the preceding graphic character $n times
#define CTLSEQS_REP(n) CTLSEQS_CSI n "b"
// Send Device Attributes
#define CTLSEQS_PRIMARY_DA() CTLSEQS_CSI "c"
// Send Device Attributes
#define CTLSEQS_TERTIARY_DA() CTLSEQS_CSI "=0c"
// Send Device Attributes
#define CTLSEQS_SECONDARY_DA() CTLSEQS_CSI ">c"
// Line Position Absolute
#define CTLSEQS_VPA(row) CTLSEQS_CSI row "d"
// Line Position Relative
#define CTLSEQS_VPR(rows) CTLSEQS_CSI rows "e"
// Horizontal and Vertical Position
#define CTLSEQS_HVP(row, col) CTLSEQS_CSI row ";" col "f"
// Tab Clear
#define CTLSEQS_TBC(i) CTLSEQS_CSI i "g"
// Set Mode
#define CTLSEQS_SM(i) CTLSEQS_CSI i "h"
// DEC Private Mode Set
#define CTLSEQS_DECSET(i) CTLSEQS_CSI "?" i "h"
// Media Copy
#define CTLSEQS_MC(i) CTLSEQS_CSI i "i"
// Media Copy, DEC-specific
#define CTLSEQS_MC_DEC(i) CTLSEQS_CSI "?" i "i"
// Reset Mode
#define CTLSEQS_RM(i) CTLSEQS_CSI i "l"
// DEC Private Mode Reset
#define CTLSEQS_DECRST(i) CTLSEQS_CSI "?" i "l"
// Character Attributes
#define CTLSEQS_SGR(i) CTLSEQS_CSI i "m"
// Set/reset key modifier options
#define CTLSEQS_XTMODKEYS(is) CTLSEQS_CSI ">" is "m"
// Device Status Report
#define CTLSEQS_DSR(i) CTLSEQS_CSI i "n"
// Disable key modifier options
#define CTLSEQS_XTMODKEYS_DISABLE(i) CTLSEQS_CSI ">" i "n"
// Device Status Report
#define CTLSEQS_DSR_DEC(i) CTLSEQS_CSI "?" i "n"
// Set resource value pointerMode
#define CTLSEQS_XTSMPOINTER(i) CTLSEQS_CSI ">" i "p"
// Soft terminal reset
#define CTLSEQS_DECSTR() CTLSEQS_CSI "!p"
// Set conformance level
#define CTLSEQS_DECSCL(i1, i2) CTLSEQS_CSI i1 ";" i2 "\"p"
// Request ANSI mode
#define CTLSEQS_DECRQM_ANSI(i) CTLSEQS_CSI i "$p"
// Request DEC private mode
#define CTLSEQS_DECRQM(i) CTLSEQS_CSI "?" i "$p"
// Report xterm name and version
#define CTLSEQS_XTVERSION() CTLSEQS_CSI ">0q"
// Load LEDs
#define CTLSEQS_DECLL(i) CTLSEQS_CSI i "q"
// Set cursor style
#define CTLSEQS_DECSCUSR(i) CTLSEQS_CSI i " q"
// Select character protection attribute
#define CTLSEQS_DECSCA(i) CTLSEQS_CSI i "\"q"
// Set Scrolling Region
#define CTLSEQS_DECSTBM(top, btm) CTLSEQS_CSI top ";" btm "r"
// Restore DEC Private Mode Values
#define CTLSEQS_XTRESTORE(is) CTLSEQS_CSI "?" is "r"
// Change Attributes in Rectangular Area
#define CTLSEQS_DECCARA(t, l, b, r, i) CTLSEQS_CSI t ";" l ";" b ";" r ";" i "$r"
// Save cursor
#define CTLSEQS_SCOSC() CTLSEQS_CSI "s"
// Set left and right margins
#define CTLSEQS_DECSLRM(l, r) CTLSEQS_CSI l ";" r "s"
// Save DEC Private Mode Values
#define CTLSEQS_XTSAVE(is) CTLSEQS_CSI "?" is "s"
// Window manipulation
#define CTLSEQS_XTWINOPS(is) CTLSEQS_CSI is "t"
// Set one or more features of the title modes
#define CTLSEQS_XTSMTITLE(is) CTLSEQS_CSI ">" is "t"
// Set warning-bell volume
#define CTLSEQS_DECSWBV(i) CTLSEQS_CSI i " t"
// Reverse Attributes in Rectangular Area
#define CTLSEQS_DECRARA(t, l, b, r, i) CTLSEQS_CSI t ";" l ";" b ";" r ";" i "$t"
// Restore cursor
#define CTLSEQS_SCORC() CTLSEQS_CSI "u"
// Set margin-bell volume
#define CTLSEQS_DECSMBV(i) CTLSEQS_CSI i " u"
// Copy Rectangular Area
#define CTLSEQS_DECCRA(t, l, b, r, sp, dt, dl, dp) CTLSEQS_CSI t ";" l ";" b ";" r ";" sp ";" dt ";" dl ";" dp "$v"
// Request presentation state report
#define CTLSEQS_DECRQPSR(i) CTLSEQS_CSI i "$w"
// Enable Filter Rectangle
#define CTLSEQS_DECEFR(t, l, b, r) CTLSEQS_CSI t ";" l ";" b ";" r "'w"
// Request Terminal Parameters
#define CTLSEQS_DECREQTPARM(i) CTLSEQS_CSI i "x"
// Select Attribute Change Extent
#define CTLSEQS_DECSACE(i) CTLSEQS_CSI i "*x"
// Fill Rectangular Area
#define CTLSEQS_DECFRA(c, t, l, b, r) CTLSEQS_CSI c ";" t ";" l ";" b ";" r "$x"
// Select checksum extension
#define CTLSEQS_XTCHECKSUM(i) CTLSEQS_CSI i "#y"
// Request Checksum of Rectangular Area
#define CTLSEQS_DECRQCRA(id, p, t, l, b, r) CTLSEQS_CSI id ";" p ";" t ";" l ";" b ";" r "*y"
// Enable Locator Reporting
#define CTLSEQS_DECELR(i1, i2) CTLSEQS_CSI i1 ";" i2 "'z"
// Erase Rectangular Area
#define CTLSEQS_DECERA(t, l, b, r) CTLSEQS_CSI t ";" l ";" b ";" r "$z"
// Select Locator Events
#define CTLSEQS_DECSLE(is) CTLSEQS_CSI is "'{"
// Push video attributes onto stack
#define CTLSEQS_XTPUSHSGR(is) CTLSEQS_CSI is "#{"
// Selective Erase Rectangular Area
#define CTLSEQS_DECSERA(t, l, b, r) CTLSEQS_CSI t ";" l ";" b ";" r "${"
// Report selected graphic rendition
#define CTLSEQS_XTREPORTSGR(t, l, b, r) CTLSEQS_CSI t ";" l ";" b ";" r "$|"
// Select columns per page
#define CTLSEQS_DECSCPP(i) CTLSEQS_CSI i "$|"
// Request Locator Position
#define CTLSEQS_DECRQLP() CTLSEQS_CSI "'|"
// Select $n number of lines per screen
#define CTLSEQS_DECSNLS(n) CTLSEQS_CSI n "*|"
// Pop video attributes from stack
#define CTLSEQS_XTPOPSGR() CTLSEQS_CSI "#}"
// Insert $n Column(s)
#define CTLSEQS_DECIC(n) CTLSEQS_CSI n "'}"
// Delete $n Column(s)
#define CTLSEQS_DECDC(n) CTLSEQS_CSI n "'~"
/* Operating System Commands */
// Set Text Parameters
#define CTLSEQS_OSC_SEQ(i, s) CTLSEQS_OSC i ";" s CTLSEQS_ST
/* Response messages */
// DECRQSS response message
#define CTLSEQS_RESP_DECRQSS(n, s) CTLSEQS_DCS n "$r" s CTLSEQS_ST
// XTGETXRES response message
#define CTLSEQS_RESP_XTGETXRES(n, s) CTLSEQS_DCS n "+R" s CTLSEQS_ST
// XTGETTCAP response message
#define CTLSEQS_RESP_XTGETTCAP(n, s) CTLSEQS_DCS n "+r" s CTLSEQS_ST
// Primary DA response message
#define CTLSEQS_RESP_PRIMARY_DA(ns) CTLSEQS_CSI "?" ns "c"
// Secondary DA response message
#define CTLSEQS_RESP_SECONDARY_DA(n1, n2, n3) CTLSEQS_CSI ">" n1 ";" n2 ";" n3 "c"
// DECLRP response message
#define CTLSEQS_RESP_DECXCPR(n1, n2) CTLSEQS_CSI "?" n1 ";" n2 "R"
// DSR response message
#define CTLSEQS_RESP_DSR(ns) CTLSEQS_CSI "?" ns "n"
// DECRQM response message (ANSI mode)
#define CTLSEQS_RESP_DECRQM_ANSI(n1, n2) CTLSEQS_CSI n1 ";" n2 "$y"
// DECRQM response message (DEC private mode)
#define CTLSEQS_RESP_DECRQM(n1, n2) CTLSEQS_CSI "?" n1 ";" n2 "$y"
// XTVERSION response message
#define CTLSEQS_RESP_XTVERSION(s) CTLSEQS_DCS ">|" s CTLSEQS_ST
// DECCIR response message
#define CTLSEQS_RESP_DECCIR(s) CTLSEQS_DCS "1$u" s CTLSEQS_ST
// DECTABSR response message
#define CTLSEQS_RESP_DECTABSR(s) CTLSEQS_DCS "2$u" s CTLSEQS_ST
// DECRQCRA response message
#define CTLSEQS_RESP_DECRQCRA(n, s) CTLSEQS_DCS n "!~" s CTLSEQS_ST
// DECRQLP response message
#define CTLSEQS_RESP_DECRQLP(e, b, row, col, p) CTLSEQS_CSI e ";" b ";" row ";" col ";" p "&w"
// Mouse response in SGR mouse mode
#define CTLSEQS_RESP_SGR_MOUSE(n, col, row, c) CTLSEQS_CSI "<" n ";" col ";" row c
/// PC-Style Function Keys
#define CTLSEQS_KEY_UP() CTLSEQS_CSI "A" // Up arrow key
#define CTLSEQS_KEY_DOWN() CTLSEQS_CSI "B" // Down arrow key
#define CTLSEQS_KEY_RIGHT() CTLSEQS_CSI "C" // Right arrow key
#define CTLSEQS_KEY_LEFT() CTLSEQS_CSI "D" // Left arrow key
#define CTLSEQS_KEY_HOME() CTLSEQS_CSI "H" // Home key
#define CTLSEQS_KEY_END() CTLSEQS_CSI "F" // End key
#define CTLSEQS_KEY_INSERT() CTLSEQS_CSI "2~" // Insert key
#define CTLSEQS_KEY_DELETE() CTLSEQS_CSI "3~" // Delete key
#define CTLSEQS_KEY_PGUP() CTLSEQS_CSI "5~" // Page Up key
#define CTLSEQS_KEY_PGDN() CTLSEQS_CSI "6~" // Page Down key
#define CTLSEQS_KEY_F1() CTLSEQS_SS3 "P" // F1 key
#define CTLSEQS_KEY_F2() CTLSEQS_SS3 "Q" // F2 key
#define CTLSEQS_KEY_F3() CTLSEQS_SS3 "R" // F3 key
#define CTLSEQS_KEY_F4() CTLSEQS_SS3 "S" // F4 key
#define CTLSEQS_KEY_F5() CTLSEQS_CSI "15~" // F5 key
#define CTLSEQS_KEY_F6() CTLSEQS_CSI "17~" // F6 key
#define CTLSEQS_KEY_F7() CTLSEQS_CSI "18~" // F7 key
#define CTLSEQS_KEY_F8() CTLSEQS_CSI "19~" // F8 key
#define CTLSEQS_KEY_F9() CTLSEQS_CSI "20~" // F9 key
#define CTLSEQS_KEY_F10() CTLSEQS_CSI "21~" // F10 key
#define CTLSEQS_KEY_F11() CTLSEQS_CSI "23~" // F11 key
#define CTLSEQS_KEY_F12() CTLSEQS_CSI "24~" // F12 key
#ifdef __cplusplus
# include <cstddef>
#else
# include <stddef.h>
#endif // __cplusplus
#include <sys/types.h>
/* Placeholders */
#define CTLSEQS_PH_NUM "\x0e" // CSI Parameter Bytes, numbers only
#define CTLSEQS_PH_NUMS "\x0f" // CSI Parameter Bytes, multiple numbers separated by semicolon
#define CTLSEQS_PH_STR "\x10" // String, printable characters only
#define CTLSEQS_PH_CMDSTR "\x11" // Command String
#define CTLSEQS_PH_CSI_PARAM "\x12" // CSI Parameter Bytes
#define CTLSEQS_PH_CSI_INTMD "\x13" // CSI Intermediate Bytes
#define CTLSEQS_PH_HEXNUM "\x14" // Printable characters representing a hexadecimal number
#define CTLSEQS_PH_CHRSTR "\x15" // Character String
/* Reader option flags */
#define CTLSEQS_READER_NO_POLL (1 << 0) // Do not poll() before read()
#define CTLSEQS_READER_SAVE_MATCHED_SEQS (1 << 1) // Save successfully matched sequence to buffer
/* Function return status codes */
#define CTLSEQS_OK 0
#define CTLSEQS_NOMEM -1
#define CTLSEQS_ERROR -2
#define CTLSEQS_EOF -3
#define CTLSEQS_TIMEOUT -4
#define CTLSEQS_NOMATCH -5 // Not matching given patterns
#define CTLSEQS_PARTIAL -6 // Parially a control sequence
#define CTLSEQS_NOSEQ -7 // Not a control sequence
#define CTLSEQS_INTR -8 // Interrupted by signal
struct ctlseqs_matcher;
struct ctlseqs_reader;
struct ctlseqs_matcher_options {
char const *const *patterns;
size_t npatterns;
};
struct ctlseqs_reader_options {
union ctlseqs_value *result;
size_t maxlen;
int fd;
unsigned flags;
};
union ctlseqs_value {
char const *str;
size_t len;
unsigned long num;
};
#ifdef __cplusplus
extern "C" {
using std::size_t;
#endif // __cplusplus
struct ctlseqs_matcher *
ctlseqs_matcher_init();
int
ctlseqs_matcher_config(struct ctlseqs_matcher *matcher, struct ctlseqs_matcher_options const *options);
void
ctlseqs_matcher_free(struct ctlseqs_matcher *matcher);
ssize_t
ctlseqs_match(struct ctlseqs_matcher const *matcher, char const *str, size_t str_len, union ctlseqs_value *result);
struct ctlseqs_reader *
ctlseqs_reader_init();
int
ctlseqs_reader_config(struct ctlseqs_reader *reader, struct ctlseqs_reader_options const *options);
ssize_t
ctlseqs_read(struct ctlseqs_reader *reader, struct ctlseqs_matcher const *matcher, int timeout);
void
ctlseqs_purge(struct ctlseqs_reader *reader, size_t nbytes);
void
ctlseqs_reader_free(struct ctlseqs_reader *reader);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // !CTLSEQS_H_