if(t->ypos < t->label.h) {
if(t->ypos < t->label.h - 1) {
ctk_textedit_eventhandler(struct ctk_textedit *t,			  ek_event_t s,			  ek_data_t data){  char *textptr, *textptr2;  unsigned char len;    if(s == ctk_signal_keypress) {    CTK_WIDGET_FOCUS(t->label.window, &t->label);    textptr = &(t->label.text[t->ypos * t->label.w + t->xpos]);    *textptr &= 0x7f;    switch((ctk_arch_key_t)data) {    case CH_CURS_DOWN:      if(t->ypos < t->label.h) {	++t->ypos;      }      break;     case CH_CURS_UP:      if(t->ypos > 0) {	--t->ypos;      }      break;     case CH_CURS_RIGHT:      if(t->xpos < t->label.w) {	++t->xpos;      }      break;     case CH_CURS_LEFT:      if(t->xpos > 0) {	--t->xpos;      } else {	if(t->ypos > 0) {	  --t->ypos;	  t->xpos = t->label.w - 1;	}             }      break;    case CH_ENTER:      t->xpos = 0;      if(t->ypos < t->label.h) {	++t->ypos;      }      break;    case CH_DEL:      len = t->label.w - t->xpos;      if(t->xpos > 0 && len > 0) {	strncpy(textptr - 1, textptr,		len);	*(textptr + len - 1) = 0;	--t->xpos;      }      break;          default:      len = t->label.w - t->xpos;      if(len > 0) {	textptr2 = textptr + len - 1;	while(textptr2 + 1 > textptr) {	  *(textptr2 + 1) = *textptr2;	  --textptr2;	}		*textptr = (char)data;	++t->xpos;	if(t->xpos == t->label.w) {	  t->xpos = 0;	  if(t->ypos < t->label.h - 1) {	    ++t->ypos;	  }	}      }      break;    }    textptr = &(t->label.text[t->ypos * t->label.w + t->xpos]);    *textptr |= 0x80;    CTK_WIDGET_REDRAW(&t->label);  } else if(s == ctk_signal_widget_activate &&	    data == (ek_data_t)t) {    textptr = &(t->label.text[t->ypos * t->label.w + t->xpos]);    *textptr &= 0x7f;    t->xpos = 0;    if(t->ypos < t->label.h - 1) {      ++t->ypos;    }    textptr = &(t->label.text[t->ypos * t->label.w + t->xpos]);    *textptr |= 0x80;    CTK_WIDGET_REDRAW(&t->label);  }}