screenbuffer.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2006 Josef Cejka
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * - Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * - The name of the author may not be used to endorse or promote products
00015  *   derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  */
00028 
00035 #ifndef __SCREENBUFFER_H__
00036 #define __SCREENBUFFER_H__
00037 
00038 
00039 #define DEFAULT_FOREGROUND 0x0  
00040 #define DEFAULT_BACKGROUND 0xf0f0f0     
00042 typedef struct {
00043         unsigned int bg_color;          
00044         unsigned int fg_color;          
00045 } style_t;
00046 
00048 typedef struct {
00049         char character;                 
00050         style_t style;                  
00051 } keyfield_t;
00052 
00055 typedef struct {
00056         keyfield_t *buffer;                     
00057         unsigned int size_x, size_y;            
00058         unsigned int position_x, position_y;    
00059         style_t style;                          
00060         unsigned int top_line;                  
00061         unsigned char is_cursor_visible;        
00062 } screenbuffer_t;
00063 
00070 static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) 
00071 {
00072         return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x;
00073 }
00074 
00080 static inline int style_same(style_t s1, style_t s2)
00081 {
00082         return s1.fg_color == s2.fg_color && s1.bg_color == s2.bg_color;
00083 }
00084 
00085 
00086 void screenbuffer_putchar(screenbuffer_t *scr, char c);
00087 screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y);
00088 
00089 void screenbuffer_clear(screenbuffer_t *scr);
00090 void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line);
00091 void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest);
00092 void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y);
00093 void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color);
00094 
00095 #endif
00096 
00097  

Generated on Sun Jun 18 18:00:18 2006 for HelenOS Userspace (ia64) by  doxygen 1.4.6