source: owl.h @ aa5f725

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