Subversion Repositories shark

Rev

Rev 1676 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1676 tullio 1
%----------------------------------------------------------------------------
2
\chapter{The Console Library}
3
%----------------------------------------------------------------------------
4
 
5
The output on the screen in text mode is supported by a group of functions that
6
act on the whole screen and modify, each time, the cursor's position. Since such
7
functions are not reentrant, they must be used in mutual exclusion.
8
 
9
In order to use the library for displaying on the screen, the
10
``\texttt{cons.h}'' file must be included. This file contains the values for
11
the usable colors whose symbolic names are listed below: \texttt{BLACK, BLUE,
12
GREEN, CYAN, RED, MAGENTA, BROWN, GRAY, LIGHTGRAY, LIGHTBLUE, LIGHTGREEN,
13
LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE}.
14
 
15
Two global read-only variables \texttt{cons\_columns} and \texttt{cons\_rows}
16
contain the number of screen columns and the number of screen rows,
17
respectively. They can be used to write applications that are indipendent from
18
the screen dimensions.
19
 
20
\vspace{7mm}
21
 
22
\begin{intest}
23
CPUTC, CPUTS, CPRINTF \index{cputc()}\index{cputs()}\index{cprintf()}
24
\end{intest}
25
 
26
\begin{description}
27
\item [\textbf{void cputc(char c); }]
28
\item [\textbf{void cputs(char {*}s); }]
29
\item [\textbf{int cprintf(char {*}fmt,... ); }]
30
\item [\textbf{Description:}] \texttt{cputc}, \texttt{cupts} and \texttt{cprintf} are used
31
to print on the screen a character, a string, or a formatted string,
32
respectively. In the latter case, the standard C I/O formatting conventions are
33
used.
34
\item [\textbf{Warning:}]since these functions modify the cursor position, they are not
35
reentrant, and must be used in a mutually exclusive fashion.
36
\end{description}
37
 
38
\begin{intest}
39
PUTC\_XY, PUTS\_XY, PRINTF\_XY, GETC\_XY \index{putc\_xy()} \index{puts\_xy()}
40
\index{printf\_xy()} \index{getc\_xy()}
41
\end{intest}
42
 
43
\begin{description}
44
\item [\textbf{void putc\_xy(int x,int y,char attr,char c) }]
45
\item [\textbf{void puts\_xy(int x,int y,char attr,char {*}s) }]
46
\item [\textbf{int printf\_xy(int x,int y,char attr,char {*}fmt,...) }]
47
\item [\textbf{char getc\_xy(int x,int y,char {*}attr,char {*}c) }]
48
\item [\textbf{Description:}] These functions are similar to the previously defined ones;
49
the only difference is that since they're reentrant can be used concurrently by
50
multiple tasks (the others cannot be used for this purpose because they modify
51
the cursor's state). \texttt{getc\_xy} is used to read the charcater and its
52
attribute at a specific position on the screen.
53
\end{description}
54
 
55
\begin{intest}
56
CLEAR, \_CLEAR, SCROLL, \_SCROLL \index{clear()} \index{\_clear()}
57
\index{\_scroll()}
58
\end{intest}
59
 
60
\begin{description}
61
\item [\textbf{void \_clear(char c,char attr,int x1,int y1,int x2,int y2) }]
62
\item [\textbf{void clear(void) }]
63
\item [\textbf{void \_scroll(char attr,int x1,int y1,int x2,int y2) }]
64
\item [\textbf{void scroll(void) }]
65
\item [\textbf{Description:}] the \texttt{clear} and \texttt{scroll} functions are used
66
for clearing the screen and for scrolling it upwards. They are based on the
67
\texttt{\_clear()} and \texttt{\_scroll()} functions used for clearing or
68
scrolling a window (defined by \texttt{x1, y1, x2, y2}) by filling the area with
69
\texttt{attr} color and, in the case of \texttt{\_clear}, with character
70
\texttt{c} as well.
71
\end{description}
72
 
73
\begin{intest}
74
SET\_ACTIVE\_PAGE, SET\_VISUAL\_PAGE,\\
75
GET\_ACTIVE\_PAGE, GET\_VISUAL\_PAGE
76
\index{set\_active\_page()} \index{set\_visual\_page()}
77
\index{get\_active\_page()} \index{get\_visual\_page()}
78
\end{intest}
79
 
80
\begin{description}
81
\item [\textbf{void set\_active\_page(int page) }]
82
\item [\textbf{void set\_visual\_page(int page) }]
83
\item [\textbf{int get\_active\_page(void) }]
84
\item [\textbf{int get\_visual\_page(void) }]
85
\item [\textbf{Description:}] The video cards working in text mode use the CGA hardware
86
scheme. In this scheme, every screen occupies 4000 bytes (80 columns x 25 rows;
87
each position is associated with two bytes, one for codifying the character and
88
another for codifying the color). The video card memory is in general bigger,
89
therefore multiple screen pages can be used simultaneously. The currently
90
visualized screen is called the \texttt{visual page}, whereas the screen the
91
output is directed to is called the \texttt{active page}. The cited functions
92
are essentially used for handling, at a given instant, the visual page or the
93
active page. SUGGESTION: if the active page or the visual page are modified,
94
they should be restored to the original (0) value on exit; the same is true for
95
the cursor.
96
\end{description}
97
 
98
\begin{intest}
99
PLACE, CURSOR, CURSOR\_INFO
100
\index{place()} \index{cursor()} \index{cursor\_info()}
101
\end{intest}
102
 
103
\begin{description}
104
\item [\textbf{void place(int x, int y) }]
105
\item [\textbf{void cursor(int start\_scanline, int end\_scanline) }]
106
\item [\textbf{void cursor\_info(int {*}x, int {*}y) }]
107
\item [\textbf{Description:}] These functions are used for handling the cursor. More
108
specifically, \texttt{place} sets the cursor position (\texttt{x} belongs to the
109
range 0\ldots{}79, \texttt{y} to 0\ldots{}24).
110
\end{description}
111
 
112
\begin{intest}
113
CURSOR\_BLOB, CURSOR\_STD, CURSOR\_OFF
114
\index{cursor\_blob()} \index{cursor\_std()} \index{cursor\_off()}
115
\end{intest}
116
 
117
\begin{description}
118
\item [\textbf{void cursor\_blob(void) }]
119
\item [\textbf{void cursor\_std(void) }]
120
\item [\textbf{void cursor\_off(void) }]
121
\item [\textbf{Description:}] These macros call the \texttt{cursor()} function to set the
122
cursor shape to be a big rectangle, the standard underscore, or invisible.
123
\end{description}