00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
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