source: owl.h @ aa2f33b3

barnowl_perlaimdebianowlrelease-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since aa2f33b3 was aa2f33b3, checked in by Erik Nygren <nygren@mit.edu>, 19 years ago
Variables now have a summary and a long description. Only the summary is shown with help. The long description is shown with "show variable foo". Fix the scrolling bug where we would sometimes fail to scroll the screen down, leaving the current message off the bottom of the screen. Added a 'scrollmode' variable which determines how the screen will scroll as the cursor moves. The default behaves identically to previous versions of owl. The following modes are supported: normal - This is the owl default. Scrolling happens when it needs to, and an attempt is made to keep the current message roughly near the middle of the screen. (default) top - The current message will always be the the top message displayed. neartop - The current message will be one down from the top message displayed, where possible. center - An attempt is made to keep the current message near the center of the screen. paged - The top message displayed only changes when user moves the cursor to the top or bottom of the screen. When it moves, the screen will be paged up or down and the cursor will be near the top or the bottom. pagedcenter - The top message displayed only changes when user moves the cursor to the top or bottom of the screen. When it moves, the screen will be paged up or down and the cursor will be near the center.
  • Property mode set to 100644
File size: 10.3 KB
RevLine 
[7d4fbcd]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
[1aee7d9]12static const char owl_h_fileIdent[] = "$Id$";
13
[aa2f33b3]14#define OWL_VERSION         1.2.1-pre-3
15#define OWL_VERSION_STRING "1.2.1-pre-3"
[7d4fbcd]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
[aa2f33b3]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
[7d4fbcd]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
[ae9e6be]89#define OWL_WEBBROWSER_OPERA    3
[7d4fbcd]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
[1c7a4e0]107#define OWL_CMD_ALIAS_SUMMARY_PREFIX "command alias to: "
[7d4fbcd]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 */
[aa2f33b3]124  char *summary;                /* summary of usage */
125  char *description;            /* detailed description */
[7d4fbcd]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 lastdisplayed;
248} owl_mainwin;
249
250typedef struct _owl_viewwin {
251  owl_fmtext fmtext;
252  int textlines;
253  int topline;
254  int rightshift;
255  int winlines, wincols;
256  WINDOW *curswin;
257} owl_viewwin;
258 
259typedef struct _owl_popwin {
260  WINDOW *borderwin;
261  WINDOW *popwin;
262  int lines;
263  int cols;
264  int active;
265  int needsfirstrefresh;
266  void (*handler) (int ch);
267} owl_popwin;
268
269typedef struct _owl_messagelist {
270  owl_list list;
271} owl_messagelist;
272
273typedef struct _owl_regex {
274  int negate;
275  char *string;
276  regex_t re;
277} owl_regex;
278
279typedef struct _owl_filterelement {
280  int type;
281  char *field;
282  owl_regex re;
283} owl_filterelement;
284
285typedef struct _owl_filter {
286  char *name;
287  int polarity;
288  owl_list fes; /* filterelements */
289  int color;
290} owl_filter;
291
292typedef struct _owl_view {
293  owl_filter *filter;
294  owl_messagelist ml;
295} owl_view;
296
297typedef struct _owl_history {
298  owl_list hist;
299  int cur;
300  int touched;
301  int partial;
302} owl_history;
303
[10b866d]304typedef struct _owl_editwin {
305  char *buff;
306  owl_history *hist;
307  int bufflen;
308  int allocated;
309  int buffx, buffy;
310  int topline;
311  int winlines, wincols, fillcol, wrapcol;
312  WINDOW *curswin;
313  int style;
314  int lock;
315  int dotsend;
316} owl_editwin;
317
[7d4fbcd]318typedef struct _owl_keybinding {
319  int  *j;                      /* keypress stack (0-terminated) */ 
320  int   type;                   /* command or function? */
321  char *desc;                   /* description (or "*user*") */
322  char *command;                /* command, if of type command */
323  void (*function_fn)(void);    /* function ptr, if of type function */
324} owl_keybinding;
325
326typedef struct _owl_keymap {
327  char     *name;               /* name of keymap */
328  char     *desc;               /* description */
329  owl_list  bindings;           /* key bindings */
330  struct _owl_keymap *submap;   /* submap */
331  void (*default_fn)(int j);    /* default action (takes a keypress) */
332  void (*prealways_fn)(int j);  /* always called before a keypress is received */
333  void (*postalways_fn)(int j); /* always called after keypress is processed */
334} owl_keymap;
335
336typedef struct _owl_keyhandler {
337  owl_dict  keymaps;            /* dictionary of keymaps */
338  owl_keymap *active;           /* currently active keymap */
339  int       in_esc;             /* escape pressed? */
340  int       kpstack[OWL_KEYMAP_MAXSTACK+1]; /* current stack of keypresses */
341  int       kpstackpos;         /* location in stack (-1 = none) */
342} owl_keyhandler;
343
344typedef struct _owl_global {
345  owl_mainwin mw;
346  owl_popwin pw;
[10b866d]347  owl_history cmdhist;          /* command history */
348  owl_history msghist;          /* outgoing message history */
[7d4fbcd]349  owl_keyhandler kh;
350  owl_list filterlist;
351  owl_list puntlist;
352  owl_vardict vars;
353  owl_cmddict cmds;
354  owl_context ctx;
355  int lines, cols;
356  int curmsg, topmsg;
357  int curmsg_vert_offset;
358  owl_view current_view;
359  owl_messagelist msglist;
360  WINDOW *recwin, *sepwin, *msgwin, *typwin;
361  int needrefresh;
362  int rightshift;
363  int resizepending;
364  int recwinlines;
365  int typwinactive;
366  char thishost[LINE];
367  char thistty[LINE];
368  char homedir[LINE];
369  int direction;
370  int zaway;
371  char *cur_zaway_msg;
372  int haveconfig;
373  int config_format;
374  char buffercommand[1024];
375  owl_editwin tw;
376  owl_viewwin vw;
377  void *perl;
378  int debug;
379  int starttime;
380  char startupargs[LINE];
381  int userclue;
382  int nextmsgid;
383  int hascolors;
384  int colorpairs;
385  owl_filterelement fe_true;
386  owl_filterelement fe_false;
387  owl_filterelement fe_null;
388} owl_global;
389
390/* globals */
391owl_global g;
392
393#include "owl_prototypes.h"
394
395/* these are missing from the zephyr includes for some reason */
396int ZGetSubscriptions(ZSubscription_t *, int *);
397int ZGetLocations(ZLocations_t *,int *);
398
399#endif /* INC_OWL_H */
Note: See TracBrowser for help on using the repository browser.