470 lines
20 KiB
C++
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_
|