today's work
[unix-history] / usr / src / usr.bin / window / wwwrite.c
CommitLineData
fe3db729 1#ifndef lint
b4be6cd6 2static char *sccsid = "@(#)wwwrite.c 1.3 83/07/19";
fe3db729
EW
3#endif
4
5#include "ww.h"
6
7int wwnwrite = 0;
8
9wwwrite(w, p, n)
10register struct ww *w;
11register char *p;
12register 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}