|
|
1.1 ! root 1: /* ! 2: * $Source: /u1/X11/clients/xterm/RCS/input.c,v $ ! 3: * $Header: input.c,v 1.14 87/09/11 08:16:45 toddb Exp $ ! 4: */ ! 5: ! 6: #ifndef lint ! 7: static char *rcsid_input_c = "$Header: input.c,v 1.14 87/09/11 08:16:45 toddb Exp $"; ! 8: #endif lint ! 9: ! 10: #include <X11/copyright.h> ! 11: ! 12: /* ! 13: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. ! 14: * ! 15: * All Rights Reserved ! 16: * ! 17: * Permission to use, copy, modify, and distribute this software and its ! 18: * documentation for any purpose and without fee is hereby granted, ! 19: * provided that the above copyright notice appear in all copies and that ! 20: * both that copyright notice and this permission notice appear in ! 21: * supporting documentation, and that the name of Digital Equipment ! 22: * Corporation not be used in advertising or publicity pertaining to ! 23: * distribution of the software without specific, written prior permission. ! 24: * ! 25: * ! 26: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 27: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 28: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 29: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 30: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 31: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 32: * SOFTWARE. ! 33: */ ! 34: ! 35: /* input.c */ ! 36: ! 37: #ifndef lint ! 38: static char rcs_id[] = "$Header: input.c,v 1.14 87/09/11 08:16:45 toddb Exp $"; ! 39: #endif lint ! 40: ! 41: #include <X11/Xlib.h> ! 42: #include <X11/keysym.h> ! 43: #include <X11/Intrinsic.h> ! 44: #include <X11/Xutil.h> ! 45: #include <stdio.h> ! 46: #include "ptyx.h" ! 47: ! 48: int MetaMode = 1; /* prefix with ESC when Meta Key is down */ ! 49: ! 50: static XComposeStatus compose_status = {NULL, 0}; ! 51: static char *kypd_num = " XXXXXXXX\tXXX\rXXXxxxxXXXXXXXXXXXXXXXXXXXXX*+,-.\\0123456789XXX="; ! 52: static char *kypd_apl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ??????abcdefghijklmnopqrstuvwxyzXXX"; ! 53: static char *cur = "DACB"; ! 54: ! 55: Input (keyboard, screen, event) ! 56: register TKeyboard *keyboard; ! 57: register TScreen *screen; ! 58: register XKeyPressedEvent *event; ! 59: { ! 60: ! 61: #define STRBUFSIZE 100 ! 62: ! 63: char strbuf[STRBUFSIZE]; ! 64: register char *string; ! 65: register int col, key = FALSE; ! 66: int pty = screen->respond; ! 67: int nbytes; ! 68: int keycode; ! 69: ANSI reply; ! 70: ! 71: nbytes = XLookupString (event, strbuf, STRBUFSIZE, ! 72: &keycode, &compose_status); ! 73: ! 74: string = &strbuf[0]; ! 75: reply.a_pintro = 0; ! 76: reply.a_final = 0; ! 77: reply.a_nparam = 0; ! 78: reply.a_inters = 0; ! 79: ! 80: if (IsPFKey(keycode)) { ! 81: reply.a_type = SS3; ! 82: unparseseq(&reply, pty); ! 83: unparseputc((char)(keycode-XK_KP_F1+'P'), pty); ! 84: key = TRUE; ! 85: } else if (IsKeypadKey(keycode)) { ! 86: if (keyboard->flags & KYPD_APL) { ! 87: reply.a_type = SS3; ! 88: unparseseq(&reply, pty); ! 89: unparseputc(kypd_apl[keycode-XK_KP_Space], pty); ! 90: } else ! 91: unparseputc(kypd_num[keycode-XK_KP_Space], pty); ! 92: key = TRUE; ! 93: } else if (IsCursorKey(keycode)) { ! 94: if (keyboard->flags & CURSOR_APL) { ! 95: reply.a_type = SS3; ! 96: unparseseq(&reply, pty); ! 97: unparseputc(cur[keycode-XK_Left], pty); ! 98: } else { ! 99: reply.a_type = CSI; ! 100: reply.a_final = cur[keycode-XK_Left]; ! 101: unparseseq(&reply, pty); ! 102: } ! 103: key = TRUE; ! 104: } else if (IsFunctionKey(keycode) || IsMiscFunctionKey(keycode)) { ! 105: reply.a_type = CSI; ! 106: reply.a_nparam = 1; ! 107: reply.a_param[0] = funcvalue(keycode); ! 108: reply.a_final = '~'; ! 109: if (reply.a_param[0] > 0) ! 110: unparseseq(&reply, pty); ! 111: key = TRUE; ! 112: } else if (nbytes > 0) { ! 113: if(screen->TekGIN) { ! 114: TekEnqMouse(*string++); ! 115: TekGINoff(); ! 116: nbytes--; ! 117: } ! 118: if ((nbytes == 1) && MetaMode && (event->state & Mod1Mask)) ! 119: unparseputc(033, pty); ! 120: while (nbytes-- > 0) ! 121: unparseputc(*string++, pty); ! 122: key = TRUE; ! 123: } ! 124: if(key && !screen->TekEmu) { ! 125: if(screen->scrollkey && screen->topline != 0) ! 126: WindowScroll(screen, 0); ! 127: if(screen->marginbell) { ! 128: col = screen->max_col - screen->nmarginbell; ! 129: if(screen->bellarmed >= 0) { ! 130: if(screen->bellarmed == screen->cur_row) { ! 131: if(screen->cur_col >= col) { ! 132: if(screen->cur_col == col) ! 133: Bell(); ! 134: screen->bellarmed = -1; ! 135: } ! 136: } else ! 137: screen->bellarmed = screen->cur_col < ! 138: col ? screen->cur_row : -1; ! 139: } else if(screen->cur_col < col) ! 140: screen->bellarmed = screen->cur_row; ! 141: } ! 142: } ! 143: #ifdef ENABLE_PRINT ! 144: if (keycode == XK_F2) TekPrint(); ! 145: #endif ! 146: return; ! 147: } ! 148: ! 149: funcvalue(keycode) ! 150: { ! 151: switch (keycode) { ! 152: case XK_F1: return(11); ! 153: case XK_F2: return(12); ! 154: case XK_F3: return(13); ! 155: case XK_F4: return(14); ! 156: case XK_F5: return(15); ! 157: case XK_F6: return(17); ! 158: case XK_F7: return(18); ! 159: case XK_F8: return(19); ! 160: case XK_F9: return(20); ! 161: case XK_F10: return(21); ! 162: case XK_F11: return(23); ! 163: case XK_F12: return(24); ! 164: case XK_F13: return(25); ! 165: case XK_F14: return(26); ! 166: case XK_F15: return(28); ! 167: case XK_Help: return(28); ! 168: case XK_F16: return(29); ! 169: case XK_Menu: return(29); ! 170: case XK_F17: return(31); ! 171: case XK_F18: return(32); ! 172: case XK_F19: return(33); ! 173: case XK_F20: return(34); ! 174: ! 175: case XK_Find : return(1); ! 176: case XK_Insert: return(2); ! 177: case XK_Delete: return(3); ! 178: case XK_Select: return(4); ! 179: case XK_Prior: return(5); ! 180: case XK_Next: return(6); ! 181: default: return(-1); ! 182: } ! 183: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.