|
|
1.1 root 1: .\" Copyright (c) 1980 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted
5: .\" provided that the above copyright notice and this paragraph are
6: .\" duplicated in all such forms and that any documentation,
7: .\" advertising materials, and other materials related to such
8: .\" distribution and use acknowledge that the software was developed
9: .\" by the University of California, Berkeley. The name of the
10: .\" University may not be used to endorse or promote products derived
11: .\" from this software without specific prior written permission.
12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15: .\"
16: .\" @(#)intro.1 6.2 (Berkeley) 3/17/89
17: .\"
18: .bp
19: .sh 1 Overview
20: .pp
21: In making available the generalized terminal descriptions in \*(tc,
22: much information was made available to the programmer,
23: but little work was taken out of one's hands.
24: The purpose of this package is to allow the C programmer
25: to do the most common type of terminal dependent functions,
26: those of movement optimization and optimal screen updating,
27: without doing any of the dirty work,
28: and (hopefully) with nearly as much ease as is necessary to simply print
29: or read things.
30: .pp
31: The package is split into three parts:
32: (1) Screen updating;
33: (2) Screen updating with user input;
34: and
35: (3) Cursor motion optimization.
36: .pp
37: It is possible to use the motion optimization
38: without using either of the other two,
39: and screen updating and input can be done
40: without any programmer knowledge of the motion optimization,
41: or indeed the \*(et \*(db itself.
42: .sh 2 "Terminology (or, Words You Can Say to Sound Brilliant)"
43: .pp
44: In this document,
45: the following terminology is kept to with reasonable consistency:
46: .de Ip
47: .sp
48: .in 5n
49: .ti 0n
50: .bi "\\$1" :
51: ..
52: .Ip window
53: An internal representation
54: containing an image of what a section of the terminal screen may look like
55: at some point in time.
56: This subsection can either encompass the entire terminal screen,
57: or any smaller portion down to a single character within that screen.
58: .Ip "terminal"
59: Sometimes called
60: .bi terminal
61: .bi screen .
62: The package's idea of what the terminal's screen currently looks like,
63: .i i.e. ,
64: what the user sees now.
65: This is a special
66: .i screen :
67: .Ip screen
68: This is a subset of windows which are as large as the terminal screen,
69: .i i.e. ,
70: they start at the upper left hand corner
71: and encompass the lower right hand corner.
72: One of these,
73: .Vn stdscr ,
74: is automatically provided for the programmer.
75: .rm Ip
76: .sh 2 "Compiling Things"
77: .pp
78: In order to use the library,
79: it is necessary to have certain types and variables defined.
80: Therefore, the programmer must have a line:
81: .(l
82: .b "#include <curses.h>"
83: .)l
84: at the top of the program source.
85: The header file
86: .b <curses.h>
87: needs to include
88: .b <sgtty.h> ,
89: so the one should not do so oneself\**.
90: .(f
91: \**
92: The screen package also uses the Standard I/O library,
93: so
94: .b <curses.h>
95: includes
96: .b <stdio.h> .
97: It is redundant
98: (but harmless)
99: for the programmer to do it, too.
100: .)f
101: Also,
102: compilations should have the following form:
103: .(l
104: .ie t \fBcc\fR [ \fIflags\fR ] file ... \fB\-lcurses \-ltermcap\fR
105: .el \fIcc\fR [ flags ] file ... \fI\-lcurses \-ltermcap\fR
106: .)l
107: .sh 2 "Screen Updating"
108: .pp
109: In order to update the screen optimally,
110: it is necessary for the routines to know what the screen currently looks like
111: and what the programmer wants it to look like next.
112: For this purpose,
113: a data type
114: (structure)
115: named
116: .Vn WINDOW
117: is defined
118: which describes a window image to the routines,
119: including its starting position on the screen
120: (the \*y of the upper left hand corner)
121: and its size.
122: One of these
123: (called
124: .Vn curscr
125: for
126: .i "current screen" )
127: is a screen image of what the terminal currently looks like.
128: Another screen
129: (called
130: .Vn stdscr ,
131: for
132: .i "standard screen" )
133: is provided
134: by default
135: to make changes on.
136: .pp
137: A window is a purely internal representation.
138: It is used to build and store
139: a potential image of a portion of the terminal.
140: It doesn't bear any necessary relation
141: to what is really on the terminal screen.
142: It is more like an array of characters on which to make changes.
143: .pp
144: When one has a window which describes
145: what some part the terminal should look like,
146: the routine
147: .Fn refresh
148: (or
149: .Fn wrefresh
150: if the window is not
151: .Vn stdscr )
152: is called.
153: .Fn refresh
154: makes the terminal,
155: in the area covered by the window,
156: look like that window.
157: Note, therefore, that changing something on a window
158: .i does
159: .bi not
160: .i "change the terminal" .
161: Actual updates to the terminal screen
162: are made only by calling
163: .Fn refresh
164: or
165: .Fn wrefresh .
166: This allows the programmer to maintain several different ideas
167: of what a portion of the terminal screen should look like.
168: Also, changes can be made to windows in any order,
169: without regard to motion efficiency.
170: Then, at will,
171: the programmer can effectively say
172: .q "make it look like this" ,
173: and let the package worry about the best way to do this.
174: .sh 2 "Naming Conventions"
175: .pp
176: As hinted above,
177: the routines can use several windows,
178: but two are automatically given:
179: .Vn curscr ,
180: which knows what the terminal looks like,
181: and
182: .Vn stdscr ,
183: which is what the programmer wants the terminal to look like next.
184: The user should never really access
185: .Vn curscr
186: directly.
187: Changes should be made to
188: the appropriate screen,
189: and then the routine
190: .Fn refresh
191: (or
192: .Fn wrefresh )
193: should be called.
194: .pp
195: Many functions are set up to deal with
196: .Vn stdscr
197: as a default screen.
198: For example, to add a character to
199: .Vn stdscr ,
200: one calls
201: .Fn addch
202: with the desired character.
203: If a different window is to be used,
204: the routine
205: .Fn waddch
206: (for
207: .b w indow-specific
208: .Fn addch )
209: is provided\**.
210: .(f
211: \**
212: Actually,
213: .Fn addch
214: is really a
215: .q #define
216: macro with arguments,
217: as are most of the "functions" which deal with
218: .Vn stdscr
219: as a default.
220: .)f
221: This convention of prepending function names with a
222: .Bq w
223: when they are to be applied to specific windows
224: is consistent.
225: The only routines which do
226: .i not
227: do this are those
228: to which a window must always be specified.
229: .pp
230: In order to move the current \*y from one point to another,
231: the routines
232: .Fn move
233: and
234: .Fn wmove
235: are provided.
236: However,
237: it is often desirable to first move and then perform some I/O operation.
238: In order to avoid clumsyness,
239: most I/O routines can be preceded by the prefix
240: .Bq mv
241: and the desired \*y then can be added to the arguments to the function.
242: For example,
243: the calls
244: .(l
245: move(y\*,x);
246: addch(ch);
247: .)l
248: can be replaced by
249: .(l
250: mvaddch(y\*,x\*,ch);
251: .)l
252: and
253: .(l
254: wmove(win\*,y\*,x);
255: waddch(win\*,ch);
256: .)l
257: can be replaced by
258: .(l
259: mvwaddch(win\*,y\*,x\*,ch);
260: .)l
261: Note that the window description pointer
262: .Vn win ) (
263: comes before the added \*y.
264: If such pointers are need,
265: they are always the first parameters passed.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.