winecon_private.h 4.85 KB
Newer Older
1 2 3 4
/*
 * an application for displaying Win32 console
 *
 * Copyright 2001 Eric Pouech
5 6 7 8 9 10 11 12 13 14 15 16 17
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 20
 */

21 22
#include <stdarg.h>
#include <windef.h>
23 24 25 26 27
#include <winbase.h>
#include <wincon.h>

#include "wineconsole_res.h"

28 29
/* this is the configuration stored & loaded into the registry */
struct config_data {
30
    unsigned	cell_width;	/* width in pixels of a character */
31 32 33 34 35 36
    unsigned	cell_height;	/* height in pixels of a character */
    int		cursor_size;	/* in % of cell height */
    int		cursor_visible;
    DWORD       def_attr;
    WCHAR       face_name[32];  /* name of font (size is LF_FACESIZE) */
    DWORD       font_weight;
37 38
    DWORD       history_size;   /* number of commands in history buffer */
    DWORD       history_nodup;  /* TRUE if commands are not stored twice in buffer */
39
    DWORD       menu_mask;      /* MK_CONTROL MK_SHIFT mask to drive submenu opening */
40
    DWORD       quick_edit;     /* whether mouse ops are sent to app (false) or used for content selection (true) */
41 42 43 44 45
    unsigned	sb_width;	/* active screen buffer width */
    unsigned	sb_height;	/* active screen buffer height */
    unsigned	win_width;	/* size (in cells) of visible part of window (width & height) */
    unsigned	win_height;
    COORD	win_pos;	/* position (in cells) of visible part of screen buffer in window */
46
    BOOL        exit_on_die;    /* whether the wineconsole should quit if server destroys the console */
47
    unsigned    edition_mode;   /* edition mode flavor while line editing */
48
    WCHAR*      registry;       /* <x> part of HKLU\\<x>\\Console where config is read from (NULL if default settings) */
49 50
};

51
struct inner_data {
52 53
    struct config_data  curcfg;

54 55 56 57 58 59 60
    CHAR_INFO*		cells;		/* local copy of cells (sb_width * sb_height) */

    COORD		cursor;		/* position in cells of cursor */

    HANDLE		hConIn;		/* console input handle */
    HANDLE		hConOut;	/* screen buffer handle: has to be changed when active sb changes */
    HANDLE		hSynchro;	/* waitable handle signalled by server when something in server has been modified */
61
    HWND		hWnd;           /* handle of 'user' window or NULL for 'curses' */
62
    INT                 nCmdShow;       /* argument of WinMain */
63
    BOOL                in_set_config;  /* to handle re-entrant calls to WINECON_SetConfig */
64
    BOOL                in_grab_changes;/* to handle re-entrant calls to WINECON_GrabChanges */
65
    BOOL                dying;          /* to TRUE when we've been notified by server that child has died */
66 67 68 69 70 71 72 73 74

    int			(*fnMainLoop)(struct inner_data* data);
    void		(*fnPosCursor)(const struct inner_data* data);
    void		(*fnShapeCursor)(struct inner_data* data, int size, int vis, BOOL force);
    void		(*fnComputePositions)(struct inner_data* data);
    void		(*fnRefresh)(const struct inner_data* data, int tp, int bm);
    void		(*fnResizeScreenBuffer)(struct inner_data* data);
    void		(*fnSetTitle)(const struct inner_data* data);
    void		(*fnScroll)(struct inner_data* data, int pos, BOOL horz);
75
    void                (*fnSetFont)(struct inner_data* data, const WCHAR* font, unsigned height, unsigned weight);
76 77
    void		(*fnDeleteBackend)(struct inner_data* data);

78
    void*               private;        /* data part belonging to the chosen backed */
79 80
};

81
/* from wineconsole.c */
82
extern void WINECON_Fatal(const char* msg);
83
extern void WINECON_ResizeWithContainer(struct inner_data* data, int width, int height);
84 85 86
extern int  WINECON_GetHistorySize(HANDLE hConIn);
extern int  WINECON_GetHistoryMode(HANDLE hConIn);
extern BOOL WINECON_GetConsoleTitle(HANDLE hConIn, WCHAR* buffer, size_t len);
87 88
extern void WINECON_GrabChanges(struct inner_data* data);
extern void WINECON_SetConfig(struct inner_data* data,
89
                              const struct config_data* cfg);
90
/* from registry.c */
91 92 93
extern void WINECON_RegLoad(const WCHAR* appname, struct config_data* cfg);
extern void WINECON_RegSave(const struct config_data* cfg);
extern void WINECON_DumpConfig(const char* pfx, const struct config_data* cfg);
94 95

/* backends... */
96 97 98 99 100
enum init_return {
    init_success, init_failed, init_not_supported
};
extern enum init_return WCUSER_InitBackend(struct inner_data* data);
extern enum init_return WCCURSES_InitBackend(struct inner_data* data);