1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
|
\documentstyle[11pt,twoside,manpage]{report}
\begin{document}
\begin{manpage}{OIM Library}{Button}{Draft}
\subtitle{Name}
Button --- a graphical event object that can be turn-on turn-off
\subtitle{Declaration}
\#include \<button.h\>
\function{Button(Point origin, Point corner, const~char\* label,
int foreground_color = WHITE,
int background_color = BLACK,
int frame_style = IN_BORDER,
Boolean show_status = SHOW)}
Construct a button inside a rectangle area with lower left vertex at
"origin" and upper right vertex at "corner". A button is actually a
round-cornered box in shape, so the "origin" and "corner" are located
outside of the button area. The "label" is for button label. The
first highlighted character in the label text will be the hot key when
the mouse is disabled, otherwise highlighted text have no effects.
For example, label "@N@ext" designate "N" as the hot key for the button
if the mouse do not present; "@N@ext" and "Next" are the same when the
mouse is enabled. By default, if the mouse driver is loaded before
program execution, it is enabled. Other attributes are self-explanatory.
Foreground color is also used for label color.
\function{Button(int left, int bottom, int right, int top, const~char\* label,
int foreground_color = WHITE,
int background_color = BLACK,
int frame_style = IN_BORDER,
Boolean show_status = SHOW)}
Construct a button with "left", "bottom", "right" and "top" as its
boundaries. Button will be shown when created by default.
\subtitle{Description}
Button is similar to electronic touch buttons in operation. It can be
pressed on or pressed off depending on its current status. Usually,
we use normal color to indicate for button "off" position and highlight
color for button "on" position. Button is an effect way to implement
boolean variables that can toggled on a screen. When the mouse is
enabled, point the mouse cursor inside the button area to press the
button. When the mouse is disabled, a hot key have to be specified
and press that key to trigger a button press operation.
\subtitle{Public \\ Operations}
\function{Boolean pressed()}
Check if the button has been pressed, usually in a loop. If it is,
the switch action (highlight or redraw the button) is performed.
\function{Boolean isOn()}
Return TRUE if the button is at "on" (highlighted) position.
\function{Boolean isOff()}
Return TRUE if the button is at "off" (normal color) position.
\function{Boolean isHide()}
Return TRUE if at least one hide operation is outstanding.
\function{void turnOn()}
Highlight the button figure and set the button status to "on".
\function{void turnOff()}
Redraw the button figure using the normal color and set the button
status to "off".
\function{void show()}
Set the hide status to false and draw the button figure in normal
or highlight color depending on current button status.
\function{void hide()}
Set the hide status to true and erase the button figure by drawing
a box that covers the button, the color is taken from a pixel just
outside of the button and fill-pattern is SOLID_FILL.
\subtitle{Virtual \\ Operations}
\function{Boolean isSelected(Point p)}
This function is used in the event handler. Return TRUE if the hot key
is press when mouse is not enabled, when mouse is enabled check if the
mouse cursor is pressed and it is inside the button figure.
\function{int status()}
Returns 0 if the button is off and 1 if the button is on.
This function is called in the event handler if there is a event
function bonded to the button (see Event for more details). The
value of the function is passed to the event function as default
argument value.
\function{int select()}
The same as saying turnOn() when the button is off or turnOff() when
the button is on. This function is hardly needed. It is here simply
because the Event class has it defined and the Button class is a
subclass of Event.
\function{void bind(void \hbox{\rm (\*{\it handler})(int)})}
Associate a function (often referred as the button handler) with the
button. After the function "handler" is bonded to the button, it is
invoked automatically every time the button is pressed by the event
handler. The argument value to the function is passed as the status
of the button. The default action taken by the event handler can be
modified by changing the next function action().
\function{void action(int status)}
The default action function called through the event handler. It defines
the behavior of the button module when a function is bonded to the button.
Not to modify this function unless it is absolutely necessary because it
redefines the semantics of all button objects.
\subtitle{See Also}
Event, Choice, RoundBox
\subtitle{Author}
Rong Chen at the Office for Information Management, UIUC. 9-1-89.
\end{manpage}
\newpage
\begin{verbatim}
/* EXAMPLE 1 */
#include <time.h>
#include "key.h"
#include "button.h"
main() {
Key key;
Point a1(100, 100), a2(240, 130);
Button a(a1, a2, "@F@irst Button", WHITE, RED);
Button b(400, 100, 540, 120, "@S@econd Button", WHITE, BLUE);
Point c1(250, 200), c2(400, 300);
Button c(c1, c2, "@T@hird Button\nhas\nThree Lines", WHITE, GREEN);
while (1) {
if (a.pressed()) { /* sleep(1); a.turnOff(); */ }
if (b.pressed()) { sleep(1); b.turnOff(); }
if (c.pressed()) { break; }
}
a.hide(); b.hide(); key.waitFor(CR);
}
/* EXAMPLE 2 */
#include <stdlib.h>
#include "button.h"
#include "box.h"
void funcA(int) {
Box infoBox(0, 0, MAX_X, 40, RED, CYAN);
infoBox << "A button is pressed";
}
void funcB(int) {
Box infoBox(0, 0, MAX_X, 40, BLUE, CYAN);
infoBox << "B button is pressed";
}
void funcC(int) { exit(0); }
main() {
Button a(100, 100, 240, 130, "Button @A@", WHITE, RED);
Button b(400, 100, 540, 120, "Button @B@", WHITE, BLUE);
Button c(250, 200, 400, 300, "@E@xit", WHITE, GREEN);
a.bind(funcA); b.bind(funcB); c.bind(funcC);
Event::waitForEvents();
}
\end{verbatim}
\end{document}
Path: jarthur!usc!julius.cs.uiuc.edu!ux1.cso.uiuc.edu!ux1.cso.uiuc.edu!m.cs.uiuc.edu!rchen
From: rchen@m.cs.uiuc.edu
Newsgroups: comp.text.tex
Subject: latest manpage.sty for C++ library
Message-ID: <69100010@m.cs.uiuc.edu>
Date: 15 Sep 90 20:53:00 GMT
Lines: 510
Nf-ID: #N:m.cs.uiuc.edu:69100010:000:19265
Nf-From: m.cs.uiuc.edu!rchen Sep 15 15:53:00 1990
% MANPAGE DOCUMENT STYLE -- Created 25 May 1990, Updated 15 September 1990
% manpage.sty
% Rong Chen (rchen@cs.uiuc.edu)
% Department of Computer Science
% University of Illinois at Urbana-Champaign
% Urbana, IL 61801
% Copyright (c) 1990 by Rong Chen
% Permission to copy all or part of this work is granted, provided
% that the copies are not made or distributed for resale, and that
% the copyright notice and this notice are retained.
%
% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
% FOR ANY PARTICULAR PURPOSE.
% This style option is designed to work with the report document style
% of LaTeX version 2.09. Use \documentstyle[11pt,manpage]{report}
%
% The commands that are created in the style file are:
%
% \begin{manpage}{Title}{Module}{Version} % see an example, all will be clear
% \end{manpage} % end of manpage environment
% \function{#1} (e.g., \function{void demo(int dummy)}) % with \medskip added
% \function*{#1} (e.g., \function*{void demo(int dummy)})% no extra spacing
% \subtitle{#1} (e.g., \subtitle{ANTHOR}) % fit in the same line if possible
% \subtitle*{#1} (e.g., \subtitle*{AUTHOR})% always break a newline
% "#1" (e.g., "dummy_variable") % argument is in italic&unbreakable
% \separator % draw a thin line to seperate suntitle from the text
% \header{#1}{#2}{#3} % in case you want to have a header and
% \footer{#1}{#2}{#3} % a footer outside of the manpage environment
% \dq % print double quote character (")
%
% In the \function macro, data types and their dummy arguments are separated
% by a space. So if you have a function like "int f(const int n)", you should
% document it as \function{int f(const~int n)}. The argument n is optional.
% In the \subtitle macro, two lines of text may be devided by "\\".
%
% The following characters (control-sequents) are defined (or redefined) as:
%
% \* --- the same as $\ast$
% \< --- the same as $\langle$
% \> --- the same as $\rangle$
% < --- the same as $<$
% > --- the same as $>$
% _ --- the same as \_
% + --- the same as $+$
% | --- the same as $\mid$
% ^ --- hat character that is defined as $\wedge$ being raised 0.6ex
% " --- the same as {\tt "} when outside of the manpage environment,
% otherwise use \dq instead
% If you make any improvements, I'd like to hear about them.
\headheight 24pt % See LaTeX book for definitions
\headsep 12pt
\textwidth 6.25in
\textheight 8.0in
\topmargin 0in
\marginparwidth 0pt
\oddsidemargin 0pt
\evensidemargin 0pt
\marginparsep 0pt
\parindent 0pt
\newdimen\argindent \argindent 3em % indentation for function arguments
\parskip 10pt plus 1pt
\newcommand{\header}[3]{\gdef\@header{{#1}{#2}{#3}}}
\newcommand{\footer}[3]{\gdef\@footer{{#1}{#2}{#3}}}
\catcode`\"=\active
\def\arg@quote#1"{\hbox{\it #1\/}}
\def\tt@quote{\hbox{\tt \char`\" \relax}}
\let"=\tt@quote
\let\dq=\tt@quote
\def\separator{\rule{\linewidth}{0.5pt}}
\def\function{\@ifstar{\@func@star}{\@func@norm}}
\def\@func@star#1{\expandafter\@function#1 \\ }
\def\@func@norm#1{\expandafter\@function#1 \medskip\\ }
\newdimen\arg@dim % temp variables that you don't want to know
\newdimen\line@siz
\newbox\arg@box
\def\@function#1(#2)#3 {
\begingroup
\setbox\arg@box=\hbox{\bf #1 \rm \((\)} \global\arg@dim\wd\arg@box
\setbox\arg@box=\hbox{\rm \()\);}
\global\line@siz\linewidth\global\advance\line@siz-\wd\arg@box
\pagebreak[3]
\expandafter\print@name#1 \@@{\rm \((\)}\def\@comma{}\ignorespaces
\@for\@tempa:=#2\do{\ignorespaces
\setbox\arg@box=\hbox{\@comma} \global\advance\arg@dim\wd\arg@box
\unskip\@comma\def\@comma{\nobreak,\penalty-\@m\ }\ignorespaces
\expandafter\print@arg\@tempa\@@\relax\ignorespaces
}~{\rm \()\)\nobreak#3}
\endgroup
}
\def\print@name#1#2 #3\@@{
\unskip\edef\tmp@name{#3}\ignorespaces
\ifx\tmp@name\@empty{\bf #1#2 }\else{\rm #1#2 \bf #3}\fi
}
\def\print@arg#1\@@{\expandafter\print@type#1 \@@}
\def\print@type#1#2 #3\@@{
\setbox\arg@box=\hbox{{\rm #1#2}\ifx #3\@nil\else\ignorespaces
\expandafter\print@dummy#3=\@@\fi\unskip\/}
\global\advance\arg@dim\wd\arg@box
\ifdim\arg@dim>\line@siz
\global\arg@dim\argindent \global\advance\arg@dim\wd\arg@box
\hfill\penalty-\@m\hbox{}\kern\argindent\fi
\box\arg@box%
}
\def\print@dummy#1=#2\@@{
\edef\tmp@name{#1}\def\a@space{ }\ifx\tmp@name\a@space\else
{\it\ #1\/}\ifx #2\@nil\else{\rm \(=\)}\expandafter\strip@eq#2\fi
\fi
}
\def\strip@eq#1={{\rm #1}}
\def\subtitle{\@ifstar{\@subtit@star}{\@subtit@norm}}
\def\@subtit@star#1{
\item[\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}\hfill]
\hfil\par
\expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
}
\def\@subtit@norm#1{
\setbox\arg@box=\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}
\ifdim \wd\arg@box > \labelwidth \item[\copy\arg@box\hfill]\hfil\par
\else \dp\arg@box=0pt \item[\copy\arg@box\hfill] \fi
\expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
}
\newenvironment{manpage}[3]{\@beginManpage#1\@@#2\@@#3\@@}{\@endManpage}
\def\@beginManpage#1\@@#2\@@#3\@@{
\pagestyle{headings}
\addcontentsline{toc}{section}{#2}
\clearpage
\gdef\@header{{#2}{#1}{#2}}
\gdef\@footer{{#3}{\thepage}{\today}}
\begin{list}{}{
\setlength\labelwidth{1.2in}
\setlength\leftmargin{\labelwidth}
\addtolength\leftmargin{\labelsep}
\topsep 5pt plus 2pt minus 2pt
\itemsep 5pt plus 2pt minus 2pt
\parsep 10pt plus 2pt minus 2pt
}
\raggedbottom
\let"=\arg@quote
}
\def\@endManpage{
\end{list} \clearpage \flushbottom
\let"=\tt@quote
}
\def\@first#1#2#3{#1}
\def\@second#1#2#3{#2}
\def\@third#1#2#3{#3}
\def\ps@headings{
\def\@oddhead{\parbox{\textwidth}{
{\rm\ \ \expandafter\@first\@header\hfill
\expandafter\@second\@header\hfill
\expandafter\@third\@header\ \ } \\[.1cm]
\hbox{}\rule[12pt]{\textwidth}{1pt}
}}
\def\@evenhead{\parbox{\textwidth}{
{\rm\ \ \expandafter\@third\@header\hfill
\expandafter\@second\@header\hfill
\expandafter\@first\@header\ \ } \\[.1cm]
\hbox{}\rule[12pt]{\textwidth}{1pt}
}}
\def\@oddfoot{\parbox{\textwidth}{
\hbox{}\rule{\textwidth}{1pt} \\[.1cm]
{\sl\ \ \expandafter\@first\@footer\hfill
\rm\expandafter\@second\@footer\hfill
\sl\expandafter\@third\@footer\ }
}}
\def\@evenfoot{\parbox{\textwidth}{
\hbox{}\rule{\textwidth}{1pt} \\[.1cm]
{\sl\ \ \expandafter\@third\@footer\hfill
\rm\expandafter\@second\@footer\hfill
\sl\expandafter\@first\@footer\ }
}}
}
\gdef\@header{{}{}{}}
\gdef\@footer{{}{}{}}
\def\tableofcontents{\@restonecolfalse
\newskip\@savskip \@savskip=\parskip
\parskip 0pt plus 1pt
\clearpage \thispagestyle{plain} \global\@topnum\z@ \@afterindentfalse
\@makeschapterhead{{Contents\@mkboth{CONTENTS}{CONTENTS}}}
\@afterheading \@starttoc{toc}
\parskip=\@savskip
}
\def\@makechapterhead#1{
\vspace*{50pt}
{ \raggedleft
\Large\bf Chapter \thechapter \par \vskip 15pt
\huge\bf #1\par
\nobreak \vskip 30pt
}
}
\def\@makeschapterhead#1{
\vspace*{50pt}
{ \raggedleft
\huge\bf #1\par
\nobreak \vskip 30pt
}
}
\def\@schapter#1{
\addcontentsline{toc}{chapter}{#1}
\@makeschapterhead{#1}
\@afterheading
}
\catcode`\<=\active \def\mit@less{\hbox{\(\char`\<\)}} \let<=\mit@less
\catcode`\>=\active \def\mit@more{\hbox{\(\char`\>\)}} \let>=\mit@more
\def\<{\hbox{\(\langle\)}} \def\>{\hbox{\(\rangle\)}} \def\*{\hbox{\(\ast\)}}
%\catcode`\_=\active \def_={\hbox{\kern.06em \vbox{\hrule width.3em}}}
\catcode`\_=\active \global\let_=\_
\catcode`\^=\active \def\mit@wedge{\hbox{\raise.06ex \hbox{\small \(\wedge\)}}}
\let^=\mit@wedge
\catcode`\+=\active \def\mit@add{\hbox{\(\char43\)}} \let+=\mit@add
\catcode`\|=\active \def\mit@mid{\hbox{\(\mid\)}} \let|=\mit@mid
|