- Timestamp:
- Nov 13, 2009, 10:11:05 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/term.c
r3899 r3900 92 92 unsigned char const *buffer = (unsigned char const*)data; 93 93 unsigned int i, j, k,skip, dummy = 0; 94 unsigned int width, height ;95 uint32_t savedattr , scrolled = 0;94 unsigned int width, height, top, bottom; 95 uint32_t savedattr; 96 96 int x = 0, y = 0, save_x = 0, save_y = 0; 97 97 … … 100 100 x = caca_get_cursor_x(sc->cv); 101 101 y = caca_get_cursor_y(sc->cv); 102 top = 1; 103 bottom = height; 102 104 103 105 if(!sc->init) … … 438 440 //x = width; 439 441 break; 442 case 'L': /* IL - Insert line */ 443 { 444 unsigned int nb_lines = argc ? argv[0] : 1; 445 debug("IL %d %d", argc, nb_lines); 446 for(j = bottom - 1; j >= (unsigned int)y + nb_lines; j--) 447 { 448 for(k = 0; k < width; k++) 449 { 450 caca_put_char(sc->cv, k, j, caca_get_char(sc->cv, k, j - nb_lines)); 451 caca_put_attr(sc->cv, k, j, caca_get_attr(sc->cv, k, j - nb_lines)); 452 } 453 caca_draw_line(sc->cv, 0, j - nb_lines, width, j - nb_lines, ' '); 454 } 455 } 456 break; 440 457 case 'P': /* DCH (0x50) - Delete Character */ 441 458 if(!argc || argv[0] == 0) … … 470 487 y = (argc > 0 && argv[0] > 0) ? argv[0] - 1 : 0; 471 488 break; 472 case 'r': /* SS (0x72) - Scroll Screen FIXME */ 473 debug("SCROLL scrolled=%d argv=%s", scrolled, argv); 474 if(scrolled) break; 475 if((argv[0]==0 && argv[1]==0) || scrolled) break; 476 for(j = argv[0]-1; j < argv[1]-1; j++) 477 { 478 for(k = 0; k < width; k++) 479 { 480 caca_put_char(sc->cv, k, j, caca_get_char(sc->cv, k, j+1)); 481 caca_put_attr(sc->cv, k, j, caca_get_attr(sc->cv, k, j+1)); 482 } 483 } 484 caca_draw_line(sc->cv, 0, argv[1]-1, width, argv[1]-1, ' '); 485 scrolled = 1; 489 case 'r': /* FIXME */ 490 if(argc == 2) /* DCSTBM - Set top and bottom margin */ 491 { 492 debug("DCSTBM %d %d", argv[0], argv[1]); 493 top = argv[0]; 494 bottom = argv[1]; 495 } 496 else 497 debug("ansi import: command r with %d params", argc); 486 498 break; 487 499 case 'h': /* SM (0x68) - FIXME */ … … 609 621 610 622 /* Scroll or grow vertically */ 611 if((unsigned int)y >= height)612 { 613 int lines = (y - height) + 1;623 if((unsigned int)y >= bottom) 624 { 625 int lines = (y - bottom) + 1; 614 626 615 627 savedattr = caca_get_attr(sc->cv, -1, -1); 616 628 617 for(j = 0; j + lines < height; j++)629 for(j = top - 1; j + lines < bottom; j++) 618 630 { 619 631 for(k = 0; k < width; k++) … … 624 636 } 625 637 caca_set_attr(sc->cv, sc->clearattr); 626 caca_fill_box(sc->cv, 0, height- lines,627 width - 1, height- 1, ' ');638 caca_fill_box(sc->cv, 0, bottom - lines, 639 width - 1, bottom - 1, ' '); 628 640 y -= lines; 629 641 caca_set_attr(sc->cv, savedattr);
Note: See TracChangeset
for help on using the changeset viewer.