minor changes on dynamic line gestion

This commit is contained in:
milang 2019-10-15 19:35:26 +02:00
parent 0c1fd482bd
commit 9ceaf50e09
1 changed files with 44 additions and 21 deletions

View File

@ -9,12 +9,14 @@
#ifdef FX9860G
static int number_max_messages=4096;
#define MAX_LENGHT 22
#define WIDTH 8
#endif
#ifdef FXCG50
static int number_max_messages=10000;
#define MAX_LENGHT 132
#define WIDTH 17
@ -24,12 +26,7 @@ typedef struct log_line log_line;
typedef struct log_line
{
void* previous;
#ifdef FXCG50
char text[MAX_LENGHT];
#endif
#ifdef FX9860G
char text[MAX_LENGHT];
#endif
void* next;
int cursor;
} log_line;
@ -38,20 +35,53 @@ typedef struct log_line
static log_line first_line=
{
0,
"You are at the top !",
"<top>",
0,
0
};
static log_line* current_line=&first_line;
/// Change the following line to custom ram weight
static int number_max_messages=2048; // 1Ko max
// 1Ko max
static int number_messages=0;
static int state=1;
static log_line* cut_line()
{
log_line* maillon = first_line.next;
log_line* maillon_suivant = maillon->next;
first_line.next=maillon_suivant;
if (maillon_suivant)
maillon_suivant->previous=&first_line;
return maillon;
}
static void optimize()
{
while (number_messages*sizeof(log_line)>=number_max_messages)
{
log_line* line = cut_line();
free(line);
number_messages--;
}
}
void ll_set_size(int s)
{
number_messages=s;
optimize();
}
int ll_get_size();
void ll_set_state(int s)
{
state = s;
@ -62,16 +92,7 @@ int ll_get_state()
return state;
}
static log_line* cut_line()
{
log_line* maillon = first_line.next;
log_line* maillon_suivant = maillon->next;
first_line.next=maillon_suivant;
maillon_suivant->previous=&first_line;
return maillon;
}
static void link_line(log_line* line)
{
@ -93,21 +114,23 @@ static log_line* add_line()
int malloc_fail=0;
log_line* line;
int test=(number_messages*sizeof(log_line)>=number_max_messages);
if (!test)
{
number_messages++;
line = malloc(sizeof(log_line));
if (0==line)
malloc_fail=1;
else
number_messages++;
}
if (test || malloc_fail) // fail du malloc ou dépassement de la limite de ram imposée lors du build
line=cut_line();
link_line(line);
clear_line(line);
optimize();
return current_line;
}
@ -143,7 +166,7 @@ static void append_character(char c)
if (c!='\0')
{
current_line->cursor ++;
if (current_line->cursor == MAX_LENGHT-1)
add_line();
@ -226,7 +249,7 @@ void ll_pause()
line=linet;
}
if (key==KEY_EXIT)
break;
break;
}
}