term: support \33[23m to disable italics
[fbpad.git] / scrsnap.c
blob6ad9c0cc109ce16dd8f6c115fae909237ce00dfb
1 #include <stdlib.h>
2 #include <string.h>
3 #include "config.h"
4 #include "draw.h"
5 #include "scrsnap.h"
7 #define NSCRS ((sizeof(saved) - 1) * 2)
8 #define SNAPSZ (1 << 23)
10 static char saved[] = TAGS_SAVED;
11 static char scrs[NSCRS][SNAPSZ];
12 static void *owners[NSCRS];
14 static int scr_find(void *owner)
16 int i;
17 for (i = 0; i < NSCRS; i++)
18 if (owners[i] == owner)
19 return i;
20 return -1;
23 static int scr_slot(void)
25 int index = scr_find(NULL);
26 return index > -1 ? index : 0;
29 void scr_snap(void *owner)
31 int rowsz = sizeof(fbval_t) * fb_cols();
32 int scr = scr_slot();
33 int i;
34 for (i = 0; i < fb_rows(); i++)
35 memcpy(scrs[scr] + i * rowsz, fb_mem(i), rowsz);
36 owners[scr] = owner;
39 void scr_free(void *owner)
41 int scr = scr_find(owner);
42 if (scr != -1)
43 owners[scr] = NULL;
46 int scr_load(void *owner)
48 int rowsz = sizeof(fbval_t) * fb_cols();
49 int scr = scr_find(owner);
50 int i;
51 if (scr == -1)
52 return -1;
53 for (i = 0; i < fb_rows(); i++)
54 memcpy(fb_mem(i), scrs[scr] + i * rowsz, rowsz);
55 owners[scr] = NULL;
56 return 0;