st.h (4948B)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | // Copyright 2024 jack@pngu.org // SPDX-License-Identifier: MIT/X #pragma once #include <stdint.h> #include <sys/types.h> /* macros */ #define MIN(a, b) \ ({ \ __typeof__(a) _a = (a); \ __typeof__(b) _b = (b); \ _a < _b ? _a : _b; \ }) #define MAX(a, b) \ ({ \ __typeof__(a) _a = (a); \ __typeof__(b) _b = (b); \ _a > _b ? _a : _b; \ }) #define CHECK(value) \ (!__builtin_types_compatible_p(typeof((value)), typeof(&(value)[0]))) #define LEN(a) \ (__builtin_choose_expr(CHECK((a)), sizeof((a)) / sizeof((a)[0]), (void)0)) #define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) #define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d)) #define DEFAULT(a, b) (a) = (a) ? (a) : (b) #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) #define ATTRCMP(a, b) \ (((a).mode & (~ATTR_WRAP) & (~ATTR_LIGA)) != \ ((b).mode & (~ATTR_WRAP) & (~ATTR_LIGA)) || \ (a).fg != (b).fg || (a).bg != (b).bg) #define TIMEDIFF(t1, t2) \ ((t1.tv_sec - t2.tv_sec) * 1000 + (t1.tv_nsec - t2.tv_nsec) / 1E6) #define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(bit))) #define TRUECOLOR(r, g, b) (1 << 24 | (r) << 16 | (g) << 8 | (b)) #define IS_TRUECOL(x) (1 << 24 & (x)) enum glyph_attribute { ATTR_NULL = 0, ATTR_BOLD = 1 << 0, ATTR_FAINT = 1 << 1, ATTR_ITALIC = 1 << 2, ATTR_UNDERLINE = 1 << 3, ATTR_BLINK = 1 << 4, ATTR_REVERSE = 1 << 5, ATTR_INVISIBLE = 1 << 6, ATTR_STRUCK = 1 << 7, ATTR_WRAP = 1 << 8, ATTR_WIDE = 1 << 9, ATTR_WDUMMY = 1 << 10, ATTR_BOXDRAW = 1 << 11, ATTR_LIGA = 1 << 12, ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT, }; enum drawing_mode { DRAW_NONE = 0, DRAW_BG = 1 << 0, DRAW_FG = 1 << 1, }; enum selection_mode { SEL_IDLE = 0, SEL_EMPTY = 1, SEL_READY = 2 }; enum selection_type { SEL_REGULAR = 1, SEL_RECTANGULAR = 2 }; enum selection_snap { SNAP_WORD = 1, SNAP_LINE = 2 }; typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned short ushort; typedef uint_least32_t Rune; #define Glyph Glyph_ typedef struct { Rune u; /* character code */ ushort mode; /* attribute flags */ uint32_t fg; /* foreground */ uint32_t bg; /* background */ } Glyph; typedef Glyph *Line; typedef union { int i; uint ui; float f; const void *v; } Arg; typedef struct { uint b; uint mask; void (*func)(const Arg *); const Arg arg; } MouseKey; void die(const char *, ...); void redraw(void); void draw(void); void externalpipe(const Arg *); void iso14755(const Arg *); void kscrolldown(const Arg *); void kscrollup(const Arg *); void newterm(const Arg *); void printscreen(const Arg *); void printsel(const Arg *); void sendbreak(const Arg *); void toggleprinter(const Arg *); int tattrset(int); int tisaltscr(void); void tnew(int, int); void tresize(int, int); void tsetdirtattr(int); void ttyhangup(void); int ttynew(const char *, char *, const char *, char **); size_t ttyread(void); void ttyresize(int, int); void ttywrite(const char *, size_t, int); void resettitle(void); void selclear(void); void selinit(void); void selstart(int, int, int); void selextend(int, int, int, int); int selected(int, int); char *getsel(void); size_t utf8encode(Rune, char *); void *xmalloc(size_t); void *xrealloc(void *, size_t); char *xstrdup(const char *); int isboxdraw(Rune); ushort boxdrawindex(const Glyph *); #ifdef XFT_VERSION /* only exposed to x.c, otherwise we'll need Xft.h for the types */ void boxdraw_xinit(Display *, Colormap, XftDraw *, Visual *); void drawboxes(int, int, int, int, XftColor *, XftColor *, const XftGlyphFontSpec *, int); #endif /* config.h globals */ extern char *utmp; extern char *stty_args; extern char *vtiden; extern wchar_t *worddelimiters; extern int allowaltscreen; extern char *termname; extern unsigned int tabspaces; extern unsigned int defaultfg; extern unsigned int defaultbg; extern unsigned int defaultcs; extern const int boxdraw, boxdraw_bold, boxdraw_braille; extern float alpha; extern MouseKey mkeys[]; extern int ximspot_update_interval; |