summaryrefslogtreecommitdiff
path: root/pico/osdep/mswin.h
blob: 966f8bca22d2694db483fbe3b687a66f7c1056e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
/*
 * ========================================================================
 * Copyright 2006-2007 University of Washington
 * Copyright 2013-2018 Eduardo Chappa
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * ========================================================================
 */


#ifndef MSWIN_H
#define MSWIN_H


#define	__far
#define	_far
#define	__export

/*
 * Equivalent to a windows handle.
 */
typedef void	       *WINHAND;

/*
 * Mouse input events. 
 */
typedef struct {
	int		event;
	int		button;
	int		nRow;
	int		nColumn;
	int		keys;
	int		flags;
} MEvent;


/*
 * These define how mouse events get queued.
 */
#define MSWIN_MF_REPLACING	0x1000
#define MSWIN_MF_REPEATING	0x2000


typedef struct {
	int		ch;
	int		rval;
	LPTSTR		name;
	LPTSTR		label;
	int		id;
} MDlgButton;



/*
 * Struct to tell pico how to build and what to return when
 * it's asked to build a popup menu.
 */
typedef struct _popup {
	enum {tIndex, tQueue, tMessage, tSubMenu,
	      tSeparator, tTail} type;
	struct {			/* menu's label */
	    char	  *string;
	    enum	   {lNormal = 0, lChecked, lDisabled} style;
	} label;
	union {
	    UCS		   val;		/* Queue: inserted into input queue */
	    UCS 	   msg;		/* Message: gets posted to ghTTYWnd */
	    struct _popup *submenu;	/* Submenu: array of submenu entries */
	} data;
	struct {			/* Internal data */
	    int	       id;
	} internal;
} MPopup;



/*
 * Type of function expected by mswin_allowcopy and mswin_allowcopycut
 * and used in EditDoCopyData
 */
typedef	int (*getc_t)(int pos);

/*
 * Callback used to fetch text for display in alternate window.  Text
 * can be returned as either a pointer to a null terminated block of
 * text (a string), with CRLF deliminating lines.  OR as a pointer to
 * an array of pointers to lines, each line being a null terminated
 * string. 
 */
typedef int (*gettext_t)(char *title, void **text, long *len, int *format);

/*
 * Type used by line up/down event handlers to move the body of the
 * displayed text, by sort callback to get/set sort order, by
 * header mode to get/set header state...
 */
typedef int (*cbarg_t)(int action, long args);


/*
 * Callback used for periodic callback.
 */
typedef void  (*cbvoid_t)(void);
typedef char *(*cbstr_t)(char *);


#define GETTEXT_TITLELEN	128
#define GETTEXT_TEXT		1	/* 'text' is pointer to text. */
#define GETTEXT_LINES		2	/* 'text' is pointer to array of
					 *   pointers to lines. */


#ifndef PATH_MAX
#define PATH_MAX		128	/* Max size of a directory path. */
#endif

/*
 * Scroll callback values. Used to be mapped in the MSWIN_RANGE_START..END
 *  range, but now are mapped directly to keydefs.h values. Except two of
 *  them which don't have map values in keydefs.h so they're still in the
 *  MSWIN_RANGE_START..END 0x7000 range.
 */
#define MSWIN_KEY_SCROLLUPPAGE		0x7000
#define MSWIN_KEY_SCROLLDOWNPAGE	0x7001
#define MSWIN_KEY_SCROLLUPLINE		KEY_SCRLUPL
#define MSWIN_KEY_SCROLLDOWNLINE	KEY_SCRLDNL
#define MSWIN_KEY_SCROLLTO		    KEY_SCRLTO

#define	MSWIN_PASTE_DISABLE	0
#define	MSWIN_PASTE_FULL	1
#define	MSWIN_PASTE_LINE	2


#define MSWIN_CURSOR_ARROW	0
#define MSWIN_CURSOR_BUSY	1
#define MSWIN_CURSOR_IBEAM	2
#define MSWIN_CURSOR_HAND	3

/*
 * Flags for mswin_displaytext
 */
#define MSWIN_DT_NODELETE	0x0001	/* Don't delete text when 
					 * window closes. */
#define MSWIN_DT_USEALTWINDOW   0x0002	/* Put text in alt window if already
					 * open. Open if not. */
#define MSWIN_DT_FILLFROMFILE   0x0004	/* pText_utf8 is a filename. */

/*
 * functions from mswin.c
 */


WINHAND		mswin_gethinstance();
WINHAND		mswin_gethwnd ();
void		mswin_killsplash();
void		mswin_settitle(char *);
int		mswin_getmouseevent (MEvent * pMouse);
void		mswin_mousetrackcallback (cbarg_t cbfunc);
int		mswin_popup(MPopup *members);
void		mswin_keymenu_popup ();
void		mswin_registericon(int row, int id, char *file);
void		mswin_destroyicons();
void		mswin_finishicons();
void		mswin_show_icon (int x, int y, char *file);
void		mswin_setdebug (int debug, FILE *debugfile);
void		mswin_setnewmailwidth (int width);
int		mswin_setdndcallback (int (*cb)());
int		mswin_cleardndcallback (void);
int		mswin_setresizecallback (int (*cb)());
int		mswin_clearresizecallback (int (*cb)());
void		mswin_setdebugoncallback (cbvoid_t cbfunc);
void		mswin_setdebugoffcallback (cbvoid_t cbfunc);
int		mswin_setconfigcallback (cbvoid_t cffunc);
int		mswin_sethelpcallback (cbstr_t cbfunc);
int		mswin_setgenhelpcallback (cbstr_t cbfunc);
void		mswin_setclosetext (char *pCloseText);
int		mswin_setwindow (char *fontName, char *fontSize, 
				 char *fontStyle, char *windowPosition,
				 char *cursorStyle, char *fontCharSet);
int             mswin_showwindow();
int		mswin_getwindow (char *fontName, size_t nfontName,
				 char *fontSize, size_t nfontSize,
				 char *fontStyle, size_t nfontStyle,
				 char *windowPosition, size_t nwindowPosition,
				 char *foreColor, size_t nforeColor,
				 char *backColor, size_t nbackColor,
				 char *cursorStyle, size_t ncursorStyle,
				 char *fontCharSet, size_t nfontCharSet);
void            mswin_noscrollupdate (int flag);
void		mswin_setscrollrange (long page, long max);
void		mswin_setscrollpos (long pos);
long		mswin_getscrollpos (void);
long		mswin_getscrollto (void);
void		mswin_setscrollcallback (cbarg_t cbfunc);
void		mswin_setsortcallback (cbarg_t cbfunc);
void		mswin_setflagcallback (cbarg_t cbfunc);
void		mswin_sethdrmodecallback (cbarg_t cbfunc);
void		mswin_setselectedcallback (cbarg_t cbfunc);
void		mswin_setzoomodecallback (cbarg_t cbfunc);
void		mswin_setfkeymodecallback (cbarg_t cbfunc);
void		mswin_setprintfont (char *fontName, char *fontSize, 
			char *fontStyle, char *fontCharSet);
void		mswin_getprintfont (char *, size_t, char *, size_t,
				    char *, size_t, char *, size_t);
int		mswin_yield (void);
int		mswin_charavail (void);
UCS		mswin_getc_fast (void);
void		mswin_flush_input (void);
int		mswin_showcursor (int show);
int		mswin_showcaret (int show);
void		mswin_trayicon (int show);
int		mswin_move (int row, int column);
int		mswin_getpos (int *row, int *column);
int		mswin_getscreensize (int *row, int *column);
void		mswin_minimize (void);
int		mswin_putblock (char *utf8_str, int strLen);
int		mswin_puts (char *utf8_str);
int		mswin_puts_n (char *utf8_str, int n);
int		mswin_putc (UCS c);
int		mswin_outc (char c);
int		mswin_rev (int state);
int		mswin_getrevstate (void);
int		mswin_bold (int state);
int		mswin_uline (int state);
int		mswin_eeol (void);
int		mswin_eeop (void);
int		mswin_beep (void);
void		mswin_pause (int);
int		mswin_flush (void);
void		mswin_setcursor (int);
void		mswin_messagebox (char *msg, int);
void		mswin_allowpaste (int);
void		mswin_allowcopycut (getc_t);
void		mswin_allowcopy (getc_t);
void		mswin_addclipboard (char *s);
void		mswin_allowmousetrack (int);
int		mswin_newmailicon (void);
void		mswin_newmailtext (char *t);
void		mswin_newmaildone (void);
void		mswin_mclosedtext (char *t);
void		mswin_menuitemclear (void);
void		mswin_menuitemadd (UCS key, char *label, int menuitem, 
			int flags);
int		mswin_setwindowmenu (int menu);
int		mswin_print_ready (WINHAND hWnd, LPTSTR docDesc);
int		mswin_print_done (void);
char *		mswin_print_error (int errorcode);
int		mswin_print_char (TCHAR c);
int		mswin_print_char_utf8 (int c);
int		mswin_print_text (LPTSTR text);
int		mswin_print_text_utf8 (char *text);
int		mswin_savefile (char *dir, int dirlen, char *fName, int nMaxFName);
int		mswin_openfile (char *dir, int nMaxDName, char *fName, int nMaxFName, char *extlist);
int		mswin_multopenfile (char *dir, int nMaxDName, char *fName, int nMaxFName, char *extlist);
char	       *mswin_rgbchoice(char *pOldRGB);
void		mswin_killbuftoclip (getc_t copyfunc);
void		pico_popup();
void		mswin_paste_popup();
int		mswin_fflush (FILE *f);
void		mswin_setperiodiccallback (cbvoid_t periodiccb, long period);
WINHAND		mswin_inst2task (WINHAND hInst);
int		mswin_ontask_del (WINHAND hTask, char *path);
int		mswin_exec_and_wait (char *whatsit, char *command,
				     char *infile, char *outfile,
				     int *exit_val,
				     unsigned mseaw_flags);
int		mswin_shell_exec (char *command, WINHAND *childproc);
void		mswin_exec_err_msg (char *what, int status, char *buf, 
			size_t buflen);
int		mswin_onexit_del (char *path);
int		mswin_set_quit_confirm (int);
void		mswin_showhelpmsg (WINHAND hWnd, char **helplines);

typedef struct MSWIN_TEXTWINDOW MSWIN_TEXTWINDOW;
MSWIN_TEXTWINDOW *mswin_displaytext (char *title, char *pText, size_t textLen,
			             char **pLines, MSWIN_TEXTWINDOW *mswin_tw,
			             int flags);
int		mswin_imaptelemetry(char *msg);
void		mswin_enableimaptelemetry(int state);
int             mswin_newmailwin(int is_us, char *from,
				 char *subject, char *folder);
int             mswin_newmailwinon(void);

char	       *mswin_reg_default_browser(char *url);
int		mswin_reg(int op, int tree, char *data, size_t size);
int             mswin_is_def_client(int type);
int             mswin_set_def_client(int type);
char	      **mswin_reg_dump(void);
int		mswin_majorver();
int		mswin_minorver();
char	       *mswin_compilation_date();
char	       *mswin_compilation_remarks();
char	       *mswin_specific_winver();


int		mswin_usedialog (void);
int		mswin_dialog(UCS *prompt, UCS *string, int field_len, 
			int append_current, int passwd, 
			MDlgButton *button_list, char **help, unsigned flags);
int		mswin_select(char *utf8prompt, MDlgButton *button_list, 
			int dflt, int on_ctrl_C, char **help, unsigned flags);
int		mswin_yesno(UCS *);
int		mswin_yesno_utf8(char *);

BOOL		MSWRShellCanOpen(LPTSTR key, char *cmdbuf, int clen, int allow_noreg);
BOOL		MSWRPeek(HKEY hRootKey, LPTSTR subkey, LPTSTR valstr,
			 LPTSTR data, DWORD *dlen);
int             mswin_store_pass_prompt(void);
void            mswin_set_erasecreds_callback(cbvoid_t);
void		mswin_setviewinwindcallback (cbvoid_t);
int             mswin_setgenhelptextcallback(cbstr_t);
int             mswin_caninput(void);
void            mswin_beginupdate(void);
void            mswin_endupdate(void);
int             mswin_sethelptextcallback(cbstr_t);
int             strucmp(char *, char *);
int             struncmp(char *, char *, int);

#ifdef	MSC_MALLOC
/*
 * These definitions will disable the SEGHEAP allocation routines, in
 * favor of the compliler libraries usual allocators.  This is useful
 * when external debugging tools and the SEGHEAP debugging routines step
 * on each other...
 */
#define MemAlloc(X) malloc(X)
#define MemFree(X) free(X)
#define MemRealloc(X,Y) realloc(X,Y)
#define MemFreeAll()
#define	MemDebug(X,Y)
#else
/*
 * Memory management stuff, from msmem.c
 */
typedef unsigned long		MemSize;
typedef void __far	      *	MemPtr;

#define MemAlloc(s)		_MemAlloc (s, __FILE__, __LINE__)
#define malloc(s)		_MemAlloc (s, __FILE__, __LINE__)
#define MemFree(b)		_MemFree (b, __FILE__, __LINE__)
#define free(b)			_MemFree (b, __FILE__, __LINE__)
#define MemRealloc(b,s)		_MemRealloc (b, s, __FILE__, __LINE__)
#define realloc(b,s)		_MemRealloc (b, s, __FILE__, __LINE__)
#define MEM_BLOCK_SIZE_MAX	0xff00

void		MemDebug (int debug, FILE *debugFile);
void __far *	_MemAlloc (MemSize size, char __far * file, int line);
int		_MemFree (void __far *block, char __far *file, int line);
void __far *	_MemRealloc (void __far *block, MemSize size, 
					char __far * file, int line);
MemSize		MemBlkSize (MemPtr block);
void		MemFreeAll (void);
void            MemFailSoon (MemSize);
#endif

/* functions from win moved to mswin.c */
int	pico_scroll_callback (int, long);
#undef sleep
int     sleep (int);

/*
 * Signals that are not defined by MS C
 */
#define SIGHUP	    1	/* Terminal hangup. */
#define SIGINT      2   /* Ctrl-C sequence */
#define SIGILL      4   /* illegal instruction - invalid function image */
#define SIGSEGV     11  /* segment violation */
#define SIGALRM     14  /* alarm clock */
#define SIGTERM     15  /* Software termination signal from kill */
#define SIGABRT     22  /* abnormal termination triggered by abort call */
#define SIGWINCH    28	/* Change in window size. */


#define fflush	mswin_fflush

#define	alarm	mswin_alarm

/*
 * Registry setting constants
 */
#define	MSWR_PINE_RC	       1
#define	MSWR_PINE_DIR	       2
#define	MSWR_PINE_EXE	       3
#define MSWR_PINE_AUX          4
#define MSWR_PINE_POS          5
#define MSWR_PINE_CONF         6

#define MSWR_SDC_MAIL 1
#define MSWR_SDC_NEWS 2
#define MSWR_SDC_NNTP 3
#define MSWR_SDC_IMAP 4

#define	MSWR_NULL	0x00
#define	MSWR_OP_SET	0x01
#define	MSWR_OP_FORCE	0x02
#define	MSWR_OP_GET	0x04
#define	MSWR_OP_BLAST	0x08

#endif /* MSWIN_H */