/* * CDE - Common Desktop Environment * * Copyright (c) 1993-2012, The Open Group. All rights reserved. * * These libraries and programs are free software; you can * redistribute them and/or modify them under the terms of the GNU * Lesser General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. * * These libraries and programs are distributed in the hope that * they will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public * License along with these libraries and programs; if not, write * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301 USA */ /* * $XConsortium: TermPrimData.h /main/2 1996/10/30 13:00:24 cde-hp $"; */ /* * * (c) Copyright 1993, 1994 Hewlett-Packard Company * * (c) Copyright 1993, 1994 International Business Machines Corp. * * (c) Copyright 1993, 1994 Sun Microsystems, Inc. * * (c) Copyright 1993, 1994 Novell, Inc. * * (c) Copyright 1995 Digital Equipment Corporation * */ #ifndef _Dt_TermPrimData_h #define _Dt_TermPrimData_h #include "TermHeader.h" #include "TermPrimBuffer.h" #include "TermPrimParser.h" #include "TermPrimPendingText.h" #include "TermPrimRender.h" #include "TermPrimSelect.h" #include "TermPrimLineFont.h" #include #include #define NUM_FONTS 4 #define KEYBOARD_LOCKED(kbdLocked) ((kbdLocked).escape || \ (kbdLocked).xferPending || \ (kbdLocked).error || \ (kbdLocked).record) typedef struct { Font fid; Pixel foreground; Pixel background; GC gc; } TermGC; /* ** There are 4 reasons that the keyboard could be locked... */ typedef struct _TermKbdLockStatus { Boolean escape; /* escape sequence (or auto lock) */ Boolean xferPending; /* a transfer is pending */ Boolean error; /* an error message is being displayed */ Boolean record; /* we're in record mode */ } TermKbdLockStatus; typedef struct _OnTheSpotData { short row; short column; short start; short end; short pre_len; short cursor; Boolean under_preedit; } OnTheSpotDataRec, *OnTheSpotData; #define PreRow(w) ((w)->term.tpd->onthespot->row) #define PreColumn(w) ((w)->term.tpd->onthespot->column) #define PreStart(w) ((w)->term.tpd->onthespot->start) #define PreEnd(w) ((w)->term.tpd->onthespot->end) #define PreLen(w) ((w)->term.tpd->onthespot->pre_len) #define PreCursor(w) ((w)->term.tpd->onthespot->cursor) #define PreUnder(w) ((w)->term.tpd->onthespot->under_preedit) typedef struct termData { /********************************************************************* * Pty */ XtInputId ptyOutputId; /* pty master Xt output id */ XtInputId ptyInputId; /* pty master Xt input id */ /********************************************************************* * Font */ TermFont termFont; /* passed in base term font */ TermFont boldTermFont; /* passed in bold term font */ TermFont defaultTermFont; /* default base term font */ TermFont defaultBoldTermFont; /* default bold term font */ #ifdef DKS unsigned char renderTermFontsNum; /* number of above fonts */ unsigned char baseFontIndex; /* number of base font */ unsigned char altFontIndex; /* number of alternate font */ #endif /* DKS */ short cellWidth; /* width of base font */ short cellHeight; /* height of base font */ short ascent; /* ascent of base font */ /********************************************************************* * Buffer */ TermBuffer termBuffer; /* character/enhancment buffer */ short bufferRows; /* rows of term buffer memory */ short bufferRowRatio; /* scaled ratio of term buffer * memory to term window */ TermBuffer historyBuffer; /* history character buffer */ short historyBufferRows; /* rows of term history buffer */ short leftMargin; /* left margin */ short rightMargin; /* right margin */ /* ** */ short topRow; /* number of top row on screen */ short cursorColumn; /* current cursor position, col */ short cursorRow; /* current cursor position, row */ short lastUsedRow; /* number of last used buffer row. * if == 0, no rows used, if == 1, * 1 row used, etc. */ short lastUsedHistoryRow; short offsetX; /* width of internal window * border. With Motif, this is * the width of the * highlightThickness and * shadowThickness. */ short offsetY; /* height of internal window * border (see above) */ /* ** Generic mode information... */ Boolean transmitFunctions; /* if true, transmit functions (A) */ Boolean autoWrapRight; /* if true, wrap at right margin (C) */ Boolean wrapRightAfterInsert; /* if true, wrap after insert */ enum { WRAPbetweenMargins = 0, WRAPatRightMargin, WRAPpastRightMargin } wrapState; /* margin wrap state */ /* ** Memory lock status... */ enum { SCROLL_LOCKoff = 0, SCROLL_LOCKon, SCROLL_LOCKprotect } scrollLockMode; /* memory lock mode */ short scrollLockTopRow; /* bottom of top scroll lock region */ short scrollLockBottomRow; /* top of bottom scroll lock region */ /* for mapOnOutput */ time_t creationTime ; Boolean windowMapped; /* pointer blanking */ Boolean pointerFirst; /* for initialization */ Boolean pointerOn; /* Is pointer on? */ XtIntervalId pointerTimeoutID; /* ID of current timeout */ Boolean pointerFrozen; /* Is pointer outside window? */ Cursor noPointer; /* blank pointer pixmap */ /* logging */ FILE *logStream; /* file pointer for logging */ uid_t uid; /* user id of user */ gid_t gid; /* group id of user */ char *shell; /* users shell */ /* these will go away when the associated files are updated... */ #define memoryLockRow scrollLockTopRow #define memoryLockMode scrollLockMode #define MEMORY_LOCKoff SCROLL_LOCKoff #define MEMORY_LOCKon SCROLL_LOCKon #define MEMORY_LOCKprotect SCROLL_LOCKprotect /********************************************************************* * Parser */ ParserContext context; /* context of the parser */ Boolean parserNotInStartState; int mbCurMax; /* max bytes per char for locale*/ unsigned char mbPartialChar[MB_LEN_MAX]; /* partial multi-byte char */ int mbPartialCharLen; /* length of above */ /********************************************************************* * Render GCs */ TermGC renderGC; /* GC for rendering text */ TermGC renderReverseGC; /* GC for rendering text */ TermGC clearGC; /* GC for clearing text */ /********************************************************************* * Cursor */ XtIntervalId cursorTimeoutId; /* cursor timeout id */ TermGC cursorGC; /* GC for blinking cursor */ enum { CURSORon, CURSORoff, CURSORblink } cursorState; /* state of cursor */ Boolean cursorVisible; /* true if cursor is visible */ /********************************************************************* * Input Method */ Boolean IMHasFocus; /* true if IM has focus */ /* The following are in character positions, not pixel positions... */ short IMCursorColumn; /* current IM cursor column */ short IMCursorRow; /* current IM cursor row */ /********************************************************************* * Scroll */ /* the following data reflects the copy area in progress to be used * for filling in possible holes in exposure events... */ short scrollSrcX; /* x src coord of scrolled area */ short scrollSrcY; /* y src coord of scrolled area */ short scrollDestX; /* x dest coord of scrolled area*/ short scrollDestY; /* y dest coord of scrolled area*/ short scrollWidth; /* width of scrolled area */ short scrollHeight; /* height of scrolled area */ short scrollTopRow; /* row of scroll top */ short scrollBottomRow; /* row of scroll bottom */ Boolean *scrollRefreshRows; /* flags for rows that need to * be refreshed after a scroll */ Boolean useHistoryBuffer; /* true if separate history buf */ Boolean allowScrollBelowBuffer; /* true allows scrolling below * the terminal buffer */ /* the following is for data for both any current scroll-in-progress * as well as any pending (queued) scroll... */ Boolean scrollInProgress; /* true if scroll in progresss */ union { struct { short scrollLines; /* number of lines to scroll */ short scrollsPending; /* number of scrolls pending */ Boolean scrolled; /* true when scrolled, cleared * when updated */ } jump; struct { short pendingScrollLines; /* number of lines in pending */ short pendingScrollTopRow; /* top row of pending scroll */ short pendingScrollBottomRow; /* bottom row of pending scroll */ Boolean pendingScroll; /* True if scroll queued up */ } nojump; } scroll; /* the following is for stuffing input data when we have turned off * input processing during a scroll... */ PendingText pendingRead; /* pending read data */ Boolean readInProgress; /* True if now reading from pty */ /* ** Set up a linked list of text chunks, data stored here is waiting ** to be written. */ PendingText pendingWrite; /* pending write data */ /* ** Keyboard state information... */ TermKbdLockStatus keyboardLocked; /* if true, keyboard is locked */ DtTermInsertCharMode insertCharMode; /* insert char mode */ Boolean autoLineFeed; /* if true, in auto LF mode */ Boolean halfDuplex; /* if true, half duplex */ /********************************************************************* * Caps lock tracking */ Boolean capsLock; /* true == caps lock set */ KeyCode *capsLockKeyCodes; /* keyboard's modifier keymap */ short numCapsLockKeyCodes; /* number of caps lock modifiers*/ /********************************************************************* * kshmode tracking */ unsigned int metaMask; /* mod mask used for meta */ /********************************************************************* * STOP indicator tracking */ Boolean outputStopped; /* true == out from pty stopped */ Boolean oneSecondPause; /* true == esc @ pause */ /********************************************************************* * Warning/error dialog */ Widget warningDialog; /* warning dialog */ Boolean mapWarningDialog; /* map dialog when window mapped*/ Boolean warningDialogMapped; /* true if dialog is mapped */ enum { userMessage, memoryFull } warningDialogType; /********************************************************************* * /etc/utmp stuff */ char *utmpId; /* id of /etc/utmp entry */ #ifdef UTMPID_PROPERTY_NOTIFY enum { utmpIdInvalid = 0, utmpIdValidNotClear, utmpIdValid, utmpIdError } utmpIdState; #endif /* UTMPID_PROPERTY_NOTIFY */ #ifdef UTMPID_PIPE_NOTIFY int utmpNotifyPipe[2]; XtInputId utmpNotifyPipeInputId; XtInputId utmpNotifyPipeExceptId; #endif /* UTMPID_PIPE_NOTIFY */ /* ** Selections... */ TermSelectInfo selectInfo; /* ** On the spot input method data */ OnTheSpotData onthespot; } DtTermPrimDataRec, *DtTermPrimData; #endif /* _Dt_TermPrimData_h */