+
+ if( unicode_active >= 0 ) {
+ wchar_t wch = 0;
+ int wlen = -1;
+ switch( last_keypress ) {
+//unicode active acitons
+ case RETURN: {
+ for( int i=highlight_letter1+1; i<highlight_letter2; ++i ) {
+ int ch = nib(wtext[i]);
+ if( ch < 0 ) return 1;
+ wch = (wch<<4) + ch;
+ }
+ if( wch ) {
+ dispatch_event = 1;
+ unicode_active = -1;
+ result = 1;
+ wlen = 1;
+ break;
+ } } // fall through
+ case ESC: {
+ unicode_active = -1;
+ result = 1;
+ wlen = 0;
+ break; }
+ case BACKSPACE: {
+ if(ibeam_letter > 0) {
+ delete_selection(ibeam_letter - 1, ibeam_letter, wtext_len);
+ highlight_letter2 = --ibeam_letter;
+ if( highlight_letter1 >= highlight_letter2 )
+ unicode_active = -1;
+ }
+ result = 1;
+ wlen = 0;
+ break; }
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': {
+ int n = nib(last_keypress);
+ wch = n < 10 ? '0'+n : 'A'+n-10;
+ result = 1;
+ wlen = 1;
+ break; }
+//normal actions
+ case TAB:
+ case LEFTTAB:
+ break;
+//ignored actions
+ default:
+ result = 1;
+ break;
+ }
+ if( wlen >= 0 ) {
+ insert_text(&wch, wlen);
+ find_ibeam(1);
+ if( unicode_active >= 0 )
+ highlight_letter2 = ibeam_letter;
+ else
+ highlight_letter1 = highlight_letter2 = 0;
+ draw(1);
+ }
+ }
+
+ if( !result ) {