mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.3 KiB
63 lines
1.3 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <pthread.h> |
|
#include <linux/kernel.h> |
|
#include <linux/string.h> |
|
|
|
#include "../helpline.h" |
|
#include "../ui.h" |
|
#include "../libslang.h" |
|
|
|
char ui_helpline__last_msg[1024]; |
|
bool tui_helpline__set; |
|
|
|
static void tui_helpline__pop(void) |
|
{ |
|
} |
|
|
|
static void tui_helpline__push(const char *msg) |
|
{ |
|
const size_t sz = sizeof(ui_helpline__current); |
|
|
|
SLsmg_gotorc(SLtt_Screen_Rows - 1, 0); |
|
SLsmg_set_color(0); |
|
SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols); |
|
SLsmg_refresh(); |
|
strlcpy(ui_helpline__current, msg, sz); |
|
} |
|
|
|
static int tui_helpline__show(const char *format, va_list ap) |
|
{ |
|
int ret; |
|
static int backlog; |
|
|
|
pthread_mutex_lock(&ui__lock); |
|
ret = vscnprintf(ui_helpline__last_msg + backlog, |
|
sizeof(ui_helpline__last_msg) - backlog, format, ap); |
|
backlog += ret; |
|
|
|
tui_helpline__set = true; |
|
|
|
if (ui_helpline__last_msg[backlog - 1] == '\n') { |
|
ui_helpline__puts(ui_helpline__last_msg); |
|
SLsmg_refresh(); |
|
backlog = 0; |
|
} |
|
pthread_mutex_unlock(&ui__lock); |
|
|
|
return ret; |
|
} |
|
|
|
struct ui_helpline tui_helpline_fns = { |
|
.pop = tui_helpline__pop, |
|
.push = tui_helpline__push, |
|
.show = tui_helpline__show, |
|
}; |
|
|
|
void ui_helpline__init(void) |
|
{ |
|
helpline_fns = &tui_helpline_fns; |
|
ui_helpline__puts(" "); |
|
}
|
|
|