source: owl.h @ 4811422

release-1.10release-1.7release-1.8release-1.9
Last change on this file since 4811422 was fc5eef4, checked in by David Benjamin <davidben@mit.edu>, 14 years ago
Configure owl_global_set_typwin_inactive to be called on context deactivate This removes the explicit calls to the deactivate function. In particular, it means that we can set up an alternate deactivate function and edit:done needn't know about it.
  • Property mode set to 100644
File size: 18.3 KB
RevLine 
[1cfcab7]1/*  Copyright (c) 2006-2010 The BarnOwl Developers. All rights reserved.
[81001c0]2 *  Copyright (c) 2004 James Kretchmar. All rights reserved.
[5ca5f8e]3 *
[81001c0]4 *  This program is free software. You can redistribute it and/or
5 *  modify under the terms of the Sleepycat License. See the COPYING
6 *  file included with the distribution for more information.
[5ca5f8e]7 */
8
[06adc25]9#ifndef INC_BARNOWL_OWL_H
10#define INC_BARNOWL_OWL_H
[7d4fbcd]11
[691d012]12#include "config.h"
13
[75b0adb]14#ifdef HAVE_STDBOOL_H
[f8074e9]15#include <stdbool.h>
[75b0adb]16#else
17#ifndef HAVE__BOOL
18#define _Bool signed char
19#endif
20#define bool _Bool
21#define false 0
22#define true 1
23#define __bool_true_false_are_defined 1
24#endif  /* HAVE_STDBOOL_H */
25
[1bdffcb]26#ifndef OWL_PERL
27#include <curses.h>
[be1ae91]28#include <panel.h>
[1bdffcb]29#endif
[7d4fbcd]30#include <sys/param.h>
31#include <EXTERN.h>
32#include <netdb.h>
33#include <regex.h>
[d09e5a1]34#include <time.h>
[c9e72d1]35#include <signal.h>
[8232149]36#include <termios.h>
[731dd1e]37#include "libfaim/aim.h"
[dd24b6a]38#include <wchar.h>
[34509d5]39#include "glib.h"
[be0a79f]40#ifdef HAVE_LIBZEPHYR
[373b7e7]41#include <zephyr/zephyr.h>
[be0a79f]42#endif
[e6449bc]43#ifdef HAVE_COM_ERR_H
44#include <com_err.h>
45#endif
46
[6922edd]47/* Perl and curses don't play nice. */
48#ifdef OWL_PERL
49typedef void WINDOW;
[be1ae91]50typedef void PANEL;
[18e28a4]51/* logout is defined in FreeBSD. */
52#define logout logout_
[88dc766]53#define HAS_BOOL
[6922edd]54#include <perl.h>
[120291c]55#include "owl_perl.h"
[18e28a4]56#undef logout
[6922edd]57#include "XSUB.h"
58#else
59typedef void SV;
[68c572a]60typedef void AV;
61typedef void HV;
[6922edd]62#endif
63
[e96b4ce]64#include "window.h"
65
[8df704f]66#ifdef  GIT_VERSION
67#define stringify(x)       __stringify(x)
68#define __stringify(x)     #x
69#define OWL_VERSION_STRING stringify(GIT_VERSION)
70#else
[37f27bc]71#define OWL_VERSION_STRING PACKAGE_VERSION
[8df704f]72#endif
[2a2bb60]73
74/* Feature that is being tested to redirect stderr through a pipe.
75 * There may still be some portability problems with this. */
76#define OWL_STDERR_REDIR 1
[7d4fbcd]77
78#define OWL_DEBUG 0
[26ad412]79#define OWL_DEBUG_FILE "/var/tmp/barnowl-debug"
[7d4fbcd]80
[bd3f232]81#define OWL_CONFIG_DIR "/.owl"             /* this is relative to the user's home directory */
[38cf544c]82#define OWL_STARTUP_FILE "/.owl/startup"   /* this is relative to the user's home directory */
83
[7d4fbcd]84#define OWL_FMTEXT_ATTR_NONE      0
85#define OWL_FMTEXT_ATTR_BOLD      1
86#define OWL_FMTEXT_ATTR_REVERSE   2
87#define OWL_FMTEXT_ATTR_UNDERLINE 4
88
[9866c3a]89#define OWL_FMTEXT_UC_BASE 0x100000 /* Unicode Plane 16 - Supplementary Private Use Area-B*/
90#define OWL_FMTEXT_UC_ATTR ( OWL_FMTEXT_UC_BASE | 0x800 )
91#define OWL_FMTEXT_UC_ATTR_MASK 0x7
92#define OWL_FMTEXT_UC_COLOR_BASE ( OWL_FMTEXT_UC_BASE | 0x400 )
93#define OWL_FMTEXT_UC_FGCOLOR OWL_FMTEXT_UC_COLOR_BASE
94#define OWL_FMTEXT_UC_BGCOLOR ( OWL_FMTEXT_UC_COLOR_BASE | 0x200 )
95#define OWL_FMTEXT_UC_DEFAULT_COLOR 0x100
96#define OWL_FMTEXT_UC_FGDEFAULT ( OWL_FMTEXT_UC_FGCOLOR | OWL_FMTEXT_UC_DEFAULT_COLOR )
97#define OWL_FMTEXT_UC_BGDEFAULT ( OWL_FMTEXT_UC_BGCOLOR | OWL_FMTEXT_UC_DEFAULT_COLOR )
98#define OWL_FMTEXT_UC_COLOR_MASK 0xFF
99#define OWL_FMTEXT_UC_ALLCOLOR_MASK ( OWL_FMTEXT_UC_COLOR_MASK | OWL_FMTEXT_UC_DEFAULT_COLOR | 0x200)
100#define OWL_FMTEXT_UC_STARTBYTE_UTF8 '\xf4'
101
102#define OWL_FMTEXT_UTF8_ATTR_NONE "\xf4\x80\xa0\x80"
103#define OWL_FMTEXT_UTF8_FGDEFAULT "\xf4\x80\x94\x80"
[6f6330b]104#define OWL_FMTEXT_UTF8_BGDEFAULT "\xf4\x80\x9C\x80"
[9866c3a]105
[7d4fbcd]106#define OWL_COLOR_BLACK     0
107#define OWL_COLOR_RED       1
108#define OWL_COLOR_GREEN     2
109#define OWL_COLOR_YELLOW    3
110#define OWL_COLOR_BLUE      4
111#define OWL_COLOR_MAGENTA   5
112#define OWL_COLOR_CYAN      6
113#define OWL_COLOR_WHITE     7
[c2c5c77]114#define OWL_COLOR_DEFAULT   -1
[601733d]115#define OWL_COLOR_INVALID   -2
[7d4fbcd]116
[2b83ad6]117#define OWL_TAB_WIDTH 8
118
[7d4fbcd]119#define OWL_EDITWIN_STYLE_MULTILINE 0
120#define OWL_EDITWIN_STYLE_ONELINE   1
121
[f4d0975]122#define OWL_PROTOCOL_ZEPHYR         0
123#define OWL_PROTOCOL_AIM            1
124#define OWL_PROTOCOL_JABBER         2
125#define OWL_PROTOCOL_ICQ            3
126#define OWL_PROTOCOL_YAHOO          4
127#define OWL_PROTOCOL_MSN            5
128
[4b464a4]129#define OWL_MESSAGE_DIRECTION_NONE  0
130#define OWL_MESSAGE_DIRECTION_IN    1
131#define OWL_MESSAGE_DIRECTION_OUT   2
[7d4fbcd]132
[df0138f]133#define OWL_IO_READ   1
134#define OWL_IO_WRITE  2
135#define OWL_IO_EXCEPT 4
[afbf668]136
[7d4fbcd]137#define OWL_DIRECTION_NONE      0
138#define OWL_DIRECTION_DOWNWARDS 1
139#define OWL_DIRECTION_UPWARDS   2
140
[12c35df]141#define OWL_LOGGING_DIRECTION_BOTH 0
142#define OWL_LOGGING_DIRECTION_IN   1
143#define OWL_LOGGING_DIRECTION_OUT  2
144
[88736cb]145#define OWL_SCROLLMODE_NORMAL      0
146#define OWL_SCROLLMODE_TOP         1
147#define OWL_SCROLLMODE_NEARTOP     2
148#define OWL_SCROLLMODE_CENTER      3
149#define OWL_SCROLLMODE_PAGED       4
[aa2f33b3]150#define OWL_SCROLLMODE_PAGEDCENTER 5
151
[7d4fbcd]152#define OWL_TAB               3  /* This *HAS* to be the size of TABSTR below */
153#define OWL_TABSTR        "   "
154#define OWL_MSGTAB            7
155#define OWL_TYPWIN_SIZE       8
156#define OWL_HISTORYSIZE       50
157
158/* Indicate current state, as well as what is allowed */
159#define OWL_CTX_ANY          0xffff
160/* Only one of these may be active at a time... */
161#define OWL_CTX_MODE_BITS    0x000f
162#define OWL_CTX_STARTUP      0x0001
163#define OWL_CTX_READCONFIG   0x0002
164#define OWL_CTX_INTERACTIVE  0x0004
165/* Only one of these may be active at a time... */
166#define OWL_CTX_ACTIVE_BITS  0xfff0
167#define OWL_CTX_POPWIN       0x00f0
168#define OWL_CTX_POPLESS      0x0010
169#define OWL_CTX_RECWIN       0x0f00
170#define OWL_CTX_RECV         0x0100
171#define OWL_CTX_TYPWIN       0xf000
[cf83b7a]172#define OWL_CTX_EDIT         0x7000
[7d4fbcd]173#define OWL_CTX_EDITLINE     0x1000
174#define OWL_CTX_EDITMULTI    0x2000
[cf83b7a]175#define OWL_CTX_EDITRESPONSE 0x4000
[7d4fbcd]176
177#define OWL_VARIABLE_OTHER      0
178#define OWL_VARIABLE_INT        1
179#define OWL_VARIABLE_BOOL       2
180#define OWL_VARIABLE_STRING     3
181
[7ba9e0de]182#define OWL_OUTPUT_RETURN       0
183#define OWL_OUTPUT_POPUP        1
184#define OWL_OUTPUT_ADMINMSG     2
185
[7d4fbcd]186#define OWL_FILTER_MAX_DEPTH    300
187
[4b464a4]188#define OWL_KEYMAP_MAXSTACK     20
[7d4fbcd]189
[4b464a4]190#define OWL_KEYBINDING_COMMAND  1   /* command string */
191#define OWL_KEYBINDING_FUNCTION 2   /* function taking no args */
[7d4fbcd]192
[4b464a4]193#define OWL_DEFAULT_ZAWAYMSG    "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n"
[4b660cc]194#define OWL_DEFAULT_AAWAYMSG    "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n"
[7d4fbcd]195
[1c7a4e0]196#define OWL_CMD_ALIAS_SUMMARY_PREFIX "command alias to: "
[7d4fbcd]197
[e7cc1c3]198#define OWL_WEBZEPHYR_PRINCIPAL "daemon.webzephyr"
[1d3e925]199#define OWL_WEBZEPHYR_CLASS     "webzephyr"
200#define OWL_WEBZEPHYR_OPCODE    "webzephyr"
[e7cc1c3]201
[80e54a7]202#define OWL_REGEX_QUOTECHARS    "+*.?[]^\\${}()"
[bc08664]203#define OWL_REGEX_QUOTEWITH     "\\"
204
[0435c7d]205#if defined(HAVE_DES_STRING_TO_KEY) && defined(HAVE_DES_KEY_SCHED) && defined(HAVE_DES_ECB_ENCRYPT)
[c86a35c]206#define OWL_ENABLE_ZCRYPT 1
[c269e22]207#endif
208
[62fdd29]209#define OWL_META(key) ((key)|010000)
[f87c490]210/* OWL_CTRL is definied in kepress.c */
[7d4fbcd]211
212#define LINE 2048
213
[712caac]214#ifdef HAVE_LIBZEPHYR
[6337cb5]215/* libzephyr doesn't use const, so we appease the type system with this kludge.
216 * This just casts const char * to char * in a way that doesn't yield a warning
217 * from gcc -Wcast-qual. */
[712caac]218static inline char *zstr(const char *str)
219{
[6337cb5]220  union { char *rw; const char *ro; } u;
221  u.ro = str;
222  return u.rw;
[712caac]223}
224#endif
225
[e19eb97]226/* Convert char *const * into const char *const *.  This conversion is safe,
[c529ac8]227 * and implicit in C++ (conv.qual 4) but for some reason not in C. */
[e19eb97]228static inline const char *const *strs(char *const *pstr)
[c529ac8]229{
[e19eb97]230  return (const char *const *)pstr;
[c529ac8]231}
232
[7d4fbcd]233typedef struct _owl_variable {
234  char *name;
235  int   type;  /* OWL_VARIABLE_* */
236  void *pval_default;  /* for types other and string */
237  int   ival_default;  /* for types int and bool     */
238  char *validsettings;          /* documentation of valid settings */
[aa2f33b3]239  char *summary;                /* summary of usage */
240  char *description;            /* detailed description */
[7d4fbcd]241  void *val;                    /* current value */
[64735f0]242  int  (*validate_fn)(const struct _owl_variable *v, const void *newval);
[7d4fbcd]243                                /* returns 1 if newval is valid */
[e19eb97]244  int  (*set_fn)(struct _owl_variable *v, const void *newval); 
[7d4fbcd]245                                /* sets the variable to a value
246                                 * of the appropriate type.
247                                 * unless documented, this
248                                 * should make a copy.
249                                 * returns 0 on success. */
[e19eb97]250  int  (*set_fromstring_fn)(struct _owl_variable *v, const char *newval);
[7d4fbcd]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. */
[64735f0]256  const void *(*get_fn)(const struct _owl_variable *v);
[7d4fbcd]257                                /* returns a reference to the current value.
258                                 * WARNING:  this approach is hard to make
259                                 * thread-safe... */
[64735f0]260  int  (*get_tostring_fn)(const struct _owl_variable *v, 
[e19eb97]261                          char *buf, int bufsize, const void *val); 
[7d4fbcd]262                                /* converts val to a string
263                                 * and puts into buf */
[bbd74a9]264  void (*delete_fn)(struct _owl_variable *v);
[7d4fbcd]265                                /* frees val as needed */
266} owl_variable;
267
[428834d]268typedef struct _owl_input {
269  int ch;
270  gunichar uch;
271} owl_input;
272
[7d4fbcd]273typedef struct _owl_fmtext {
274  int textlen;
[a387d12e]275  int bufflen;
[7d4fbcd]276  char *textbuff;
[9866c3a]277  char default_attrs;
278  short default_fgcolor;
279  short default_bgcolor;
[7d4fbcd]280} owl_fmtext;
281
282typedef struct _owl_list {
283  int size;
284  int avail;
285  void **list;
286} owl_list;
287
288typedef struct _owl_dict_el {
289  char *k;                      /* key   */
290  void *v;                      /* value */
291} owl_dict_el;
292
293typedef struct _owl_dict {
294  int size;
295  int avail;
296  owl_dict_el *els;             /* invariant: sorted by k */
297} owl_dict;
298typedef owl_dict owl_vardict;   /* dict of variables */
299typedef owl_dict owl_cmddict;   /* dict of commands */
300
301typedef struct _owl_context {
302  int   mode;
303  void *data;           /* determined by mode */
[a999d9e]304  char *keymap;
[07b59ea]305  owl_window *cursor;
[1d74663]306  void (*deactivate_cb)(struct _owl_context*);
307  void (*delete_cb)(struct _owl_context*);
[fc5eef4]308  void *cbdata;
[7d4fbcd]309} owl_context;
310
311typedef struct _owl_cmd {       /* command */
312  char *name;
313
314  char *summary;                /* one line summary of command */
315  char *usage;                  /* usage synopsis */
316  char *description;            /* long description of command */
317
318  int validctx;                 /* bitmask of valid contexts */
319
320  /* we should probably have a type here that says which of
321   * the following is valid, and maybe make the below into a union... */
322
323  /* Only one of these may be non-NULL ... */
324
325  char *cmd_aliased_to;         /* what this command is aliased to... */
326 
327  /* These don't take any context */
[e19eb97]328  char *(*cmd_args_fn)(int argc, const char *const *argv, const char *buff); 
[7d4fbcd]329                                /* takes argv and the full command as buff.
330                                 * caller must free return value if !NULL */
331  void (*cmd_v_fn)(void);       /* takes no args */
332  void (*cmd_i_fn)(int i);      /* takes an int as an arg */
333
334  /* The following also take the active context if it's valid */
[e19eb97]335  char *(*cmd_ctxargs_fn)(void *ctx, int argc, const char *const *argv, const char *buff); 
[7d4fbcd]336                                /* takes argv and the full command as buff.
337                                 * caller must free return value if !NULL */
338  void (*cmd_ctxv_fn)(void *ctx);               /* takes no args */
339  void (*cmd_ctxi_fn)(void *ctx, int i);        /* takes an int as an arg */
[6922edd]340  SV *cmd_perl;                                /* Perl closure that takes a list of args */
[7d4fbcd]341} owl_cmd;
342
343
344typedef struct _owl_zwrite {
[987cf3f]345  char *cmd;
[24ccc01]346  char *zwriteline;
[ce7db4d]347  char *class;
348  char *inst;
349  char *realm;
350  char *opcode;
[56330ff]351  char *zsig;
[ce7db4d]352  char *message;
[7d4fbcd]353  owl_list recips;
354  int cc;
355  int noping;
356} owl_zwrite;
357
[d0d65df]358typedef struct _owl_pair {
[e19eb97]359  const char *key;
[de1c8a5]360  char *value;
[d0d65df]361} owl_pair;
362
[a387d12e]363struct _owl_fmtext_cache;
364
[7d4fbcd]365typedef struct _owl_message {
366  int id;
[4b464a4]367  int direction;
[be0a79f]368#ifdef HAVE_LIBZEPHYR
[7d4fbcd]369  ZNotice_t notice;
[be0a79f]370#endif
[a387d12e]371  struct _owl_fmtext_cache * fmtext;
[7d4fbcd]372  int delete;
[e19eb97]373  const char *hostname;
[65ad073]374  owl_list attributes;            /* this is a list of pairs */
[25dd31a]375  char *timestr;
376  time_t time;
[7d4fbcd]377} owl_message;
378
[a387d12e]379#define OWL_FMTEXT_CACHE_SIZE 1000
380/* We cache the saved fmtexts for the last bunch of messages we
381   rendered */
382typedef struct _owl_fmtext_cache {
383    owl_message * message;
384    owl_fmtext fmtext;
385} owl_fmtext_cache;
386
[bd3f232]387typedef struct _owl_style {
388  char *name;
[120291c]389  SV *perlobj;
[bd3f232]390} owl_style;
391
[7d4fbcd]392typedef struct _owl_mainwin {
393  int curtruncated;
[f2e36b5]394  int lasttruncated;
[7d4fbcd]395  int lastdisplayed;
[40d1eef]396  owl_window *window;
[7d4fbcd]397} owl_mainwin;
398
[60c1386]399typedef struct _owl_editwin owl_editwin;
400typedef struct _owl_editwin_excursion owl_editwin_excursion;
401
[7d4fbcd]402typedef struct _owl_viewwin {
403  owl_fmtext fmtext;
404  int textlines;
405  int topline;
406  int rightshift;
[68f63a2]407  owl_window *window;
[afbf668]408  void (*onclose_hook) (struct _owl_viewwin *vwin, void *data);
409  void *onclose_hook_data;
[60c1386]410
411  gulong sig_resize_id;
412  owl_window *content;
413  gulong sig_content_redraw_id;
414  owl_window *status;
415  gulong sig_status_redraw_id;
[7d4fbcd]416} owl_viewwin;
417 
418typedef struct _owl_popwin {
[68f63a2]419  owl_window *border;
420  owl_window *content;
[b3b1b05]421  gulong sig_redraw_id;
422  gulong sig_resize_id;
[7d4fbcd]423} owl_popwin;
[d70f45f]424 
425typedef struct _owl_msgwin {
426  char *msg;
427  owl_window *window;
428  gulong redraw_id;
429} owl_msgwin;
[7d4fbcd]430
431typedef struct _owl_messagelist {
432  owl_list list;
433} owl_messagelist;
434
435typedef struct _owl_regex {
436  int negate;
437  char *string;
438  regex_t re;
439} owl_regex;
440
441typedef struct _owl_filterelement {
[bd65108]442  int (*match_message)(const struct _owl_filterelement *fe, const owl_message *m);
[cb769bb]443  /* Append a string representation of the filterelement onto buf*/
[bd65108]444  void (*print_elt)(const struct _owl_filterelement *fe, GString *buf);
[cb769bb]445  /* Operands for and,or,not*/
446  struct _owl_filterelement *left, *right;
447  /* For regex filters*/
[7d4fbcd]448  owl_regex re;
[cb769bb]449  /* Used by regexes, filter references, and perl */
450  char *field;
[7d4fbcd]451} owl_filterelement;
452
453typedef struct _owl_filter {
454  char *name;
[cb769bb]455  owl_filterelement * root;
[8fa9562]456  int fgcolor;
457  int bgcolor;
[7d4fbcd]458} owl_filter;
459
460typedef struct _owl_view {
[c3ab155]461  char *name;
[7d4fbcd]462  owl_filter *filter;
463  owl_messagelist ml;
[1fdab04]464  const owl_style *style;
[c3a47c9]465  int cachedmsgid;
[7d4fbcd]466} owl_view;
467
468typedef struct _owl_history {
469  owl_list hist;
470  int cur;
471  int touched;
472  int partial;
[12c35df]473  int repeats;
[7d4fbcd]474} owl_history;
475
[d2a4534]476typedef struct _owl_mainpanel {
477  owl_window *panel;
478  owl_window *typwin;
479  owl_window *sepwin;
480  owl_window *msgwin;
481  owl_window *recwin;
482  int recwinlines;
483} owl_mainpanel;
484
[7d4fbcd]485typedef struct _owl_keybinding {
[e1b136bf]486  int  *keys;                   /* keypress stack */
487  int   len;                    /* length of stack */
[7d4fbcd]488  int   type;                   /* command or function? */
489  char *desc;                   /* description (or "*user*") */
490  char *command;                /* command, if of type command */
491  void (*function_fn)(void);    /* function ptr, if of type function */
492} owl_keybinding;
493
494typedef struct _owl_keymap {
495  char     *name;               /* name of keymap */
496  char     *desc;               /* description */
497  owl_list  bindings;           /* key bindings */
[44cc9ab]498  const struct _owl_keymap *parent;     /* parent */
[428834d]499  void (*default_fn)(owl_input j);      /* default action (takes a keypress) */
500  void (*prealways_fn)(owl_input  j);   /* always called before a keypress is received */
501  void (*postalways_fn)(owl_input  j);  /* always called after keypress is processed */
[7d4fbcd]502} owl_keymap;
503
504typedef struct _owl_keyhandler {
505  owl_dict  keymaps;            /* dictionary of keymaps */
[afa200a]506  const owl_keymap *active;             /* currently active keymap */
[7d4fbcd]507  int       in_esc;             /* escape pressed? */
508  int       kpstack[OWL_KEYMAP_MAXSTACK+1]; /* current stack of keypresses */
509  int       kpstackpos;         /* location in stack (-1 = none) */
510} owl_keyhandler;
511
[f4d0975]512typedef struct _owl_buddy {
513  int proto;
514  char *name;
515  int isidle;
516  int idlesince;
517} owl_buddy;
518
[aa5f725]519typedef struct _owl_buddylist {
520  owl_list buddies;
521} owl_buddylist;
522
[5a95b69]523typedef struct _owl_zbuddylist {
524  owl_list zusers;
525} owl_zbuddylist;
526
[6a415e9]527typedef struct _owl_timer {
[b7bb454]528  time_t time;
529  int interval;
530  void (*callback)(struct _owl_timer *, void *);
[c675b39]531  void (*destroy)(struct _owl_timer *);
[b7bb454]532  void *data;
[6a415e9]533} owl_timer;
[aa5f725]534
[ec6ff52]535typedef struct _owl_errqueue {
536  owl_list errlist;
537} owl_errqueue;
538
[8fa9562]539typedef struct _owl_colorpair_mgr {
[99c7549]540  int next;
[c2c5c77]541  short **pairs;
[8fa9562]542} owl_colorpair_mgr;
543
[df0138f]544typedef struct _owl_io_dispatch {
545  int fd;                                     /* FD to watch for dispatch. */
546  int mode;
[1895c29]547  int needs_gc;
[df0138f]548  void (*callback)(const struct _owl_io_dispatch *, void *); /* C function to dispatch to. */
549  void (*destroy)(const struct _owl_io_dispatch *);  /* Destructor */
[f36cd97]550  void *data;
[df0138f]551} owl_io_dispatch;
[9c7a701]552
[4f2166b]553typedef struct _owl_ps_action {
554  int needs_gc;
555  int (*callback)(struct _owl_ps_action *, void *);
556  void (*destroy)(struct _owl_ps_action *);
557  void *data;
558} owl_ps_action;
559
[40c6657]560typedef struct _owl_popexec {
561  int refcount;
562  owl_viewwin *vwin;
563  int winactive;
[0e5afa2]564  pid_t pid;                    /* or 0 if it has terminated */
[18fdd5f9]565  const owl_io_dispatch *dispatch;
[40c6657]566} owl_popexec;
567
[f3a9d4d]568typedef struct _OwlGlobalNotifier OwlGlobalNotifier;
569
[7d4fbcd]570typedef struct _owl_global {
571  owl_mainwin mw;
[03ca005]572  owl_popwin *pw;
[d70f45f]573  owl_msgwin msgwin;
[10b866d]574  owl_history cmdhist;          /* command history */
575  owl_history msghist;          /* outgoing message history */
[7d4fbcd]576  owl_keyhandler kh;
[129e609]577  owl_dict filters;
578  GList *filterlist;
[7d4fbcd]579  owl_list puntlist;
580  owl_vardict vars;
581  owl_cmddict cmds;
[a999d9e]582  GList *context_stack;
[ec6ff52]583  owl_errqueue errqueue;
[7d4fbcd]584  int lines, cols;
[bd783db]585  int curmsg, topmsg;
[70110286]586  int markedmsgid;              /* for finding the marked message when it has moved. */
[7d4fbcd]587  int curmsg_vert_offset;
588  owl_view current_view;
589  owl_messagelist msglist;
[0881cdd]590  WINDOW *input_pad;
[d2a4534]591  owl_mainpanel mainpanel;
[f6fae8d]592  gulong typwin_erase_id;
[7d4fbcd]593  int rightshift;
[7892963]594  volatile sig_atomic_t resizepending;
[a8938c7]595  char *thishost;
596  char *homedir;
[b363d83]597  char *confdir;
598  char *startupfile;
[7d4fbcd]599  int direction;
600  int zaway;
601  char *cur_zaway_msg;
602  int haveconfig;
603  int config_format;
[1b6b2f3]604  void *buffercbdata;
[a556caa]605  owl_editwin *tw;
[9eb38bb]606  owl_viewwin *vw;
[7d4fbcd]607  void *perl;
608  int debug;
[7f792c1]609  time_t starttime;
610  time_t lastinputtime;
[a8938c7]611  char *startupargs;
[7d4fbcd]612  int nextmsgid;
613  int hascolors;
614  int colorpairs;
[8fa9562]615  owl_colorpair_mgr cpmgr;
[0e5afa2]616  pid_t newmsgproc_pid;
[41c9a96]617  owl_regex search_re;
[d09e5a1]618  aim_session_t aimsess;
[c15bbfb]619  aim_conn_t bosconn;
[6a415e9]620  owl_timer aim_noop_timer;
621  owl_timer aim_ignorelogin_timer;
[bd3f232]622  int aim_loggedin;         /* true if currently logged into AIM */
[a352335c]623  int aim_doprocessing;     /* true if we should process AIM events (like pending login) */
[bd3f232]624  char *aim_screenname;     /* currently logged in AIM screen name */
[81655f8]625  char *aim_screenname_for_filters;     /* currently logged in AIM screen name */
[bd3f232]626  owl_buddylist buddylist;  /* list of logged in AIM buddies */
[20aced3]627  GQueue *messagequeue;     /* for queueing up aim and other messages */
[f1e629d]628  owl_dict styledict;       /* global dictionary of available styles */
[cf83b7a]629  char *response;           /* response to the last question asked */
[09489b89]630  int havezephyr;
631  int haveaim;
[b7bb454]632  int ignoreaimlogin;
[7892963]633  volatile sig_atomic_t got_err_signal; /* 1 if we got an unexpected signal */
634  volatile siginfo_t err_signal_info;
[5a95b69]635  owl_zbuddylist zbuddies;
636  owl_timer zephyr_buddycheck_timer;
[f25812b]637  GList *zaldlist;
638  int pseudologin_notify;
[8232149]639  struct termios startup_tio;
[df0138f]640  owl_list io_dispatch_list;
[4f2166b]641  owl_list psa_list;
[58d1f8a]642  GList *timerlist;
[b7bb454]643  owl_timer *aim_nop_timer;
[52a0f14]644  int load_initial_subs;
[7892963]645  volatile sig_atomic_t interrupted;
[d12a8c7]646  FILE *debug_file;
[7d4fbcd]647} owl_global;
648
649/* globals */
[b2b0773]650extern owl_global g;
[7d4fbcd]651
652#include "owl_prototypes.h"
653
654/* these are missing from the zephyr includes for some reason */
[be0a79f]655#ifdef HAVE_LIBZEPHYR
[7d4fbcd]656int ZGetSubscriptions(ZSubscription_t *, int *);
657int ZGetLocations(ZLocations_t *,int *);
[be0a79f]658#endif
[7d4fbcd]659
[06adc25]660#endif /* INC_BARNOWL_OWL_H */
Note: See TracBrowser for help on using the repository browser.