Commit | Line | Data |
---|---|---|
fe3db729 | 1 | #ifndef lint |
b4be6cd6 | 2 | static char *sccsid = "@(#)wwwrite.c 1.3 83/07/19"; |
fe3db729 EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
6 | ||
7 | int wwnwrite = 0; | |
8 | ||
9 | wwwrite(w, p, n) | |
10 | register struct ww *w; | |
11 | register char *p; | |
12 | register n; | |
13 | { | |
14 | register char c; | |
15 | ||
16 | if (w == 0 || w->ww_win == 0) | |
17 | return -1; | |
18 | wwnwrite += n; | |
19 | while (n-- > 0) { | |
20 | c = *p++ & 0x7f; | |
21 | switch (w->ww_wstate) { | |
22 | case 0: | |
23 | if (c >= ' ' && c < 0x7f) { | |
24 | if (w->ww_insert) | |
25 | Winschars(w->ww_win, 1); | |
26 | Wputc(c, w->ww_win); | |
27 | break; | |
28 | } | |
29 | switch (c) { | |
30 | case '\n': | |
31 | Wputc(c, w->ww_win); | |
32 | if (w->ww_refresh) | |
33 | Wrefresh(1); | |
34 | break; | |
35 | case '\t': | |
36 | case '\b': | |
37 | case '\r': | |
38 | case CTRL(g): | |
39 | Wputc(c, w->ww_win); | |
40 | break; | |
41 | case CTRL([): | |
42 | w->ww_wstate = 1; | |
43 | break; | |
44 | } | |
45 | break; | |
46 | case 1: | |
47 | w->ww_wstate = 0; | |
48 | switch (c) { | |
49 | case '@': | |
50 | w->ww_insert = 1; | |
51 | break; | |
52 | case 'A': | |
53 | Wcurup(w->ww_win, 1); | |
54 | break; | |
55 | case 'B': | |
56 | Wcurdown(w->ww_win, 1); | |
57 | break; | |
58 | case 'C': | |
59 | Wcurright(w->ww_win, 1); | |
60 | break; | |
61 | case 'E': | |
62 | WWcursor(w->ww_win, 0, 0); | |
63 | Wclear(w->ww_win, 2); | |
64 | /* always refresh */ | |
65 | Wrefresh(1); | |
66 | break; | |
67 | case 'H': | |
68 | WWcursor(w->ww_win, 0, 0); | |
69 | break; | |
70 | case 'J': | |
71 | Wclear(w->ww_win, 0); | |
72 | break; | |
73 | case 'K': | |
74 | Wclearline(w->ww_win, 0); | |
75 | break; | |
76 | case 'L': | |
77 | Winslines(w->ww_win, 1); | |
78 | if (w->ww_refresh) | |
79 | Wrefresh(1); | |
80 | break; | |
81 | case 'M': | |
82 | Wdellines(w->ww_win, 1); | |
83 | if (w->ww_refresh) | |
84 | Wrefresh(1); | |
85 | break; | |
86 | case 'N': | |
87 | Wdelchars(w->ww_win, 1); | |
88 | break; | |
89 | case 'O': | |
90 | w->ww_insert = 0; | |
91 | break; | |
92 | case 'Y': | |
93 | w->ww_wstate = 2; | |
94 | break; | |
95 | } | |
96 | break; | |
97 | case 2: | |
2b44d852 EW |
98 | WWcursor(w->ww_win, (c - ' ') % w->ww_inrow, |
99 | w->ww_win->w_cursor.col); | |
fe3db729 EW |
100 | w->ww_wstate++; |
101 | break; | |
102 | case 3: | |
2b44d852 EW |
103 | WWcursor(w->ww_win, w->ww_win->w_cursor.row, |
104 | (c - ' ') % w->ww_incol); | |
fe3db729 EW |
105 | w->ww_wstate = 0; |
106 | break; | |
107 | } | |
108 | } | |
109 | } |