blob: cd5deba628298ef9695dc919f47fdf5c73820d50 [file] [log] [blame]
/*
* R : A Computer Language for Statistical Data Analysis
* file consolestructs.h
* Copyright (C) 2004-8 The R Foundation
*
* 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, a copy is available at
* https://www.R-project.org/Licenses/
*/
#include "guicolors.h"
/* xbuf */
typedef unsigned int xint;
typedef unsigned long xlong;
struct structXBUF {
xint ns, ms, shift;
xlong dim, av;
wchar_t *b, **s, *free;
int *user;
};
typedef struct structXBUF *xbuf;
/* console */
struct structConsoleData {
int kind; /* console or pager */
int rows, cols; /* dimension in char */
int w, h; /* dimensions in pixel */
font f; /* font */
int fw, fh;
int top, right; /* borders */
rgb guiColors[numGuiColors]; /* colours */
int fv, fc; /* first line and first char visible */
int r, c; /* cursor position */
int overwrite; /* overwrite mode */
int sel, mx0, my0, mx1, my1; /* selection */
xbuf lbuf; /* lines buffer */
int firstkey, numkeys; /* keys buffer */
wchar_t *kbuf;
int already; /* number of keys in buffer to be processed
before clipb. */
wchar_t *clp; /* data from the clipboard */
int pclp;
int lazyupdate, needredraw, newfv, newfc; /* updating and redrawing */
int wipe_completion;
bitmap bm;
int input, cur_pos, max_pos,
prompt_len, prompt_wid; /* editing */
char chbrk, modbrk; /* hook for user's break */
void (*fbrk) ();
int cursor_blink;
menuitem mcopy, mpaste, mpastecmds, mpopcopy, mpoppaste, mpoppastecmds;
};
typedef struct structConsoleData *ConsoleData;
#define CONSOLE 1
#define PAGER 2
#define DATAEDITOR 3
#define BM (p->bm)
#define ROWS (p->rows)
#define COLS (p->cols)
#define WIDTH (p->w)
#define HEIGHT (p->h)
#define BORDERX (p->right)
#define BORDERY (p->top)
#define FW (p->fw)
#define FH (p->fh)
#define FV (p->fv)
#define FC (p->fc)
#define NEWFV (p->newfv)
#define NEWFC (p->newfc)
#define NUMLINES (p->lbuf->ns)
#define LINE(i) (p->lbuf->s[i])
#define USER(i) (p->lbuf->user[i])
#define VLINE(i) ((strlen(LINE(i))>FC) ? &LINE(i)[FC] : "")
#define RLINE(i) (rect(0, BORDERY + (i)*FH, WIDTH, FH))
#define RMLINES(i,j) (rect(0, BORDERY + (i)*FH, WIDTH, (j-i+1)*FH))
#define cur_pos (p->cur_pos)
#define max_pos (p->max_pos)
#define prompt_len (p->prompt_len)
#define prompt_wid (p->prompt_wid)
#define CURROW (p->r) /* row of cursor */
#define CURCOL (p->c) /* column of cursor on whole line */
#define WRITELINE(i, j) writeline(c, p, i, j)
#define REDRAW drawconsole(c, getrect(c))
#define RSHOW(r) {gbitblt(c, p->bm, topleft(r), r);}
ConsoleData newconsoledata(font f, int rows, int cols,
int bufbytes, int buflines,
rgb *guiColors, int kind, int buffered, int cursor_blink);
void freeConsoleData(ConsoleData p);
void setfirstvisible(control c, int fv);
void setfirstcol(control c, int newcol);
void console_sbf(control c, int pos);
void console_mousedrag(control c, int button, point pt);
void console_mouserep(control c, int button, point pt);
void console_mousedown(control c, int button, point pt);
void consoleresize(console c, rect r);
void console_ctrlkeyin(control c, int key);
void console_normalkeyin(control c, int k);
void console_im(control c, font *f, point *pt);
extern font consolefn;
extern int fontsty, pointsize;
extern int consoler, consolec;
extern int pagerrow, pagercol;
#define DIMLBUF 250000 /* console buffer size in chars */
#define MLBUF 8000 /* console buffer size in lines */
#define SLBUF 512 /* console buffer shift in lines */
#define NKEYS 512 /* key input buffer */
#define TABSIZE 8
xbuf newxbuf(xlong dim, xint ms, xint shift);
void xbufgrow(xbuf p, xlong dim, xint ms);
void xbufdel(xbuf p);
//void xbufaddc(xbuf p, char c);
void xbufaddxc(xbuf p, wchar_t c);
void xbufaddxs(xbuf p, const wchar_t *s, int user);