1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <rfb/rfb.h>
2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* this is now the default */
4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define USE_ATTRIBUTE_BUFFER
5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct vncConsole {
7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* width and height in cells (=characters) */
8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int width, height;
9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* current position */
11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int x,y;
12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* characters */
14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  char *screenBuffer;
15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef USE_ATTRIBUTE_BUFFER
17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* attributes: colours. If NULL, default to gray on black, else
18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat     for each cell an unsigned char holds foreColour|(backColour<<4) */
19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  char *attributeBuffer;
20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif
21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* if this is set, the screen doesn't scroll. */
23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool wrapBottomToTop;
24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* height and width of one character */
26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int cWidth, cHeight;
27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* offset of characters */
28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int xhot,yhot;
29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* colour */
31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  unsigned char foreColour,backColour;
32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int8_t cx1,cy1,cx2,cy2;
33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* input buffer */
35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  char *inputBuffer;
36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int inputCount;
37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int inputSize;
38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  long selectTimeOut;
39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool doEcho; /* if reading input, do output directly? */
40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* selection */
42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  char *selection;
43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* mouse */
45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool wasRightButtonDown;
46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool currentlyMarking;
47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  int markStart,markEnd;
48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  /* should text cursor be drawn? (an underscore at current position) */
50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool cursorActive;
51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool cursorIsDrawn;
52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbBool dontDrawCursor; /* for example, while scrolling */
53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbFontDataPtr font;
55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat  rfbScreenInfoPtr screen;
56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} vncConsole, *vncConsolePtr;
57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef USE_ATTRIBUTE_BUFFER
59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatvncConsolePtr vcGetConsole(int *argc,char **argv,
60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat			   int width,int height,rfbFontDataPtr font,
61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat			   rfbBool withAttributes);
62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else
63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatvncConsolePtr vcGetConsole(int argc,char **argv,
64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat			   int width,int height,rfbFontDataPtr font);
65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif
66a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcDrawCursor(vncConsolePtr c);
67a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcHideCursor(vncConsolePtr c);
68a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcCheckCoordinates(vncConsolePtr c);
69a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
70a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPutChar(vncConsolePtr c,unsigned char ch);
71a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPrint(vncConsolePtr c,unsigned char* str);
72a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPrintF(vncConsolePtr c,char* format,...);
73a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
74a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPutCharColour(vncConsolePtr c,unsigned char ch,
75a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat		     unsigned char foreColour,unsigned char backColour);
76a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPrintColour(vncConsolePtr c,unsigned char* str,
77a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat		   unsigned char foreColour,unsigned char backColour);
78a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPrintFColour(vncConsolePtr c,unsigned char foreColour,
79a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat		    unsigned char backColour,char* format,...);
80a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
81a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatchar vcGetCh(vncConsolePtr c);
82a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatchar vcGetChar(vncConsolePtr c); /* blocking */
83a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatchar *vcGetString(vncConsolePtr c,char *buffer,int maxLen);
84a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
85a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcKbdAddEventProc(rfbBool down,rfbKeySym keySym,rfbClientPtr cl);
86a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcPtrAddEventProc(int buttonMask,int x,int y,rfbClientPtr cl);
87a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcSetXCutTextProc(char* str,int len, struct _rfbClientRec* cl);
88a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
89a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcToggleMarkCell(vncConsolePtr c,int pos);
90a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcUnmark(vncConsolePtr c);
91a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
92a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcProcessEvents(vncConsolePtr c);
93a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
94a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* before using this function, hide the cursor */
95a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid vcScroll(vncConsolePtr c,int lineCount);
96