nshell/src/main.c

88 lines
3 KiB
C
Raw Normal View History

2021-08-31 15:52:53 +02:00
#include <gint/keyboard.h>
#include <gint/timer.h>
#include "term.h"
#include <gint/display.h>
#include <stdio.h>
#include <string.h>
static char *LOREM_IPSUM =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vitae purus dolor. Praesent in ex tempus, auctor velit at, "
"vulputate sapien. Aenean semper, dui vitae iaculis mattis, odio libero aliquet elit, nec tempor nisl turpis vel arcu. "
"Vestibulum eleifend maximus enim at sollicitudin. Nulla eu commodo justo. Ut vitae pellentesque erat. Duis magna nisl, "
"eleifend ac massa at, blandit sollicitudin ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. "
"Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut at libero in turpis porttitor "
"viverra. Ut eu pellentesque purus. Vestibulum aliquet facilisis ante, eget volutpat metus. Cras semper lacus ac mauris "
"imperdiet, vel egestas est luctus. Aliquam elit enim, dignissim nec enim vel, consequat ullamcorper libero. Pellentesque at "
"iaculis lctus. Praesent sed velit at tellus hendrerit mattis eu nec velit. Phasellus eu quam nec nisi mattis elementum quis "
"nec enim. Nulla efficitur turpis id tempus ultricies. Pellentesque semper lacinia mi vitae feugiat. Vestibulum leo nisi, "
"pretium quis felis non, mattis varius risus. "
"Suspendisse porttitor purus lacinia ante euismod, ut eleifend massa fermentum. Proin pretium elementum massa, at efficitur "
2021-08-31 16:30:03 +02:00
"risus iaculis sed.";
2021-08-31 15:52:53 +02:00
static volatile int key_poll_timeout;
static int tick_ctr = 0;
static int callback_keypoll(void) {
key_poll_timeout = 0;
return TIMER_STOP;
}
2021-09-01 10:20:28 +02:00
int shift_ctr = 0;
2021-08-31 17:22:45 +02:00
static char statusbar[UNS_TERM_COLS + 1];
static void set_statusbar(void) {
// set green bar
for (int i = 0; i < UNS_TERM_COLS; i++)
tgrid_sets(0, i, C_NONE, C_GREEN, " ");
// then add actutal text
2021-09-01 10:20:28 +02:00
sprintf(statusbar, "↑Aa %d %d", tick_ctr, shift_ctr);
2021-08-31 17:22:45 +02:00
tgrid_sets(0, 0, C_BLACK, C_GREEN, statusbar);
}
2021-09-01 10:20:28 +02:00
static void center_str(int len, char buf[len], const char* s) {
const int l = strlen(s);
const int before = len/2 - l/2;
int i;
for (i=0; i < before; i++)
buf[i] = ' ';
for (int j = 0; j < l; j++)
buf[i++] = s[j];
for (; i < len; i++)
buf[i] = ' ';
}
static char fnkeys[6][11] = {"opt 1-", "opt 2--", "opt 3---", "opt 4----", "opt 5-----", "opt 6"};
2021-08-31 17:22:45 +02:00
static void set_menubar(void) {
int col = 0;
for (int i = 0; i < 6; i++) {
2021-09-01 10:20:28 +02:00
char buf[11] = "";
center_str(10, buf, fnkeys[i]);
buf[10] = '\0';
2021-08-31 17:22:45 +02:00
tgrid_sets(UNS_TERM_ROWS - 1, col, C_WHITE, C_BLUE, buf);
col += 10 + 1;
}
}
2021-08-31 15:52:53 +02:00
int main(void) {
2021-09-01 10:20:52 +02:00
const int timer = timer_configure(TIMER_ANY, 15625, GINT_CALL(callback_keypoll));
2021-08-31 15:52:53 +02:00
while (1) {
tgrid_sets(1, 0, C_WHITE, C_BLACK, LOREM_IPSUM);
2021-08-31 17:22:45 +02:00
set_statusbar();
set_menubar();
2021-08-31 15:52:53 +02:00
tgrid_display();
key_poll_timeout = 1;
key_event_t kev = getkey_opt(GETKEY_DEFAULT, &key_poll_timeout);
2021-08-31 17:22:45 +02:00
timer_start(timer);
2021-08-31 15:52:53 +02:00
if (kev.type != KEYEV_NONE)
tick_ctr++;
}
return 1;
}