Changeset 172 for trunk


Ignore:
Timestamp:
12/01/09 07:17:04 (4 years ago)
Author:
CHDKLover
Message:

Skript-Konsole kann mit dem Skript-Befehl "set_console_layout(x1,y1,x2,y2)" von der Größe und Ausrichtung dynamisch angepasst werden
Für spezielle Anwendungsfälle stehen die Skript-Befehle "set_console_autoredraw(0|1) bzw. console_redraw() zur Verfügung um das Automatische neu zeichnen nach jedem print abzuschalten bzw. manuelle neu zeichnen zu lassen

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/core/gui.c

    r111 r172  
    21822182                    --show_script_console; 
    21832183                    md_draw_grid(); 
    2184                     script_console_draw(); 
     2184                    script_console_draw(auto_redraw); 
    21852185                } 
    21862186            } 
  • trunk/core/luascript.c

    r135 r172  
    6464{ 
    6565  script_console_clear(); 
     66  return 0; 
     67} 
     68 
     69static int luaCB_set_console_layout( lua_State* L ) 
     70{ 
     71  script_console_set_layout(luaL_checknumber( L, 1 ),luaL_checknumber( L, 2 ),luaL_checknumber( L, 3 ),luaL_checknumber( L, 4 )); 
     72  return 0; 
     73} 
     74 
     75static int luaCB_set_console_autoredraw( lua_State* L ) 
     76{ 
     77  script_console_set_autoredraw(luaL_checknumber( L, 1 )); 
     78  return 0; 
     79} 
     80 
     81static int luaCB_console_redraw( lua_State* L ) 
     82{ 
     83  script_console_redraw(); 
    6684  return 0; 
    6785} 
     
    10851103  FUNC(sleep); 
    10861104  FUNC(cls); 
     1105  FUNC(set_console_layout); 
     1106  FUNC(set_console_autoredraw); 
     1107  FUNC(console_redraw); 
    10871108 
    10881109  lua_pushlightuserdata( L, kbd_sched_click ); 
  • trunk/core/script.c

    r11 r172  
    1010//------------------------------------------------------------------- 
    1111 
    12 #define SCRIPT_CONSOLE_NUM_LINES    5 
    13 #define SCRIPT_CONSOLE_LINE_LENGTH  25 
    14 #define SCRIPT_CONSOLE_X            0 
    15 #define SCRIPT_CONSOLE_Y            (14-SCRIPT_CONSOLE_NUM_LINES) 
     12#define SCRIPT_MAX_CONSOLE_LINES      14 
     13#define SCRIPT_MAX_LINE_LENGTH        45 
    1614 
    1715//------------------------------------------------------------------- 
     
    1917char cfg_name[100] = "\0"; 
    2018char cfg_set_name[100] = "\0"; 
     19int script_console_num_lines, script_console_line_length, script_console_x, script_console_y, auto_redraw=1; 
    2120 
    2221static const char *ubasic_script_default = 
     
    7675static char script_params_update[SCRIPT_NUM_PARAMS]; 
    7776static int script_loaded_params[SCRIPT_NUM_PARAMS]; 
    78 static char script_console_buf[SCRIPT_CONSOLE_NUM_LINES][SCRIPT_CONSOLE_LINE_LENGTH+1]; 
     77//static char script_console_buf[script_console_num_lines][script_console_line_length+1]; 
     78static char **script_console_buf; 
    7979static int script_con_start_line=0; // oldest valid line in console 
    8080static int script_con_num_lines=0; // number of valid lines 
     
    322322    struct stat st; 
    323323     
     324    auto_redraw=1; 
     325    script_console_num_lines=5; 
     326    script_console_line_length=25; 
     327    script_console_y=SCRIPT_MAX_CONSOLE_LINES-script_console_num_lines; 
     328    script_console_x=0; 
     329    script_console_buf=malloc(script_console_num_lines*sizeof(char*)); 
     330    for (i=0;i<script_console_num_lines;i++){  
     331      script_console_buf[i]=malloc(script_console_line_length*sizeof(char)+1);  
     332    } 
     333    script_con_start_line=0; 
     334    script_con_num_lines=0; 
     335 
    324336//    save_params_values(0); 
    325337 
     
    394406    register int i; 
    395407 
    396     for (i=0; i<SCRIPT_CONSOLE_NUM_LINES; ++i) { 
     408    for (i=0; i<script_console_num_lines; ++i) { 
    397409        script_console_buf[i][0]=0; 
    398410    } 
    399411    script_con_num_lines=script_con_start_line=0; 
    400     draw_restore(); 
     412    if(auto_redraw) draw_restore(); 
    401413} 
    402414 
    403415//------------------------------------------------------------------- 
    404416static inline int script_con_line_index(int i) { 
    405     return i%SCRIPT_CONSOLE_NUM_LINES; 
    406 } 
    407  
    408 void script_console_draw() { 
    409     int i,c,l; 
     417    return i%script_console_num_lines; 
     418} 
     419 
     420void script_console_draw(int drawing) { 
     421  int i,c,l; 
     422  if(drawing){ 
    410423    for(c = 0; c < script_con_num_lines; ++c) { 
    411         i=script_con_line_index(script_con_start_line+c); 
    412         l=strlen(script_console_buf[i]); 
    413         draw_txt_string(SCRIPT_CONSOLE_X, SCRIPT_CONSOLE_Y+SCRIPT_CONSOLE_NUM_LINES-script_con_num_lines+c, script_console_buf[i], MAKE_COLOR(COLOR_BG, COLOR_FG)); 
    414         for (; l<SCRIPT_CONSOLE_LINE_LENGTH; ++l) 
    415             draw_txt_char(SCRIPT_CONSOLE_X+l, SCRIPT_CONSOLE_Y+SCRIPT_CONSOLE_NUM_LINES-script_con_num_lines+c, ' ', MAKE_COLOR(COLOR_BG, COLOR_FG)); 
    416     } 
     424      i=script_con_line_index(script_con_start_line+c); 
     425      l=strlen(script_console_buf[i]); 
     426      draw_txt_string(script_console_x, script_console_y+script_console_num_lines-script_con_num_lines+c, script_console_buf[i], MAKE_COLOR(COLOR_BG, COLOR_FG)); 
     427      for (; l<script_console_line_length; ++l) 
     428        draw_txt_char(script_console_x+l, script_console_y+script_console_num_lines-script_con_num_lines+c, ' ', MAKE_COLOR(COLOR_BG, COLOR_FG)); 
     429    } 
     430  } 
    417431} 
    418432 
     
    464478//------------------------------------------------------------------- 
    465479void script_console_start_line() { 
    466     if (SCRIPT_CONSOLE_NUM_LINES==script_con_num_lines) { 
     480    if (script_console_num_lines==script_con_num_lines) { 
    467481        script_con_start_line=script_con_line_index(script_con_start_line+1); 
    468482    } 
     
    481495        cur = script_console_buf[script_con_line_index(script_con_start_line+script_con_num_lines-1)]; 
    482496        curlen = strlen(cur); 
    483         left = SCRIPT_CONSOLE_LINE_LENGTH-curlen; 
     497        left = script_console_line_length-curlen; 
    484498        if(strlen(str) > left) { 
    485499            strncpy(cur+curlen,str,left); 
    486             cur[SCRIPT_CONSOLE_LINE_LENGTH]=0; 
     500            cur[script_console_line_length]=0; 
    487501            script_console_start_line(); 
    488502            str+=left; 
     
    504518        write(print_screen_d, &nl, 1); 
    505519    } 
    506     script_console_draw(); 
    507 } 
    508 //------------------------------------------------------------------- 
    509 //------------------------------------------------------------------- 
    510 //------------------------------------------------------------------- 
     520    script_console_draw(auto_redraw); 
     521} 
     522//------------------------------------------------------------------- 
     523void script_console_set_layout(int x1, int y1, int x2, int y2) { //untere linke Ecke(x1,y1), obere reche Ecke(x2,y2) 
     524  int i,len,newLinesCount,newLineLength,newNumLines,lineDelta,idx; 
     525  char **tmp; 
     526  if(x1>=0 && x1<x2 && x1<=SCRIPT_MAX_LINE_LENGTH && y1>=0 && y1<y2 && y1<=SCRIPT_MAX_CONSOLE_LINES && x2<=SCRIPT_MAX_LINE_LENGTH && y2<=SCRIPT_MAX_CONSOLE_LINES) { 
     527    //In neuen Puffer kopieren 
     528    newLineLength=x2-x1; 
     529    newLinesCount=y2-y1; 
     530    if(newLineLength!=script_console_line_length || newLinesCount!=script_console_num_lines) { 
     531      lineDelta=script_con_num_lines-newLinesCount; 
     532      if(lineDelta<0) lineDelta=0; 
     533      newNumLines=0; 
     534      tmp=malloc(newLinesCount*sizeof(char*)); //realloc Nachbildung 
     535      for(i=0;i<newLinesCount;i++){ 
     536        tmp[i]=malloc(newLineLength*sizeof(char)+1); 
     537        if(i<script_con_num_lines){ 
     538          newNumLines++; 
     539          idx=script_con_line_index(script_con_start_line+i+lineDelta); 
     540          len=strlen(script_console_buf[idx]); 
     541          if(len>newLineLength) len=newLineLength; 
     542          strncpy(tmp[i],script_console_buf[idx],len); 
     543          tmp[i][len]=0x0; 
     544        } else tmp[i][0]=0x0; 
     545      } 
     546      //Speicher freigeben 
     547      for(i=0;i<script_console_num_lines;i++) { 
     548        free(script_console_buf[i]); 
     549      } 
     550      free(script_console_buf); 
     551      //neue Werte setzten 
     552      script_console_buf=tmp; 
     553      script_con_start_line=0; 
     554      script_con_num_lines=newNumLines; 
     555      script_console_num_lines=newLinesCount; 
     556      script_console_line_length=newLineLength; 
     557    } 
     558    script_console_x=x1; 
     559    script_console_y=SCRIPT_MAX_CONSOLE_LINES-y2; 
     560    if(auto_redraw) draw_restore(); 
     561  } 
     562} 
     563//------------------------------------------------------------------- 
     564void script_console_set_autoredraw(int value){ 
     565  auto_redraw=value; 
     566} 
     567//------------------------------------------------------------------- 
     568void script_console_redraw(){ 
     569  draw_restore(); 
     570  script_console_draw(1); 
     571} 
     572//------------------------------------------------------------------- 
  • trunk/include/script.h

    r12 r172  
    1313extern char script_params[SCRIPT_NUM_PARAMS][28]; 
    1414extern int script_param_order[SCRIPT_NUM_PARAMS]; 
     15extern int auto_redraw; 
    1516 
    1617//------------------------------------------------------------------- 
     
    1819extern void script_console_clear(); 
    1920extern void script_console_add_line(const char *str); 
    20 extern void script_console_draw(); 
     21extern void script_console_draw(int drawing); 
    2122extern void script_print_screen_init(); 
    2223extern void script_print_screen_end(); 
     
    2425extern int load_params_values(const char *fn, int update_vars, int read_param_set); 
    2526extern void save_params_values(int unconditional); 
     27extern void script_console_set_layout(int x1, int y1, int x2, int y2); 
     28extern void script_console_set_autoredraw(int value); 
     29extern void script_console_redraw(); 
    2630//------------------------------------------------------------------- 
    2731#endif 
  • trunk/lib/ubasic/camera_functions.c

    r14 r172  
    130130} 
    131131 
     132void script_console_set_layout(int x1, int y1, int x2, int y2) { 
     133    printf(">>> set console layout to %d %d %d %d\n", x1,y1,x2,y2); 
     134} 
     135 
     136void script_console_set_autoredraw(int value) { 
     137    printf(">>> set console auto_redraw to %d\n", x1); 
     138} 
     139 
     140void script_console_redraw() { 
     141    printf("*** console redraw ***\n"); 
     142} 
     143 
    132144void script_console_clear() { 
    133145    printf("*** clear console ***\n"); 
  • trunk/lib/ubasic/tokenizer.c

    r106 r172  
    9797  //{"shot",                    TOKENIZER_SHOOT}, // for compatibility 
    9898  {"shoot",                   TOKENIZER_SHOOT}, 
     99  {"set_console_layout",      TOKENIZER_SET_CONSOLE_LAYOUT}, 
     100  {"set_console_autoredraw",  TOKENIZER_SET_CONSOLE_AUTOREDRAW}, 
     101  {"console_redraw",          TOKENIZER_CONSOLE_REDRAW}, 
    99102  {"sleep",                   TOKENIZER_SLEEP},  
    100103 
  • trunk/lib/ubasic/tokenizer.h

    r106 r172  
    9191  TOKENIZER_RELEASE, 
    9292  TOKENIZER_SHOOT, 
     93  TOKENIZER_SET_CONSOLE_LAYOUT, 
     94  TOKENIZER_SET_CONSOLE_AUTOREDRAW, 
     95  TOKENIZER_CONSOLE_REDRAW, 
    9396  TOKENIZER_GET_TV96, 
    9497  TOKENIZER_GET_USER_TV96, 
  • trunk/lib/ubasic/ubasic.c

    r166 r172  
    14111411 
    14121412/*---------------------------------------------------------------------------*/ 
     1413static void set_console_layout(void) 
     1414{ 
     1415  int x1,y1,x2,y2; 
     1416  accept(TOKENIZER_SET_CONSOLE_LAYOUT); 
     1417  x1 = expr(); 
     1418  y1 = expr(); 
     1419  x2 = expr(); 
     1420  y2 = expr(); 
     1421  script_console_set_layout(x1,y1,x2,y2); 
     1422  accept_cr();   
     1423} 
     1424/*---------------------------------------------------------------------------*/ 
     1425static void set_console_autoredraw(void) 
     1426{ 
     1427  accept(TOKENIZER_SET_CONSOLE_AUTOREDRAW); 
     1428  script_console_set_autoredraw(expr()); 
     1429  accept_cr();   
     1430} 
     1431/*---------------------------------------------------------------------------*/ 
     1432static void console_redraw(void) 
     1433{ 
     1434  accept(TOKENIZER_CONSOLE_REDRAW); 
     1435  script_console_redraw(); 
     1436  accept_cr();   
     1437} 
     1438/*---------------------------------------------------------------------------*/ 
    14131439 
    14141440#ifdef INCLUDE_OLD_GET__SYNTAX 
     
    22482274  case TOKENIZER_SHOOT: 
    22492275    shoot_statement(); 
     2276    break; 
     2277  case TOKENIZER_SET_CONSOLE_LAYOUT: 
     2278    set_console_layout(); 
     2279    break; 
     2280  case TOKENIZER_SET_CONSOLE_AUTOREDRAW: 
     2281    set_console_autoredraw(); 
     2282    break; 
     2283  case TOKENIZER_CONSOLE_REDRAW: 
     2284    console_redraw(); 
    22502285    break; 
    22512286#ifdef INCLUDE_OLD_GET__SYNTAX 
Note: See TracChangeset for help on using the changeset viewer.