⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 charproc.c

📁 源码,标准c++用力
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * $XConsortium: charproc.c,v 1.176.1.1 93/11/03 17:24:20 gildea Exp $ *//* * Copyright 1988 Massachusetts Institute of Technology * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. * *                         All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital Equipment * Corporation not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior permission. * * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. *//* charproc.c */#ifdef DEBUGGING#define DBG(i) fprintf(stderr, "%s\n", i);#else#define DBG(i)#endif#include "ptyx.h"#include "VTparse.h"#include "data.h"#include "error.h"#include "menu.h"#include "main.h"#include <X11/Xos.h>#include <X11/Xatom.h>#include <X11/Xutil.h>#include <X11/cursorfont.h>#include <X11/StringDefs.h>#include <X11/Xmu/Atoms.h>#include <X11/Xmu/CharSet.h>#include <X11/Xmu/Converters.h>#include <stdio.h>#include <errno.h>#include <setjmp.h>#include <ctype.h>#ifndef DONT_PROTOTYPE_DOTEXT		 static void dotext(register TScreen*, unsigned,  char, Char*, Char*, 	unsigned, unsigned );#endif#ifdef DEBUGGING	static debug = 1;#endif/* * Check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX * systems are broken and return EWOULDBLOCK when they should return EAGAIN. * Note that this macro may evaluate its argument more than once. */#if defined(EAGAIN) && defined(EWOULDBLOCK)#define E_TEST(err) ((err) == EAGAIN || (err) == EWOULDBLOCK)#else#ifdef EAGAIN#define E_TEST(err) ((err) == EAGAIN)#else#define E_TEST(err) ((err) == EWOULDBLOCK)#endif#endifextern jmp_buf VTend;extern XtAppContext app_con;extern Widget toplevel;extern void exit();extern char *malloc();extern char *realloc();static void VTallocbuf();static int finput();static void WriteText();static void bitset(), bitclr();    #define	DEFAULT		-1#define	TEXT_BUF_SIZE	256#define TRACKTIMESEC	4L#define TRACKTIMEUSEC	0L#define BELLSUPPRESSMSEC 200#define XtNalwaysHighlight "alwaysHighlight"#define XtNappcursorDefault "appcursorDefault"#define XtNappkeypadDefault "appkeypadDefault"#define XtNbellSuppressTime "bellSuppressTime"#define XtNboldFont "boldFont"#define XtNc132 "c132"#define XtNcharClass "charClass"#define XtNcurses "curses"#define XtNcursorColor "cursorColor"#define XtNcutNewline "cutNewline"#define XtNcutToBeginningOfLine "cutToBeginningOfLine"#define XtNeightBitInput "eightBitInput"#define XtNeightBitOutput "eightBitOutput"#define XtNgeometry "geometry"#define XtNtekGeometry "tekGeometry"#define XtNinternalBorder "internalBorder"#define XtNjumpScroll "jumpScroll"#ifdef ALLOWLOGGING#define XtNlogFile "logFile"#define XtNlogging "logging"#define XtNlogInhibit "logInhibit"#endif#define XtNloginShell "loginShell"#define XtNmarginBell "marginBell"#define XtNpointerColor "pointerColor"#define XtNpointerColorBackground "pointerColorBackground"#define XtNpointerShape "pointerShape"#define XtNmultiClickTime "multiClickTime"#define XtNmultiScroll "multiScroll"#define XtNnMarginBell "nMarginBell"#define XtNresizeGravity "resizeGravity"#define XtNreverseWrap "reverseWrap"#define XtNautoWrap "autoWrap"#define XtNsaveLines "saveLines"#define XtNscrollBar "scrollBar"#define XtNscrollTtyOutput "scrollTtyOutput"#define XtNscrollKey "scrollKey"#define XtNscrollLines "scrollLines"#define XtNscrollPos "scrollPos"#define XtNsignalInhibit "signalInhibit"#define XtNtekInhibit "tekInhibit"#define XtNtekSmall "tekSmall"#define XtNtekStartup "tekStartup"#define XtNtiteInhibit "titeInhibit"#define XtNvisualBell "visualBell"#define XtNallowSendEvents "allowSendEvents"#define XtNcolor0	"color0"#define XtNcolor1	"color1"#define XtNcolor2	"color2"#define XtNcolor3	"color3"#define XtNcolor4	"color4"#define XtNcolor5	"color5"#define XtNcolor6	"color6"#define XtNcolor7	"color7"#define XtCcolor0   "Color0"#define XtCcolor1   "Color1"#define XtCcolor2   "Color2"#define XtCcolor3   "Color3"#define XtCcolor4   "Color4"#define XtCcolor5   "Color5"#define XtCcolor6   "Color6"#define XtCcolor7   "Color7"#define XtCAlwaysHighlight "AlwaysHighlight"#define XtCAppcursorDefault "AppcursorDefault"#define XtCAppkeypadDefault "AppkeypadDefault"#define XtCBellSuppressTime "BellSuppressTime"#define XtCBoldFont "BoldFont"#define XtCC132 "C132"#define XtCCharClass "CharClass"#define XtCCurses "Curses"#define XtCCutNewline "CutNewline"#define XtCCutToBeginningOfLine "CutToBeginningOfLine"#define XtCEightBitInput "EightBitInput"#define XtCEightBitOutput "EightBitOutput"#define XtCGeometry "Geometry"#define XtCJumpScroll "JumpScroll"#ifdef ALLOWLOGGING#define XtCLogfile "Logfile"#define XtCLogging "Logging"#define XtCLogInhibit "LogInhibit"#endif#define XtCLoginShell "LoginShell"#define XtCMarginBell "MarginBell"#define XtCMultiClickTime "MultiClickTime"#define XtCMultiScroll "MultiScroll"#define XtCColumn "Column"#define XtCResizeGravity "ResizeGravity"#define XtCReverseWrap "ReverseWrap"#define XtCAutoWrap "AutoWrap"#define XtCSaveLines "SaveLines"#define XtCScrollBar "ScrollBar"#define XtCScrollLines "ScrollLines"#define XtCScrollPos "ScrollPos"#define XtCScrollCond "ScrollCond"#define XtCSignalInhibit "SignalInhibit"#define XtCTekInhibit "TekInhibit"#define XtCTekSmall "TekSmall"#define XtCTekStartup "TekStartup"#define XtCTiteInhibit "TiteInhibit"#define XtCVisualBell "VisualBell"#define XtCAllowSendEvents "AllowSendEvents"#define	doinput()		(bcnt-- > 0 ? *bptr++ : in_put())static int nparam;static ANSI reply;static int param[NPARAM];static unsigned long ctotal;static unsigned long ntotal;static jmp_buf vtjmpbuf;extern int groundtable[];extern int csitable[];extern int dectable[];extern int eigtable[];extern int esctable[];extern int iestable[];extern int igntable[];extern int scrtable[];extern int scstable[];/* event handlers */extern void HandleKeyPressed(), HandleEightBitKeyPressed();extern void HandleStringEvent();extern void HandleEnterWindow();extern void HandleLeaveWindow();extern void HandleBellPropertyChange();extern void HandleFocusChange();static void HandleKeymapChange();extern void HandleInsertSelection();extern void HandleSelectStart(), HandleKeyboardSelectStart();extern void HandleSelectExtend(), HandleSelectSet();extern void HandleSelectEnd(), HandleKeyboardSelectEnd();extern void HandleStartExtend(), HandleKeyboardStartExtend();static void HandleBell();static void HandleVisualBell();static void HandleIgnore();extern void HandleSecure();extern void HandleScrollForward();extern void HandleScrollBack();extern void HandleCreateMenu(), HandlePopupMenu();extern void HandleSetFont();extern void SetVTFont();extern void CursorButton();extern Boolean SendMousePosition();extern void ScrnSetAttributes();/* * NOTE: VTInitialize zeros out the entire ".screen" component of the  * XtermWidget, so make sure to add an assignment statement in VTInitialize()  * for each new ".screen" field added to this resource list. *//* Defaults */static  Boolean	defaultFALSE	   = FALSE;static  Boolean	defaultTRUE	   = TRUE;static  int	defaultBorderWidth = DEFBORDERWIDTH;static  int	defaultIntBorder   = DEFBORDER;static  int	defaultSaveLines   = SAVELINES;static	int	defaultScrollLines = SCROLLLINES;static  int	defaultNMarginBell = N_MARGINBELL;static  int	defaultMultiClickTime = MULTICLICKTIME;static  int	defaultBellSuppressTime = BELLSUPPRESSMSEC;static	char *	_Font_Selected_ = "yes";  /* string is arbitrary *//* * Warning, the following must be kept under 1024 bytes or else some  * compilers (particularly AT&T 6386 SVR3.2) will barf).  Workaround is to * declare a static buffer and copy in at run time (the the Athena text widget * does).  Yuck. */static char defaultTranslations[] ="\ Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\  Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY, CUT_BUFFER0) \n\Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \n\       ~Meta <KeyPress>:insert-seven-bit() \n\        Meta <KeyPress>:insert-eight-bit() \n\       !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\  !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\       ~Meta <Btn1Down>:select-start() \n\     ~Meta <Btn1Motion>:select-extend() \n\       !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\  !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\ ~Ctrl ~Meta <Btn2Down>:ignore() \n\   ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \n\       !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\  !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\ ~Ctrl ~Meta <Btn3Down>:start-extend() \n\     ~Meta <Btn3Motion>:select-extend()	\n\                <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\	      <BtnDown>:bell(0) \";static XtActionsRec actionsList[] = {     { "bell",		  HandleBell },    { "create-menu",	  HandleCreateMenu },    { "ignore",		  HandleIgnore },    { "insert",		  HandleKeyPressed },  /* alias for insert-seven-bit */    { "insert-seven-bit", HandleKeyPressed },    { "insert-eight-bit", HandleEightBitKeyPressed },    { "insert-selection", HandleInsertSelection },    { "keymap", 	  HandleKeymapChange },    { "popup-menu",	  HandlePopupMenu },    { "secure",		  HandleSecure },    { "select-start",	  HandleSelectStart },    { "select-extend",	  HandleSelectExtend },    { "select-end",	  HandleSelectEnd },    { "select-set",	  HandleSelectSet },    { "select-cursor-start",	  HandleKeyboardSelectStart },    { "select-cursor-end",	  HandleKeyboardSelectEnd },    { "set-vt-font",	  HandleSetFont },    { "start-extend",	  HandleStartExtend },    { "start-cursor-extend",	  HandleKeyboardStartExtend },    { "string",		  HandleStringEvent },    { "scroll-forw",	  HandleScrollForward },    { "scroll-back",	  HandleScrollBack },    /* menu actions */    { "allow-send-events",	HandleAllowSends },    { "set-visual-bell",	HandleSetVisualBell },#ifdef ALLOWLOGGING    { "set-logging",		HandleLogging },#endif    { "redraw",			HandleRedraw },    { "send-signal",		HandleSendSignal },    { "quit",			HandleQuit },    { "set-scrollbar",		HandleScrollbar },    { "set-jumpscroll",		HandleJumpscroll },    { "set-reverse-video",	HandleReverseVideo },    { "set-autowrap",		HandleAutoWrap },    { "set-reversewrap",	HandleReverseWrap },    { "set-autolinefeed",	HandleAutoLineFeed },    { "set-appcursor",		HandleAppCursor },    { "set-appkeypad",		HandleAppKeypad },    { "set-scroll-on-key",	HandleScrollKey },    { "set-scroll-on-tty-output",	HandleScrollTtyOutput },    { "set-allow132",		HandleAllow132 },    { "set-cursesemul",		HandleCursesEmul },    { "set-marginbell",		HandleMarginBell },    { "set-altscreen",		HandleAltScreen },    { "soft-reset",		HandleSoftReset },    { "hard-reset",		HandleHardReset },    { "clear-saved-lines",	HandleClearSavedLines },    { "set-terminal-type",	HandleSetTerminalType },    { "set-visibility",		HandleVisibility },    { "set-tek-text",		HandleSetTekText },    { "tek-page",		HandleTekPage },    { "tek-reset",		HandleTekReset },    { "tek-copy",		HandleTekCopy },    { "visual-bell",		HandleVisualBell },	{ "cursor-warp-button", CursorButton }};static XtResource resources[] = {{XtNfont, XtCFont, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, misc.f_n), XtRString,	DEFFONT},{XtNboldFont, XtCBoldFont, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, misc.f_b), XtRString,	DEFBOLDFONT},{XtNc132, XtCC132, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.c132),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNcharClass, XtCCharClass, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, screen.charClass),	XtRString, (caddr_t) NULL},{XtNcurses, XtCCurses, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.curses),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNcutNewline, XtCCutNewline, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.cutNewline),	XtRBoolean, (caddr_t) &defaultTRUE},{XtNcutToBeginningOfLine, XtCCutToBeginningOfLine, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.cutToBeginningOfLine),	XtRBoolean, (caddr_t) &defaultTRUE},{XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),	XtOffsetOf(XtermWidgetRec, core.background_pixel),	XtRString, "XtDefaultBackground"},{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),	XtOffsetOf(XtermWidgetRec, screen.foreground),	XtRString, "XtDefaultForeground"},{XtNcursorColor, XtCForeground, XtRPixel, sizeof(Pixel),	XtOffsetOf(XtermWidgetRec, screen.cursorcolor),	XtRString, "XtDefaultForeground"},{XtNeightBitInput, XtCEightBitInput, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.input_eight_bits), 	XtRBoolean, (caddr_t) &defaultTRUE},{XtNeightBitOutput, XtCEightBitOutput, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.output_eight_bits), 	XtRBoolean, (caddr_t) &defaultTRUE},{XtNgeometry,XtCGeometry, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, misc.geo_metry),	XtRString, (caddr_t) NULL},{XtNalwaysHighlight,XtCAlwaysHighlight,XtRBoolean,        sizeof(Boolean),XtOffsetOf(XtermWidgetRec, screen.always_highlight),        XtRBoolean, (caddr_t) &defaultFALSE},{XtNappcursorDefault,XtCAppcursorDefault,XtRBoolean,        sizeof(Boolean),XtOffsetOf(XtermWidgetRec, misc.appcursorDefault),        XtRBoolean, (XtPointer) &defaultFALSE},{XtNappkeypadDefault,XtCAppkeypadDefault,XtRBoolean,        sizeof(Boolean),XtOffsetOf(XtermWidgetRec, misc.appkeypadDefault),        XtRBoolean, (XtPointer) &defaultFALSE},{XtNbellSuppressTime, XtCBellSuppressTime, XtRInt, sizeof(int),        XtOffsetOf(XtermWidgetRec, screen.bellSuppressTime),        XtRInt, (XtPointer) &defaultBellSuppressTime},{XtNtekGeometry,XtCGeometry, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, misc.T_geometry),	XtRString, (caddr_t) NULL},{XtNinternalBorder,XtCBorderWidth,XtRInt, sizeof(int),	XtOffsetOf(XtermWidgetRec, screen.border),	XtRInt, (caddr_t) &defaultIntBorder},{XtNjumpScroll, XtCJumpScroll, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.jumpscroll),	XtRBoolean, (caddr_t) &defaultTRUE},#ifdef ALLOWLOGGING{XtNlogFile, XtCLogfile, XtRString, sizeof(char *),	XtOffsetOf(XtermWidgetRec, screen.logfile),	XtRString, (caddr_t) NULL},{XtNlogging, XtCLogging, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.log_on),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNlogInhibit, XtCLogInhibit, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.logInhibit),	XtRBoolean, (caddr_t) &defaultFALSE},#endif{XtNloginShell, XtCLoginShell, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.login_shell),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNmarginBell, XtCMarginBell, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.marginbell),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNpointerColor, XtCForeground, XtRPixel, sizeof(Pixel),	XtOffsetOf(XtermWidgetRec, screen.mousecolor),	XtRString, "XtDefaultForeground"},{XtNpointerColorBackground, XtCBackground, XtRPixel, sizeof(Pixel),	XtOffsetOf(XtermWidgetRec, screen.mousecolorback),	XtRString, "XtDefaultBackground"},{XtNpointerShape,XtCCursor, XtRCursor, sizeof(Cursor),	XtOffsetOf(XtermWidgetRec, screen.pointer_cursor),	XtRString, (caddr_t) "xterm"},{XtNmultiClickTime,XtCMultiClickTime, XtRInt, sizeof(int),	XtOffsetOf(XtermWidgetRec, screen.multiClickTime),	XtRInt, (caddr_t) &defaultMultiClickTime},{XtNmultiScroll,XtCMultiScroll, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.multiscroll),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNnMarginBell,XtCColumn, XtRInt, sizeof(int),	XtOffsetOf(XtermWidgetRec, screen.nmarginbell),	XtRInt, (caddr_t) &defaultNMarginBell},{XtNreverseVideo,XtCReverseVideo,XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.re_verse),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNresizeGravity, XtCResizeGravity, XtRGravity, sizeof(XtGravity),	XtOffsetOf(XtermWidgetRec, misc.resizeGravity),	XtRImmediate, (XtPointer) SouthWestGravity},{XtNreverseWrap,XtCReverseWrap, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.reverseWrap),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNautoWrap,XtCAutoWrap, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.autoWrap),	XtRBoolean, (caddr_t) &defaultTRUE},{XtNsaveLines, XtCSaveLines, XtRInt, sizeof(int),	XtOffsetOf(XtermWidgetRec, screen.savelines),	XtRInt, (caddr_t) &defaultSaveLines},{XtNscrollBar, XtCScrollBar, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.scrollbar),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNscrollTtyOutput,XtCScrollCond, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.scrollttyoutput),	XtRBoolean, (caddr_t) &defaultTRUE},{XtNscrollKey, XtCScrollCond, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.scrollkey),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNscrollLines, XtCScrollLines, XtRInt, sizeof(int),	XtOffsetOf(XtermWidgetRec, screen.scrolllines),	XtRInt, (caddr_t) &defaultScrollLines},{XtNsignalInhibit,XtCSignalInhibit,XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.signalInhibit),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNtekInhibit, XtCTekInhibit, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.tekInhibit),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNtekSmall, XtCTekSmall, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.tekSmall),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNtekStartup, XtCTekStartup, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.TekEmu),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNtiteInhibit, XtCTiteInhibit, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, misc.titeInhibit),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNvisualBell, XtCVisualBell, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.visualbell),	XtRBoolean, (caddr_t) &defaultFALSE},{XtNallowSendEvents, XtCAllowSendEvents, XtRBoolean, sizeof(Boolean),	XtOffsetOf(XtermWidgetRec, screen.allowSendEvents),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -