aboutsummaryrefslogtreecommitdiffstats
path: root/util/alevt/xio.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/alevt/xio.h')
-rw-r--r--util/alevt/xio.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/util/alevt/xio.h b/util/alevt/xio.h
new file mode 100644
index 0000000..664b701
--- /dev/null
+++ b/util/alevt/xio.h
@@ -0,0 +1,80 @@
+#ifndef VTXIO_H
+#define VTXIO_H
+
+#include <X11/Xlib.h>
+#include "vt.h"
+#include "dllist.h"
+
+typedef u32 lbits;
+#define ALL_LINES ((1ul << H) - 1)
+
+/* one xio per display */
+struct xio
+{
+ struct dl_node node[1];
+ int argc;
+ char **argv;
+ Display *dpy; /* display connection */
+ int fd; /* the displays file descriptor */
+ Atom xa_del_win; /* WM_DELETE_WINDOW atom */
+ Atom xa_targets; /* TARGETS atom (selection) */
+ Atom xa_timestamp; /* TIMESTAMP atom (selection) */
+ Atom xa_text; /* TEXT atom (selection) */
+ Atom xa_multiple; /* MULTIPLE atom (selection) */
+ Window group_leader; /* unmapped window */
+ int screen; /* DefaultScreen */
+ int width, height; /* DisplayWidth/Height */
+ int depth; /* DefaultDepth */
+ Window root; /* DefaultRoot */
+ Colormap cmap;
+ int color[16]; /* 8 normal, 8 dim intensity */
+ Pixmap font[2]; /* normal, dbl-height */
+ Pixmap icon; /* icon pixmap */
+ struct dl_head windows[1]; /* all windows on this display */
+};
+
+/* one vt_win per window */
+struct xio_win
+{
+ struct dl_node node[1];
+ struct xio *xio; /* display */
+ Window win; /* the drawing window */
+ Time tstamp; /* timestamp of last user event */
+ GC gc; /* it's graphics context */
+ u8 ch[H*W]; /* the page contents */
+ lbits modified, hidden, lhidden; /* states for each line */
+ lbits dheight, blink, concealed; /* attributes for each line */
+ int fg, bg; /* current foreground/background */
+ int blink_on; /* blinking on */
+ int reveal; /* reveal concealed text */
+ void (*handler)(void *data, struct vt_event *ev); /* event-handler */
+ void *data; /* data for the event-handler */
+ int curs_x, curs_y; /* cursor position */
+ u8 title[32]; /* the user title */
+ // selection support
+ int sel_start_x, sel_start_y;
+ Time sel_start_t;
+ Time sel_set_t; /* time we got selection owner */
+ int sel_x1, sel_y1, sel_x2, sel_y2; /* selected area */
+ Pixmap sel_pixmap; /* for pixmap-selection requests */
+};
+
+struct xio *xio_open_dpy(char *dpy, int argc, char **argv);
+struct xio_win *xio_open_win(struct xio *xio, char *geom);
+void xio_close_win(struct xio_win *xw, int dpy_too);
+void xio_close_dpy(struct xio *xio);
+void xio_set_handler(struct xio_win *xw, void *handler, void *data);
+void xio_clear_win(struct xio_win *xw);
+void xio_put_line(struct xio_win *xw, int line, u8 *data);
+void xio_put_str(struct xio_win *xw, int line, u8 *c_str);
+int xio_get_line(struct xio_win *xw, int line, u8 *data);
+int xio_set_concealed(struct xio_win *xw, int on);
+void xio_update_win(struct xio_win *xw);
+void xio_fd_handler(int fd, void *handler, void *data);
+void xio_cancel_selection(struct xio_win *xw);
+void xio_query_selection(struct xio_win *xw);
+void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2);
+void xio_set_cursor(struct xio_win *xw, int x, int y);
+void xio_event_loop(void);
+void xio_title(struct xio_win *xw, char *title);
+#endif