scrollDown done; debugging list_iterator_prev
This commit is contained in:
parent
17ccbacd8d
commit
6d9a191be1
3 changed files with 68 additions and 5 deletions
|
@ -120,6 +120,9 @@ list_iterator_new_from_node(list_node_t *node, list_direction_t direction);
|
||||||
list_node_t *
|
list_node_t *
|
||||||
list_iterator_next(list_iterator_t *self);
|
list_iterator_next(list_iterator_t *self);
|
||||||
|
|
||||||
|
list_node_t *
|
||||||
|
list_iterator_prev(list_iterator_t *self);
|
||||||
|
|
||||||
void
|
void
|
||||||
list_iterator_destroy(list_iterator_t *self);
|
list_iterator_destroy(list_iterator_t *self);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,22 @@ list_iterator_next(list_iterator_t *self) {
|
||||||
return curr;
|
return curr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the previous list_node_t or NULL when no more
|
||||||
|
* nodes remain in the list.
|
||||||
|
*/
|
||||||
|
|
||||||
|
list_node_t *
|
||||||
|
list_iterator_prev(list_iterator_t *self) {
|
||||||
|
list_node_t *curr = self->next;
|
||||||
|
if (curr) {
|
||||||
|
self->next = self->direction == LIST_HEAD
|
||||||
|
? curr->prev
|
||||||
|
: curr->next;
|
||||||
|
}
|
||||||
|
return curr;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free the list iterator.
|
* Free the list iterator.
|
||||||
*/
|
*/
|
||||||
|
|
54
testline.c
54
testline.c
|
@ -2,6 +2,12 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "src/list/src/list.h"
|
#include "src/list/src/list.h"
|
||||||
|
|
||||||
|
typedef enum InfoRet {
|
||||||
|
IR_UNKNOWN = -1,
|
||||||
|
IR_NORMAL = 0,
|
||||||
|
IR_UNSUCCESS
|
||||||
|
} InfoRet;
|
||||||
|
|
||||||
|
|
||||||
typedef struct InfoState {
|
typedef struct InfoState {
|
||||||
char* info;
|
char* info;
|
||||||
|
@ -100,10 +106,9 @@ void initInfoState(InfoState* st, char* text) {
|
||||||
st->pos2 = st->pos3 = NULL;
|
st->pos2 = st->pos3 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int initInfoScreen(InfoState* st, char* text) {
|
InfoRet initInfoScreen(InfoState* st, char* text) {
|
||||||
initInfoState(st, text);
|
initInfoState(st, text);
|
||||||
printf("%d\n", st->wrap->len);
|
printf("%d\n", st->wrap->len);
|
||||||
int retn = 0;
|
|
||||||
//lcd.setCursor(0, 0);
|
//lcd.setCursor(0, 0);
|
||||||
if ((st->pos2 = list_iterator_next(st->it))) {
|
if ((st->pos2 = list_iterator_next(st->it))) {
|
||||||
//printf("hello\n");
|
//printf("hello\n");
|
||||||
|
@ -123,12 +128,34 @@ int initInfoScreen(InfoState* st, char* text) {
|
||||||
lcd_blank_line();
|
lcd_blank_line();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
retn = 1;
|
return IR_UNKNOWN;
|
||||||
}
|
}
|
||||||
return retn;
|
return IR_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scrollDown(InfoState* st) {
|
InfoRet scrollDown(InfoState* st) {
|
||||||
|
if (st->pos2) {
|
||||||
|
st->pos1 = st->pos2;
|
||||||
|
} else {
|
||||||
|
return IR_UNKNOWN;
|
||||||
|
}
|
||||||
|
if (st->pos3) {
|
||||||
|
st->pos2 = st->pos3;
|
||||||
|
} else {
|
||||||
|
return IR_UNSUCCESS;
|
||||||
|
}
|
||||||
|
int tmp = lcd_print_between(st->info, (int)st->pos1->val, (int)st->pos2->val);
|
||||||
|
if ((st->pos3 = list_iterator_next(st->it))) {
|
||||||
|
printf("\n");
|
||||||
|
int tmp = lcd_print_between(st->info, (int)st->pos2->val, (int)st->pos3->val);
|
||||||
|
} else {
|
||||||
|
printf("\n");
|
||||||
|
lcd_blank_line();
|
||||||
|
}
|
||||||
|
return IR_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfoRet scrollUp(InfoState* st) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,8 +235,25 @@ int main() {
|
||||||
list_node_t *node;
|
list_node_t *node;
|
||||||
list_iterator_t *it = list_iterator_new(wrap, LIST_HEAD);
|
list_iterator_t *it = list_iterator_new(wrap, LIST_HEAD);
|
||||||
|
|
||||||
|
node = list_iterator_next(it);
|
||||||
|
printf("node val: %d\n", node->val);
|
||||||
|
node = list_iterator_next(it);
|
||||||
|
printf("node val: %d\n", node->val);
|
||||||
|
node = list_iterator_prev(it);
|
||||||
|
printf("node val: %d\n", node->val);
|
||||||
|
node = list_iterator_prev(it);
|
||||||
|
printf("node val: %d\n", node->val);
|
||||||
|
node = list_iterator_prev(it);
|
||||||
|
printf("node val: %d\n", node->val);
|
||||||
|
|
||||||
|
InfoRet ret_code;
|
||||||
InfoState st;
|
InfoState st;
|
||||||
initInfoScreen(&st, cinfo);
|
initInfoScreen(&st, cinfo);
|
||||||
|
for (int i = 0; i < 10; ++i) {
|
||||||
|
printf("\n");
|
||||||
|
ret_code = scrollDown(&st);
|
||||||
|
printf("\n%d\n", ret_code);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
while ((node = list_iterator_next(it))) {
|
while ((node = list_iterator_next(it))) {
|
||||||
|
|
Loading…
Reference in a new issue