forked from github/lukesmith-st
		
	
		
			
				
	
	
		
			142 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* See LICENSE for license details. */
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include <sys/types.h>
 | |
| 
 | |
| /* Arbitrary size */
 | |
| #define HISTSIZE      2000
 | |
| 
 | |
| /* macros */
 | |
| #define MIN(a, b)		((a) < (b) ? (a) : (b))
 | |
| #define MAX(a, b)		((a) < (b) ? (b) : (a))
 | |
| #define LEN(a)			(sizeof(a) / sizeof(a)[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 != (b).mode || (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))
 | |
| #define TLINE(y)       ((y) < term.scr ? term.hist[((y) + term.histi - term.scr \
 | |
|                + HISTSIZE + 1) % HISTSIZE] : term.line[(y) - term.scr])
 | |
| 
 | |
| 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_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
 | |
| };
 | |
| 
 | |
| 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 printscreen(const Arg *);
 | |
| void printsel(const Arg *);
 | |
| void sendbreak(const Arg *);
 | |
| void toggleprinter(const Arg *);
 | |
| 
 | |
| int tattrset(int);
 | |
| void tnew(int, int);
 | |
| void tresize(int, int);
 | |
| void tsetdirtattr(int);
 | |
| void ttyhangup(void);
 | |
| int ttynew(char *, char *, 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(char *);
 | |
| 
 | |
| void kscrolldown(const Arg *);
 | |
| void kscrollup(const Arg *);
 | |
| 
 | |
| /* config.h globals */
 | |
| extern char *utmp;
 | |
| extern char *stty_args;
 | |
| extern char *vtiden;
 | |
| extern char *worddelimiters;
 | |
| extern int allowaltscreen;
 | |
| extern char *termname;
 | |
| extern unsigned int tabspaces;
 | |
| extern unsigned int alpha;
 | |
| extern unsigned int defaultfg;
 | |
| extern unsigned int defaultbg;
 | |
| extern MouseKey mkeys[];
 |