source: mainline/uspace/lib/c/generic/io/screenbuffer.c@ 7907cf9

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 7907cf9 was 96b02eb9, checked in by Martin Decky <martin@…>, 15 years ago

more unification of basic types

  • use sysarg_t and native_t (unsigned and signed variant) in both kernel and uspace
  • remove ipcarg_t in favour of sysarg_t

(no change in functionality)

  • Property mode set to 100644
File size: 4.6 KB
RevLine 
[3993b3d]1/*
[df4ed85]2 * Copyright (c) 2006 Josef Cejka
[3993b3d]3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
[ce5bcb4]29/** @addtogroup console
[1601f3c]30 * @{
[ce5bcb4]31 */
32/** @file
33 */
34
[424cd43]35#include <io/style.h>
[369a5f8]36#include <io/screenbuffer.h>
[3993b3d]37#include <malloc.h>
38#include <unistd.h>
39
[1601f3c]40/** Store one character to screenbuffer.
41 *
42 * Its position is determined by scr->position_x
43 * and scr->position_y.
44 *
45 * @param scr Screenbuffer
46 * @param c Stored character
[c738d65]47 *
[3993b3d]48 */
[7ce3cb2]49void screenbuffer_putchar(screenbuffer_t *scr, wchar_t ch)
[3993b3d]50{
[1601f3c]51 keyfield_t *field =
52 get_field_at(scr, scr->position_x, scr->position_y);
53
[7ce3cb2]54 field->character = ch;
[9805cde]55 field->attrs = scr->attrs;
[3993b3d]56}
57
[1601f3c]58/** Initilize screenbuffer.
59 *
60 * Allocate space for screen content in accordance to given size.
61 *
62 * @param scr Initialized screenbuffer
63 * @param size_x Width in characters
64 * @param size_y Height in characters
65 *
66 * @return Pointer to screenbuffer (same as scr parameter) or NULL
67 *
[a9bd960c]68 */
[96b02eb9]69screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, sysarg_t size_x,
70 sysarg_t size_y)
[3993b3d]71{
[c738d65]72 scr->buffer = (keyfield_t *) malloc(sizeof(keyfield_t) * size_x * size_y);
[1601f3c]73 if (!scr->buffer)
[3993b3d]74 return NULL;
75
76 scr->size_x = size_x;
77 scr->size_y = size_y;
[9805cde]78 scr->attrs.t = at_style;
79 scr->attrs.a.s.style = STYLE_NORMAL;
[a8b2b5b2]80 scr->is_cursor_visible = 1;
[10569b1]81
82 screenbuffer_clear(scr);
83
[3993b3d]84 return scr;
85}
86
[1601f3c]87/** Clear screenbuffer.
88 *
89 * @param scr Screenbuffer
90 *
[e87e18f]91 */
[3993b3d]92void screenbuffer_clear(screenbuffer_t *scr)
93{
[424cd43]94 size_t i;
[3993b3d]95
[10569b1]96 for (i = 0; i < (scr->size_x * scr->size_y); i++) {
[3993b3d]97 scr->buffer[i].character = ' ';
[9805cde]98 scr->buffer[i].attrs = scr->attrs;
[3993b3d]99 }
[1601f3c]100
[3993b3d]101 scr->top_line = 0;
102 scr->position_x = 0;
[424cd43]103 scr->position_y = 0;
[3993b3d]104}
105
[e87e18f]106/** Clear one buffer line.
[1601f3c]107 *
[3993b3d]108 * @param scr
109 * @param line One buffer line (not a screen line!)
[1601f3c]110 *
[3993b3d]111 */
[96b02eb9]112void screenbuffer_clear_line(screenbuffer_t *scr, sysarg_t line)
[3993b3d]113{
[96b02eb9]114 sysarg_t x;
[3993b3d]115
[424cd43]116 for (x = 0; x < scr->size_x; x++) {
117 scr->buffer[x + line * scr->size_x].character = ' ';
118 scr->buffer[x + line * scr->size_x].attrs = scr->attrs;
[3993b3d]119 }
120}
121
[e87e18f]122/** Copy content buffer from screenbuffer to given memory.
[1601f3c]123 *
124 * @param scr Source screenbuffer
125 * @param dest Destination
126 *
[e87e18f]127 */
[424cd43]128void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest)
[3993b3d]129{
[424cd43]130 size_t i;
[3993b3d]131
[424cd43]132 for (i = 0; i < (scr->size_x * scr->size_y); i++)
[3993b3d]133 dest[i] = scr->buffer[i];
134}
135
[e87e18f]136/** Set new cursor position in screenbuffer.
[1601f3c]137 *
[e87e18f]138 * @param scr
139 * @param x
140 * @param y
[1601f3c]141 *
[e87e18f]142 */
[96b02eb9]143void screenbuffer_goto(screenbuffer_t *scr, sysarg_t x, sysarg_t y)
[3993b3d]144{
145 scr->position_x = x % scr->size_x;
[a9bd960c]146 scr->position_y = y % scr->size_y;
147}
148
[e87e18f]149/** Set new style.
[1601f3c]150 *
[e87e18f]151 * @param scr
152 * @param fg_color
153 * @param bg_color
[1601f3c]154 *
[e87e18f]155 */
[424cd43]156void screenbuffer_set_style(screenbuffer_t *scr, uint8_t style)
[a9bd960c]157{
[9805cde]158 scr->attrs.t = at_style;
159 scr->attrs.a.s.style = style;
160}
161
162/** Set new color.
[1601f3c]163 *
[9805cde]164 * @param scr
165 * @param fg_color
166 * @param bg_color
[1601f3c]167 *
[9805cde]168 */
[9f1362d4]169void screenbuffer_set_color(screenbuffer_t *scr, uint8_t fg_color,
170 uint8_t bg_color, uint8_t flags)
[9805cde]171{
172 scr->attrs.t = at_idx;
173 scr->attrs.a.i.fg_color = fg_color;
174 scr->attrs.a.i.bg_color = bg_color;
175 scr->attrs.a.i.flags = flags;
176}
177
178/** Set new RGB color.
[1601f3c]179 *
[9805cde]180 * @param scr
181 * @param fg_color
182 * @param bg_color
[1601f3c]183 *
[9805cde]184 */
[9f1362d4]185void screenbuffer_set_rgb_color(screenbuffer_t *scr, uint32_t fg_color,
186 uint32_t bg_color)
[9805cde]187{
188 scr->attrs.t = at_rgb;
189 scr->attrs.a.r.fg_color = fg_color;
190 scr->attrs.a.r.bg_color = bg_color;
[3993b3d]191}
192
[ce5bcb4]193/** @}
194 */
Note: See TracBrowser for help on using the repository browser.