interpolate.c - pointtools - Simple point utilities to hold text presentations.
(HTM) git clone git://r-36.net/pointtools
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
interpolate.c (1587B)
---
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <unistd.h>
5
6 #define STEPS 32
7
8 /* SLEEPTIME in microseconds */
9 #define SLEEPTIME 100
10
11 int
12 main(int argc, char *argv[])
13 {
14 FILE *from, *to;
15 int i, j, k;
16 int width, height;
17 int fromn, ton;
18 size_t linesize;
19 ssize_t r;
20 char **fromlines, **tolines, *line;
21 char fromc, toc;
22
23 if (argc < 3)
24 return 1;
25
26 if (!(from = fopen(argv[1], "r")))
27 return 1;
28
29 if (!(to = fopen(argv[2], "r")))
30 return 1;
31
32 line = NULL;
33 linesize = 0;
34 width = 0;
35
36 fromn = 0;
37 fromlines = NULL;
38 while ((r = getline(&line, &linesize, from)) != -1) {
39 if (line[r-1] == '\n')
40 line[--r] = '\0';
41 fromn++;
42 fromlines = realloc(fromlines, fromn * sizeof(*fromlines));
43 fromlines[fromn-1] = strdup(line);
44 if (r > width)
45 width = r;
46 }
47 fclose(from);
48
49 ton = 0;
50 tolines = NULL;
51 while ((r = getline(&line, &linesize, to)) != -1) {
52 if (line[r-1] == '\n')
53 line[--r] = '\0';
54 ton++;
55 tolines = realloc(tolines, ton * sizeof(*tolines));
56 tolines[ton-1] = strdup(line);
57 if (r > width)
58 width = r;
59 }
60 fclose(to);
61
62 height = ton > fromn ? ton : fromn;
63
64 printf("\033[2J");
65 for (k = 0; k <= STEPS; k++) {
66 printf("\033[;H");
67 for (i = 0; i < height; i++) {
68 for (j = 0; j < width; j++) {
69 fromc = ' ';
70 toc = ' ';
71 if (i < fromn && j < strlen(fromlines[i]))
72 fromc = fromlines[i][j];
73 if (i < ton && j < strlen(tolines[i]))
74 toc = tolines[i][j];
75 if (toc & 128)
76 putchar(toc);
77 else
78 putchar(fromc + (toc - fromc) * k / STEPS);
79 }
80 putchar('\n');
81 }
82 usleep(SLEEPTIME);
83 }
84
85 return 0;
86 }