/[LeafOK_CVS]/lbbs/src/editor.c
ViewVC logotype

Diff of /lbbs/src/editor.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.11 by sysadm, Wed Jun 11 11:55:50 2025 UTC Revision 1.13 by sysadm, Wed Jun 11 13:04:43 2025 UTC
# Line 27  Line 27 
27  #define _POSIX_C_SOURCE 200809L  #define _POSIX_C_SOURCE 200809L
28  #include <string.h>  #include <string.h>
29    
30    #define EDITOR_ESC_DISPLAY_STR "\033[32m*\033[m"
31    
32  EDITOR_DATA *editor_data_load(const char *p_data)  EDITOR_DATA *editor_data_load(const char *p_data)
33  {  {
34          EDITOR_DATA *p_editor_data;          EDITOR_DATA *p_editor_data;
# Line 546  int editor_display(EDITOR_DATA *p_editor Line 548  int editor_display(EDITOR_DATA *p_editor
548          int scroll_rows;          int scroll_rows;
549          long last_updated_line = 0;          long last_updated_line = 0;
550          int key_insert = 1;          int key_insert = 1;
551          int i;          int i, j;
552            char *p_str;
553    
554          screen_current_row = screen_begin_row;          screen_current_row = screen_begin_row;
555          clrline(screen_begin_row, SCREEN_ROWS);          clrline(screen_begin_row, SCREEN_ROWS);
# Line 607  int editor_display(EDITOR_DATA *p_editor Line 610  int editor_display(EDITOR_DATA *p_editor
610                                          str_len = 0;                                          str_len = 0;
611                                  }                                  }
612    
613                                  if ((ch >= 32 && ch < 127) || (ch > 127 && ch <= 255 && str_len == 2) || ch == CR) // printable character or GBK                                  if ((ch >= 32 && ch < 127) || (ch > 127 && ch <= 255 && str_len == 2) || // Printable character or GBK
614                                            ch == CR || ch == KEY_ESC)                                                                                       // Special character
615                                  {                                  {
616                                          if (str_len == 0)                                          if (str_len == 0)
617                                          {                                          {
# Line 740  int editor_display(EDITOR_DATA *p_editor Line 744  int editor_display(EDITOR_DATA *p_editor
744                                  case Ctrl('C'):                                  case Ctrl('C'):
745                                          loop = 0;                                          loop = 0;
746                                          break;                                          break;
747                                    case Ctrl('S'): // Start of line
748                                  case KEY_CTRL_LEFT:                                  case KEY_CTRL_LEFT:
749                                          col_pos = 1;                                          col_pos = 1;
750                                          break;                                          break;
751                                    case Ctrl('E'): // End of line
752                                  case KEY_CTRL_RIGHT:                                  case KEY_CTRL_RIGHT:
753                                          col_pos = MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]);                                          col_pos = MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]);
754                                          break;                                          break;
755                                    case Ctrl('T'): // Top of screen
756                                  case KEY_CTRL_UP:                                  case KEY_CTRL_UP:
757                                          row_pos = screen_begin_row;                                          row_pos = screen_begin_row;
758                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));
759                                          break;                                          break;
760                                    case Ctrl('B'): // Bottom of screen
761                                  case KEY_CTRL_DOWN:                                  case KEY_CTRL_DOWN:
762                                          row_pos = SCREEN_ROWS - 1;                                          row_pos = SCREEN_ROWS - 1;
763                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));
# Line 868  int editor_display(EDITOR_DATA *p_editor Line 876  int editor_display(EDITOR_DATA *p_editor
876                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));                                          col_pos = MIN(col_pos, MAX(1, p_editor_data->display_line_lengths[line_current - screen_current_row + row_pos]));
877                                          clrline(screen_begin_row, SCREEN_ROWS);                                          clrline(screen_begin_row, SCREEN_ROWS);
878                                          break;                                          break;
                                 case KEY_ESC:  
                                         break;  
879                                  case KEY_F1:                                  case KEY_F1:
880                                          if (!show_help) // Not reentrant                                          if (!show_help) // Not reentrant
881                                          {                                          {
# Line 915  int editor_display(EDITOR_DATA *p_editor Line 921  int editor_display(EDITOR_DATA *p_editor
921                          len = 0;                          len = 0;
922                  }                  }
923    
924                  memcpy(buffer, (const char *)p_editor_data->p_display_lines[line_current], (size_t)len);                  // memcpy(buffer, p_editor_data->p_display_lines[line_current], (size_t)len);
925                  buffer[len] = '\0';                  // Replace '\033' with '*'
926                    p_str = p_editor_data->p_display_lines[line_current];
927                    for (i = 0, j = 0; i < len; i++)
928                    {
929                            if (p_str[i] == '\033')
930                            {
931                                    memcpy(buffer + j, EDITOR_ESC_DISPLAY_STR, sizeof(EDITOR_ESC_DISPLAY_STR) - 1);
932                                    j += (int)(sizeof(EDITOR_ESC_DISPLAY_STR) - 1);
933                            }
934                            else
935                            {
936                                    buffer[j] = p_str[i];
937                                    j++;
938                            }
939                    }
940                    buffer[j] = '\0';
941    
942                  moveto(screen_current_row, 0);                  moveto(screen_current_row, 0);
943                  clrtoeol();                  clrtoeol();


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1