Commit | Line | Data |
---|---|---|
94719d43 EP |
1 | /* |
2 | * an application for displaying Win32 console | |
3 | * | |
4 | * Copyright 2001 Eric Pouech | |
0799c1a7 AJ |
5 | * |
6 | * This library is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public | |
8 | * License as published by the Free Software Foundation; either | |
9 | * version 2.1 of the License, or (at your option) any later version. | |
10 | * | |
11 | * This library is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
17 | * License along with this library; if not, write to the Free Software | |
360a3f91 | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
94719d43 EP |
19 | */ |
20 | ||
e37c6e18 AJ |
21 | #include <stdarg.h> |
22 | #include <windef.h> | |
0b83d4cb | 23 | #include <winbase.h> |
0b83d4cb EP |
24 | #include <wincon.h> |
25 | ||
26 | #include "wineconsole_res.h" | |
27 | ||
94719d43 EP |
28 | /* this is the configuration stored & loaded into the registry */ |
29 | struct config_data { | |
9a624916 | 30 | unsigned cell_width; /* width in pixels of a character */ |
94719d43 EP |
31 | unsigned cell_height; /* height in pixels of a character */ |
32 | int cursor_size; /* in % of cell height */ | |
33 | int cursor_visible; | |
34 | DWORD def_attr; | |
35 | WCHAR face_name[32]; /* name of font (size is LF_FACESIZE) */ | |
36 | DWORD font_weight; | |
0589f726 EP |
37 | DWORD history_size; /* number of commands in history buffer */ |
38 | DWORD history_nodup; /* TRUE if commands are not stored twice in buffer */ | |
94719d43 | 39 | DWORD menu_mask; /* MK_CONTROL MK_SHIFT mask to drive submenu opening */ |
5ef8871c | 40 | DWORD quick_edit; /* whether mouse ops are sent to app (false) or used for content selection (true) */ |
94719d43 EP |
41 | unsigned sb_width; /* active screen buffer width */ |
42 | unsigned sb_height; /* active screen buffer height */ | |
43 | unsigned win_width; /* size (in cells) of visible part of window (width & height) */ | |
44 | unsigned win_height; | |
45 | COORD win_pos; /* position (in cells) of visible part of screen buffer in window */ | |
0587a472 | 46 | BOOL exit_on_die; /* whether the wineconsole should quit if server destroys the console */ |
5477453c | 47 | unsigned edition_mode; /* edition mode flavor while line editing */ |
0589f726 | 48 | WCHAR* registry; /* <x> part of HKLU\\<x>\\Console where config is read from (NULL if default settings) */ |
94719d43 EP |
49 | }; |
50 | ||
0b83d4cb | 51 | struct inner_data { |
94719d43 | 52 | struct config_data curcfg; |
94719d43 | 53 | |
0b83d4cb | 54 | CHAR_INFO* cells; /* local copy of cells (sb_width * sb_height) */ |
0b83d4cb EP |
55 | |
56 | COORD cursor; /* position in cells of cursor */ | |
0b83d4cb EP |
57 | |
58 | HANDLE hConIn; /* console input handle */ | |
59 | HANDLE hConOut; /* screen buffer handle: has to be changed when active sb changes */ | |
60 | HANDLE hSynchro; /* waitable handle signalled by server when something in server has been modified */ | |
945f4a79 | 61 | HWND hWnd; /* handle of 'user' window or NULL for 'curses' */ |
b05cceb6 | 62 | INT nCmdShow; /* argument of WinMain */ |
70f24d6c | 63 | BOOL in_set_config; /* to handle re-entrant calls to WINECON_SetConfig */ |
0b83d4cb EP |
64 | |
65 | int (*fnMainLoop)(struct inner_data* data); | |
66 | void (*fnPosCursor)(const struct inner_data* data); | |
67 | void (*fnShapeCursor)(struct inner_data* data, int size, int vis, BOOL force); | |
68 | void (*fnComputePositions)(struct inner_data* data); | |
69 | void (*fnRefresh)(const struct inner_data* data, int tp, int bm); | |
70 | void (*fnResizeScreenBuffer)(struct inner_data* data); | |
71 | void (*fnSetTitle)(const struct inner_data* data); | |
72 | void (*fnScroll)(struct inner_data* data, int pos, BOOL horz); | |
0589f726 | 73 | void (*fnSetFont)(struct inner_data* data, const WCHAR* font, unsigned height, unsigned weight); |
0b83d4cb EP |
74 | void (*fnDeleteBackend)(struct inner_data* data); |
75 | ||
94719d43 | 76 | void* private; /* data part belonging to the choosen backed */ |
0b83d4cb EP |
77 | }; |
78 | ||
94719d43 | 79 | /* from wineconsole.c */ |
0589f726 | 80 | extern void WINECON_Fatal(const char* msg); |
70f24d6c | 81 | extern void WINECON_ResizeWithContainer(struct inner_data* data, int width, int height); |
0b83d4cb | 82 | extern int WINECON_GetHistorySize(HANDLE hConIn); |
0b83d4cb | 83 | extern int WINECON_GetHistoryMode(HANDLE hConIn); |
0b83d4cb | 84 | extern BOOL WINECON_GetConsoleTitle(HANDLE hConIn, WCHAR* buffer, size_t len); |
0b83d4cb | 85 | extern int WINECON_GrabChanges(struct inner_data* data); |
0589f726 | 86 | extern VOID WINECON_SetConfig(struct inner_data* data, |
a6f40be7 | 87 | const struct config_data* cfg); |
94719d43 | 88 | /* from registry.c */ |
0589f726 EP |
89 | extern void WINECON_RegLoad(const WCHAR* appname, struct config_data* cfg); |
90 | extern void WINECON_RegSave(const struct config_data* cfg); | |
91 | extern void WINECON_DumpConfig(const char* pfx, const struct config_data* cfg); | |
94719d43 EP |
92 | |
93 | /* backends... */ | |
99bc6404 EP |
94 | enum init_return { |
95 | init_success, init_failed, init_not_supported | |
96 | }; | |
97 | extern enum init_return WCUSER_InitBackend(struct inner_data* data); | |
98 | extern enum init_return WCCURSES_InitBackend(struct inner_data* data); |