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