1: /*
2: * High level routines dealing with the output to the screen.
3: */
4:
5: #include "less.h"
6:
7: extern int sigs;
8: extern int sc_width, sc_height;
9: extern int ul_width, ue_width;
10: extern int so_width, se_width;
11: extern int tabstop;
12: extern int twiddle;
13: extern char *line;
14: extern char *first_cmd;
15:
16: /*
17: * Display the line which is in the line buffer.
18: */
19: public void
20: put_line()
21: {
22: register char *p;
23: register int c;
24: register int column;
25: extern int auto_wrap, ignaw;
26:
27: if (sigs)
28: /*
29: * Don't output if a signal is pending.
30: */
31: return;
32:
33: if (line == NULL)
34: line = (twiddle) ? "~" : "";
35:
36: column = 0;
37: for (p = line; *p != '\0'; p++)
38: {
39: switch (c = *p)
40: {
41: case UL_CHAR:
42: ul_enter();
43: column += ul_width;
44: break;
45: case UE_CHAR:
46: ul_exit();
47: column += ue_width;
48: break;
49: case '\t':
50: do
51: {
52: putc(' ');
53: column++;
54: } while ((column % tabstop) != 0);
55: break;
56: case '\b':
57: putbs();
58: column--;
59: break;
60: default:
61: if (c & 0200)
62: {
63: putc('^');
64: putc(c & 0177);
65: column += 2;
66: } else
67: {
68: putc(c);
69: column++;
70: }
71: }
72: }
73: if (column < sc_width || !auto_wrap || ignaw)
74: putc('\n');
75: }
76:
77: /*
78: * Is a given character a "control" character?
79: * {{ ASCII DEPENDENT }}
80: */
81: public int
82: control_char(c)
83: int c;
84: {
85: return (c < ' ' || c == '\177');
86: }
87:
88: #ifndef NRTC
89: /*
90: * Return the printable character used to identify a control character
91: * (printed after a carat; e.g. '\3' => "^C").
92: * {{ ASCII DEPENDENT }}
93: */
94: public int
95: carat_char(c)
96: int c;
97: {
98: return ((c == '\177') ? '?' : (c | 0100));
99: }
100: #endif NRTC
101:
102:
103: static char obuf[1024];
104: static char *ob = obuf;
105:
106: /*
107: * Flush buffered output.
108: */
109: public void
110: flush()
111: {
112: write(1, obuf, ob-obuf);
113: ob = obuf;
114: }
115:
116: /*
117: * Discard buffered output.
118: */
119: public void
120: dropout()
121: {
122: ob = obuf;
123: }
124:
125: /*
126: * Output a character.
127: */
128: public void
129: putc(c)
130: int c;
131: {
132: if (ob >= &obuf[sizeof(obuf)])
133: flush();
134: *ob++ = c;
135: }
136:
137: /*
138: * Output a string.
139: */
140: public void
141: puts(s)
142: register char *s;
143: {
144: while (*s != '\0')
145: putc(*s++);
146: }
147:
148: /*
149: * Output a message in the lower left corner of the screen
150: * and wait for carriage return.
151: */
152:
153: static char return_to_continue[] = " (press RETURN)";
154:
155: public void
156: error(s)
157: char *s;
158: {
159: register int c;
160: static char buf[2];
161:
162: lower_left();
163: clear_eol();
164: so_enter();
165: puts(s);
166: puts(return_to_continue);
167: so_exit();
168:
169: #if ONLY_RETURN
170: while ((c = getc()) != '\n' && c != '\r')
171: bell();
172: #else
173: c = getc();
174: if (c != '\n' && c != '\r' && c != ' ')
175: {
176: buf[0] = c;
177: first_cmd = buf;
178: }
179: #endif
180:
181: if (strlen(s) > sc_width)
182: repaint();
183: }
184:
185: public int
186: error_width()
187: {
188: /*
189: * Don't use the last position, because some terminals
190: * will scroll if you write in the last char of the last line.
191: */
192: return (sc_width -
193: (sizeof(return_to_continue) + so_width + se_width + 1));
194: }
Defined functions
error
defined in line
155; used 43 times
- in /usr/src/new/mh/miscellany/less/:option.c line
182,
197,
207,
217,
223,
234
- in /usr/src/new/mh/miscellany/less/ch.c line
103,
120,
310,
322
- in /usr/src/new/mh/miscellany/less/command.c line
268,
442,
449,
522
- in /usr/src/new/mh/miscellany/less/funcs.h line
40
- in /usr/src/new/mh/miscellany/less/help.c line
24,
54
- in /usr/src/new/mh/miscellany/less/main.c line
51,
63,
80,
108,
140,
153
- in /usr/src/new/mh/miscellany/less/option.c line
188,
203,
213,
223,
229,
240
- in /usr/src/new/mh/miscellany/less/prim.c line
281,
309,
321,
355,
403,
444,
474,
502,
518,
529,
547,
600,
640
- in /usr/src/new/mh/miscellany/less/screen.c line
342
flush
defined in line
109; used 11 times
putc
defined in line
128; used 25 times
- in line 52,
63-68(3),
74,
145
- in /usr/src/new/mh/miscellany/less/command.c line
69,
101-105(2),
156
- in /usr/src/new/mh/miscellany/less/funcs.h line
38
- in /usr/src/new/mh/miscellany/less/main.c line
168,
268
- in /usr/src/new/mh/miscellany/less/screen.c line
407,
418,
427,
437,
446,
455,
465,
474,
487-489(3),
498
puts
defined in line
140; used 41 times
Defined variables
ob
defined in line
104; used 5 times
obuf
defined in line
103; used 7 times