Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/enterminus/src/bin Modified Files: main.c pty.c smart.c term.h ui.c Log Message: some cleanups and comments =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/main.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- main.c 8 Feb 2005 11:45:58 -0000 1.4 +++ main.c 11 Feb 2005 13:07:55 -0000 1.5 @@ -3,7 +3,7 @@ int main(int argc, char **argv) { Ecore_Evas *ee; /* ecore_evas */ - Evas *evas; /* evas */ + Evas *evas; /* evas */ Evas_Object *term; /* terminal */ ee = ecore_evas_software_x11_new(0, 0, 0, 0, 0, 0); @@ -11,8 +11,7 @@ evas = ecore_evas_get(ee); term = term_new(evas); - evas_object_show(term); - //evas_object_resize(term, 640, 480); + evas_object_show(term); enterm_init(ee, term); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/pty.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- pty.c 8 Feb 2005 11:45:58 -0000 1.3 +++ pty.c 11 Feb 2005 13:07:56 -0000 1.4 @@ -1,5 +1,14 @@ #include "term.h" +struct winsize *get_font_dim(Term *term) +{ + static struct winsize w; + w.ws_row = term->tcanvas->rows; + w.ws_col = term->tcanvas->cols; + w.ws_xpixel = w.ws_ypixel = 0; + return &w; +} + int get_pty(Term *term) { /* do we need this here? */ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/smart.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- smart.c 8 Feb 2005 11:45:58 -0000 1.1 +++ smart.c 11 Feb 2005 13:07:56 -0000 1.2 @@ -2,24 +2,16 @@ /* Evas Smart Object API Wrapping methods */ -/* move this elsewhere */ -struct winsize *get_font_dim(Term *term) -{ - static struct winsize w; - w.ws_row = term->tcanvas->rows; - w.ws_col = term->tcanvas->cols; - w.ws_xpixel = w.ws_ypixel = 0; - return &w; -} - static Evas_Smart *smart; +/* instantiate a new terminal */ Evas_Object *term_new(Evas *evas) { Evas_Object *term; term = evas_object_smart_add(evas, term_smart_get()); return term; } +/* knit smart object with its functions */ Evas_Smart *term_smart_get() { if(smart) return smart; smart = evas_smart_new ("term", @@ -42,6 +34,7 @@ return smart; } +/* add the term object */ void term_smart_add(Evas_Object *o) { Term *data; @@ -50,6 +43,7 @@ evas_object_smart_data_set(o, data); } +/* delete the term object */ void term_smart_del(Evas_Object *o) { } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- term.h 8 Feb 2005 11:45:58 -0000 1.3 +++ term.h 11 Feb 2005 13:07:56 -0000 1.4 @@ -22,6 +22,13 @@ #define NPAR 16 #define DATADIR PACKAGE_DATA_DIR"/" +#ifdef DEBUG +#define DPRINT(stuff) fprintf stuff; +#else +#define DPRINT(stuff) +#endif + + enum Term_Key_Modifiers { TERM_KEY_MODIFIER_SHIFT = 0x1, @@ -112,65 +119,66 @@ typedef struct _Term Term; -Term *term_init(Evas_Object *o); -Term_TCanvas *term_tcanvas_new(); -int term_tcanvas_data(void *data); -void term_tcanvas_glyph_push(Term *term, char c); -void term_tcanvas_fg_color_set(Term *term, int c); -void term_tcanvas_bg_color_set(Term *term, int c); -int term_font_get_width(Term *term); -int term_font_get_height(Term *term); - -void term_handler_xterm_seq(int op, Term *term); -int term_handler_escape_seq(Term *term); - -void term_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); -void term_cb_resize(Ecore_Evas *ee); - -static void strupper(char *str); -int term_timers(void *data); - -int get_pty(Term *term); -int get_tty(Term *term); -void sigchld_handler(int a); -struct passwd *find_user(void); -int execute_command(Term *term);//, int argc, const char **argv); - -void term_window_init(Ecore_Evas *ee, Evas *evas); -void term_term_bg_set(Term *term, char *img); -void term_redraw(void *data); - -int term_cursor_move_up(Term *term, int n); -int term_cursor_move_down(Term *term, int n); -int term_cursor_move_left(Term *term, int n); -int term_cursor_move_right(Term *term, int n); -int term_cursor_move_col(Term *term, int n); -int term_cursor_move_row(Term *term, int n); -void term_cursor_goto(Term *term, int x, int y); -void term_cursor_rego(Term *term); -void term_delete_rows(Term *term, int start, int n); -void term_add_rows(Term *term, int pos, int n); -void term_tcanvas_save(Term *term); -void term_tcanvas_restore(Term *term); -void term_clear_area(Term *term, int x1, int y1, int x2, int y2); -void term_scroll_up(Term *term, int rows); -void term_scroll_down(Term *term, int rows); +Term *term_init(Evas_Object *o); +Term_TCanvas *term_tcanvas_new(); +int term_tcanvas_data(void *data); +void term_tcanvas_glyph_push(Term *term, char c); +void term_tcanvas_fg_color_set(Term *term, int c); +void term_tcanvas_bg_color_set(Term *term, int c); +int term_font_get_width(Term *term); +int term_font_get_height(Term *term); + +void term_handler_xterm_seq(int op, Term *term); +int term_handler_escape_seq(Term *term); + +void term_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +void term_cb_resize(Ecore_Evas *ee); + +static void strupper(char *str); +int term_timers(void *data); + +struct winsize *get_font_dim(Term *term); +int get_pty(Term *term); +int get_tty(Term *term); +void sigchld_handler(int a); +struct passwd *find_user(void); +int execute_command(Term *term);//, int argc, const char **argv); + +void term_window_init(Ecore_Evas *ee, Evas *evas); +void term_term_bg_set(Term *term, char *img); +void term_redraw(void *data); + +int term_cursor_move_up(Term *term, int n); +int term_cursor_move_down(Term *term, int n); +int term_cursor_move_left(Term *term, int n); +int term_cursor_move_right(Term *term, int n); +int term_cursor_move_col(Term *term, int n); +int term_cursor_move_row(Term *term, int n); +void term_cursor_goto(Term *term, int x, int y); +void term_cursor_rego(Term *term); +void term_delete_rows(Term *term, int start, int n); +void term_add_rows(Term *term, int pos, int n); +void term_tcanvas_save(Term *term); +void term_tcanvas_restore(Term *term); +void term_clear_area(Term *term, int x1, int y1, int x2, int y2); +void term_scroll_up(Term *term, int rows); +void term_scroll_down(Term *term, int rows); -void term_smart_add(Evas_Object *o); -void term_smart_del(Evas_Object *o); -void term_smart_layer_set(Evas_Object *o, int l); -void term_smart_raise(Evas_Object *o); -void term_smart_lower(Evas_Object *o); -void term_smart_stack_above(Evas_Object *o, Evas_Object *above); -void term_smart_stack_below(Evas_Object *o, Evas_Object *below); -void term_smart_move(Evas_Object *o, Evas_Coord x, Evas_Coord y); -void term_smart_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h); -void term_smart_show(Evas_Object *o); -void term_smart_hide(Evas_Object *o); -void term_smart_color_set(Evas_Object *o, int r, int g, int b, int a); -void term_smart_clip_set(Evas_Object *o, Evas_Object *clip); -void term_smart_clip_unset(Evas_Object *o); -Evas_Smart *term_smart_get(); +void term_smart_add(Evas_Object *o); +void term_smart_del(Evas_Object *o); +void term_smart_layer_set(Evas_Object *o, int l); +void term_smart_raise(Evas_Object *o); +void term_smart_lower(Evas_Object *o); +void term_smart_stack_above(Evas_Object *o, Evas_Object *above); +void term_smart_stack_below(Evas_Object *o, Evas_Object *below); +void term_smart_move(Evas_Object *o, Evas_Coord x, Evas_Coord y); +void term_smart_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h); +void term_smart_show(Evas_Object *o); +void term_smart_hide(Evas_Object *o); +void term_smart_color_set(Evas_Object *o, int r, int g, int b, int a); +void term_smart_clip_set(Evas_Object *o, Evas_Object *clip); +void term_smart_clip_unset(Evas_Object *o); +Evas_Smart *term_smart_get(); -void enterm_init(Ecore_Evas *ee, Evas_Object *term); -void enterm_cb_resize(Ecore_Evas *ee); +void enterm_init(Ecore_Evas *ee, Evas_Object *term); +void enterm_cb_resize(Ecore_Evas *ee); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ui.c 8 Feb 2005 11:45:58 -0000 1.10 +++ ui.c 11 Feb 2005 13:07:56 -0000 1.11 @@ -11,6 +11,11 @@ #define COLOR7 250, 250, 250 #define COLOR8 231, 105, 50 +/* set the bg */ +/* TODO: This should now be here, what we need to have is a rectangle + * that will simply capture keys. This should be set by the application + * that uses the smart object + */ void term_term_bg_set(Term *term, char *img) { if(!term->bg) { @@ -37,32 +42,42 @@ Evas_Object *ob; Term_EGlyph *gl; Term_TGlyph *tgl; - - i2 = term->tcanvas->scroll_region_start; + i2 = term->tcanvas->scroll_region_start; + + /* loop over all rows, see what has changed */ + /* the general idea is to only inspect as many rows from the tcanvas + * as we have in the term->grid. We loop that man times, which is + * term->tcanvas->rows times, and look for changed flags in each row. + * Since i (0 -> rows) cant be used to subscript the current rows, we + * start it from scroll_region_start. + */ for(i = 0; i < term->tcanvas->rows; i++) { if(term->tcanvas->changed_rows[i2] != 1) { + /* unchanged row, increment i2 and continue */ i2++; continue; } - /* printf("Rendering c-row %d g-row %d\n",i2,i); */ + + /* fetch the text glyph */ for(j = 0; j < term->tcanvas->cols; j++) { - tgl = &term->tcanvas->grid[j + - (term->tcanvas->cols * - (i2) - )]; + tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * i2)]; if(tgl->changed != 1) { + /* unchanged glyph, continue */ continue; } + /* unsure as to why this is here, I dont think we need it */ if(tgl->c == '\033') { printf("Got escape in term_redraw()!\n"); continue; } + /* check if start pointer has gone past virtual scroll buffer */ + /* when we overflow, we store row numbers in ig */ if(i + term->tcanvas->scroll_region_start <= (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { gl = &term->grid[j + (term->tcanvas->cols * i)]; } else { - printf("Overflowing: [cur_row=%d] [start: %d, end: %d] [ig=%d]\n",term->tcanvas->cur_row,term->tcanvas->scroll_region_start,term->tcanvas->scroll_region_end,ig); + DPRINT((stderr,"Overflowing: [cur_row=%d] [start: %d, end: %d] [ig=%d]\n",term->tcanvas->cur_row,term->tcanvas->scroll_region_start,term->tcanvas->scroll_region_end,ig)); gl = &term->grid[j + (term->tcanvas->cols * ig)]; } @@ -196,13 +211,14 @@ } /* Save the current screen */ -void term_tcanvas_save(Term *term) { +void term_tcanvas_save(Term *term) { } /* Restore the last saved screen */ void term_tcanvas_restore(Term *term) { } +/* clear a certain part of the screen */ void term_clear_area(Term *term, int x1, int y1, int x2, int y2) { int i, j; Term_TGlyph *tgl; @@ -225,76 +241,81 @@ } } +/* scroll window / region upwards */ void term_scroll_up(Term *term, int rows) { int i, i2, j; int x,y; Term_TGlyph *gl; + + if(term->tcanvas->scroll_in_region) { + /* TODO: implement this */ + DPRINT((stderr,"Scrolling: in region\n")); + } else { + DPRINT((stderr,"Scrolling: window\n")); + /* Going past the virtual scroll buffer, we need to wrap */ + if(term->tcanvas->scroll_region_end + rows > + (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { + DPRINT((stderr,"End gone past max scroll buffer, wrapping\n")); + term->tcanvas->scroll_region_end = rows - (((term->tcanvas->rows-1) * + term->tcanvas->scroll_size) - term->tcanvas->scroll_region_end); + /* we're going back to the top, clear the rows we want to overwrite */ + for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { + term->tcanvas->changed_rows[i] = 1; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; + gl->c = ' '; + gl->changed = 1; + } + } + } else { + /* normal scrolling */ + term->tcanvas->scroll_region_end+=rows; + } - if(term->tcanvas->scroll_region_end + rows > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - printf("End gone past max scroll buffer, wrapping\n"); - term->tcanvas->scroll_region_end = rows - (((term->tcanvas->rows-1) * - term->tcanvas->scroll_size) - term->tcanvas->scroll_region_end); - /* we're going back to the top, clear the rows we want to overwrite */ - for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { - term->tcanvas->changed_rows[i] = 1; - for(j = 0; j <= term->tcanvas->cols; j++) { - gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; - gl->c = ' '; - gl->changed = 1; + /* Start pointer going past virtual scroll buffer */ + if(term->tcanvas->scroll_region_start + rows > + (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { + DPRINT((stderr,"Start gone past scroll area max, going back to start\n")); + term->tcanvas->scroll_region_start = rows - (((term->tcanvas->rows-1) * + term->tcanvas->scroll_size) - term->tcanvas->scroll_region_start); + } else { + /* normal scrolling */ + term->tcanvas->scroll_region_start+= rows; + } + + /* set changed flags on chars */ + /* if start and end are havent gone past virtual scroll buffer */ + if(term->tcanvas->scroll_region_start < term->tcanvas->scroll_region_end) + i2 = term->tcanvas->scroll_region_end; + else { + /* we now have two areas to modify: + * the first being at the end of the virtual scroll buffer + * the second being at the start + */ + for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { + term->tcanvas->changed_rows[i] = 1; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; + gl->changed = 1; + } } + i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; } - } else { - term->tcanvas->scroll_region_end+=rows; - } - - if(term->tcanvas->scroll_region_start + rows > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - printf("Start gone past scroll area max, going back to start\n"); - term->tcanvas->scroll_region_start = rows - (((term->tcanvas->rows-1) * - term->tcanvas->scroll_size) - term->tcanvas->scroll_region_start); - } else { - term->tcanvas->scroll_region_start+= rows; - } - - /* fix this and make it set changed flags properly */ - - if(term->tcanvas->scroll_region_start < term->tcanvas->scroll_region_end) - i2 = term->tcanvas->scroll_region_end; - else { - for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { + /* set changed flag from start until determined end */ + for(i = term->tcanvas->scroll_region_start; i <= i2; i++) { term->tcanvas->changed_rows[i] = 1; for(j = 0; j <= term->tcanvas->cols; j++) { gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; gl->changed = 1; - } - } - i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; - } - - for(i = term->tcanvas->scroll_region_start; - i <= i2; - i++) { - term->tcanvas->changed_rows[i] = 1; - for(j = 0; j <= term->tcanvas->cols; j++) { - gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; - gl->changed = 1; - } - } - - - return; - - if(term->tcanvas->scroll_in_region) { - printf("SCROLL IN REGION!!!!!!!!!!!!!!!!!!!!\n"); - } else { - + } + } } } +/* scroll window / region down */ void term_scroll_down(Term *term, int rows) { if(term->tcanvas->scroll_in_region) { ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs