static int keys_inside(int key) { assert(sub_current); assert(main_pad); if(!main_pad->wd) return 0; if(sub_current->arrow >= 0 && handle_arrow(key)) return KEY_HANDLED; switch(key) { case 'z': if(sub_current->lines > sub_current->offset + main_pad->size_y - PAD_Y) sub_current->offset++; break; case 'a': if(sub_current->offset) sub_current->offset--; break; case KBD_RIGHT: if(SUBWIN_COLS - sub_current->xoffset > main_pad->size_x - PAD_X + 1) sub_current->xoffset++; break; case KBD_LEFT: if(sub_current->xoffset) sub_current->xoffset--; break; default: return KEY_SKIPPED; } return KEY_HANDLED; }
static int check_key(t_elem **list, struct termios *backup, char *buf) { int key; if ((key = is_return(buf))) { ft_strdel(&buf); handle_rtn(*list, backup); exit(0); } else if ((key = is_del(buf))) { if (handle_del(list)) return (-1); } else if ((key = is_arrow(buf))) handle_arrow(*list, key); else if ((key = is_space(buf))) handle_space(*list); else return (0); return (key); }