BOOL ztelnetAccelHook( PQMSG pQmsg ) { if( pQmsg->msg == WM_CHAR ) { USHORT fsFlags = SHORT1FROMMP( pQmsg->mp1 ); //UCHAR ucRepeat = CHAR3FROMMP( pQmsg->mp1 ); //UCHAR ucScancode = CHAR4FROMMP( pQmsg->mp1 ); USHORT usCh = SHORT1FROMMP( pQmsg->mp2 ); USHORT usVk = SHORT2FROMMP( pQmsg->mp2 ); if( fsFlags & KC_KEYUP ) return FALSE; if(( fsFlags & ( KC_SHIFT | KC_CTRL )) && ( usVk == VK_SPACE )) { WinSendMsg( hwndKime, KIMEM_CHANGEHAN, 0, 0 ); WinSendMsg( hwndKHS, KHSM_CHANGEHANSTATUS, MPFROMHWND( pQmsg->hwnd ), 0 ); } else if( !( fsFlags & KC_ALT ) && ( usVk == VK_F3 )) { WinSendMsg( hwndKime, KIMEM_CHANGEIM, 0, 0 ); WinSendMsg( hwndKHS, KHSM_CHANGEIMSTATUS, MPFROMHWND( pQmsg->hwnd ), 0 ); } else if( LONGFROMMR( WinSendMsg( hwndKime, KIMEM_QUERYHAN, 0, 0 )) && ( !( fsFlags & ( KC_CTRL | KC_ALT )))) { UCHAR uch; UCHAR *kbdConv; BOOL shiftOn; usCh = kbdKeyTranslate( pQmsg ); uch = tolower( LOUCHAR( usCh )); if( fsFlags & KC_SHIFT ) uch = toupper( uch ); else if( kimeOpt.patchChat && prevHanInput && LONGFROMMR( WinSendMsg( hwndKime, KIMEM_QUERYIM, 0, 0 )) && ( usVk == VK_SPACE )) WinSendMsg( pQmsg->hwnd, pQmsg->msg, pQmsg->mp1, pQmsg->mp2 ); shiftOn = FALSE; if( isDblJaum( uch )) { if( dblJaumPressed ) { if( uchPrevDbl == uch ) { if( kimeOpt.patch3bul ) WinSendMsg( pQmsg->hwnd, WM_CHAR, MPFROMSH2CH( fsFlags | KC_VIRTUALKEY, 0, 0 ), MPFROM2SHORT( 0, VK_BACKSPACE )); uchPrevDbl = 0; dblJaumPressed = FALSE; shiftOn = TRUE; } else uchPrevDbl = uch; } else { uchPrevDbl = uch; dblJaumPressed = TRUE; } } else dblJaumPressed = FALSE; if(( kbdConv = findKbdConv( uch )) != NULL ) { fsFlags &= ~KC_SHIFT; if( kbdConv[ 3 ] || shiftOn ) fsFlags |= KC_SHIFT; usCh = MAKEUSHORT( kbdConv[ 1 ], 0 ); if( kbdConv[ 2 ]) { if( kimeOpt.patch3bul ) WinSendMsg( pQmsg->hwnd, WM_CHAR, MPFROMSH2CH( fsFlags, 0, 0 ), MPFROM2SHORT( usCh, 0 )); usCh = MAKEUSHORT( kbdConv[ 2 ], 0 ); } if( usCh ) { if( kimeOpt.patch3bul ) { //pQmsg->mp1 = MPFROMSH2CH( fsFlags, ucRepeat, ucScancode ); //pQmsg->mp2 = MPFROM2SHORT( usCh, usVk ); pQmsg->mp1 = MPFROMSH2CH( fsFlags, 0, 0 ); pQmsg->mp2 = MPFROM2SHORT( usCh, 0 ); } } } prevHanInput = ( strchr( SBCS_CHARS, SHORT1FROMMP( pQmsg->mp2 )) == NULL ) && !( fsFlags & KC_VIRTUALKEY ); } } return FALSE; }
/********************************************************************* Main processing loop. get a key record from the input queue. if a key was input from keyboard (owner == TRUE), then look at the key record and try to call a function. If no function, then just input it into the sheet. if input was from clipboard (owner == FALSE), then don't try to call a function, just put it in the sheet. v 3.0 9-12-94 still needs work. sigh.. ************************************************************************/ static void edit_loop (void) { USHORT key; bool ok = FALSE; // temp for load_key USHORT cmd_result = 0x0000; // returned from do_command UCHAR lokey, hikey; // low and high byte of KEY USHORT USHORT keystate; struct key_rec edit_key_rec; #ifndef NO_COMMANDO //char commando_cwd[FNAME_LEN]; //strcpy (commando_cwd, cwd); #endif #ifndef NO_HELP DEF_HELP(EDIT_HELP,1,-1,-1); init_help (Help); NEW_HELP; #endif for (;;) { get_next: edit_key_rec = view_getkey(); key = edit_key_rec.value; keystate = edit_key_rec.state; lokey = LOUCHAR(key); hikey = HIUCHAR(key); // DBG_INI(dout<<"edit.cpp line "<<__LINE__<<" shell_command.s = °"<<settings.shell_command.s<<"°"<<endl); switch (key) { case kESC: if (pulldown_menu() && tryquit ()) { return; } else { lokey = 0x00; // "eat" the ESC key } break; default: DBG_KEY(dout<<'\n'<<"edit key = "<<hex<<key<<" high = "<<hikey); DBG_KEY(dout<<" low = "<< lokey<<" keystate = "<<keystate<<dec<<endl); if(edit_key_rec.owner == TRUE) { // keyboard key if((CTL_KEY(keystate)) || ((lokey == 0x00)||(lokey == 0xE0))) { if(key != 0x0000) { cmd_result = do_command(mykey_rec); DBG_KEY(dout<<" edit_key after do_command() "<<endl); } if(cmd_result == CMD_QUIT) { DBG_KEY(dout<<" edit key QUIT cmd_result = "<<hex<<cmd_result<<dec<<endl); return; } if(cmd_result == CMD_HANDLED) { DBG_KEY(dout<<" edit key ignoring cmd_result = "<<hex<<cmd_result<<dec<<endl); goto get_next; } } if((lokey != 0xE0) && (lokey >0)) { // ignore any ext key not handled DBG_KEY(dout<<" edit_key calling view_addkey() "<<endl); view_addkey(lokey); break; } } else { DBG_KEY(dout<<" edit key not owner"<<endl); if((lokey < 255) && (lokey >0)) { // ignore any ext key not handled // DBG_KEY(dout<<" edit_loop addkey key = "<<hex<<lokey<<dec<<endl); view_addkey(lokey); break; } } } // end switch/case } // end for(;;) #pragma warn -aus // eliminate 'OLD_HELP'assigned but not used }