|
|
1.1 ! root 1: /* ! 2: * $Source: /u1/X/xterm/RCS/input.c,v $ ! 3: * $Header: input.c,v 10.100 86/12/01 14:44:04 jg Rel $ ! 4: */ ! 5: ! 6: #ifndef lint ! 7: static char *rcsid_input_c = "$Header: input.c,v 10.100 86/12/01 14:44:04 jg Rel $"; ! 8: #endif lint ! 9: ! 10: #include <X/mit-copyright.h> ! 11: ! 12: /* Copyright Massachusetts Institute of Technology 1984, 1985 */ ! 13: ! 14: /* input.c */ ! 15: ! 16: #ifndef lint ! 17: static char sccs_id[] = "@(#)input.c\tX10/6.6B\t12/26/86"; ! 18: #endif lint ! 19: ! 20: #include <X/Xlib.h> ! 21: #include <X/Xkeyboard.h> ! 22: #include "scrollbar.h" ! 23: #include "ptyx.h" ! 24: #include <stdio.h> ! 25: ! 26: static char *kypd_num = "0x.\r123456,789-"; ! 27: static char *kypd_apl = "pxnMqrstuvlwxym"; ! 28: static char *cur = "DCBA"; ! 29: ! 30: Input (keyboard, screen, event) ! 31: register Keyboard *keyboard; ! 32: register Screen *screen; ! 33: register XKeyPressedEvent *event; ! 34: { ! 35: register int keycode = event->detail; ! 36: register char *string; ! 37: register int col, key = FALSE; ! 38: int pty = screen->respond; ! 39: int nbytes; ! 40: ANSI reply; ! 41: ! 42: string = XLookupMapping (event, &nbytes); ! 43: ! 44: if (nbytes > 0) { ! 45: if(screen->TekGIN) { ! 46: TekEnqMouse(*string++); ! 47: TekGINoff(); ! 48: nbytes--; ! 49: } ! 50: while (nbytes-- > 0) ! 51: unparseputc(*string++, pty); ! 52: key = TRUE; ! 53: } else { ! 54: keycode &= ValueMask; /* no longer need shift bits for anything */ ! 55: reply.a_pintro = 0; ! 56: reply.a_final = 0; ! 57: reply.a_nparam = 0; ! 58: reply.a_inters = 0; ! 59: if (IsKeypadKey(keycode)) { ! 60: if (keyboard->flags & KYPD_APL) { ! 61: reply.a_type = SS3; ! 62: unparseseq(&reply, pty); ! 63: unparseputc(kypd_apl[keycode-KC_KEYPAD_0], pty); ! 64: } else ! 65: unparseputc(kypd_num[keycode-KC_KEYPAD_0], pty); ! 66: key = TRUE; ! 67: } else if (IsCursorKey(keycode)) { ! 68: if (keyboard->flags & CURSOR_APL) { ! 69: reply.a_type = SS3; ! 70: unparseseq(&reply, pty); ! 71: unparseputc(cur[keycode-KC_CURSOR_LEFT], pty); ! 72: } else { ! 73: reply.a_type = CSI; ! 74: reply.a_final = cur[keycode-KC_CURSOR_LEFT]; ! 75: unparseseq(&reply, pty); ! 76: } ! 77: key = TRUE; ! 78: } else if (IsPFKey(keycode)) { ! 79: reply.a_type = SS3; ! 80: unparseseq(&reply, pty); ! 81: unparseputc((char)(keycode-KC_PF1+'P'), pty); ! 82: key = TRUE; ! 83: } else if (IsFunctionKey(keycode)) { ! 84: reply.a_type = CSI; ! 85: reply.a_nparam = 1; ! 86: reply.a_param[0] = funcvalue(keycode); ! 87: reply.a_final = '~'; ! 88: if (reply.a_param[0] > 0) ! 89: unparseseq(&reply, pty); ! 90: key = TRUE; ! 91: } ! 92: } ! 93: if(key && !screen->TekEmu) { ! 94: if(screen->scrollkey && screen->topline != 0) ! 95: ScrollToBottom(screen->sb); ! 96: if(screen->marginbell) { ! 97: col = screen->max_col - screen->nmarginbell; ! 98: if(screen->bellarmed >= 0) { ! 99: if(screen->bellarmed == screen->cur_row) { ! 100: if(screen->cur_col >= col) { ! 101: if(screen->cur_col == col) ! 102: Bell(); ! 103: screen->bellarmed = -1; ! 104: } ! 105: } else ! 106: screen->bellarmed = screen->cur_col < ! 107: col ? screen->cur_row : -1; ! 108: } else if(screen->cur_col < col) ! 109: screen->bellarmed = screen->cur_row; ! 110: } ! 111: } ! 112: #ifdef ENABLE_PRINT ! 113: if (keycode == KC_F2) TekPrint(); ! 114: #endif ! 115: return; ! 116: } ! 117: ! 118: funcvalue(keycode) ! 119: { ! 120: switch (keycode) { ! 121: case KC_F1: return(11); ! 122: case KC_F2: return(12); ! 123: case KC_F3: return(13); ! 124: case KC_F4: return(14); ! 125: case KC_F5: return(15); ! 126: case KC_F6: return(17); ! 127: case KC_F7: return(18); ! 128: case KC_F8: return(19); ! 129: case KC_F9: return(20); ! 130: case KC_F10: return(21); ! 131: case KC_F11: return(23); ! 132: case KC_F12: return(24); ! 133: case KC_F13: return(25); ! 134: case KC_F14: return(26); ! 135: case KC_F15: return(28); ! 136: case KC_F16: return(29); ! 137: case KC_F17: return(31); ! 138: case KC_F18: return(32); ! 139: case KC_F19: return(33); ! 140: case KC_F20: return(34); ! 141: case KC_E1 : return(1); ! 142: case KC_E2: return(2); ! 143: case KC_E3: return(3); ! 144: case KC_E4: return(4); ! 145: case KC_E5: return(5); ! 146: case KC_E6: return(6); ! 147: default: return(-1); ! 148: } ! 149: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.