foo
[regis] / regis.c
1 #include "regis.h"
2
3 #define OUT     (out ? out : stdout)
4 static FILE *out;
5
6 void regis_set_output(FILE *fp)
7 {
8         out = fp;
9 }
10
11 void regis_enter(void)
12 {
13         fprintf(OUT, "\033P0p");
14 }
15
16 void regis_leave(void)
17 {
18         fprintf(OUT, "\033\\");
19         fflush(OUT);
20 }
21
22 void regis_draw_page(int x)
23 {
24         fprintf(OUT, "P(P%d)", x ? 1 : 0);
25 }
26
27 void regis_show_page(int x)
28 {
29         fprintf(OUT, "S(P%d)", x ? 1 : 0);
30 }
31
32 void regis_clear(void)
33 {
34         fprintf(OUT, "S(E)");
35 }
36
37 void regis_abspos(int x, int y)
38 {
39         fputc('P', OUT);
40         regis_absv(x, y);
41 }
42
43 void regis_relpos(int x, int y)
44 {
45         fputc('P', OUT);
46         regis_relv(x, y);
47 }
48
49 void regis_absv(int x, int y)
50 {
51         fprintf(OUT, "[%d,%d]", x, y);
52 }
53
54 void regis_relv(int x, int y)
55 {
56         fprintf(OUT, "[%+d,%+d]", x, y);
57 }
58
59 void regis_nullv(void)
60 {
61         fprintf(OUT, "[]");
62 }
63
64 static unsigned int cur_mode;
65
66 void regis_begin_vector(unsigned int mode)
67 {
68         if(mode & REGIS_FILL) {
69                 fprintf(OUT, "F(");
70         }
71         fputc('V', OUT);
72         if(mode & REGIS_BOUNDED) {
73                 fprintf(OUT, "(B)");
74         }
75         cur_mode = mode;
76 }
77
78 void regis_end_vector(void)
79 {
80         fprintf(OUT, "(E)");
81         if(cur_mode & REGIS_FILL) {
82                 fputc(')', OUT);
83         }
84 }