vi: explain when the screen is updated in vi()
[neatvi.git] / reg.c
blobf4eb05cd4f2d5f3acce82d4471fad390f869f8c8
1 #include <ctype.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "vi.h"
6 static char *bufs[256];
7 static int lnmode[256];
9 char *reg_get(int c, int *ln)
11 *ln = lnmode[c];
12 return bufs[c];
15 static void reg_putraw(int c, char *s, int ln)
17 char *pre = isupper(c) ? bufs[tolower(c)] : "";
18 char *buf = malloc(strlen(pre) + strlen(s) + 1);
19 strcpy(buf, pre);
20 strcat(buf, s);
21 free(bufs[tolower(c)]);
22 bufs[tolower(c)] = buf;
23 lnmode[tolower(c)] = ln;
26 void reg_put(int c, char *s, int ln)
28 int i, i_ln;
29 char *i_s;
30 if (ln || strchr(s, '\n')) {
31 for (i = 8; i > 0; i--)
32 if ((i_s = reg_get('0' + i, &i_ln)))
33 reg_putraw('0' + i + 1, i_s, i_ln);
34 reg_putraw('1', s, ln);
36 reg_putraw(c, s, ln);
39 void reg_done(void)
41 int i;
42 for (i = 0; i < LEN(bufs); i++)
43 free(bufs[i]);