term: continue reading from pty if more data is available
[fbpad.git] / scrsnap.c
blobb977b84a40d83b2b3366da2a4a9689310c6e8c63
1 #include <stdlib.h>
2 #include <string.h>
3 #include "config.h"
4 #include "draw.h"
6 #define NSCRS ((sizeof(saved) - 1) * 2)
7 #define SNAPSZ (1 << 23)
9 static char saved[] = TAGS_SAVED;
10 static char scrs[NSCRS][SNAPSZ];
11 static void *owners[NSCRS];
13 static int scr_find(void *owner)
15 int i;
16 for (i = 0; i < NSCRS; i++)
17 if (owners[i] == owner)
18 return i;
19 return -1;
22 static int scr_slot(void)
24 int index = scr_find(NULL);
25 return index > -1 ? index : 0;
28 void scr_snap(void *owner)
30 int rowsz = sizeof(fbval_t) * fb_cols();
31 int scr = scr_slot();
32 int i;
33 for (i = 0; i < fb_rows(); i++)
34 memcpy(scrs[scr] + i * rowsz, fb_mem(i), rowsz);
35 owners[scr] = owner;
38 void scr_free(void *owner)
40 int scr = scr_find(owner);
41 if (scr != -1)
42 owners[scr] = NULL;
45 int scr_load(void *owner)
47 int rowsz = sizeof(fbval_t) * fb_cols();
48 int scr = scr_find(owner);
49 int i;
50 if (scr == -1)
51 return -1;
52 for (i = 0; i < fb_rows(); i++)
53 memcpy(fb_mem(i), scrs[scr] + i * rowsz, rowsz);
54 owners[scr] = NULL;
55 return 0;