struct ev_fd *fd;
int idle_fd;
- struct kmscon_dlist sig_list;
+ struct shl_dlist sig_list;
struct kmscon_hook *idlers;
struct kmscon_hook *pres;
struct kmscon_hook *posts;
* are called if the signal is catched.
*/
struct ev_signal_shared {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct ev_fd *fd;
int signum;
goto err_sig;
pthread_sigmask(SIG_BLOCK, &mask, NULL);
- kmscon_dlist_link(&loop->sig_list, &sig->list);
+ shl_dlist_link(&loop->sig_list, &sig->list);
*out = sig;
return 0;
if (!sig)
return;
- kmscon_dlist_unlink(&sig->list);
+ shl_dlist_unlink(&sig->list);
fd = sig->fd->fd;
ev_eloop_rm_fd(sig->fd);
close(fd);
memset(loop, 0, sizeof(*loop));
loop->ref = 1;
loop->llog = log;
- kmscon_dlist_init(&loop->sig_list);
+ shl_dlist_init(&loop->sig_list);
loop->cur_fds_size = 32;
loop->cur_fds = malloc(sizeof(struct epoll_event) *
llog_debug(loop, "free eloop object %p", loop);
while (loop->sig_list.next != &loop->sig_list) {
- sig = kmscon_dlist_entry(loop->sig_list.next,
+ sig = shl_dlist_entry(loop->sig_list.next,
struct ev_signal_shared,
list);
signal_free(sig);
{
struct ev_signal_shared *sig = NULL;
int ret;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
if (!loop)
return -EINVAL;
if (signum < 0 || !cb)
return llog_EINVAL(loop);
- kmscon_dlist_for_each(iter, &loop->sig_list) {
- sig = kmscon_dlist_entry(iter, struct ev_signal_shared, list);
+ shl_dlist_for_each(iter, &loop->sig_list) {
+ sig = shl_dlist_entry(iter, struct ev_signal_shared, list);
if (sig->signum == signum)
break;
sig = NULL;
ev_signal_shared_cb cb, void *data)
{
struct ev_signal_shared *sig;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
if (!loop)
return;
- kmscon_dlist_for_each(iter, &loop->sig_list) {
- sig = kmscon_dlist_entry(iter, struct ev_signal_shared, list);
+ shl_dlist_for_each(iter, &loop->sig_list) {
+ sig = shl_dlist_entry(iter, struct ev_signal_shared, list);
if (sig->signum == signum) {
kmscon_hook_rm_cast(sig->hook, cb, data);
if (!kmscon_hook_num(sig->hook))
struct uterm_vt_master *vtm;
struct uterm_monitor *mon;
- struct kmscon_dlist seats;
+ struct shl_dlist seats;
};
struct kmscon_seat {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct kmscon_app *app;
struct uterm_monitor_seat *useat;
struct uterm_vt *vt;
struct uterm_input *input;
struct kmscon_ui *ui;
- struct kmscon_dlist videos;
+ struct shl_dlist videos;
};
struct kmscon_video {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_monitor_dev *vdev;
struct uterm_video *video;
};
static int vt_event(struct uterm_vt *vt, unsigned int action, void *data)
{
struct kmscon_seat *seat = data;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct kmscon_video *vid;
if (action == UTERM_VT_ACTIVATE) {
seat->awake = true;
uterm_input_wake_up(seat->input);
- kmscon_dlist_for_each(iter, &seat->videos) {
- vid = kmscon_dlist_entry(iter, struct kmscon_video, list);
+ shl_dlist_for_each(iter, &seat->videos) {
+ vid = shl_dlist_entry(iter, struct kmscon_video, list);
uterm_video_wake_up(vid->video);
}
kmscon_ui_wake_up(seat->ui);
} else if (action == UTERM_VT_DEACTIVATE) {
kmscon_ui_sleep(seat->ui);
- kmscon_dlist_for_each(iter, &seat->videos) {
- vid = kmscon_dlist_entry(iter, struct kmscon_video, list);
+ shl_dlist_for_each(iter, &seat->videos) {
+ vid = shl_dlist_entry(iter, struct kmscon_video, list);
uterm_video_sleep(vid->video);
}
memset(seat, 0, sizeof(*seat));
seat->app = app;
seat->useat = useat;
- kmscon_dlist_init(&seat->videos);
+ shl_dlist_init(&seat->videos);
seat->sname = strdup(sname);
if (!seat->sname) {
goto err_vt;
uterm_monitor_set_seat_data(seat->useat, seat);
- kmscon_dlist_link(&app->seats, &seat->list);
+ shl_dlist_link(&app->seats, &seat->list);
log_info("new seat %s", seat->sname);
return;
{
log_info("free seat %s", seat->sname);
- kmscon_dlist_unlink(&seat->list);
+ shl_dlist_unlink(&seat->list);
uterm_monitor_set_seat_data(seat->useat, NULL);
kmscon_ui_free(seat->ui);
uterm_input_unref(seat->input);
kmscon_ui_add_video(seat->ui, vid->video);
if (seat->awake)
uterm_video_wake_up(vid->video);
- kmscon_dlist_link(&seat->videos, &vid->list);
+ shl_dlist_link(&seat->videos, &vid->list);
log_debug("new graphics device on seat %s", seat->sname);
return;
static void seat_rm_video(struct kmscon_seat *seat,
struct uterm_monitor_dev *dev)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct kmscon_video *vid;
- kmscon_dlist_for_each(iter, &seat->videos) {
- vid = kmscon_dlist_entry(iter, struct kmscon_video, list);
+ shl_dlist_for_each(iter, &seat->videos) {
+ vid = shl_dlist_entry(iter, struct kmscon_video, list);
if (vid->vdev != dev)
continue;
kmscon_ui_remove_video(seat->ui, vid->video);
uterm_video_unref(vid->video);
- kmscon_dlist_unlink(&vid->list);
+ shl_dlist_unlink(&vid->list);
free(vid);
break;
static void seat_hotplug_video(struct kmscon_seat *seat,
struct uterm_monitor_dev *dev)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct kmscon_video *vid;
- kmscon_dlist_for_each(iter, &seat->videos) {
- vid = kmscon_dlist_entry(iter, struct kmscon_video, list);
+ shl_dlist_for_each(iter, &seat->videos) {
+ vid = shl_dlist_entry(iter, struct kmscon_video, list);
if (vid->vdev != dev)
continue;
if (ret)
goto err_app;
- kmscon_dlist_init(&app->seats);
+ shl_dlist_init(&app->seats);
ret = uterm_monitor_new(&app->mon, app->eloop, monitor_event, app);
if (ret)
/*
- * kmscon - Double Linked List
+ * shl - Double Linked List
*
* Copyright (c) 2011-2012 David Herrmann <dh.herrmann@googlemail.com>
* Copyright (c) 2011 University of Tuebingen
* A simple double linked list implementation
*/
-#ifndef KMSCON_STATIC_DLIST_H
-#define KMSCON_STATIC_DLIST_H
+#ifndef SHL_DLIST_H
+#define SHL_DLIST_H
#include <stdbool.h>
#include <stddef.h>
/* miscellaneous */
-#define kmscon_offsetof(pointer, type, member) ({ \
+#define shl_offsetof(pointer, type, member) ({ \
const typeof(((type*)0)->member) *__ptr = (pointer); \
(type*)(((char*)__ptr) - offsetof(type, member)); \
})
/* double linked list */
-struct kmscon_dlist {
- struct kmscon_dlist *next;
- struct kmscon_dlist *prev;
+struct shl_dlist {
+ struct shl_dlist *next;
+ struct shl_dlist *prev;
};
-#define KMSCON_DLIST_INIT(head) { &(head), &(head) }
+#define SHL_DLIST_INIT(head) { &(head), &(head) }
-static inline void kmscon_dlist_init(struct kmscon_dlist *list)
+static inline void shl_dlist_init(struct shl_dlist *list)
{
list->next = list;
list->prev = list;
}
-static inline void kmscon_dlist__link(struct kmscon_dlist *prev,
- struct kmscon_dlist *next,
- struct kmscon_dlist *n)
+static inline void shl_dlist__link(struct shl_dlist *prev,
+ struct shl_dlist *next,
+ struct shl_dlist *n)
{
next->prev = n;
n->next = next;
prev->next = n;
}
-static inline void kmscon_dlist_link(struct kmscon_dlist *head,
- struct kmscon_dlist *n)
+static inline void shl_dlist_link(struct shl_dlist *head,
+ struct shl_dlist *n)
{
- return kmscon_dlist__link(head, head->next, n);
+ return shl_dlist__link(head, head->next, n);
}
-static inline void kmscon_dlist_link_tail(struct kmscon_dlist *head,
- struct kmscon_dlist *n)
+static inline void shl_dlist_link_tail(struct shl_dlist *head,
+ struct shl_dlist *n)
{
- return kmscon_dlist__link(head->prev, head, n);
+ return shl_dlist__link(head->prev, head, n);
}
-static inline void kmscon_dlist__unlink(struct kmscon_dlist *prev,
- struct kmscon_dlist *next)
+static inline void shl_dlist__unlink(struct shl_dlist *prev,
+ struct shl_dlist *next)
{
next->prev = prev;
prev->next = next;
}
-static inline void kmscon_dlist_unlink(struct kmscon_dlist *e)
+static inline void shl_dlist_unlink(struct shl_dlist *e)
{
- kmscon_dlist__unlink(e->prev, e->next);
+ shl_dlist__unlink(e->prev, e->next);
e->prev = NULL;
e->next = NULL;
}
-static inline bool kmscon_dlist_empty(struct kmscon_dlist *head)
+static inline bool shl_dlist_empty(struct shl_dlist *head)
{
return head->next == head;
}
-#define kmscon_dlist_entry(ptr, type, member) \
- kmscon_offsetof((ptr), type, member)
+#define shl_dlist_entry(ptr, type, member) \
+ shl_offsetof((ptr), type, member)
-#define kmscon_dlist_for_each(iter, head) \
+#define shl_dlist_for_each(iter, head) \
for (iter = (head)->next; iter != (head); iter = iter->next)
-#define kmscon_dlist_for_each_safe(iter, tmp, head) \
+#define shl_dlist_for_each_safe(iter, tmp, head) \
for (iter = (head)->next, tmp = iter->next; iter != (head); \
iter = tmp, tmp = iter->next)
-#endif /* KMSCON_STATIC_DLIST_H */
+#endif /* SHL_STATIC_DLIST_H */
#define LOG_SUBSYSTEM "terminal"
struct screen {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_display *disp;
struct uterm_screen *screen;
struct kmscon_font *font;
bool opened;
bool awake;
- struct kmscon_dlist screens;
+ struct shl_dlist screens;
unsigned int min_cols;
unsigned int min_rows;
static void redraw(struct kmscon_terminal *term)
{
struct uterm_screen *screen;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct screen *ent;
if (!term->awake)
return;
- kmscon_dlist_for_each(iter, &term->screens) {
- ent = kmscon_dlist_entry(iter, struct screen, list);
+ shl_dlist_for_each(iter, &term->screens) {
+ ent = shl_dlist_entry(iter, struct screen, list);
screen = ent->screen;
kmscon_console_draw(term->console,
static int add_display(struct kmscon_terminal *term, struct uterm_display *disp)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct screen *scr;
int ret;
unsigned int cols, rows;
strncpy(attr.name, kmscon_conf.font_name, KMSCON_FONT_MAX_NAME - 1);
attr.name[KMSCON_FONT_MAX_NAME - 1] = 0;
- kmscon_dlist_for_each(iter, &term->screens) {
- scr = kmscon_dlist_entry(iter, struct screen, list);
+ shl_dlist_for_each(iter, &term->screens) {
+ scr = shl_dlist_entry(iter, struct screen, list);
if (scr->disp == disp)
return 0;
}
rows = kmscon_text_get_rows(scr->txt);
terminal_resize(term, cols, rows, false, true);
- kmscon_dlist_link(&term->screens, &scr->list);
+ shl_dlist_link(&term->screens, &scr->list);
log_debug("added display %p to terminal %p", disp, term);
schedule_redraw(term);
static void free_screen(struct kmscon_terminal *term, struct screen *scr,
bool update)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct screen *ent;
log_debug("destroying terminal screen %p", scr);
- kmscon_dlist_unlink(&scr->list);
+ shl_dlist_unlink(&scr->list);
kmscon_text_unref(scr->txt);
kmscon_font_unref(scr->font);
uterm_screen_unref(scr->screen);
term->min_cols = 0;
term->min_rows = 0;
- kmscon_dlist_for_each(iter, &term->screens) {
- ent = kmscon_dlist_entry(iter, struct screen, list);
+ shl_dlist_for_each(iter, &term->screens) {
+ ent = shl_dlist_entry(iter, struct screen, list);
terminal_resize(term,
kmscon_text_get_cols(ent->txt),
kmscon_text_get_rows(ent->txt),
static void rm_display(struct kmscon_terminal *term, struct uterm_display *disp)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct screen *scr;
- kmscon_dlist_for_each(iter, &term->screens) {
- scr = kmscon_dlist_entry(iter, struct screen, list);
+ shl_dlist_for_each(iter, &term->screens) {
+ scr = shl_dlist_entry(iter, struct screen, list);
if (scr->disp == disp)
break;
}
log_debug("removed display %p from terminal %p", disp, term);
free_screen(term, scr, true);
- if (kmscon_dlist_empty(&term->screens) && term->cb)
+ if (shl_dlist_empty(&term->screens) && term->cb)
term->cb(term, KMSCON_TERMINAL_NO_DISPLAY, term->data);
}
static void rm_all_screens(struct kmscon_terminal *term)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct screen *scr;
while ((iter = term->screens.next) != &term->screens) {
- scr = kmscon_dlist_entry(iter, struct screen, list);
+ scr = shl_dlist_entry(iter, struct screen, list);
free_screen(term, scr, false);
}
term->ref = 1;
term->eloop = loop;
term->input = input;
- kmscon_dlist_init(&term->screens);
+ shl_dlist_init(&term->screens);
if (kmscon_conf.fps) {
fps = 1000000000ULL / kmscon_conf.fps;
#define LOG_SUBSYSTEM "text"
struct text_backend {
- struct kmscon_dlist list;
+ struct shl_dlist list;
const struct kmscon_text_ops *ops;
};
static pthread_mutex_t text_mutex = PTHREAD_MUTEX_INITIALIZER;
-static struct kmscon_dlist text__list = KMSCON_DLIST_INIT(text__list);
+static struct shl_dlist text__list = SHL_DLIST_INIT(text__list);
static void text_lock()
{
*/
int kmscon_text_register(const struct kmscon_text_ops *ops)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct text_backend *be;
int ret;
text_lock();
- kmscon_dlist_for_each(iter, &text__list) {
- be = kmscon_dlist_entry(iter, struct text_backend, list);
+ shl_dlist_for_each(iter, &text__list) {
+ be = shl_dlist_entry(iter, struct text_backend, list);
if (!strcmp(be->ops->name, ops->name)) {
log_error("registering already available backend %s",
ops->name);
memset(be, 0, sizeof(*be));
be->ops = ops;
- kmscon_dlist_link(&text__list, &be->list);
+ shl_dlist_link(&text__list, &be->list);
ret = 0;
*/
void kmscon_text_unregister(const char *name)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct text_backend *be;
if (!name)
text_lock();
- kmscon_dlist_for_each(iter, &text__list) {
- be = kmscon_dlist_entry(iter, struct text_backend, list);
+ shl_dlist_for_each(iter, &text__list) {
+ be = shl_dlist_entry(iter, struct text_backend, list);
if (strcmp(name, be->ops->name))
continue;
- kmscon_dlist_unlink(&be->list);
+ shl_dlist_unlink(&be->list);
break;
}
const char *backend)
{
struct kmscon_text *text;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct text_backend *be, *def;
int ret;
text_lock();
- if (kmscon_dlist_empty(&text__list)) {
+ if (shl_dlist_empty(&text__list)) {
log_error("no text backend available");
ret = -EFAULT;
} else {
ret = 0;
- def = kmscon_dlist_entry(text__list.prev,
+ def = shl_dlist_entry(text__list.prev,
struct text_backend,
list);
if (!backend) {
be = def;
} else {
- kmscon_dlist_for_each(iter, &text__list) {
- be = kmscon_dlist_entry(iter,
+ shl_dlist_for_each(iter, &text__list) {
+ be = shl_dlist_entry(iter,
struct text_backend,
list);
if (!strcmp(backend, be->ops->name))
#define LOG_SUBSYSTEM "text_font"
struct font_backend {
- struct kmscon_dlist list;
+ struct shl_dlist list;
const struct kmscon_font_ops *ops;
};
static pthread_mutex_t font_mutex = PTHREAD_MUTEX_INITIALIZER;
-static struct kmscon_dlist font__list = KMSCON_DLIST_INIT(font__list);
+static struct shl_dlist font__list = SHL_DLIST_INIT(font__list);
static void font_lock()
{
*/
int kmscon_font_register(const struct kmscon_font_ops *ops)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct font_backend *be;
int ret;
font_lock();
- kmscon_dlist_for_each(iter, &font__list) {
- be = kmscon_dlist_entry(iter, struct font_backend, list);
+ shl_dlist_for_each(iter, &font__list) {
+ be = shl_dlist_entry(iter, struct font_backend, list);
if (!strcmp(be->ops->name, ops->name)) {
log_error("registering already available font backend %s",
ops->name);
memset(be, 0, sizeof(*be));
be->ops = ops;
- kmscon_dlist_link(&font__list, &be->list);
+ shl_dlist_link(&font__list, &be->list);
ret = 0;
*/
void kmscon_font_unregister(const char *name)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct font_backend *be;
if (!name)
font_lock();
- kmscon_dlist_for_each(iter, &font__list) {
- be = kmscon_dlist_entry(iter, struct font_backend, list);
+ shl_dlist_for_each(iter, &font__list) {
+ be = shl_dlist_entry(iter, struct font_backend, list);
if (strcmp(name, be->ops->name))
continue;
- kmscon_dlist_unlink(&be->list);
+ shl_dlist_unlink(&be->list);
break;
}
const char *backend)
{
struct kmscon_font *font;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct font_backend *be, *def;
int ret;
attr->bold, attr->italic, attr->height,
attr->width);
- if (kmscon_dlist_empty(&font__list)) {
+ if (shl_dlist_empty(&font__list)) {
log_error("no font backend available");
ret = -EFAULT;
} else {
ret = 0;
- def = kmscon_dlist_entry(font__list.prev,
+ def = shl_dlist_entry(font__list.prev,
struct font_backend,
list);
if (!backend) {
be = def;
} else {
- kmscon_dlist_for_each(iter, &font__list) {
- be = kmscon_dlist_entry(iter,
+ shl_dlist_for_each(iter, &font__list) {
+ be = shl_dlist_entry(iter,
struct font_backend,
list);
if (!strcmp(backend, be->ops->name))
struct face {
unsigned long ref;
- struct kmscon_dlist list;
+ struct shl_dlist list;
bool shrink;
struct kmscon_font_attr attr;
static pthread_mutex_t manager_mutex = PTHREAD_MUTEX_INITIALIZER;
static unsigned long manager__refcnt;
static FT_Library manager__lib;
-static struct kmscon_dlist manager__list = KMSCON_DLIST_INIT(manager__list);
+static struct shl_dlist manager__list = SHL_DLIST_INIT(manager__list);
static void manager_lock()
{
static int manager_get_face(struct face **out, struct kmscon_font_attr *attr)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct face *face, *f;
FcPattern *pat, *mat;
FcResult res;
if (!attr->width)
attr->width = attr->height;
- kmscon_dlist_for_each(iter, &manager__list) {
- face = kmscon_dlist_entry(iter, struct face, list);
+ shl_dlist_for_each(iter, &manager__list) {
+ face = shl_dlist_entry(iter, struct face, list);
if (kmscon_font_attr_match(&face->attr, attr)) {
++face->ref;
*out = face;
/* The real metrics probably differ from the requested metrics so try
* again to find a suitable cached font. */
- kmscon_dlist_for_each(iter, &manager__list) {
- f = kmscon_dlist_entry(iter, struct face, list);
+ shl_dlist_for_each(iter, &manager__list) {
+ f = shl_dlist_entry(iter, struct face, list);
if (kmscon_font_attr_match(&f->real_attr, &face->real_attr)) {
++f->ref;
*out = f;
}
}
- kmscon_dlist_link(&manager__list, &face->list);
+ shl_dlist_link(&manager__list, &face->list);
*out = face;
ret = 0;
goto out_unlock;
manager_lock();
if (!--face->ref) {
- kmscon_dlist_unlink(&face->list);
+ shl_dlist_unlink(&face->list);
kmscon_hashtable_free(face->glyphs);
pthread_mutex_destroy(&face->glyph_lock);
FT_Done_Face(face->face);
struct face {
unsigned long ref;
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct kmscon_font_attr attr;
struct kmscon_font_attr real_attr;
static pthread_mutex_t manager_mutex = PTHREAD_MUTEX_INITIALIZER;
static unsigned long manager__refcnt;
static PangoFontMap *manager__lib;
-static struct kmscon_dlist manager__list = KMSCON_DLIST_INIT(manager__list);
+static struct shl_dlist manager__list = SHL_DLIST_INIT(manager__list);
static void manager_lock()
{
static int manager_get_face(struct face **out, struct kmscon_font_attr *attr)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct face *face, *f;
PangoFontDescription *desc;
PangoLayout *layout;
manager_lock();
- kmscon_dlist_for_each(iter, &manager__list) {
- face = kmscon_dlist_entry(iter, struct face, list);
+ shl_dlist_for_each(iter, &manager__list) {
+ face = shl_dlist_entry(iter, struct face, list);
if (kmscon_font_attr_match(&face->attr, attr)) {
++face->ref;
*out = face;
/* The real metrics probably differ from the requested metrics so try
* again to find a suitable cached font. */
- kmscon_dlist_for_each(iter, &manager__list) {
- f = kmscon_dlist_entry(iter, struct face, list);
+ shl_dlist_for_each(iter, &manager__list) {
+ f = shl_dlist_entry(iter, struct face, list);
if (kmscon_font_attr_match(&f->real_attr, &face->real_attr)) {
++f->ref;
*out = f;
}
}
- kmscon_dlist_link(&manager__list, &face->list);
+ shl_dlist_link(&manager__list, &face->list);
*out = face;
ret = 0;
goto out_unlock;
manager_lock();
if (!--face->ref) {
- kmscon_dlist_unlink(&face->list);
+ shl_dlist_unlink(&face->list);
kmscon_hashtable_free(face->glyphs);
pthread_mutex_destroy(&face->glyph_lock);
g_object_unref(face->ctx);
#define LOG_SUBSYSTEM "text_gltex"
struct atlas {
- struct kmscon_dlist list;
+ struct shl_dlist list;
GLuint tex;
unsigned int height;
unsigned int max_tex_size;
bool supports_rowlen;
- struct kmscon_dlist atlases;
+ struct shl_dlist atlases;
GLfloat advance_x;
GLfloat advance_y;
const char *ext;
memset(gt, 0, sizeof(*gt));
- kmscon_dlist_init(>->atlases);
+ shl_dlist_init(>->atlases);
ret = kmscon_hashtable_new(>->glyphs, kmscon_direct_hash,
kmscon_direct_equal, NULL,
{
struct gltex *gt = txt->data;
int ret;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct atlas *atlas;
bool gl = true;
kmscon_hashtable_free(gt->glyphs);
- while (!kmscon_dlist_empty(>->atlases)) {
+ while (!shl_dlist_empty(>->atlases)) {
iter = gt->atlases.next;
- kmscon_dlist_unlink(iter);
- atlas = kmscon_dlist_entry(iter, struct atlas, list);
+ shl_dlist_unlink(iter);
+ atlas = shl_dlist_entry(iter, struct atlas, list);
free(atlas->cache_pos);
free(atlas->cache_texpos);
GLenum err;
/* check whether the last added atlas has still room for one glyph */
- if (!kmscon_dlist_empty(>->atlases)) {
- atlas = kmscon_dlist_entry(gt->atlases.next, struct atlas,
+ if (!shl_dlist_empty(>->atlases)) {
+ atlas = shl_dlist_entry(gt->atlases.next, struct atlas,
list);
if (atlas->fill < atlas->count)
return atlas;
atlas->advance_htex = 1.0 / atlas->width * FONT_WIDTH(txt);
atlas->advance_vtex = 1.0 / atlas->height * FONT_HEIGHT(txt);
- kmscon_dlist_link(>->atlases, &atlas->list);
+ shl_dlist_link(>->atlases, &atlas->list);
return atlas;
err_mem:
{
struct gltex *gt = txt->data;
struct atlas *atlas;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
unsigned int sw, sh;
int ret;
if (ret)
return ret;
- kmscon_dlist_for_each(iter, >->atlases) {
- atlas = kmscon_dlist_entry(iter, struct atlas, list);
+ shl_dlist_for_each(iter, >->atlases) {
+ atlas = shl_dlist_entry(iter, struct atlas, list);
atlas->cache_num = 0;
}
{
struct gltex *gt = txt->data;
struct atlas *atlas;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
float mat[16];
gl_clear_error();
glActiveTexture(GL_TEXTURE0);
glUniform1i(gt->uni_atlas, 0);
- kmscon_dlist_for_each(iter, >->atlases) {
- atlas = kmscon_dlist_entry(iter, struct atlas, list);
+ shl_dlist_for_each(iter, >->atlases) {
+ atlas = shl_dlist_entry(iter, struct atlas, list);
if (!atlas->cache_num)
continue;
#define LOG_SUBSYSTEM "ui"
struct ui_video {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct kmscon_ui *ui;
struct uterm_video *video;
};
struct kmscon_ui {
struct ev_eloop *eloop;
struct uterm_input *input;
- struct kmscon_dlist video_list;
+ struct shl_dlist video_list;
struct kmscon_terminal *term;
bool awake;
};
static void video_new(struct kmscon_ui *ui, struct uterm_video *video)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct ui_video *vid;
int ret;
- kmscon_dlist_for_each(iter, &ui->video_list) {
- vid = kmscon_dlist_entry(iter, struct ui_video, list);
+ shl_dlist_for_each(iter, &ui->video_list) {
+ vid = shl_dlist_entry(iter, struct ui_video, list);
if (vid->video == video)
return;
}
if (ret)
goto err_free;
- kmscon_dlist_link(&ui->video_list, &vid->list);
+ shl_dlist_link(&ui->video_list, &vid->list);
uterm_video_ref(vid->video);
return;
struct kmscon_ui *ui = vid->ui;
log_debug("removing video device");
- kmscon_dlist_unlink(&vid->list);
+ shl_dlist_unlink(&vid->list);
disp = uterm_video_get_displays(vid->video);
while (disp) {
static void video_free_all(struct kmscon_ui *ui)
{
struct ui_video *vid;
- struct kmscon_dlist *iter, *tmp;
+ struct shl_dlist *iter, *tmp;
- kmscon_dlist_for_each_safe(iter, tmp, &ui->video_list) {
- vid = kmscon_dlist_entry(iter, struct ui_video, list);
+ shl_dlist_for_each_safe(iter, tmp, &ui->video_list) {
+ vid = shl_dlist_entry(iter, struct ui_video, list);
video_free(vid);
}
}
memset(ui, 0, sizeof(*ui));
ui->eloop = eloop;
ui->input = input;
- kmscon_dlist_init(&ui->video_list);
+ shl_dlist_init(&ui->video_list);
ret = kmscon_terminal_new(&ui->term, eloop, ui->input);
if (ret)
void kmscon_ui_remove_video(struct kmscon_ui *ui, struct uterm_video *video)
{
struct ui_video *vid;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
if (!ui || !video)
return;
- kmscon_dlist_for_each(iter, &ui->video_list) {
- vid = kmscon_dlist_entry(iter, struct ui_video, list);
+ shl_dlist_for_each(iter, &ui->video_list) {
+ vid = shl_dlist_entry(iter, struct ui_video, list);
if (vid->video == video) {
video_free(vid);
return;
};
struct uterm_input_dev {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_input *input;
unsigned int features;
struct kmscon_hook *hook;
struct kbd_desc *desc;
- struct kmscon_dlist devices;
+ struct shl_dlist devices;
};
static void input_free_dev(struct uterm_input_dev *dev);
}
log_debug("new device %s", node);
- kmscon_dlist_link(&input->devices, &dev->list);
+ shl_dlist_link(&input->devices, &dev->list);
return;
err_kbd:
{
log_debug("free device %s", dev->node);
input_sleep_dev(dev);
- kmscon_dlist_unlink(&dev->list);
+ shl_dlist_unlink(&dev->list);
kbd_dev_unref(dev->kbd);
free(dev->node);
free(dev);
memset(input, 0, sizeof(*input));
input->ref = 1;
input->eloop = eloop;
- kmscon_dlist_init(&input->devices);
+ shl_dlist_init(&input->devices);
ret = kmscon_hook_new(&input->hook);
if (ret)
log_debug("free object %p", input);
while (input->devices.next != &input->devices) {
- dev = kmscon_dlist_entry(input->devices.next,
+ dev = shl_dlist_entry(input->devices.next,
struct uterm_input_dev,
list);
input_free_dev(dev);
void uterm_input_remove_dev(struct uterm_input *input, const char *node)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct uterm_input_dev *dev;
if (!input || !node)
return;
- kmscon_dlist_for_each(iter, &input->devices) {
- dev = kmscon_dlist_entry(iter,
+ shl_dlist_for_each(iter, &input->devices) {
+ dev = shl_dlist_entry(iter,
struct uterm_input_dev,
list);
if (!strcmp(dev->node, node)) {
void uterm_input_sleep(struct uterm_input *input)
{
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct uterm_input_dev *dev;
if (!input)
log_debug("going to sleep");
- kmscon_dlist_for_each(iter, &input->devices) {
- dev = kmscon_dlist_entry(iter,
+ shl_dlist_for_each(iter, &input->devices) {
+ dev = shl_dlist_entry(iter,
struct uterm_input_dev,
list);
input_sleep_dev(dev);
void uterm_input_wake_up(struct uterm_input *input)
{
- struct kmscon_dlist *iter, *tmp;
+ struct shl_dlist *iter, *tmp;
struct uterm_input_dev *dev;
int ret;
log_debug("wakeing up");
- kmscon_dlist_for_each_safe(iter, tmp, &input->devices) {
- dev = kmscon_dlist_entry(iter,
+ shl_dlist_for_each_safe(iter, tmp, &input->devices) {
+ dev = shl_dlist_entry(iter,
struct uterm_input_dev,
list);
ret = input_wake_up_dev(dev);
#define LOG_SUBSYSTEM "monitor"
struct uterm_monitor_dev {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_monitor_seat *seat;
unsigned int type;
char *node;
};
struct uterm_monitor_seat {
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_monitor *mon;
char *name;
void *data;
- struct kmscon_dlist devices;
+ struct shl_dlist devices;
};
struct uterm_monitor {
struct udev_monitor *umon;
struct ev_fd *umon_fd;
- struct kmscon_dlist seats;
+ struct shl_dlist seats;
};
static void monitor_new_seat(struct uterm_monitor *mon, const char *name);
{
char **seats;
int num, i;
- struct kmscon_dlist *iter, *tmp;
+ struct shl_dlist *iter, *tmp;
struct uterm_monitor_seat *seat;
num = sd_get_seats(&seats);
}
/* Remove all seats that are no longer present */
- kmscon_dlist_for_each_safe(iter, tmp, &mon->seats) {
- seat = kmscon_dlist_entry(iter, struct uterm_monitor_seat,
+ shl_dlist_for_each_safe(iter, tmp, &mon->seats) {
+ seat = shl_dlist_entry(iter, struct uterm_monitor_seat,
list);
for (i = 0; i < num; ++i) {
if (!strcmp(seats[i], seat->name))
static void monitor_refresh_seats(struct uterm_monitor *mon)
{
- if (kmscon_dlist_empty(&mon->seats))
+ if (shl_dlist_empty(&mon->seats))
monitor_new_seat(mon, "seat0");
}
if (!dev->node)
goto err_free;
- kmscon_dlist_link(&seat->devices, &dev->list);
+ shl_dlist_link(&seat->devices, &dev->list);
memset(&ev, 0, sizeof(ev));
ev.type = UTERM_MONITOR_NEW_DEV;
log_debug("free device %s on %s", dev->node, dev->seat->name);
- kmscon_dlist_unlink(&dev->list);
+ shl_dlist_unlink(&dev->list);
memset(&ev, 0, sizeof(ev));
ev.type = UTERM_MONITOR_FREE_DEV;
struct udev_device *dev)
{
const char *node;
- struct kmscon_dlist *iter, *iter2;
+ struct shl_dlist *iter, *iter2;
struct uterm_monitor_seat *seat;
struct uterm_monitor_dev *sdev;
if (!node)
return NULL;
- kmscon_dlist_for_each(iter, &mon->seats) {
- seat = kmscon_dlist_entry(iter, struct uterm_monitor_seat,
+ shl_dlist_for_each(iter, &mon->seats) {
+ seat = shl_dlist_entry(iter, struct uterm_monitor_seat,
list);
- kmscon_dlist_for_each(iter2, &seat->devices) {
- sdev = kmscon_dlist_entry(iter2,
+ shl_dlist_for_each(iter2, &seat->devices) {
+ sdev = shl_dlist_entry(iter2,
struct uterm_monitor_dev,
list);
if (!strcmp(node, sdev->node))
return;
memset(seat, 0, sizeof(*seat));
seat->mon = mon;
- kmscon_dlist_init(&seat->devices);
+ shl_dlist_init(&seat->devices);
seat->name = strdup(name);
if (!seat->name)
goto err_free;
- kmscon_dlist_link(&mon->seats, &seat->list);
+ shl_dlist_link(&mon->seats, &seat->list);
memset(&ev, 0, sizeof(ev));
ev.type = UTERM_MONITOR_NEW_SEAT;
log_debug("free seat %s", seat->name);
while (seat->devices.next != &seat->devices) {
- dev = kmscon_dlist_entry(seat->devices.next,
+ dev = shl_dlist_entry(seat->devices.next,
struct uterm_monitor_dev,
list);
seat_free_dev(dev);
}
- kmscon_dlist_unlink(&seat->list);
+ shl_dlist_unlink(&seat->list);
memset(&ev, 0, sizeof(ev));
ev.type = UTERM_MONITOR_FREE_SEAT;
struct udev_device *dev)
{
const char *sname, *subs, *node, *name, *sysname;
- struct kmscon_dlist *iter;
+ struct shl_dlist *iter;
struct uterm_monitor_seat *seat;
unsigned int type;
int id;
sname = "seat0";
/* find correct seat */
- kmscon_dlist_for_each(iter, &mon->seats) {
- seat = kmscon_dlist_entry(iter, struct uterm_monitor_seat,
+ shl_dlist_for_each(iter, &mon->seats) {
+ seat = shl_dlist_entry(iter, struct uterm_monitor_seat,
list);
if (!strcmp(sname, seat->name))
break;
mon->eloop = eloop;
mon->cb = cb;
mon->data = data;
- kmscon_dlist_init(&mon->seats);
+ shl_dlist_init(&mon->seats);
ret = monitor_sd_init(mon);
if (ret)
return;
while (mon->seats.next != &mon->seats) {
- seat = kmscon_dlist_entry(mon->seats.next,
+ seat = shl_dlist_entry(mon->seats.next,
struct uterm_monitor_seat,
list);
monitor_free_seat(seat);
struct uterm_vt {
unsigned long ref;
- struct kmscon_dlist list;
+ struct shl_dlist list;
struct uterm_vt_master *vtm;
struct uterm_input *input;
unsigned int mode;
struct ev_eloop *eloop;
bool vt_support;
- struct kmscon_dlist vts;
+ struct shl_dlist vts;
};
static int vt_call(struct uterm_vt *vt, unsigned int event)
uterm_input_wake_up(vt->input);
}
- kmscon_dlist_link(&vtm->vts, &vt->list);
+ shl_dlist_link(&vtm->vts, &vt->list);
*out = vt;
return 0;
}
ev_eloop_unregister_signal_cb(vt->vtm->eloop, SIGUSR2, vt_sigusr2, vt);
ev_eloop_unregister_signal_cb(vt->vtm->eloop, SIGUSR1, vt_sigusr1, vt);
- kmscon_dlist_unlink(&vt->list);
+ shl_dlist_unlink(&vt->list);
uterm_input_sleep(vt->input);
uterm_input_unref(vt->input);
vt->vtm = NULL;
memset(vtm, 0, sizeof(*vtm));
vtm->ref = 1;
vtm->eloop = eloop;
- kmscon_dlist_init(&vtm->vts);
+ shl_dlist_init(&vtm->vts);
vtm->vt_support = check_vt_support();
ev_eloop_ref(vtm->eloop);
return;
while (vtm->vts.next != &vtm->vts) {
- vt = kmscon_dlist_entry(vtm->vts.next,
+ vt = shl_dlist_entry(vtm->vts.next,
struct uterm_vt,
list);
uterm_vt_deallocate(vt);