source: owl.h @ 0236842

barnowl_perlaimdebianowlrelease-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 0236842 was 59cf91c, checked in by Erik Nygren <nygren@mit.edu>, 19 years ago
Attempts to stay near the current message when switching views. When switching from an empty view to one we've previously been in, the new current message position will attempt to be close to the current position from the last time we visited that view.
  • Property mode set to 100644
File size: 10.4 KB
Line 
1#ifndef INC_OWL_H
2#define INC_OWL_H
3
4#include <zephyr/zephyr.h>
5#include <curses.h>
6#include <sys/param.h>
7#include <EXTERN.h>
8#include <netdb.h>
9#include <regex.h>
10#include "config.h"
11
12static const char owl_h_fileIdent[] = "$Id$";
13
14#define OWL_VERSION         1.2.2
15#define OWL_VERSION_STRING "1.2.2"
16
17#define OWL_DEBUG 0
18#define OWL_DEBUG_FILE "/var/tmp/owldebug"
19
20#define OWL_FMTEXT_ATTR_NONE      0
21#define OWL_FMTEXT_ATTR_BOLD      1
22#define OWL_FMTEXT_ATTR_REVERSE   2
23#define OWL_FMTEXT_ATTR_UNDERLINE 4
24
25#define OWL_COLOR_BLACK     0
26#define OWL_COLOR_RED       1
27#define OWL_COLOR_GREEN     2
28#define OWL_COLOR_YELLOW    3
29#define OWL_COLOR_BLUE      4
30#define OWL_COLOR_MAGENTA   5
31#define OWL_COLOR_CYAN      6
32#define OWL_COLOR_WHITE     7
33#define OWL_COLOR_DEFAULT   8
34
35#define OWL_EDITWIN_STYLE_MULTILINE 0
36#define OWL_EDITWIN_STYLE_ONELINE   1
37
38#define OWL_MESSAGE_TYPE_ADMIN  0
39#define OWL_MESSAGE_TYPE_ZEPHYR 1
40
41#define OWL_MESSAGE_ADMINTYPE_GENERIC  0
42#define OWL_MESSAGE_ADMINTYPE_OUTGOING 1
43#define OWL_MESSAGE_ADMINTYPE_NOTADMIN 2
44
45#define OWL_DIRECTION_NONE      0
46#define OWL_DIRECTION_DOWNWARDS 1
47#define OWL_DIRECTION_UPWARDS   2
48
49#define OWL_SCROLLMODE_NORMAL   0
50#define OWL_SCROLLMODE_TOP      1
51#define OWL_SCROLLMODE_NEARTOP  2
52#define OWL_SCROLLMODE_CENTER   3
53#define OWL_SCROLLMODE_PAGED    4
54#define OWL_SCROLLMODE_PAGEDCENTER 5
55
56
57#define OWL_TAB               3  /* This *HAS* to be the size of TABSTR below */
58#define OWL_TABSTR        "   "
59#define OWL_MSGTAB            7
60#define OWL_TYPWIN_SIZE       8
61#define OWL_HISTORYSIZE       50
62
63/* Indicate current state, as well as what is allowed */
64#define OWL_CTX_ANY          0xffff
65/* Only one of these may be active at a time... */
66#define OWL_CTX_MODE_BITS    0x000f
67#define OWL_CTX_STARTUP      0x0001
68#define OWL_CTX_READCONFIG   0x0002
69#define OWL_CTX_INTERACTIVE  0x0004
70/* Only one of these may be active at a time... */
71#define OWL_CTX_ACTIVE_BITS  0xfff0
72#define OWL_CTX_POPWIN       0x00f0
73#define OWL_CTX_POPLESS      0x0010
74#define OWL_CTX_RECWIN       0x0f00
75#define OWL_CTX_RECV         0x0100
76#define OWL_CTX_TYPWIN       0xf000
77#define OWL_CTX_EDIT         0x3000
78#define OWL_CTX_EDITLINE     0x1000
79#define OWL_CTX_EDITMULTI    0x2000
80
81#define OWL_USERCLUE_NONE       0
82#define OWL_USERCLUE_CLASSES    1
83#define OWL_USERCLUE_FOOBAR     2
84#define OWL_USERCLUE_BAZ        4
85
86#define OWL_WEBBROWSER_NONE     0
87#define OWL_WEBBROWSER_NETSCAPE 1
88#define OWL_WEBBROWSER_GALEON   2
89#define OWL_WEBBROWSER_OPERA    3
90
91#define OWL_VARIABLE_OTHER      0
92#define OWL_VARIABLE_INT        1
93#define OWL_VARIABLE_BOOL       2
94#define OWL_VARIABLE_STRING     3
95
96#define OWL_FILTER_MAX_DEPTH    300
97
98#define OWL_KEYMAP_MAXSTACK 20
99
100#define OWL_KEYBINDING_COMMAND   1 /* command string */
101#define OWL_KEYBINDING_FUNCTION  2 /* function taking no args */
102
103#define OWL_DEFAULT_ZAWAYMSG "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n"
104
105#define OWL_INCLUDE_REG_TESTS  1  /* whether to build in regression tests */
106
107#define OWL_CMD_ALIAS_SUMMARY_PREFIX "command alias to: "
108
109#ifndef CTRL
110#define CTRL(key) ((key)&037)
111#endif
112#ifndef META
113#define META(key) ((key)|0200)
114#endif
115
116#define LINE 2048
117
118typedef struct _owl_variable {
119  char *name;
120  int   type;  /* OWL_VARIABLE_* */
121  void *pval_default;  /* for types other and string */
122  int   ival_default;  /* for types int and bool     */
123  char *validsettings;          /* documentation of valid settings */
124  char *summary;                /* summary of usage */
125  char *description;            /* detailed description */
126  void *val;                    /* current value */
127  int  (*validate_fn)(struct _owl_variable *v, void *newval);
128                                /* returns 1 if newval is valid */
129  int  (*set_fn)(struct _owl_variable *v, void *newval); 
130                                /* sets the variable to a value
131                                 * of the appropriate type.
132                                 * unless documented, this
133                                 * should make a copy.
134                                 * returns 0 on success. */
135  int  (*set_fromstring_fn)(struct _owl_variable *v, char *newval);
136                                /* sets the variable to a value
137                                 * of the appropriate type.
138                                 * unless documented, this
139                                 * should make a copy.
140                                 * returns 0 on success. */
141  void *(*get_fn)(struct _owl_variable *v);
142                                /* returns a reference to the current value.
143                                 * WARNING:  this approach is hard to make
144                                 * thread-safe... */
145  int  (*get_tostring_fn)(struct _owl_variable *v, 
146                          char *buf, int bufsize, void *val); 
147                                /* converts val to a string
148                                 * and puts into buf */
149  void  (*free_fn)(struct _owl_variable *v);
150                                /* frees val as needed */
151} owl_variable;
152
153typedef struct _owl_fmtext {
154  int textlen;
155  char *textbuff;
156  char *fmbuff;
157  char *colorbuff;
158} owl_fmtext;
159
160typedef struct _owl_list {
161  int size;
162  int avail;
163  void **list;
164} owl_list;
165
166typedef struct _owl_dict_el {
167  char *k;                      /* key   */
168  void *v;                      /* value */
169} owl_dict_el;
170
171typedef struct _owl_dict {
172  int size;
173  int avail;
174  owl_dict_el *els;             /* invariant: sorted by k */
175} owl_dict;
176typedef owl_dict owl_vardict;   /* dict of variables */
177typedef owl_dict owl_cmddict;   /* dict of commands */
178
179typedef struct _owl_context {
180  int   mode;
181  void *data;           /* determined by mode */
182} owl_context;
183
184typedef struct _owl_cmd {       /* command */
185  char *name;
186
187  char *summary;                /* one line summary of command */
188  char *usage;                  /* usage synopsis */
189  char *description;            /* long description of command */
190
191  int validctx;                 /* bitmask of valid contexts */
192
193  /* we should probably have a type here that says which of
194   * the following is valid, and maybe make the below into a union... */
195
196  /* Only one of these may be non-NULL ... */
197
198  char *cmd_aliased_to;         /* what this command is aliased to... */
199 
200  /* These don't take any context */
201  char *(*cmd_args_fn)(int argc, char **argv, char *buff); 
202                                /* takes argv and the full command as buff.
203                                 * caller must free return value if !NULL */
204  void (*cmd_v_fn)(void);       /* takes no args */
205  void (*cmd_i_fn)(int i);      /* takes an int as an arg */
206
207  /* The following also take the active context if it's valid */
208  char *(*cmd_ctxargs_fn)(void *ctx, int argc, char **argv, char *buff); 
209                                /* takes argv and the full command as buff.
210                                 * caller must free return value if !NULL */
211  void (*cmd_ctxv_fn)(void *ctx);               /* takes no args */
212  void (*cmd_ctxi_fn)(void *ctx, int i);        /* takes an int as an arg */
213} owl_cmd;
214
215
216typedef struct _owl_zwrite {
217  char class[LINE];
218  char inst[LINE];
219  char realm[LINE];
220  char opcode[LINE];
221  owl_list recips;
222  int cc;
223  int noping;
224} owl_zwrite;
225
226typedef struct _owl_message {
227  int id;
228  int type;
229  int admintype;
230  ZNotice_t notice;
231  owl_fmtext fmtext;
232  int delete;
233  char hostname[MAXHOSTNAMELEN];
234  char *sender;
235  char *recip;
236  char *class;
237  char *inst;
238  char *opcode;
239  char *time;
240  char *realm;
241  char *body;
242  char *zwriteline;
243} owl_message;
244
245typedef struct _owl_mainwin {
246  int curtruncated;
247  int lasttruncated;
248  int lastdisplayed;
249} owl_mainwin;
250
251typedef struct _owl_viewwin {
252  owl_fmtext fmtext;
253  int textlines;
254  int topline;
255  int rightshift;
256  int winlines, wincols;
257  WINDOW *curswin;
258} owl_viewwin;
259 
260typedef struct _owl_popwin {
261  WINDOW *borderwin;
262  WINDOW *popwin;
263  int lines;
264  int cols;
265  int active;
266  int needsfirstrefresh;
267  void (*handler) (int ch);
268} owl_popwin;
269
270typedef struct _owl_messagelist {
271  owl_list list;
272} owl_messagelist;
273
274typedef struct _owl_regex {
275  int negate;
276  char *string;
277  regex_t re;
278} owl_regex;
279
280typedef struct _owl_filterelement {
281  int type;
282  char *field;
283  owl_regex re;
284} owl_filterelement;
285
286typedef struct _owl_filter {
287  char *name;
288  int polarity;
289  owl_list fes; /* filterelements */
290  int color;
291  int cachedmsgid;  /* cached msgid: should move into view eventually */
292} owl_filter;
293
294typedef struct _owl_view {
295  owl_filter *filter;
296  owl_messagelist ml;
297} owl_view;
298
299typedef struct _owl_history {
300  owl_list hist;
301  int cur;
302  int touched;
303  int partial;
304} owl_history;
305
306typedef struct _owl_editwin {
307  char *buff;
308  owl_history *hist;
309  int bufflen;
310  int allocated;
311  int buffx, buffy;
312  int topline;
313  int winlines, wincols, fillcol, wrapcol;
314  WINDOW *curswin;
315  int style;
316  int lock;
317  int dotsend;
318} owl_editwin;
319
320typedef struct _owl_keybinding {
321  int  *j;                      /* keypress stack (0-terminated) */ 
322  int   type;                   /* command or function? */
323  char *desc;                   /* description (or "*user*") */
324  char *command;                /* command, if of type command */
325  void (*function_fn)(void);    /* function ptr, if of type function */
326} owl_keybinding;
327
328typedef struct _owl_keymap {
329  char     *name;               /* name of keymap */
330  char     *desc;               /* description */
331  owl_list  bindings;           /* key bindings */
332  struct _owl_keymap *submap;   /* submap */
333  void (*default_fn)(int j);    /* default action (takes a keypress) */
334  void (*prealways_fn)(int j);  /* always called before a keypress is received */
335  void (*postalways_fn)(int j); /* always called after keypress is processed */
336} owl_keymap;
337
338typedef struct _owl_keyhandler {
339  owl_dict  keymaps;            /* dictionary of keymaps */
340  owl_keymap *active;           /* currently active keymap */
341  int       in_esc;             /* escape pressed? */
342  int       kpstack[OWL_KEYMAP_MAXSTACK+1]; /* current stack of keypresses */
343  int       kpstackpos;         /* location in stack (-1 = none) */
344} owl_keyhandler;
345
346typedef struct _owl_global {
347  owl_mainwin mw;
348  owl_popwin pw;
349  owl_history cmdhist;          /* command history */
350  owl_history msghist;          /* outgoing message history */
351  owl_keyhandler kh;
352  owl_list filterlist;
353  owl_list puntlist;
354  owl_vardict vars;
355  owl_cmddict cmds;
356  owl_context ctx;
357  int lines, cols;
358  int curmsg, topmsg;
359  int curmsg_vert_offset;
360  owl_view current_view;
361  owl_messagelist msglist;
362  WINDOW *recwin, *sepwin, *msgwin, *typwin;
363  int needrefresh;
364  int rightshift;
365  int resizepending;
366  int recwinlines;
367  int typwinactive;
368  char thishost[LINE];
369  char thistty[LINE];
370  char homedir[LINE];
371  int direction;
372  int zaway;
373  char *cur_zaway_msg;
374  int haveconfig;
375  int config_format;
376  char buffercommand[1024];
377  owl_editwin tw;
378  owl_viewwin vw;
379  void *perl;
380  int debug;
381  int starttime;
382  char startupargs[LINE];
383  int userclue;
384  int nextmsgid;
385  int hascolors;
386  int colorpairs;
387  int searchactive;
388  char *searchstring;
389  owl_filterelement fe_true;
390  owl_filterelement fe_false;
391  owl_filterelement fe_null;
392} owl_global;
393
394/* globals */
395owl_global g;
396
397#include "owl_prototypes.h"
398
399/* these are missing from the zephyr includes for some reason */
400int ZGetSubscriptions(ZSubscription_t *, int *);
401int ZGetLocations(ZLocations_t *,int *);
402
403#endif /* INC_OWL_H */
Note: See TracBrowser for help on using the repository browser.