static list_t* Frame_List;
+/* TODO: add equiv. function to list */
+static int get_index_of_node(list_node_t* node){
+ int i = 0;
+ list_node_t* edon = Frame_List->head;
+ while(edon!=NULL && edon != node) { edon = edon->next; i++; }
+ return (edon!=NULL ? i : -1 );
+}
+
+static bool check_frame_list(void){
+ list_node_t* node = Frame_List->head;
+ int i=0;
+ while(node!=NULL){
+ int j = get_index_of_node(node);
+ if(i != j){
+ fprintf(stderr, "problem! node %d came back as %d\n", i, j);
+ return false;
+ }
+ i++;
+ node = node->next;
+ }
+ return true;
+}
+
void screen_init(void) {
Frame_List = list_new();
list_push_back(Frame_List, frame_new());
state_set_focused_node(Frame_List->head);
+ if(!check_frame_list()) fprintf(stderr, "something wak from teh start\n");
}
void screen_deinit(void) {
}
void screen_open(void) {
+ if(!check_frame_list()) fprintf(stderr, "bad list before opening frame\n");
list_push_back(Frame_List, frame_new());
state_set_screen_dirty(true);
state_set_screen_resized(true);
+ if(!check_frame_list()) fprintf(stderr, "bad list after opening frame\n");
}
-/* TODO: add equiv. function to list */
static int get_focused_frame_index(void){
+ return get_index_of_node(state_get_focused_node());
+ /*
int i = 0;
list_node_t* n = Frame_List->head;
while(n != state_get_focused_node() && n != Frame_List->tail){ n = n->next; i++; }
if(n != state_get_focused_node()) i = -1;
return i;
+ */
}
void screen_close(void) {
if (Frame_List->head != Frame_List->tail) {
int i = get_focused_frame_index();
+ if(!check_frame_list()) fprintf(stderr, "bad list before closing frame\n");
if(i >= 0){ /* negative if node not found */
list_node_t* doomed_node = state_get_focused_node();
mem_retain(doomed_node);
state_set_screen_dirty(true);
state_set_screen_resized(true);
mem_release(doomed_node);
- }
+ }else{
+ fprintf(stderr, "frame not found\n");
+ }
+ if(!check_frame_list()) fprintf(stderr, "bad list after closing frame\n");
}
}
int num_frames = list_size(Frame_List);
list_node_t* p_node;
getmaxyx(stdscr, lines, cols);
-
+ if(!check_frame_list()) fprintf(stderr, "bad list when placing frames\n");
/* Print the master frame */
p_frame = list_at(Frame_List,0)->contents;
mvwin(p_frame->p_win, 0, 0);
list_node_t* master = Frame_List->head;
list_node_t* prev = find_prev_node(focused);
list_node_t* tmp = master->next;
+ if(!check_frame_list()) fprintf(stderr, "starting with a bad list\n");
if(prev){ //if prev is null, implies focus is already master & should do nothing
//put master in list
if(prev!=master) prev->next = master;
Frame_List->head = focused;
screen_force_redraw();
}
+ if(!check_frame_list()) fprintf(stderr, "ending with a bad list\n");
}
void screen_force_redraw(void){