⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.c

📁 串口调试工具。非常好的串口调试助手
💻 C
字号:
/***********************************************************************//* buffer.c                                                            *//* --------                                                            *//*           GTKTerm Software                                          *//*                      (c) Julien Schmitt                             *//*                      julien@jls-info.com                            *//*                                                                     *//* ------------------------------------------------------------------- *//*                                                                     *//*   Purpose                                                           *//*      Management of a local buffer of data received                  *//*                                                                     *//*   ChangeLog                                                         *//*      - 0.99.5 : Corrected segfault in case of buffer overlap        *//*      - 0.99.2 : Internationalization                                *//*      - 0.98.4 : file creation by Julien                             *//*                                                                     *//***********************************************************************/#include <glib.h>#include <stdlib.h>#include <string.h>#include "buffer.h"#include "gettext.h"#include "i18n.h"static char *buffer = NULL;static char *current_buffer;static unsigned int pointer;char overlapped;void (*write_func)(char *, unsigned int) = NULL;void (*clear_func)(void) = NULL;void create_buffer(void){  if(buffer == NULL)    {      buffer = malloc(BUFFER_SIZE);      clear_buffer();    }  return;}void delete_buffer(void){  if(buffer != NULL)    free(buffer);  return;}void put_chars(char *chars, unsigned int size, gboolean crlf_auto){  char *characters;  int pos;  GString *buffer_tmp;  gchar *in_buffer;  buffer_tmp =  g_string_new(chars);	    /* If the auto CR LF mode on, read the buffer to add \r before \n */   if(crlf_auto)    {      in_buffer=buffer_tmp->str;            in_buffer += size;      for(pos=size; pos>0; pos--)	{	  in_buffer--;	  	  if(*in_buffer=='\n' && *(in_buffer-1) != '\r') 	    {	      g_string_insert_c(buffer_tmp, pos-1, '\r');	      size += 1;	    }	  if(*in_buffer=='\r' && *(in_buffer+1) != '\n') 	    {	      g_string_insert_c(buffer_tmp, pos, '\n');	      size += 1;	    }	}    }  chars = buffer_tmp->str;  if(buffer == NULL)    {      i18n_printf(_("ERROR : Buffer is not initialized !\n"));      return;    }    if(size > BUFFER_SIZE)    {      characters = chars + (size - BUFFER_SIZE);      size = BUFFER_SIZE;    }  else    characters = chars;  if((size + pointer) >= BUFFER_SIZE)    {      memcpy(current_buffer, characters, BUFFER_SIZE - pointer);      chars = characters + BUFFER_SIZE - pointer;      pointer = size - (BUFFER_SIZE - pointer);      memcpy(buffer, chars, pointer);      current_buffer = buffer + pointer;      overlapped = 1;    }  else    {      memcpy(current_buffer, characters, size);      pointer += size;      current_buffer += size;    }    if(write_func != NULL)    write_func(characters, size);}void write_buffer(void){  if(write_func == NULL)    return;    if(overlapped == 0)    write_func(buffer, pointer);  else    {      write_func(current_buffer, BUFFER_SIZE - pointer);      write_func(buffer, pointer);    }}void write_buffer_with_func(void (*func)(char *, unsigned int)){  void (*write_func_backup)(char *, unsigned int);   write_func_backup = write_func;  write_func = func;  write_buffer();  write_func = write_func_backup;}void clear_buffer(void){  if(clear_func != NULL)    clear_func();  if(buffer == NULL)    return;  overlapped = 0;  memset(buffer, 0, BUFFER_SIZE);  current_buffer = buffer;  pointer = 0;}void set_clear_func(void (*func)(void)){  clear_func = func;}void unset_clear_func(void (*func)(void)){  clear_func = NULL;}void set_display_func(void (*func)(char *, unsigned int)){  write_func = func;}void unset_display_func(void (*func)(char *, unsigned int)){  write_func = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -