source: owl.h @ 2febcae

barnowl_perlaimdebianrelease-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 2febcae was 9866c3a, checked in by Alejandro R. Sedeño <asedeno@mit.edu>, 17 years ago
Reworked the fmtext format to use in-line formatting. Characters used for formatting are part of Unicode Supplemental Private Area-B, or Plane 16. fmtext no longer need 5x the text space to store formatting information, though they are harder to change at arbitrary points. This was something we hardly ever did anyhow, and we can still do everything we need to do. fmtext keeps a pair of colors and a char for default attributes to be applied when necessary. Searching is now done inline at owl_fmtext_waddstr() rather than specifying a section of the string to be reversed. This probably still needs some cleanup and more comments, but it works.
  • Property mode set to 100644
File size: 18.4 KB
Line 
1/*  Copyright (c) 2004 James Kretchmar. All rights reserved.
2 *
3 *  Redistribution and use in source and binary forms, with or without
4 *  modification, are permitted provided that the following conditions are
5 *  met:
6 * 
7 *    * Redistributions of source code must retain the above copyright
8 *      notice, this list of conditions and the following disclaimer.
9 * 
10 *    * Redistributions in binary form must reproduce the above copyright
11 *      notice, this list of conditions and the following disclaimer in
12 *      the documentation and/or other materials provided with the
13 *      distribution.
14 * 
15 *    * Redistributions in any form must be accompanied by information on
16 *      how to obtain complete source code for the Owl software and any
17 *      accompanying software that uses the Owl software. The source code
18 *      must either be included in the distribution or be available for no
19 *      more than the cost of distribution plus a nominal fee, and must be
20 *      freely redistributable under reasonable conditions. For an
21 *      executable file, complete source code means the source code for
22 *      all modules it contains. It does not include source code for
23 *      modules or files that typically accompany the major components of
24 *      the operating system on which the executable file runs.
25 * 
26 *
27 *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
28 *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
29 *  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
30 *  NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
31 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
34 *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
35 *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
36 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
37 *  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 */
39
40#ifndef INC_OWL_H
41#define INC_OWL_H
42
43#ifndef OWL_PERL
44#include <curses.h>
45#endif
46#include <sys/param.h>
47#include <EXTERN.h>
48#include <netdb.h>
49#include <regex.h>
50#include <time.h>
51#include <signal.h>
52#include <termios.h>
53#include <libfaim/aim.h>
54#include <wchar.h>
55#include "config.h"
56#include "glib.h"
57#ifdef HAVE_LIBZEPHYR
58#include <zephyr/zephyr.h>
59#endif
60#ifdef HAVE_COM_ERR_H
61#include <com_err.h>
62#endif
63
64/* Perl and curses don't play nice. */
65#ifdef OWL_PERL
66typedef void WINDOW;
67/* logout is defined in FreeBSD. */
68#define logout logout_
69#include <perl.h>
70#undef logout
71#include "XSUB.h"
72#else
73typedef void SV;
74#endif
75
76static const char owl_h_fileIdent[] = "$Id$";
77
78#define STRINGIFY(x) _STRINGIFY(x)
79#define _STRINGIFY(x) #x
80
81#ifndef OWL_SVN_REVNO
82#define OWL_SVN_REVNO ????
83#endif
84
85#define OWL_VERSION_STRING "r" STRINGIFY(OWL_SVN_REVNO)
86
87
88/* Feature that is being tested to redirect stderr through a pipe.
89 * There may still be some portability problems with this. */
90#define OWL_STDERR_REDIR 1
91
92#define OWL_DEBUG 0
93#define OWL_DEBUG_FILE "/var/tmp/owldebug"
94
95#define OWL_CONFIG_DIR "/.owl"             /* this is relative to the user's home directory */
96#define OWL_STARTUP_FILE "/.owl/startup"   /* this is relative to the user's home directory */
97
98#define OWL_FMTEXT_ATTR_NONE      0
99#define OWL_FMTEXT_ATTR_BOLD      1
100#define OWL_FMTEXT_ATTR_REVERSE   2
101#define OWL_FMTEXT_ATTR_UNDERLINE 4
102
103#define OWL_FMTEXT_UC_BASE 0x100000 /* Unicode Plane 16 - Supplementary Private Use Area-B*/
104#define OWL_FMTEXT_UC_ATTR ( OWL_FMTEXT_UC_BASE | 0x800 )
105#define OWL_FMTEXT_UC_ATTR_MASK 0x7
106#define OWL_FMTEXT_UC_COLOR_BASE ( OWL_FMTEXT_UC_BASE | 0x400 )
107#define OWL_FMTEXT_UC_FGCOLOR OWL_FMTEXT_UC_COLOR_BASE
108#define OWL_FMTEXT_UC_BGCOLOR ( OWL_FMTEXT_UC_COLOR_BASE | 0x200 )
109#define OWL_FMTEXT_UC_DEFAULT_COLOR 0x100
110#define OWL_FMTEXT_UC_FGDEFAULT ( OWL_FMTEXT_UC_FGCOLOR | OWL_FMTEXT_UC_DEFAULT_COLOR )
111#define OWL_FMTEXT_UC_BGDEFAULT ( OWL_FMTEXT_UC_BGCOLOR | OWL_FMTEXT_UC_DEFAULT_COLOR )
112#define OWL_FMTEXT_UC_COLOR_MASK 0xFF
113#define OWL_FMTEXT_UC_ALLCOLOR_MASK ( OWL_FMTEXT_UC_COLOR_MASK | OWL_FMTEXT_UC_DEFAULT_COLOR | 0x200)
114#define OWL_FMTEXT_UC_STARTBYTE_UTF8 '\xf4'
115
116#define OWL_FMTEXT_UTF8_ATTR_NONE "\xf4\x80\xa0\x80"
117#define OWL_FMTEXT_UTF8_FGDEFAULT "\xf4\x80\x94\x80"
118#define OWL_FMTEXT_UTF8_BGDEFAULT "\xf4\x80\x96\x80"
119
120
121
122
123#define OWL_COLOR_BLACK     0
124#define OWL_COLOR_RED       1
125#define OWL_COLOR_GREEN     2
126#define OWL_COLOR_YELLOW    3
127#define OWL_COLOR_BLUE      4
128#define OWL_COLOR_MAGENTA   5
129#define OWL_COLOR_CYAN      6
130#define OWL_COLOR_WHITE     7
131#define OWL_COLOR_DEFAULT   -1
132
133#define OWL_EDITWIN_STYLE_MULTILINE 0
134#define OWL_EDITWIN_STYLE_ONELINE   1
135
136#define OWL_PROTOCOL_ZEPHYR         0
137#define OWL_PROTOCOL_AIM            1
138#define OWL_PROTOCOL_JABBER         2
139#define OWL_PROTOCOL_ICQ            3
140#define OWL_PROTOCOL_YAHOO          4
141#define OWL_PROTOCOL_MSN            5
142
143#define OWL_MESSAGE_DIRECTION_NONE  0
144#define OWL_MESSAGE_DIRECTION_IN    1
145#define OWL_MESSAGE_DIRECTION_OUT   2
146
147#define OWL_MUX_READ   1
148#define OWL_MUX_WRITE  2
149#define OWL_MUX_EXCEPT 4
150
151#define OWL_DIRECTION_NONE      0
152#define OWL_DIRECTION_DOWNWARDS 1
153#define OWL_DIRECTION_UPWARDS   2
154
155#define OWL_LOGGING_DIRECTION_BOTH 0
156#define OWL_LOGGING_DIRECTION_IN   1
157#define OWL_LOGGING_DIRECTION_OUT  2
158
159#define OWL_SCROLLMODE_NORMAL      0
160#define OWL_SCROLLMODE_TOP         1
161#define OWL_SCROLLMODE_NEARTOP     2
162#define OWL_SCROLLMODE_CENTER      3
163#define OWL_SCROLLMODE_PAGED       4
164#define OWL_SCROLLMODE_PAGEDCENTER 5
165
166#define OWL_STYLE_TYPE_INTERNAL  0
167#define OWL_STYLE_TYPE_PERL      1
168
169#define OWL_TAB               3  /* This *HAS* to be the size of TABSTR below */
170#define OWL_TABSTR        "   "
171#define OWL_MSGTAB            7
172#define OWL_TYPWIN_SIZE       8
173#define OWL_HISTORYSIZE       50
174
175/* Indicate current state, as well as what is allowed */
176#define OWL_CTX_ANY          0xffff
177/* Only one of these may be active at a time... */
178#define OWL_CTX_MODE_BITS    0x000f
179#define OWL_CTX_STARTUP      0x0001
180#define OWL_CTX_READCONFIG   0x0002
181#define OWL_CTX_INTERACTIVE  0x0004
182/* Only one of these may be active at a time... */
183#define OWL_CTX_ACTIVE_BITS  0xfff0
184#define OWL_CTX_POPWIN       0x00f0
185#define OWL_CTX_POPLESS      0x0010
186#define OWL_CTX_RECWIN       0x0f00
187#define OWL_CTX_RECV         0x0100
188#define OWL_CTX_TYPWIN       0xf000
189#define OWL_CTX_EDIT         0x7000
190#define OWL_CTX_EDITLINE     0x1000
191#define OWL_CTX_EDITMULTI    0x2000
192#define OWL_CTX_EDITRESPONSE 0x4000
193
194#define OWL_USERCLUE_NONE       0
195#define OWL_USERCLUE_CLASSES    1
196#define OWL_USERCLUE_FOOBAR     2
197#define OWL_USERCLUE_BAZ        4
198
199#define OWL_WEBBROWSER_NONE     0
200#define OWL_WEBBROWSER_NETSCAPE 1
201#define OWL_WEBBROWSER_GALEON   2
202#define OWL_WEBBROWSER_OPERA    3
203
204#define OWL_VARIABLE_OTHER      0
205#define OWL_VARIABLE_INT        1
206#define OWL_VARIABLE_BOOL       2
207#define OWL_VARIABLE_STRING     3
208
209#define OWL_FILTER_MAX_DEPTH    300
210
211#define OWL_KEYMAP_MAXSTACK     20
212
213#define OWL_KEYBINDING_COMMAND  1   /* command string */
214#define OWL_KEYBINDING_FUNCTION 2   /* function taking no args */
215
216#define OWL_DEFAULT_ZAWAYMSG    "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n"
217#define OWL_DEFAULT_AAWAYMSG    "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n"
218
219#define OWL_INCLUDE_REG_TESTS   1  /* whether to build in regression tests */
220
221#define OWL_CMD_ALIAS_SUMMARY_PREFIX "command alias to: "
222
223#define OWL_WEBZEPHYR_PRINCIPAL "daemon.webzephyr"
224#define OWL_WEBZEPHYR_CLASS     "webzephyr"
225#define OWL_WEBZEPHYR_OPCODE    "webzephyr"
226
227#define OWL_REGEX_QUOTECHARS    "+*.?[]^\\${}()"
228#define OWL_REGEX_QUOTEWITH     "\\"
229
230#if defined(HAVE_DES_STRING_TO_KEY) && defined(HAVE_DES_KEY_SCHED) && defined(HAVE_DES_ECB_ENCRYPT)
231#define OWL_ENABLE_ZCRYPT 1
232#endif
233
234#define OWL_META(key) ((key)|0200)
235/* OWL_CTRL is definied in kepress.c */
236
237#define LINE 2048
238
239typedef struct _owl_variable {
240  char *name;
241  int   type;  /* OWL_VARIABLE_* */
242  void *pval_default;  /* for types other and string */
243  int   ival_default;  /* for types int and bool     */
244  char *validsettings;          /* documentation of valid settings */
245  char *summary;                /* summary of usage */
246  char *description;            /* detailed description */
247  void *val;                    /* current value */
248  int  (*validate_fn)(struct _owl_variable *v, void *newval);
249                                /* returns 1 if newval is valid */
250  int  (*set_fn)(struct _owl_variable *v, void *newval); 
251                                /* sets the variable to a value
252                                 * of the appropriate type.
253                                 * unless documented, this
254                                 * should make a copy.
255                                 * returns 0 on success. */
256  int  (*set_fromstring_fn)(struct _owl_variable *v, char *newval);
257                                /* sets the variable to a value
258                                 * of the appropriate type.
259                                 * unless documented, this
260                                 * should make a copy.
261                                 * returns 0 on success. */
262  void *(*get_fn)(struct _owl_variable *v);
263                                /* returns a reference to the current value.
264                                 * WARNING:  this approach is hard to make
265                                 * thread-safe... */
266  int  (*get_tostring_fn)(struct _owl_variable *v, 
267                          char *buf, int bufsize, void *val); 
268                                /* converts val to a string
269                                 * and puts into buf */
270  void  (*free_fn)(struct _owl_variable *v);
271                                /* frees val as needed */
272} owl_variable;
273
274typedef struct _owl_fmtext {
275  int textlen;
276  int bufflen;
277  char *textbuff;
278  char default_attrs;
279  short default_fgcolor;
280  short default_bgcolor;
281} owl_fmtext;
282
283typedef struct _owl_list {
284  int size;
285  int avail;
286  void **list;
287} owl_list;
288
289typedef struct _owl_dict_el {
290  char *k;                      /* key   */
291  void *v;                      /* value */
292} owl_dict_el;
293
294typedef struct _owl_dict {
295  int size;
296  int avail;
297  owl_dict_el *els;             /* invariant: sorted by k */
298} owl_dict;
299typedef owl_dict owl_vardict;   /* dict of variables */
300typedef owl_dict owl_cmddict;   /* dict of commands */
301
302typedef struct _owl_context {
303  int   mode;
304  void *data;           /* determined by mode */
305} owl_context;
306
307typedef struct _owl_cmd {       /* command */
308  char *name;
309
310  char *summary;                /* one line summary of command */
311  char *usage;                  /* usage synopsis */
312  char *description;            /* long description of command */
313
314  int validctx;                 /* bitmask of valid contexts */
315
316  /* we should probably have a type here that says which of
317   * the following is valid, and maybe make the below into a union... */
318
319  /* Only one of these may be non-NULL ... */
320
321  char *cmd_aliased_to;         /* what this command is aliased to... */
322 
323  /* These don't take any context */
324  char *(*cmd_args_fn)(int argc, char **argv, char *buff); 
325                                /* takes argv and the full command as buff.
326                                 * caller must free return value if !NULL */
327  void (*cmd_v_fn)(void);       /* takes no args */
328  void (*cmd_i_fn)(int i);      /* takes an int as an arg */
329
330  /* The following also take the active context if it's valid */
331  char *(*cmd_ctxargs_fn)(void *ctx, int argc, char **argv, char *buff); 
332                                /* takes argv and the full command as buff.
333                                 * caller must free return value if !NULL */
334  void (*cmd_ctxv_fn)(void *ctx);               /* takes no args */
335  void (*cmd_ctxi_fn)(void *ctx, int i);        /* takes an int as an arg */
336  SV *cmd_perl;                                /* Perl closure that takes a list of args */
337} owl_cmd;
338
339
340typedef struct _owl_zwrite {
341  char *class;
342  char *inst;
343  char *realm;
344  char *opcode;
345  char *zsig;
346  char *message;
347  owl_list recips;
348  int cc;
349  int noping;
350} owl_zwrite;
351
352typedef struct _owl_pair {
353  void *key;
354  void *value;
355} owl_pair;
356
357struct _owl_fmtext_cache;
358
359typedef struct _owl_message {
360  int id;
361  int direction;
362#ifdef HAVE_LIBZEPHYR
363  ZNotice_t notice;
364#endif
365  struct _owl_fmtext_cache * fmtext;
366  int delete;
367  char *hostname;
368  owl_list attributes;            /* this is a list of pairs */
369  char *timestr;
370  time_t time;
371  char *zwriteline;
372} owl_message;
373
374#define OWL_FMTEXT_CACHE_SIZE 1000
375/* We cache the saved fmtexts for the last bunch of messages we
376   rendered */
377typedef struct _owl_fmtext_cache {
378    owl_message * message;
379    owl_fmtext fmtext;
380} owl_fmtext_cache;
381
382typedef struct _owl_style {
383  char *name;
384  char *description;
385  int type;
386  char *perlfuncname;
387  void (*formatfunc) (owl_fmtext *fm, owl_message *m);
388} owl_style;
389
390typedef struct _owl_mainwin {
391  int curtruncated;
392  int lasttruncated;
393  int lastdisplayed;
394} owl_mainwin;
395
396typedef struct _owl_viewwin {
397  owl_fmtext fmtext;
398  int textlines;
399  int topline;
400  int rightshift;
401  int winlines, wincols;
402  WINDOW *curswin;
403  void (*onclose_hook) (struct _owl_viewwin *vwin, void *data);
404  void *onclose_hook_data;
405} owl_viewwin;
406 
407typedef struct _owl_popwin {
408  WINDOW *borderwin;
409  WINDOW *popwin;
410  int lines;
411  int cols;
412  int active;
413  int needsfirstrefresh;
414  void (*handler) (int ch);
415} owl_popwin;
416
417typedef struct _owl_popexec {
418  int refcount;
419  owl_viewwin *vwin;
420  int winactive;
421  int pid;                      /* or 0 if it has terminated */
422  int rfd; 
423} owl_popexec;
424
425typedef struct _owl_messagelist {
426  owl_list list;
427} owl_messagelist;
428
429typedef struct _owl_regex {
430  int negate;
431  char *string;
432  regex_t re;
433} owl_regex;
434
435typedef struct _owl_filterelement {
436  int (*match_message)(struct _owl_filterelement *fe, owl_message *m);
437  /* Append a string representation of the filterelement onto buf*/
438  void (*print_elt)(struct _owl_filterelement *fe, char * buf);
439  /* Operands for and,or,not*/
440  struct _owl_filterelement *left, *right;
441  /* For regex filters*/
442  owl_regex re;
443  /* Used by regexes, filter references, and perl */
444  char *field;
445} owl_filterelement;
446
447typedef struct _owl_filter {
448  char *name;
449  int polarity;
450  owl_filterelement * root;
451  int fgcolor;
452  int bgcolor;
453  int cachedmsgid;  /* cached msgid: should move into view eventually */
454} owl_filter;
455
456typedef struct _owl_view {
457  char *name;
458  owl_filter *filter;
459  owl_messagelist ml;
460  owl_style *style;
461} owl_view;
462
463typedef struct _owl_history {
464  owl_list hist;
465  int cur;
466  int touched;
467  int partial;
468  int repeats;
469} owl_history;
470
471typedef struct _owl_editwin {
472  char *buff;
473  owl_history *hist;
474  int bufflen;
475  int allocated;
476  int buffx, buffy;
477  int topline;
478  int winlines, wincols, fillcol, wrapcol;
479  WINDOW *curswin;
480  int style;
481  int lock;
482  int dotsend;
483  int echochar;
484
485  char *command;
486  void (*callback)(struct _owl_editwin*);
487  void *cbdata;
488} owl_editwin;
489
490typedef struct _owl_mux {
491  int handle;                   /* for referencing this */
492  int active;                   /* has this been deleted? */
493  int fd;                     
494  int eventmask;                /* bitmask of OWL_MUX_* */
495  void (*handler_fn)(int handle, int fd, int eventmask, void *data);
496  void *data;                   /* data reference to pass to callback */
497} owl_mux;
498typedef owl_list owl_muxevents;
499
500typedef struct _owl_keybinding {
501  int  *j;                      /* keypress stack (0-terminated) */ 
502  int   type;                   /* command or function? */
503  char *desc;                   /* description (or "*user*") */
504  char *command;                /* command, if of type command */
505  void (*function_fn)(void);    /* function ptr, if of type function */
506} owl_keybinding;
507
508typedef struct _owl_keymap {
509  char     *name;               /* name of keymap */
510  char     *desc;               /* description */
511  owl_list  bindings;           /* key bindings */
512  struct _owl_keymap *submap;   /* submap */
513  void (*default_fn)(int j);    /* default action (takes a keypress) */
514  void (*prealways_fn)(int j);  /* always called before a keypress is received */
515  void (*postalways_fn)(int j); /* always called after keypress is processed */
516} owl_keymap;
517
518typedef struct _owl_keyhandler {
519  owl_dict  keymaps;            /* dictionary of keymaps */
520  owl_keymap *active;           /* currently active keymap */
521  int       in_esc;             /* escape pressed? */
522  int       kpstack[OWL_KEYMAP_MAXSTACK+1]; /* current stack of keypresses */
523  int       kpstackpos;         /* location in stack (-1 = none) */
524} owl_keyhandler;
525
526typedef struct _owl_buddy {
527  int proto;
528  char *name;
529  int isidle;
530  int idlesince;
531} owl_buddy;
532
533typedef struct _owl_buddylist {
534  owl_list buddies;
535} owl_buddylist;
536
537typedef struct _owl_zbuddylist {
538  owl_list zusers;
539} owl_zbuddylist;
540
541typedef struct _owl_timer {
542  int direction;
543  time_t starttime;
544  int start;
545} owl_timer;
546
547typedef struct _owl_errqueue {
548  owl_list errlist;
549} owl_errqueue;
550
551typedef struct _owl_colorpair_mgr {
552  int next;
553  short **pairs;
554} owl_colorpair_mgr;
555
556typedef struct _owl_obarray {
557  owl_list strings;
558} owl_obarray;
559
560typedef struct _owl_global {
561  owl_mainwin mw;
562  owl_popwin pw;
563  owl_history cmdhist;          /* command history */
564  owl_history msghist;          /* outgoing message history */
565  owl_keyhandler kh;
566  owl_list filterlist;
567  owl_list puntlist;
568  owl_muxevents muxevents;      /* fds to dispatch on */
569  owl_vardict vars;
570  owl_cmddict cmds;
571  owl_context ctx;
572  owl_errqueue errqueue;
573  int lines, cols;
574  int curmsg, topmsg;
575  int curmsg_vert_offset;
576  owl_view current_view;
577  owl_messagelist msglist;
578  WINDOW *recwin, *sepwin, *msgwin, *typwin;
579  int needrefresh;
580  int rightshift;
581  int resizepending;
582  int recwinlines;
583  int typwinactive;
584  char *thishost;
585  char *homedir;
586  char *confdir;
587  char *startupfile;
588  int direction;
589  int zaway;
590  char *cur_zaway_msg;
591  int haveconfig;
592  int config_format;
593  void *buffercbdata;
594  owl_editwin tw;
595  owl_viewwin vw;
596  void *perl;
597  int debug;
598  time_t starttime;
599  time_t lastinputtime;
600  char *startupargs;
601  int userclue;
602  int nextmsgid;
603  int hascolors;
604  int colorpairs;
605  owl_colorpair_mgr cpmgr;
606  int searchactive;
607  int newmsgproc_pid;
608  int malloced, freed;
609  char *searchstring;
610  aim_session_t aimsess;
611  aim_conn_t bosconn;
612  owl_timer aim_noop_timer;
613  owl_timer aim_ignorelogin_timer;
614  owl_timer aim_buddyinfo_timer;
615  int aim_loggedin;         /* true if currently logged into AIM */
616  int aim_doprocessing;     /* true if we should process AIM events (like pending login) */
617  char *aim_screenname;     /* currently logged in AIM screen name */
618  owl_buddylist buddylist;  /* list of logged in AIM buddies */
619  owl_list messagequeue;    /* for queueing up aim and other messages */
620  owl_dict styledict;       /* global dictionary of available styles */
621  char *response;           /* response to the last question asked */
622  int havezephyr;
623  int haveaim;
624  int got_err_signal;       /* 1 if we got an unexpected signal */
625  siginfo_t err_signal_info;
626  owl_zbuddylist zbuddies;
627  owl_timer zephyr_buddycheck_timer;
628  struct termios startup_tio;
629  owl_obarray obarray;
630} owl_global;
631
632/* globals */
633extern owl_global g;
634
635#include "owl_prototypes.h"
636
637/* these are missing from the zephyr includes for some reason */
638#ifdef HAVE_LIBZEPHYR
639int ZGetSubscriptions(ZSubscription_t *, int *);
640int ZGetLocations(ZLocations_t *,int *);
641#endif
642
643#endif /* INC_OWL_H */
Note: See TracBrowser for help on using the repository browser.