From 74f97b5a88b98cd6fa12cd97f94aaddde004e5ea Mon Sep 17 00:00:00 2001 From: ketmar Date: Sat, 21 Apr 2012 17:25:57 +0300 Subject: [PATCH] added some comments --- src/sterm.c | 112 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 38 deletions(-) diff --git a/src/sterm.c b/src/sterm.c index 2af04de..318f3a0 100644 --- a/src/sterm.c +++ b/src/sterm.c @@ -31,10 +31,13 @@ #include +//////////////////////////////////////////////////////////////////////////////// #define USAGE \ "sterm " VERSION " (c) 2010-2012 st engineers\n" \ "usage: sterm [-t title] [-c class] [-w windowid] [-v] [-e command...]\n" + +//////////////////////////////////////////////////////////////////////////////// /* XEMBED messages */ #define XEMBED_FOCUS_IN (4) #define XEMBED_FOCUS_OUT (5) @@ -65,6 +68,7 @@ #define Y2ROW(y) (((y)-BORDER)/xw.ch) +//////////////////////////////////////////////////////////////////////////////// enum glyph_attribute { ATTR_NULL = 0, ATTR_REVERSE = 1, @@ -124,6 +128,7 @@ enum window_state { enum { B0=1, B1=2, B2=4, B3=8, B4=16, B5=32, B6=64, B7=128 }; +//////////////////////////////////////////////////////////////////////////////// typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; @@ -235,6 +240,8 @@ typedef struct { } font, bfont; } DC; + +//////////////////////////////////////////////////////////////////////////////// static void die (const char*, ...); static void draw (void); static void drawregion (int, int, int, int); @@ -312,6 +319,7 @@ static int utf8size (const char *); static int isfullutf8 (const char *, int); +//////////////////////////////////////////////////////////////////////////////// static void (*handler[LASTEvent])(XEvent *) = { [KeyPress] = kpress, [ClientMessage] = cmessage, @@ -329,6 +337,7 @@ static void (*handler[LASTEvent])(XEvent *) = { }; +//////////////////////////////////////////////////////////////////////////////// /* Globals */ static DC dc; static XWindow xw; @@ -343,6 +352,8 @@ static char *opt_embed = NULL; static char *opt_class = NULL; +//////////////////////////////////////////////////////////////////////////////// +// UTF-8 static int utf8decode (const char *s, long *u) { uchar c; int i, n, rtn; @@ -442,6 +453,40 @@ static int utf8size (const char *s) { } +//////////////////////////////////////////////////////////////////////////////// +// utilities +static __attribute__((noreturn)) __attribute__((format(printf,1,2))) void die (const char *errstr, ...) { + va_list ap; + // + va_start(ap, errstr); + vfprintf(stderr, errstr, ap); + va_end(ap); + exit(EXIT_FAILURE); +} + + +static __attribute__((noreturn)) void execsh (void) { + char **args; + char *envshell = getenv("SHELL"); + // + DEFAULT(envshell, SHELL); + putenv("TERM="TNAME); + args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL}; + execvp(args[0], args); + exit(EXIT_FAILURE); +} + + +static __attribute__((noreturn)) void sigchld (int a) { + int stat = 0; + if (waitpid(pid, &stat, 0) < 0) die("Waiting for pid %hd failed: %s\n", pid, SERRNO); + if (WIFEXITED(stat)) exit(WEXITSTATUS(stat)); + exit(EXIT_FAILURE); +} + + +//////////////////////////////////////////////////////////////////////////////// +// selection static void selinit (void) { memset(&sel.tclick1, 0, sizeof(sel.tclick1)); memset(&sel.tclick2, 0, sizeof(sel.tclick2)); @@ -465,7 +510,7 @@ static inline bool selected (int x, int y) { } -void getbuttoninfo (XEvent *e, int *b, int *x, int *y) { +static void getbuttoninfo (XEvent *e, int *b, int *x, int *y) { if (b) *b = e->xbutton.button; *x = X2COL(e->xbutton.x); *y = Y2ROW(e->xbutton.y); @@ -670,34 +715,16 @@ static void bmotion (XEvent *e) { } -static __attribute__((noreturn)) __attribute__((format(printf,1,2))) void die (const char *errstr, ...) { - va_list ap; - // - va_start(ap, errstr); - vfprintf(stderr, errstr, ap); - va_end(ap); - exit(EXIT_FAILURE); -} - - -static __attribute__((noreturn)) void execsh (void) { - char **args; - char *envshell = getenv("SHELL"); +//////////////////////////////////////////////////////////////////////////////// +// tty r/w +/* +static void dump (char c) { + static int col; // - DEFAULT(envshell, SHELL); - putenv("TERM="TNAME); - args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL}; - execvp(args[0], args); - exit(EXIT_FAILURE); -} - - -static __attribute__((noreturn)) void sigchld (int a) { - int stat = 0; - if (waitpid(pid, &stat, 0) < 0) die("Waiting for pid %hd failed: %s\n", pid, SERRNO); - if (WIFEXITED(stat)) exit(WEXITSTATUS(stat)); - exit(EXIT_FAILURE); + fprintf(stderr, " %02x '%c' ", c, isprint(c)?c:'.'); + if (++col % 10 == 0) fprintf(stderr, "\n"); } +*/ static void ttynew (void) { @@ -728,16 +755,6 @@ static void ttynew (void) { } -/* -static void dump (char c) { - static int col; - // - fprintf(stderr, " %02x '%c' ", c, isprint(c)?c:'.'); - if (++col % 10 == 0) fprintf(stderr, "\n"); -} -*/ - - static void ttyread (void) { static char buf[BUFSIZ]; static int buflen = 0; @@ -779,6 +796,8 @@ static void ttyresize (int x, int y) { } +//////////////////////////////////////////////////////////////////////////////// +// tty utilities static void tsetdirt (int top, int bot) { int i; // @@ -1087,6 +1106,8 @@ static void tsetscroll (int t, int b) { } +//////////////////////////////////////////////////////////////////////////////// +// esc processing static void csihandle (void) { switch (escseq.mode) { case '@': /* ICH -- Insert blank char */ @@ -1350,6 +1371,8 @@ static void tputtab (void) { } +//////////////////////////////////////////////////////////////////////////////// +// put char to output buffer or process command static void tputc (char *c) { char ascii = *c; // @@ -1358,7 +1381,8 @@ static void tputc (char *c) { escseq.buf[escseq.len++] = ascii; if (BETWEEN(ascii, 0x40, 0x7E) || escseq.len >= ESC_BUF_SIZ) { term.esc = 0; - csiparse(), csihandle(); + csiparse(); + csihandle(); } /* TODO: handle other OSC */ } else if (term.esc & ESC_OSC) { @@ -1469,6 +1493,8 @@ static void tputc (char *c) { } +//////////////////////////////////////////////////////////////////////////////// +// tty resising static int tresize (int col, int row) { int i, x; int minrow = MIN(row, term.row); @@ -1550,6 +1576,8 @@ static void xresize (int col, int row) { } +//////////////////////////////////////////////////////////////////////////////// +// x11 drawing and utils static void xloadcols (void) { int i, r, g, b; XColor color; @@ -1876,6 +1904,8 @@ static void focus (XEvent *ev) { } +//////////////////////////////////////////////////////////////////////////////// +// keyboard mapping static const char *kmap (KeySym k, uint state) { state &= ~Mod2Mask; for (int i = 0; i < LEN(key); ++i) { @@ -1931,6 +1961,8 @@ static void kpress (XEvent *ev) { } +//////////////////////////////////////////////////////////////////////////////// +// xembed? static void cmessage (XEvent *e) { /* See xembed specs http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html */ if (e->xclient.message_type == xw.xembed && e->xclient.format == 32) { @@ -1945,6 +1977,7 @@ static void cmessage (XEvent *e) { } +//////////////////////////////////////////////////////////////////////////////// static void resize (XEvent *e) { int col, row; // @@ -1968,6 +2001,8 @@ static bool last_draw_too_old (void) { } +//////////////////////////////////////////////////////////////////////////////// +// main loop static void run (void) { XEvent ev; fd_set rfd; @@ -2002,6 +2037,7 @@ static void run (void) { } +//////////////////////////////////////////////////////////////////////////////// int main (int argc, char *argv[]) { for (int i = 1; i < argc; i++) { switch (argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) { -- 2.11.4.GIT