source: owl.h @ fe73d0c

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