1a5f0fb15SPaul Saab /* 2*c77c4889SXin LI * Copyright (C) 1984-2024 Mark Nudelman 3a5f0fb15SPaul Saab * 4a5f0fb15SPaul Saab * You may distribute under the terms of either the GNU General Public 5a5f0fb15SPaul Saab * License or the Less License, as specified in the README file. 6a5f0fb15SPaul Saab * 796e55cc7SXin LI * For more information, see the README file. 8a5f0fb15SPaul Saab */ 9a5f0fb15SPaul Saab 10*c77c4889SXin LI #include "lang.h" 1130a1828cSXin LI #include "xbuf.h" 12a5f0fb15SPaul Saab 13a5f0fb15SPaul Saab /* 14a5f0fb15SPaul Saab * Format of a lesskey file: 15a5f0fb15SPaul Saab * 16a5f0fb15SPaul Saab * LESSKEY_MAGIC (4 bytes) 17a5f0fb15SPaul Saab * sections... 18a5f0fb15SPaul Saab * END_LESSKEY_MAGIC (4 bytes) 19a5f0fb15SPaul Saab * 20a5f0fb15SPaul Saab * Each section is: 21a5f0fb15SPaul Saab * 22a5f0fb15SPaul Saab * section_MAGIC (1 byte) 23a5f0fb15SPaul Saab * section_length (2 bytes) 24a5f0fb15SPaul Saab * key table (section_length bytes) 25a5f0fb15SPaul Saab */ 26a5f0fb15SPaul Saab #define C0_LESSKEY_MAGIC '\0' 27a5f0fb15SPaul Saab #define C1_LESSKEY_MAGIC 'M' 28a5f0fb15SPaul Saab #define C2_LESSKEY_MAGIC '+' 29a5f0fb15SPaul Saab #define C3_LESSKEY_MAGIC 'G' 30a5f0fb15SPaul Saab 31a5f0fb15SPaul Saab #define CMD_SECTION 'c' 32a5f0fb15SPaul Saab #define EDIT_SECTION 'e' 33a5f0fb15SPaul Saab #define VAR_SECTION 'v' 34a5f0fb15SPaul Saab #define END_SECTION 'x' 35a5f0fb15SPaul Saab 36a5f0fb15SPaul Saab #define C0_END_LESSKEY_MAGIC 'E' 37a5f0fb15SPaul Saab #define C1_END_LESSKEY_MAGIC 'n' 38a5f0fb15SPaul Saab #define C2_END_LESSKEY_MAGIC 'd' 39a5f0fb15SPaul Saab 40a5f0fb15SPaul Saab /* */ 41a5f0fb15SPaul Saab #define KRADIX 64 4230a1828cSXin LI 4330a1828cSXin LI struct lesskey_cmdname 4430a1828cSXin LI { 45*c77c4889SXin LI constant char *cn_name; 4630a1828cSXin LI int cn_action; 4730a1828cSXin LI }; 4830a1828cSXin LI 4930a1828cSXin LI struct lesskey_table 5030a1828cSXin LI { 51*c77c4889SXin LI constant struct lesskey_cmdname *names; 5230a1828cSXin LI struct xbuffer buf; 5330a1828cSXin LI int is_var; 5430a1828cSXin LI }; 5530a1828cSXin LI 5630a1828cSXin LI struct lesskey_tables 5730a1828cSXin LI { 5830a1828cSXin LI struct lesskey_table *currtable; 5930a1828cSXin LI struct lesskey_table cmdtable; 6030a1828cSXin LI struct lesskey_table edittable; 6130a1828cSXin LI struct lesskey_table vartable; 6230a1828cSXin LI }; 6330a1828cSXin LI 64*c77c4889SXin LI extern int parse_lesskey(constant char *infile, struct lesskey_tables *tables); 65*c77c4889SXin LI extern int parse_lesskey_content(constant char *content, struct lesskey_tables *tables); 66*c77c4889SXin LI 67*c77c4889SXin LI /* keep in sync with less.h */ 68*c77c4889SXin LI #if HAVE_SNPRINTF 69*c77c4889SXin LI #define SNPRINTF1(str, size, fmt, v1) snprintf((str), (size), (fmt), (v1)) 70*c77c4889SXin LI #define SNPRINTF2(str, size, fmt, v1, v2) snprintf((str), (size), (fmt), (v1), (v2)) 71*c77c4889SXin LI #define SNPRINTF3(str, size, fmt, v1, v2, v3) snprintf((str), (size), (fmt), (v1), (v2), (v3)) 72*c77c4889SXin LI #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) snprintf((str), (size), (fmt), (v1), (v2), (v3), (v4)) 73*c77c4889SXin LI #else 74*c77c4889SXin LI /* Use unsafe sprintf if we don't have snprintf. */ 75*c77c4889SXin LI #define SNPRINTF1(str, size, fmt, v1) sprintf((str), (fmt), (v1)) 76*c77c4889SXin LI #define SNPRINTF2(str, size, fmt, v1, v2) sprintf((str), (fmt), (v1), (v2)) 77*c77c4889SXin LI #define SNPRINTF3(str, size, fmt, v1, v2, v3) sprintf((str), (fmt), (v1), (v2), (v3)) 78*c77c4889SXin LI #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) sprintf((str), (fmt), (v1), (v2), (v3), (v4)) 79*c77c4889SXin LI #endif 80