ctlseqs/tests/tcsgrep.c

104 lines
4.4 KiB
C

/**
* tcsgrep.c - match input against terminal control sequence patterns
*
* Copyright (C) 2020 CismonX <admin@cismon.net>
*
* This program 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.
*
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "ctlseqs.h"
#define TCSGREP_NINTH_ARG_(a1, a2, a3, a4, a5, a6, a7, a8, a9, ...) a9
#define TCSGREP_COUNT_ARGS_(...) TCSGREP_NINTH_ARG_(__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0)
#define TCSGREP_CONCAT_1_(a1) a1
#define TCSGREP_CONCAT_2_(a1, a2) a1 a2
#define TCSGREP_CONCAT_3_(a1, a2, a3) a1 a2 a3
#define TCSGREP_CONCAT_4_(a1, a2, a3, a4) a1 a2 a3 a4
#define TCSGREP_CONCAT_5_(a1, a2, a3, a4, a5) a1 a2 a3 a4 a5
#define TCSGREP_CONCAT_6_(a1, a2, a3, a4, a5, a6) a1 a2 a3 a4 a5 a6
#define TCSGREP_CONCAT_7_(a1, a2, a3, a4, a5, a6, a7) a1 a2 a3 a4 a5 a6 a7
#define TCSGREP_CONCAT_8_(a1, a2, a3, a4, a5, a6, a7, a8) a1 a2 a3 a4 a5 a6 a7 a8
#define TCSGREP_CONCAT_(nargs) TCSGREP_CONCAT_##nargs##_
#define TCSGREP_DEFARGS_(nargs, ...) TCSGREP_CONCAT_(nargs)(__VA_ARGS__)
#define TCSGREP_DEFSEQ_NOARGS(name) { #name, CTLSEQS_##name(), "" }
#define TCSGREP_DEFSEQ(name, ...) \
{ #name, CTLSEQS_##name(__VA_ARGS__), TCSGREP_DEFARGS_(TCSGREP_COUNT_ARGS_(__VA_ARGS__), __VA_ARGS__) }
struct tcsgrep_sequence {
char const *name;
char const *pattern;
char const args[8];
};
int
main(int argc, char **argv)
{
static struct tcsgrep_sequence seqs[] = {
TCSGREP_DEFSEQ_NOARGS(S7C1T),
TCSGREP_DEFSEQ_NOARGS(S8C1T),
TCSGREP_DEFSEQ_NOARGS(DECDHL_TOP),
TCSGREP_DEFSEQ_NOARGS(DECDHL_BOTOM),
TCSGREP_DEFSEQ_NOARGS(DECSWL),
TCSGREP_DEFSEQ_NOARGS(DECDWL),
TCSGREP_DEFSEQ_NOARGS(DECALN),
TCSGREP_DEFSEQ_NOARGS(DECBI),
TCSGREP_DEFSEQ_NOARGS(DECSC),
TCSGREP_DEFSEQ_NOARGS(DECRC),
TCSGREP_DEFSEQ_NOARGS(DECFI),
TCSGREP_DEFSEQ_NOARGS(DECKPAM),
TCSGREP_DEFSEQ_NOARGS(DECKPNM),
TCSGREP_DEFSEQ_NOARGS(RIS),
TCSGREP_DEFSEQ(DECUDK, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM, CTLSEQS_PH_NUMS),
TCSGREP_DEFSEQ(DECRQSS, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(DECRSPS, CTLSEQS_PH_NUM, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(XTGETXRES, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(XTSETTCAP, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(XTGETTCAP, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(ICH, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(SL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CUU, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CUD, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CUF, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CUB, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CNL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CPL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CHA, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CUP, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CHT, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(ED, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(DECSED, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(EL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(DECSEL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(IL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(DL, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(DCH, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(SU, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(XTSMGRAPHICS, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM, CTLSEQS_PH_NUMS),
TCSGREP_DEFSEQ(SD, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(XTHIMOUSE, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(XTRMTITLE, CTLSEQS_PH_STR),
TCSGREP_DEFSEQ(ECH, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(CBT, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(HPA, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(HPR, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ(REP, CTLSEQS_PH_NUM),
TCSGREP_DEFSEQ_NOARGS(PRIMARY_DA),
TCSGREP_DEFSEQ_NOARGS(TERTIARY_DA),
TCSGREP_DEFSEQ_NOARGS(SECONDARY_DA),
};
}