source: owl.h @ 601a9e0

barnowl_perlaimdebianowlrelease-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 601a9e0 was 601a9e0, checked in by James M. Kretchmar <kretch@mit.edu>, 22 years ago
Patch to fix memory bug in replying to CC messages If we're on Athena and have static krb (or other) libraries, use them Added "athstatic" program to the release, which handles the above Cast to an int for isspace, to make gcc -Wall quiet Added 'zlist' and 'l' to basic help.
  • Property mode set to 100644
File size: 10.5 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.5
15#define OWL_VERSION_STRING "1.2.5"
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_GENERIC    1
40#define OWL_MESSAGE_TYPE_ZEPHYR     2
41
42#define OWL_MESSAGE_DIRECTION_NONE  0
43#define OWL_MESSAGE_DIRECTION_IN    1
44#define OWL_MESSAGE_DIRECTION_OUT   2
45
46#define OWL_DIRECTION_NONE      0
47#define OWL_DIRECTION_DOWNWARDS 1
48#define OWL_DIRECTION_UPWARDS   2
49
50#define OWL_SCROLLMODE_NORMAL   0
51#define OWL_SCROLLMODE_TOP      1
52#define OWL_SCROLLMODE_NEARTOP  2
53#define OWL_SCROLLMODE_CENTER   3
54#define OWL_SCROLLMODE_PAGED    4
55#define OWL_SCROLLMODE_PAGEDCENTER 5
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  char *zsig;
222  owl_list recips;
223  int cc;
224  int noping;
225} owl_zwrite;
226
227typedef struct _owl_message {
228  int id;
229  int type;
230  int direction;
231  ZNotice_t notice;
232  owl_fmtext fmtext;
233  int delete;
234  char hostname[MAXHOSTNAMELEN];
235  char *sender;
236  char *recip;
237  char *class;
238  char *inst;
239  char *opcode;
240  char *time;
241  char *realm;
242  char *body;
243  char *zwriteline;
244} owl_message;
245
246typedef struct _owl_mainwin {
247  int curtruncated;
248  int lasttruncated;
249  int lastdisplayed;
250} owl_mainwin;
251
252typedef struct _owl_viewwin {
253  owl_fmtext fmtext;
254  int textlines;
255  int topline;
256  int rightshift;
257  int winlines, wincols;
258  WINDOW *curswin;
259} owl_viewwin;
260 
261typedef struct _owl_popwin {
262  WINDOW *borderwin;
263  WINDOW *popwin;
264  int lines;
265  int cols;
266  int active;
267  int needsfirstrefresh;
268  void (*handler) (int ch);
269} owl_popwin;
270
271typedef struct _owl_messagelist {
272  owl_list list;
273} owl_messagelist;
274
275typedef struct _owl_regex {
276  int negate;
277  char *string;
278  regex_t re;
279} owl_regex;
280
281typedef struct _owl_filterelement {
282  int type;
283  char *field;
284  owl_regex re;
285} owl_filterelement;
286
287typedef struct _owl_filter {
288  char *name;
289  int polarity;
290  owl_list fes; /* filterelements */
291  int color;
292  int cachedmsgid;  /* cached msgid: should move into view eventually */
293} owl_filter;
294
295typedef struct _owl_view {
296  owl_filter *filter;
297  owl_messagelist ml;
298} owl_view;
299
300typedef struct _owl_history {
301  owl_list hist;
302  int cur;
303  int touched;
304  int partial;
305} owl_history;
306
307typedef struct _owl_editwin {
308  char *buff;
309  owl_history *hist;
310  int bufflen;
311  int allocated;
312  int buffx, buffy;
313  int topline;
314  int winlines, wincols, fillcol, wrapcol;
315  WINDOW *curswin;
316  int style;
317  int lock;
318  int dotsend;
319} owl_editwin;
320
321typedef struct _owl_keybinding {
322  int  *j;                      /* keypress stack (0-terminated) */ 
323  int   type;                   /* command or function? */
324  char *desc;                   /* description (or "*user*") */
325  char *command;                /* command, if of type command */
326  void (*function_fn)(void);    /* function ptr, if of type function */
327} owl_keybinding;
328
329typedef struct _owl_keymap {
330  char     *name;               /* name of keymap */
331  char     *desc;               /* description */
332  owl_list  bindings;           /* key bindings */
333  struct _owl_keymap *submap;   /* submap */
334  void (*default_fn)(int j);    /* default action (takes a keypress) */
335  void (*prealways_fn)(int j);  /* always called before a keypress is received */
336  void (*postalways_fn)(int j); /* always called after keypress is processed */
337} owl_keymap;
338
339typedef struct _owl_keyhandler {
340  owl_dict  keymaps;            /* dictionary of keymaps */
341  owl_keymap *active;           /* currently active keymap */
342  int       in_esc;             /* escape pressed? */
343  int       kpstack[OWL_KEYMAP_MAXSTACK+1]; /* current stack of keypresses */
344  int       kpstackpos;         /* location in stack (-1 = none) */
345} owl_keyhandler;
346
347typedef struct _owl_global {
348  owl_mainwin mw;
349  owl_popwin pw;
350  owl_history cmdhist;          /* command history */
351  owl_history msghist;          /* outgoing message history */
352  owl_keyhandler kh;
353  owl_list filterlist;
354  owl_list puntlist;
355  owl_vardict vars;
356  owl_cmddict cmds;
357  owl_context ctx;
358  int lines, cols;
359  int curmsg, topmsg;
360  int curmsg_vert_offset;
361  owl_view current_view;
362  owl_messagelist msglist;
363  WINDOW *recwin, *sepwin, *msgwin, *typwin;
364  int needrefresh;
365  int rightshift;
366  int resizepending;
367  int recwinlines;
368  int typwinactive;
369  char thishost[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.