gosl/src/display.c

78 lines
1.8 KiB
C
Raw Normal View History

2013-11-02 19:47:37 +01:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
2013-11-02 18:44:02 +01:00
2013-11-02 19:58:39 +01:00
#include "msg.h"
2013-11-02 18:44:02 +01:00
#include "display.h"
2013-11-02 19:47:37 +01:00
void setup_display() {
initscr(); // ncurses initialization
curs_set(0); // invisible cursor
}
void cleanup_display() {
endwin(); // clean ncurses shutdown
}
/*
image[row][col] >>> image[row*width+col];
uint32_t width; // normally 80
uint32_t height; // normally 25, may vary
char *image; // dimension is width x height
*/
2013-11-02 20:50:42 +01:00
static void print_current_image(const struct message* msg, int start, int end) {
2013-11-02 20:24:50 +01:00
end = 80; // end is ignored and 80 is used, should be handled properly later
2013-11-02 19:47:37 +01:00
2013-11-02 20:24:50 +01:00
//move(0,0); // start in the upper left corner
2013-11-02 19:58:39 +01:00
char *pic = msg->image; // get a ptr to the actual image
2013-11-02 19:47:37 +01:00
2013-11-02 20:10:52 +01:00
for (int row=0; row < 25; row++) { // iterate over rows
2013-11-02 20:24:50 +01:00
char *original_line = pic + row * msg->width; // pointer to the start of the line to print
2013-11-02 20:50:42 +01:00
char *line = (char*) malloc(end-start+1); // allocate a line because we modify it
2013-11-02 20:10:52 +01:00
strcpy(line, original_line + start); // get a line from the right start
2013-11-02 20:50:42 +01:00
line[end-start] = '\0'; // terminate it
2013-11-02 20:24:50 +01:00
mvprintw(row, 0, "%s", line); // print it
2013-11-02 20:10:52 +01:00
free(line); // free it
2013-11-02 19:47:37 +01:00
}
refresh(); // refresh the screen
}
2013-11-02 20:57:08 +01:00
void callback(const struct message *msg, const struct prog_info *pinfo) {
printf("in callback, tst=%d\n", msg->timestamp);
2013-11-02 20:50:42 +01:00
2013-11-02 21:16:12 +01:00
// calculate the actual offset to use
int start = msg->timestamp % msg->width + pinfo->client_offset;
2013-11-02 20:50:42 +01:00
print_current_image(msg, start, start+80);
2013-11-02 18:44:02 +01:00
}
2013-11-02 19:47:37 +01:00
2013-11-02 21:21:20 +01:00
void prntscreen(const struct message *msg, const struct prog_info *pinfo) {
static int init = 0;
static int rows;
static int cols;
if (!init) {
initscr();
getmaxyx(stdscr, rows, cols);
init = 1;
}
int frame = msg->frame;
int right = pinfo->client_offset;
int left = right + cols;
int pos = frame + off;
refresh();
}