2020-11-17 06:24:43 +00:00
|
|
|
/**
|
2021-02-02 19:13:38 +00:00
|
|
|
* ctlseqs.h - helper library for control sequences
|
2021-10-30 14:43:54 +00:00
|
|
|
*
|
2021-01-10 17:53:38 +00:00
|
|
|
* Copyright (C) 2020,2021 CismonX <admin@cismon.net>
|
2021-10-30 14:43:54 +00:00
|
|
|
*
|
2020-11-17 06:24:43 +00:00
|
|
|
* This file is part of the ctlseqs library.
|
|
|
|
*
|
2020-12-17 08:04:55 +00:00
|
|
|
* ctlseqs is free software: you can redistribute it and/or modify
|
2020-11-17 06:24:43 +00:00
|
|
|
* 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.
|
|
|
|
*
|
2020-12-17 08:04:55 +00:00
|
|
|
* ctlseqs is distributed in the hope that it will be useful,
|
2020-11-17 06:24:43 +00:00
|
|
|
* 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
|
2020-11-27 01:23:12 +00:00
|
|
|
* along with ctlseqs. If not, see <https://www.gnu.org/licenses/>.
|
2020-11-17 06:24:43 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef CTLSEQS_H_
|
|
|
|
#define CTLSEQS_H_
|
|
|
|
|
2020-12-14 13:13:13 +00:00
|
|
|
#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"
|
|
|
|
|
2021-02-21 19:05:27 +00:00
|
|
|
/* C0 Control Functions */
|
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// Null
|
|
|
|
#define CTLSEQS_NUL "\x00"
|
|
|
|
// Start of Heading
|
|
|
|
#define CTLSEQS_SOH "\x01"
|
|
|
|
// Start of Text
|
|
|
|
#define CTLSEQS_STX "\x02"
|
|
|
|
// End of Text
|
|
|
|
#define CTLSEQS_ETX "\x03"
|
|
|
|
// End of Transmission
|
|
|
|
#define CTLSEQS_EOT "\x04"
|
|
|
|
// Enquiry
|
|
|
|
#define CTLSEQS_ENQ "\x05"
|
|
|
|
// Acknowledge
|
|
|
|
#define CTLSEQS_ACK "\x06"
|
|
|
|
// Bell
|
|
|
|
#define CTLSEQS_BEL "\x07"
|
|
|
|
// Backspace
|
|
|
|
#define CTLSEQS_BS "\x08"
|
|
|
|
// Horizontal Tab
|
|
|
|
#define CTLSEQS_HT "\x09"
|
|
|
|
// Line Feed
|
|
|
|
#define CTLSEQS_LF "\x0a"
|
|
|
|
// Vertical Tab
|
|
|
|
#define CTLSEQS_VT "\x0b"
|
|
|
|
// Form Feed or New Page
|
|
|
|
#define CTLSEQS_FF "\x0c"
|
|
|
|
// Carriage Return
|
|
|
|
#define CTLSEQS_CR "\x0d"
|
|
|
|
// Shift Out
|
|
|
|
#define CTLSEQS_SO "\x0e"
|
|
|
|
// Shift In
|
|
|
|
#define CTLSEQS_SI "\x0f"
|
|
|
|
// Data Link Escape
|
|
|
|
#define CTLSEQS_DLE "\x10"
|
|
|
|
// Device Control 1
|
|
|
|
#define CTLSEQS_DC1 "\x11"
|
|
|
|
// Device Control 2
|
|
|
|
#define CTLSEQS_DC2 "\x12"
|
|
|
|
// Device Control 3
|
|
|
|
#define CTLSEQS_DC3 "\x13"
|
|
|
|
// Device Control 4
|
|
|
|
#define CTLSEQS_DC4 "\x14"
|
|
|
|
// Negative Acknowledgement
|
|
|
|
#define CTLSEQS_NAK "\x15"
|
|
|
|
// Synchronous Idle
|
|
|
|
#define CTLSEQS_SYN "\x16"
|
|
|
|
// End of Transmission Block
|
|
|
|
#define CTLSEQS_ETB "\x17"
|
|
|
|
// Cancel
|
|
|
|
#define CTLSEQS_CAN "\x18"
|
|
|
|
// End of Medium
|
|
|
|
#define CTLSEQS_EM "\x19"
|
|
|
|
// Substitute
|
|
|
|
#define CTLSEQS_SUB "\x1a"
|
|
|
|
// Escape
|
|
|
|
#define CTLSEQS_ESC "\x1b"
|
|
|
|
// File Separator
|
|
|
|
#define CTLSEQS_FS "\x1c"
|
|
|
|
// Group Separator
|
|
|
|
#define CTLSEQS_GS "\x1d"
|
|
|
|
// Record Separator
|
|
|
|
#define CTLSEQS_RS "\x1e"
|
|
|
|
// Unit Separator
|
|
|
|
#define CTLSEQS_US "\x1f"
|
|
|
|
// Space
|
|
|
|
#define CTLSEQS_SP "\x20"
|
|
|
|
// Delete
|
|
|
|
#define CTLSEQS_DEL "\x7f"
|
2020-11-17 06:24:43 +00:00
|
|
|
|
2021-02-21 19:05:27 +00:00
|
|
|
/* C1 Control Functions (2-character 7-bit representation) */
|
2020-11-17 06:24:43 +00:00
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// Break Permitted Here
|
|
|
|
#define CTLSEQS_BPH CTLSEQS_ESC "B"
|
|
|
|
// No Break Here
|
|
|
|
#define CTLSEQS_NBH CTLSEQS_ESC "C"
|
|
|
|
// Index
|
|
|
|
#define CTLSEQS_IND CTLSEQS_ESC "D"
|
|
|
|
// Next Line
|
|
|
|
#define CTLSEQS_NEL CTLSEQS_ESC "E"
|
|
|
|
// Start of Selected Area
|
|
|
|
#define CTLSEQS_SSA CTLSEQS_ESC "F"
|
|
|
|
// End of Selected Area
|
|
|
|
#define CTLSEQS_ESA CTLSEQS_ESC "G"
|
|
|
|
// Character Tabulation Set
|
|
|
|
#define CTLSEQS_HTS CTLSEQS_ESC "H"
|
|
|
|
// Line Tabulation Set
|
|
|
|
#define CTLSEQS_VTS CTLSEQS_ESC "J"
|
|
|
|
// Partial Line Forward
|
|
|
|
#define CTLSEQS_PLD CTLSEQS_ESC "K"
|
|
|
|
// Partial Line Backward
|
|
|
|
#define CTLSEQS_PLU CTLSEQS_ESC "L"
|
|
|
|
// Reverse Index
|
|
|
|
#define CTLSEQS_RI CTLSEQS_ESC "M"
|
|
|
|
// Single Shift 2
|
|
|
|
#define CTLSEQS_SS2 CTLSEQS_ESC "N"
|
|
|
|
// Single Shift 3
|
|
|
|
#define CTLSEQS_SS3 CTLSEQS_ESC "O"
|
|
|
|
// Device Control String
|
|
|
|
#define CTLSEQS_DCS CTLSEQS_ESC "P"
|
|
|
|
// Private Use 1
|
|
|
|
#define CTLSEQS_PU1 CTLSEQS_ESC "Q"
|
|
|
|
// Private Use 2
|
|
|
|
#define CTLSEQS_PU2 CTLSEQS_ESC "R"
|
|
|
|
// Set Transmit State
|
|
|
|
#define CTLSEQS_STS CTLSEQS_ESC "S"
|
|
|
|
// Cancel Character
|
|
|
|
#define CTLSEQS_CCH CTLSEQS_ESC "T"
|
|
|
|
// Message Waiting
|
|
|
|
#define CTLSEQS_MW CTLSEQS_ESC "U"
|
|
|
|
// Start of Guarded Area
|
|
|
|
#define CTLSEQS_SPA CTLSEQS_ESC "V"
|
|
|
|
// End of Guarded Area
|
|
|
|
#define CTLSEQS_EPA CTLSEQS_ESC "W"
|
|
|
|
// Start of String
|
|
|
|
#define CTLSEQS_SOS CTLSEQS_ESC "X"
|
|
|
|
// Character Tabulation with Justification
|
|
|
|
#define CTLSEQS_HTJ CTLSEQS_ESC "Y"
|
|
|
|
// Single Character Introducer
|
|
|
|
#define CTLSEQS_SCI CTLSEQS_ESC "Z"
|
|
|
|
// Control Sequence Introducer
|
|
|
|
#define CTLSEQS_CSI CTLSEQS_ESC "["
|
|
|
|
// String Terminator
|
|
|
|
#define CTLSEQS_ST CTLSEQS_ESC "\\"
|
|
|
|
// Operating System Command
|
|
|
|
#define CTLSEQS_OSC CTLSEQS_ESC "]"
|
|
|
|
// Privacy Message
|
|
|
|
#define CTLSEQS_PM CTLSEQS_ESC "^"
|
|
|
|
// Application Program Command
|
|
|
|
#define CTLSEQS_APC CTLSEQS_ESC "_"
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
/* Controls beginning with ESC */
|
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// 7-bit controls
|
|
|
|
#define CTLSEQS_S7C1T() CTLSEQS_ESC " F"
|
|
|
|
// 8-bit controls
|
|
|
|
#define CTLSEQS_S8C1T() CTLSEQS_ESC " G"
|
|
|
|
// DEC double-height line, top half
|
|
|
|
#define CTLSEQS_DECDHL_TOP() CTLSEQS_ESC "#3"
|
|
|
|
// DEC double-height line, bottom half
|
|
|
|
#define CTLSEQS_DECDHL_BOTOM() CTLSEQS_ESC "#4"
|
|
|
|
// DEC single-width line
|
|
|
|
#define CTLSEQS_DECSWL() CTLSEQS_ESC "#5"
|
|
|
|
// DEC double-width line
|
|
|
|
#define CTLSEQS_DECDWL() CTLSEQS_ESC "#6"
|
|
|
|
// DEC Screen Alignment Test
|
|
|
|
#define CTLSEQS_DECALN() CTLSEQS_ESC "#8"
|
|
|
|
// Back Index
|
|
|
|
#define CTLSEQS_DECBI() CTLSEQS_ESC "6"
|
|
|
|
// Save Cursor
|
|
|
|
#define CTLSEQS_DECSC() CTLSEQS_ESC "7"
|
|
|
|
// Restore Cursor
|
|
|
|
#define CTLSEQS_DECRC() CTLSEQS_ESC "8"
|
|
|
|
// Forward Index
|
|
|
|
#define CTLSEQS_DECFI() CTLSEQS_ESC "9"
|
|
|
|
// Application Keypad
|
|
|
|
#define CTLSEQS_DECKPAM() CTLSEQS_ESC "="
|
|
|
|
// Normal Keypad
|
|
|
|
#define CTLSEQS_DECKPNM() CTLSEQS_ESC ">"
|
|
|
|
// Full Reset
|
|
|
|
#define CTLSEQS_RIS() CTLSEQS_ESC "c"
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
/* 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
|
|
|
|
|
2021-02-21 19:05:27 +00:00
|
|
|
/* Control Sequences */
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
// 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
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_XTSMGRAPHICS(i1, i2, is) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI "?" i1 ";" i2 ";" is "S"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Scroll Down $n Line(s)
|
|
|
|
#define CTLSEQS_SD(n) CTLSEQS_CSI n "T"
|
|
|
|
// Initiate highlight mouse tracking
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_XTHIMOUSE(f, x, y, fr, lr) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI f ";" x ";" y ";" fr ";" lr "T"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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"
|
2021-10-30 14:43:54 +00:00
|
|
|
// Reset Mode
|
2020-11-17 06:24:43 +00:00
|
|
|
#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
|
2022-02-14 16:43:29 +00:00
|
|
|
#define CTLSEQS_DECCARA(t, l, b, r, is) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r ";" is "$r"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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
|
2022-02-14 16:43:29 +00:00
|
|
|
#define CTLSEQS_DECRARA(t, l, b, r, is) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r ";" is "$t"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Restore cursor
|
|
|
|
#define CTLSEQS_SCORC() CTLSEQS_CSI "u"
|
|
|
|
// Set margin-bell volume
|
|
|
|
#define CTLSEQS_DECSMBV(i) CTLSEQS_CSI i " u"
|
|
|
|
// Copy Rectangular Area
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECCRA(t, l, b, r, sp, dt, dl, dp) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r ";" sp ";" dt ";" dl ";" dp "$v"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Request presentation state report
|
|
|
|
#define CTLSEQS_DECRQPSR(i) CTLSEQS_CSI i "$w"
|
|
|
|
// Enable Filter Rectangle
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECEFR(t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r "'w"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECFRA(c, t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI c ";" t ";" l ";" b ";" r "$x"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Select checksum extension
|
|
|
|
#define CTLSEQS_XTCHECKSUM(i) CTLSEQS_CSI i "#y"
|
|
|
|
// Request Checksum of Rectangular Area
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECRQCRA(id, p, t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI id ";" p ";" t ";" l ";" b ";" r "*y"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Enable Locator Reporting
|
|
|
|
#define CTLSEQS_DECELR(i1, i2) CTLSEQS_CSI i1 ";" i2 "'z"
|
|
|
|
// Erase Rectangular Area
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECERA(t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r "$z"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_DECSERA(t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r "${"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Report selected graphic rendition
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_XTREPORTSGR(t, l, b, r) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI t ";" l ";" b ";" r "$|"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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
|
2020-12-17 07:53:20 +00:00
|
|
|
#define CTLSEQS_RESP_PRIMARY_DA(ns) CTLSEQS_CSI "?" ns "c"
|
2020-11-17 06:24:43 +00:00
|
|
|
// Secondary DA response message
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_RESP_SECONDARY_DA(n1, n2, n3) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI ">" n1 ";" n2 ";" n3 "c"
|
2020-11-17 06:24:43 +00:00
|
|
|
// 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
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_RESP_DECRQLP(e, b, row, col, p) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI e ";" b ";" row ";" col ";" p "&w"
|
2021-01-07 23:52:48 +00:00
|
|
|
// Mouse response in SGR mouse mode
|
2021-10-30 14:43:54 +00:00
|
|
|
#define CTLSEQS_RESP_SGR_MOUSE(n, col, row, c) \
|
2023-04-11 02:08:18 +00:00
|
|
|
CTLSEQS_CSI "<" n ";" col ";" row c
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
/// PC-Style Function Keys
|
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// Up arrow key
|
|
|
|
#define CTLSEQS_KEY_UP() CTLSEQS_CSI "A"
|
|
|
|
// Down arrow key
|
|
|
|
#define CTLSEQS_KEY_DOWN() CTLSEQS_CSI "B"
|
|
|
|
// Right arrow key
|
|
|
|
#define CTLSEQS_KEY_RIGHT() CTLSEQS_CSI "C"
|
|
|
|
// Left arrow key
|
|
|
|
#define CTLSEQS_KEY_LEFT() CTLSEQS_CSI "D"
|
|
|
|
// Home key
|
|
|
|
#define CTLSEQS_KEY_HOME() CTLSEQS_CSI "H"
|
|
|
|
// End key
|
|
|
|
#define CTLSEQS_KEY_END() CTLSEQS_CSI "F"
|
|
|
|
// Insert key
|
|
|
|
#define CTLSEQS_KEY_INSERT() CTLSEQS_CSI "2~"
|
|
|
|
// Delete key
|
|
|
|
#define CTLSEQS_KEY_DELETE() CTLSEQS_CSI "3~"
|
|
|
|
// Page Up key
|
|
|
|
#define CTLSEQS_KEY_PGUP() CTLSEQS_CSI "5~"
|
|
|
|
// Page Down key
|
|
|
|
#define CTLSEQS_KEY_PGDN() CTLSEQS_CSI "6~"
|
|
|
|
// F1 key
|
|
|
|
#define CTLSEQS_KEY_F1() CTLSEQS_SS3 "P"
|
|
|
|
// F2 key
|
|
|
|
#define CTLSEQS_KEY_F2() CTLSEQS_SS3 "Q"
|
|
|
|
// F3 key
|
|
|
|
#define CTLSEQS_KEY_F3() CTLSEQS_SS3 "R"
|
|
|
|
// F4 key
|
|
|
|
#define CTLSEQS_KEY_F4() CTLSEQS_SS3 "S"
|
|
|
|
// F5 key
|
|
|
|
#define CTLSEQS_KEY_F5() CTLSEQS_CSI "15~"
|
|
|
|
// F6 key
|
|
|
|
#define CTLSEQS_KEY_F6() CTLSEQS_CSI "17~"
|
|
|
|
// F7 key
|
|
|
|
#define CTLSEQS_KEY_F7() CTLSEQS_CSI "18~"
|
|
|
|
// F8 key
|
|
|
|
#define CTLSEQS_KEY_F8() CTLSEQS_CSI "19~"
|
|
|
|
// F9 key
|
|
|
|
#define CTLSEQS_KEY_F9() CTLSEQS_CSI "20~"
|
|
|
|
// F10 key
|
|
|
|
#define CTLSEQS_KEY_F10() CTLSEQS_CSI "21~"
|
|
|
|
// F11 key
|
|
|
|
#define CTLSEQS_KEY_F11() CTLSEQS_CSI "23~"
|
|
|
|
// F12 key
|
|
|
|
#define CTLSEQS_KEY_F12() CTLSEQS_CSI "24~"
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
# include <cstddef>
|
|
|
|
#else
|
|
|
|
# include <stddef.h>
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
|
|
|
/* Placeholders */
|
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// CSI Parameter Bytes, numbers only
|
|
|
|
#define CTLSEQS_PH_NUM "\x0e"
|
|
|
|
// CSI Parameter Bytes, multiple numbers separated by semicolon
|
|
|
|
#define CTLSEQS_PH_NUMS "\x0f"
|
|
|
|
// String, printable characters only
|
|
|
|
#define CTLSEQS_PH_STR "\x10"
|
|
|
|
// Command String
|
|
|
|
#define CTLSEQS_PH_CMDSTR "\x11"
|
|
|
|
// CSI Parameter Bytes
|
|
|
|
#define CTLSEQS_PH_CSI_PARAM "\x12"
|
|
|
|
// CSI Intermediate Bytes
|
|
|
|
#define CTLSEQS_PH_CSI_INTMD "\x13"
|
|
|
|
// Printable characters representing a hexadecimal number
|
|
|
|
#define CTLSEQS_PH_HEXNUM "\x14"
|
|
|
|
// Character String
|
|
|
|
#define CTLSEQS_PH_CHRSTR "\x15"
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
/* Reader option flags */
|
|
|
|
|
2021-10-30 14:43:54 +00:00
|
|
|
// Do not poll() before read()
|
|
|
|
#define CTLSEQS_READER_NO_POLL (1 << 0)
|
|
|
|
// Save successfully matched sequence to buffer
|
|
|
|
#define CTLSEQS_READER_SAVE_MATCHED_SEQS (1 << 1)
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
/* 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;
|
|
|
|
|
2020-12-11 04:47:14 +00:00
|
|
|
struct ctlseqs_matcher_options {
|
2020-11-17 06:24:43 +00:00
|
|
|
char const *const *patterns;
|
|
|
|
size_t npatterns;
|
|
|
|
};
|
|
|
|
|
2020-12-11 04:47:14 +00:00
|
|
|
struct ctlseqs_reader_options {
|
2020-12-24 10:21:03 +00:00
|
|
|
union ctlseqs_value *result;
|
2020-11-17 06:24:43 +00:00
|
|
|
size_t maxlen;
|
|
|
|
int fd;
|
|
|
|
unsigned flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
union ctlseqs_value {
|
|
|
|
char const *str;
|
2020-12-25 11:19:54 +00:00
|
|
|
size_t len;
|
2020-11-17 06:24:43 +00:00
|
|
|
unsigned long num;
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
|
|
|
|
using std::size_t;
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
struct ctlseqs_matcher *
|
|
|
|
ctlseqs_matcher_init();
|
|
|
|
|
|
|
|
int
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_matcher_config(
|
|
|
|
struct ctlseqs_matcher *matcher,
|
|
|
|
struct ctlseqs_matcher_options const *options
|
|
|
|
);
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
void
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_matcher_free(
|
|
|
|
struct ctlseqs_matcher *matcher
|
|
|
|
);
|
2020-11-17 06:24:43 +00:00
|
|
|
|
2020-12-24 06:39:14 +00:00
|
|
|
ssize_t
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_match(
|
|
|
|
struct ctlseqs_matcher const *matcher,
|
|
|
|
char const *str,
|
|
|
|
size_t str_len,
|
|
|
|
union ctlseqs_value *result
|
|
|
|
);
|
2020-12-24 06:39:14 +00:00
|
|
|
|
2020-11-17 06:24:43 +00:00
|
|
|
struct ctlseqs_reader *
|
|
|
|
ctlseqs_reader_init();
|
|
|
|
|
|
|
|
int
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_reader_config(
|
|
|
|
struct ctlseqs_reader *reader,
|
|
|
|
struct ctlseqs_reader_options const *options
|
|
|
|
);
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
ssize_t
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_read(
|
|
|
|
struct ctlseqs_reader *reader,
|
|
|
|
struct ctlseqs_matcher const *matcher,
|
|
|
|
int timeout
|
|
|
|
);
|
2020-11-17 06:24:43 +00:00
|
|
|
|
2020-12-10 09:27:34 +00:00
|
|
|
void
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_purge(
|
|
|
|
struct ctlseqs_reader *reader,
|
|
|
|
size_t nbytes
|
|
|
|
);
|
2020-12-10 09:27:34 +00:00
|
|
|
|
2020-11-17 06:24:43 +00:00
|
|
|
void
|
2021-10-30 14:43:54 +00:00
|
|
|
ctlseqs_reader_free(
|
|
|
|
struct ctlseqs_reader *reader
|
|
|
|
);
|
2020-11-17 06:24:43 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
#endif // !CTLSEQS_H_
|