| /* | |
| * an application for displaying Win32 console | |
| * | |
| * Copyright 2001 Eric Pouech | |
| * | |
| * 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 | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #include <stdarg.h> | |
| #include <windef.h> | |
| #include <winbase.h> | |
| #include <wincon.h> | |
| #include "wineconsole_res.h" | |
| /* this is the configuration stored & loaded into the registry */ | |
| struct config_data { | |
| unsigned cell_width; /* width in pixels of a character */ | |
| 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; | |
| DWORD history_size; /* number of commands in history buffer */ | |
| DWORD history_nodup; /* TRUE if commands are not stored twice in buffer */ | |
| DWORD menu_mask; /* MK_CONTROL MK_SHIFT mask to drive submenu opening */ | |
| DWORD quick_edit; /* whether mouse ops are sent to app (false) or used for content selection (true) */ | |
| 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 */ | |
| BOOL exit_on_die; /* whether the wineconsole should quit if server destroys the console */ | |
| unsigned edition_mode; /* edition mode flavor while line editing */ | |
| WCHAR* registry; /* <x> part of HKLU\\<x>\\Console where config is read from (NULL if default settings) */ | |
| }; | |
| struct inner_data { | |
| struct config_data curcfg; | |
| 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 */ | |
| 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); | |
| void (*fnSetFont)(struct inner_data* data, const WCHAR* font, unsigned height, unsigned weight); | |
| void (*fnDeleteBackend)(struct inner_data* data); | |
| void* private; /* data part belonging to the choosen backed */ | |
| }; | |
| /* from wineconsole.c */ | |
| extern void WINECON_Fatal(const char* msg); | |
| extern void WINECON_NotifyWindowChange(struct inner_data* data); | |
| extern int WINECON_GetHistorySize(HANDLE hConIn); | |
| extern BOOL WINECON_SetHistorySize(HANDLE hConIn, int size); | |
| extern int WINECON_GetHistoryMode(HANDLE hConIn); | |
| extern BOOL WINECON_SetHistoryMode(HANDLE hConIn, int mode); | |
| extern BOOL WINECON_GetConsoleTitle(HANDLE hConIn, WCHAR* buffer, size_t len); | |
| extern void WINECON_FetchCells(struct inner_data* data, int upd_tp, int upd_bm); | |
| extern int WINECON_GrabChanges(struct inner_data* data); | |
| extern VOID WINECON_SetConfig(struct inner_data* data, | |
| const struct config_data* cfg, BOOL force); | |
| /* from registry.c */ | |
| 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); | |
| /* backends... */ | |
| 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); |