a3beb626d2
The xinit function only needs to the rows/cols, so pass those in rather than accessing term directly. With a bit of arithmetic, we are able to avoid the need for term.row and term.col in x2col, y2row, and xdrawglyphfontspecs as well, completing the removal. Term is now fully internal to st.c. Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
165 lines
3.7 KiB
C
165 lines
3.7 KiB
C
/* See LICENSE for license details. */
|
||
|
||
/* Arbitrary sizes */
|
||
#define UTF_SIZ 4
|
||
|
||
/* 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))
|
||
|
||
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 struct {
|
||
Glyph attr; /* current char attributes */
|
||
int x;
|
||
int y;
|
||
char state;
|
||
} TCursor;
|
||
|
||
/* Purely graphic info */
|
||
typedef struct {
|
||
int tw, th; /* tty width and height */
|
||
int w, h; /* window width and height */
|
||
int ch; /* char height */
|
||
int cw; /* char width */
|
||
int mode; /* window state/mode flags */
|
||
int cursor; /* cursor style */
|
||
} TermWindow;
|
||
|
||
typedef struct {
|
||
int mode;
|
||
int type;
|
||
int snap;
|
||
/*
|
||
* Selection variables:
|
||
* nb – normalized coordinates of the beginning of the selection
|
||
* ne – normalized coordinates of the end of the selection
|
||
* ob – original coordinates of the beginning of the selection
|
||
* oe – original coordinates of the end of the selection
|
||
*/
|
||
struct {
|
||
int x, y;
|
||
} nb, ne, ob, oe;
|
||
|
||
int alt;
|
||
} Selection;
|
||
|
||
typedef union {
|
||
int i;
|
||
uint ui;
|
||
float f;
|
||
const void *v;
|
||
} Arg;
|
||
|
||
void die(const char *, ...);
|
||
void redraw(void);
|
||
void draw(void);
|
||
|
||
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 ttynew(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);
|
||
void selnormalize(void);
|
||
int selected(int, int);
|
||
char *getsel(void);
|
||
|
||
size_t utf8decode(const char *, Rune *, size_t);
|
||
size_t utf8encode(Rune, char *);
|
||
|
||
void *xmalloc(size_t);
|
||
void *xrealloc(void *, size_t);
|
||
char *xstrdup(char *);
|
||
|
||
/* Globals */
|
||
extern int cmdfd;
|
||
extern pid_t pid;
|
||
extern int oldbutton;
|
||
|
||
/* config.h globals */
|
||
extern char *shell;
|
||
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 defaultfg;
|
||
extern unsigned int defaultbg;
|