// -*- mode:objc -*- // $Id: VT100Terminal.h,v 1.15 2006/03/03 22:30:38 ujwal Exp $ /* ** VT100Terminal.h ** ** Copyright (c) 2002, 2003 ** ** Author: Fabian, Ujwal S. Setlur ** Initial code by Kiichi Kusama ** ** Project: iTerm ** ** Description: Implements the model class VT100 terminal. ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #import @class VT100Screen; @class PseudoTerminal; // VT100TCC types #define VT100CC_NULL 0 #define VT100CC_ENQ 5 // Transmit ANSWERBACK message #define VT100CC_BEL 7 // Sound bell #define VT100CC_BS 8 // Move cursor to the left #define VT100CC_HT 9 // Move cursor to the next tab stop #define VT100CC_LF 10 // line feed or new line operation #define VT100CC_VT 11 // Same as . #define VT100CC_FF 12 // Same as . #define VT100CC_CR 13 // Move the cursor to the left margin #define VT100CC_SO 14 // Invoke the G1 character set #define VT100CC_SI 15 // Invoke the G0 character set #define VT100CC_DC1 17 // Causes terminal to resume transmission (XON). #define VT100CC_DC3 19 // Causes terminal to stop transmitting all codes except XOFF and XON (XOFF). #define VT100CC_CAN 24 // Cancel a control sequence #define VT100CC_SUB 26 // Same as . #define VT100CC_ESC 27 // Introduces a control sequence. #define VT100CC_DEL 255 // Ignored on input; not stored in buffer. #define VT100_WAIT 1000 #define VT100_NOTSUPPORT 1001 #define VT100_SKIP 1002 #define VT100_STRING 1003 // string #define VT100_UNKNOWNCHAR 1005 #define VT100CSI_DECSET 1006 #define VT100CSI_DECRST 1007 #define VT100CSI_CPR 2000 // Cursor Position Report #define VT100CSI_CUB 2001 // Cursor Backward #define VT100CSI_CUD 2002 // Cursor Down #define VT100CSI_CUF 2003 // Cursor Forward #define VT100CSI_CUP 2004 // Cursor Position #define VT100CSI_CUU 2005 // Cursor Up #define VT100CSI_DA 2006 // Device Attributes #define VT100CSI_DECALN 2007 // Screen Alignment Display #define VT100CSI_DECDHL 2013 // Double Height Line #define VT100CSI_DECDWL 2014 // Double Width Line #define VT100CSI_DECID 2015 // Identify Terminal #define VT100CSI_DECKPAM 2017 // Keypad Application Mode #define VT100CSI_DECKPNM 2018 // Keypad Numeric Mode #define VT100CSI_DECLL 2019 // Load LEDS #define VT100CSI_DECRC 2021 // Restore Cursor #define VT100CSI_DECREPTPARM 2022 // Report Terminal Parameters #define VT100CSI_DECREQTPARM 2023 // Request Terminal Parameters #define VT100CSI_DECSC 2024 // Save Cursor #define VT100CSI_DECSTBM 2027 // Set Top and Bottom Margins #define VT100CSI_DECSWL 2028 // Single-width Line #define VT100CSI_DECTST 2029 // Invoke Confidence Test #define VT100CSI_DSR 2030 // Device Status Report #define VT100CSI_ED 2031 // Erase In Display #define VT100CSI_EL 2032 // Erase In Line #define VT100CSI_HTS 2033 // Horizontal Tabulation Set #define VT100CSI_HVP 2034 // Horizontal and Vertical Position #define VT100CSI_IND 2035 // Index #define VT100CSI_NEL 2037 // Next Line #define VT100CSI_RI 2038 // Reverse Index #define VT100CSI_RIS 2039 // Reset To Initial State #define VT100CSI_RM 2040 // Reset Mode #define VT100CSI_SCS 2041 #define VT100CSI_SCS0 2041 // Select Character Set 0 #define VT100CSI_SCS1 2042 // Select Character Set 1 #define VT100CSI_SCS2 2043 // Select Character Set 2 #define VT100CSI_SCS3 2044 // Select Character Set 3 #define VT100CSI_SGR 2045 // Select Graphic Rendition #define VT100CSI_SM 2046 // Set Mode #define VT100CSI_TBC 2047 // Tabulation Clear // some xterm extension #define XTERMCC_WIN_TITLE 86 // Set window title #define XTERMCC_ICON_TITLE 91 #define XTERMCC_WINICON_TITLE 92 #define XTERMCC_INSBLNK 87 // Insert blank #define XTERMCC_INSLN 88 // Insert lines #define XTERMCC_DELCH 89 // delete blank #define XTERMCC_DELLN 90 // delete lines // Some ansi stuff #define ANSICSI_CHA 3000 // Cursor Horizontal Absolute #define ANSICSI_VPA 3001 // Vert Position Absolute #define ANSICSI_VPR 3002 // Vert Position Relative #define ANSICSI_ECH 3003 // Erase Character #define ANSICSI_PRINT 3004 // Print to Ansi // Toggle between ansi/vt52 #define STRICT_ANSI_MODE 4000 #define VT100CSIPARAM_MAX 16 typedef struct { int type; unsigned char *position; int length; union { NSString *string; unsigned char code; struct { int p[VT100CSIPARAM_MAX]; int count; BOOL question; int modifier; } csi; } u; } VT100TCC; // character attributes #define VT100CHARATTR_ALLOFF 0 #define VT100CHARATTR_BOLD 1 #define VT100CHARATTR_UNDER 4 #define VT100CHARATTR_BLINK 5 #define VT100CHARATTR_REVERSE 7 // xterm additions #define VT100CHARATTR_NORMAL 22 #define VT100CHARATTR_NOT_UNDER 24 #define VT100CHARATTR_STEADY 25 #define VT100CHARATTR_POSITIVE 27 typedef enum { COLORCODE_BLACK=0, COLORCODE_RED=1, COLORCODE_GREEN=2, COLORCODE_YELLOW=3, COLORCODE_BLUE=4, COLORCODE_PURPLE=5, COLORCODE_WATER=6, COLORCODE_WHITE=7, COLORS } colorCode; // 8 color support #define VT100CHARATTR_FG_BASE 30 #define VT100CHARATTR_BG_BASE 40 #define VT100CHARATTR_FG_BLACK (VT100CHARATTR_FG_BASE + COLORCODE_BLACK) #define VT100CHARATTR_FG_RED (VT100CHARATTR_FG_BASE + COLORCODE_RED) #define VT100CHARATTR_FG_GREEN (VT100CHARATTR_FG_BASE + COLORCODE_GREEN) #define VT100CHARATTR_FG_YELLOW (VT100CHARATTR_FG_BASE + COLORCODE_YELLOW) #define VT100CHARATTR_FG_BLUE (VT100CHARATTR_FG_BASE + COLORCODE_BLUE) #define VT100CHARATTR_FG_PURPLE (VT100CHARATTR_FG_BASE + COLORCODE_PURPLE) #define VT100CHARATTR_FG_WATER (VT100CHARATTR_FG_BASE + COLORCODE_WATER) #define VT100CHARATTR_FG_WHITE (VT100CHARATTR_FG_BASE + COLORCODE_WHITE) #define VT100CHARATTR_FG_DEFAULT (VT100CHARATTR_FG_BASE + 9) #define VT100CHARATTR_BG_BLACK (VT100CHARATTR_BG_BASE + COLORCODE_BLACK) #define VT100CHARATTR_BG_RED (VT100CHARATTR_BG_BASE + COLORCODE_RED) #define VT100CHARATTR_BG_GREEN (VT100CHARATTR_BG_BASE + COLORCODE_GREEN) #define VT100CHARATTR_BG_YELLOW (VT100CHARATTR_BG_BASE + COLORCODE_YELLOW) #define VT100CHARATTR_BG_BLUE (VT100CHARATTR_BG_BASE + COLORCODE_BLUE) #define VT100CHARATTR_BG_PURPLE (VT100CHARATTR_BG_BASE + COLORCODE_PURPLE) #define VT100CHARATTR_BG_WATER (VT100CHARATTR_BG_BASE + COLORCODE_WATER) #define VT100CHARATTR_BG_WHITE (VT100CHARATTR_BG_BASE + COLORCODE_WHITE) #define VT100CHARATTR_BG_DEFAULT (VT100CHARATTR_BG_BASE + 9) // 16 color support #define VT100CHARATTR_FG_HI_BASE 90 #define VT100CHARATTR_BG_HI_BASE 100 #define VT100CHARATTR_FG_HI_BLACK (VT100CHARATTR_FG_HI_BASE + COLORCODE_BLACK) #define VT100CHARATTR_FG_HI_RED (VT100CHARATTR_FG_HI_BASE + COLORCODE_RED) #define VT100CHARATTR_FG_HI_GREEN (VT100CHARATTR_FG_HI_BASE + COLORCODE_GREEN) #define VT100CHARATTR_FG_HI_YELLOW (VT100CHARATTR_FG_HI_BASE + COLORCODE_YELLOW) #define VT100CHARATTR_FG_HI_BLUE (VT100CHARATTR_FG_HI_BASE + COLORCODE_BLUE) #define VT100CHARATTR_FG_HI_PURPLE (VT100CHARATTR_FG_HI_BASE + COLORCODE_PURPLE) #define VT100CHARATTR_FG_HI_WATER (VT100CHARATTR_FG_HI_BASE + COLORCODE_WATER) #define VT100CHARATTR_FG_HI_WHITE (VT100CHARATTR_FG_HI_BASE + COLORCODE_WHITE) #define VT100CHARATTR_BG_HI_BLACK (VT100CHARATTR_BG_HI_BASE + COLORCODE_BLACK) #define VT100CHARATTR_BG_HI_RED (VT100CHARATTR_BG_HI_BASE + COLORCODE_RED) #define VT100CHARATTR_BG_HI_GREEN (VT100CHARATTR_BG_HI_BASE + COLORCODE_GREEN) #define VT100CHARATTR_BG_HI_YELLOW (VT100CHARATTR_BG_HI_BASE + COLORCODE_YELLOW) #define VT100CHARATTR_BG_HI_BLUE (VT100CHARATTR_BG_HI_BASE + COLORCODE_BLUE) #define VT100CHARATTR_BG_HI_PURPLE (VT100CHARATTR_BG_HI_BASE + COLORCODE_PURPLE) #define VT100CHARATTR_BG_HI_WATER (VT100CHARATTR_BG_HI_BASE + COLORCODE_WATER) #define VT100CHARATTR_BG_HI_WHITE (VT100CHARATTR_BG_HI_BASE + COLORCODE_WHITE) // for foreground colors #define DEFAULT_FG_COLOR_CODE 0x10 #define BOLD_MASK 0x20 #define BLINK_MASK 0x40 #define UNDER_MASK 0x80 #define SELECTED_TEXT 0x100 #define CURSOR_TEXT 0x200 // for background colors #define DEFAULT_BG_COLOR_CODE 0x11 #define SELECTION_MASK 0x20 typedef enum { MOUSE_REPORTING_NONE = -1, MOUSE_REPORTING_NORMAL = 0, MOUSE_REPORTING_HILITE, MOUSE_REPORTING_BUTTON_MOTION, MOUSE_REPORTING_ALL_MOTION, } mouseMode; @interface VT100Terminal : NSObject { NSStringEncoding ENCODING; NSMutableData *STREAM; VT100Screen *SCREEN; PseudoTerminal *PARENT; NSLock *streamLock; BOOL LINE_MODE; // YES=Newline, NO=Line feed BOOL CURSOR_MODE; // YES=Application, NO=Cursor BOOL ANSI_MODE; // YES=ANSI, NO=VT52 BOOL COLUMN_MODE; // YES=132 Column, NO=80 Column BOOL SCROLL_MODE; // YES=Smooth, NO=Jump BOOL SCREEN_MODE; // YES=Reverse, NO=Normal BOOL ORIGIN_MODE; // YES=Relative, NO=Absolute BOOL WRAPAROUND_MODE; // YES=On, NO=Off BOOL AUTOREPEAT_MODE; // YES=On, NO=Off BOOL INTERLACE_MODE; // YES=On, NO=Off BOOL KEYPAD_MODE; // YES=Application, NO=Numeric BOOL INSERT_MODE; // YES=Insert, NO=Replace int CHARSET; // G0...G3 BOOL XON; // YES=XON, NO=XOFF BOOL numLock; // YES=ON, NO=OFF, default=YES; mouseMode MOUSE_MODE; int FG_COLORCODE; int BG_COLORCODE; int bold, under, blink, reversed, highlight; int saveBold, saveUnder, saveBlink, saveReversed, saveHighlight; int saveCHARSET; BOOL TRACE; BOOL strictAnsiMode; BOOL allowColumnMode; unsigned int streamOffset; } + (void)initialize; - (id)init:(PseudoTerminal *) parent; - (void)dealloc; - (BOOL)trace; - (void)setTrace:(BOOL)flag; - (BOOL)strictAnsiMode; - (void)setStrictAnsiMode: (BOOL)flag; - (BOOL)allowColumnMode; - (void)setAllowColumnMode: (BOOL)flag; - (NSStringEncoding)encoding; - (void)setEncoding:(NSStringEncoding)encoding; - (void)cleanStream; - (void)putStreamData:(char *)data length: (int)length; - (VT100TCC)getNextToken; - (NSData *)keyArrowUp:(unsigned int)modflag; - (NSData *)keyArrowDown:(unsigned int)modflag; - (NSData *)keyArrowLeft:(unsigned int)modflag; - (NSData *)keyArrowRight:(unsigned int)modflag; - (NSData *)keyInsert; - (NSData *)keyHome; - (NSData *)keyDelete; - (NSData *)keyBackspace; - (NSData *)keyEnd; - (NSData *)keyPageUp; - (NSData *)keyPageDown; - (NSData *)keyFunction:(int)no; - (NSData *)keyPFn: (int) n; - (NSData *)keypadData: (unichar) unicode keystr: (NSString *) keystr; - (NSData *)mousePress: (int)button withModifiers: (unsigned int)modflag atX: (int)x Y: (int)y; - (NSData *)mouseReleaseAtX: (int)x Y: (int)y; - (NSData *)mouseMotion: (int)button withModifiers: (unsigned int)modflag atX: (int)x Y: (int)y; - (BOOL)lineMode; - (BOOL)cursorMode; - (BOOL)columnMode; - (BOOL)scrollMode; - (BOOL)screenMode; - (BOOL)originMode; - (BOOL)wraparoundMode; - (BOOL)autorepeatMode; - (BOOL)interlaceMode; - (BOOL)keypadMode; - (BOOL)insertMode; - (int)charset; - (BOOL)xon; - (mouseMode)mouseMode; - (int)foregroundColorCode; - (int)backgroundColorCode; - (NSData *)reportActivePositionWithX:(int)x Y:(int)y; - (NSData *)reportStatus; - (NSData *)reportDeviceAttribute; - (NSData *)reportSecondaryDeviceAttribute; - (void)_setMode:(VT100TCC)token; - (void)_setCharAttr:(VT100TCC)token; - (void) setScreen:(VT100Screen *)sc; @end