1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
|
/*
* struct.h: header file for structures needed for prototypes
*
* Written by Scott Reynolds, based on code by Michael Sandrof
*
* Copyright(c) 1995 Scott Reynolds.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$eterna: struct.h,v 1.24 2005/09/21 20:03:01 mrg Exp $
*/
#ifndef __struct_h_
#define __struct_h_
/*
* ctcp_entry: the format for each ctcp function. note that the function
* described takes 4 parameters, a pointer to the ctcp entry, who the message
* was from, who the message was to (nickname, channel, etc), and the rest of
* the ctcp message. it can return null, or it can return a malloced string
* that will be inserted into the oringal message at the point of the ctcp.
* if null is returned, nothing is added to the original message
*/
typedef struct _ctcp_entry
{
u_char *name; /* name of ctcp datatag */
u_char *desc; /* description returned by ctcp clientinfo */
int flag;
u_char *(*func)(struct _ctcp_entry *, u_char *, u_char *, u_char *); /* function that does the dirty deed */
} CtcpEntry;
typedef struct DCC_struct
{
unsigned flags;
int read;
int write;
int file;
off_t filesize;
u_char *description;
u_char *user;
u_char *othername;
u_char *remname;
u_short remport;
off_t bytes_read;
off_t bytes_sent;
time_t lasttime;
time_t starttime;
u_char *buffer;
struct DCC_struct *next;
} DCC_list;
/* Hold: your general doubly-linked list type structure */
typedef struct HoldStru
{
u_char *str;
struct HoldStru *next;
struct HoldStru *prev;
int logged;
} Hold;
typedef struct lastlog_stru
{
int level;
u_char *msg;
struct lastlog_stru *next;
struct lastlog_stru *prev;
} Lastlog;
struct MenuOptionTag
{
u_char *Name;
u_char *Arguments;
void (*Func)(u_char *);
};
typedef struct MenuOptionTag MenuOption;
struct MenuTag
{
struct MenuTag *next;
u_char *Name;
int TotalOptions;
MenuOption **Options;
};
typedef struct MenuTag Menu;
struct ScreenStru; /* ooh! */
struct WindowMenuTag
{
Menu *menu;
int lines;
int items_per_line;
int cursor;
};
typedef struct WindowMenuTag WindowMenu;
/* NickList: structure for the list of nicknames of people on a channel */
typedef struct nick_stru
{
struct nick_stru *next; /* pointer to next nickname entry */
u_char *nick; /* nickname of person on channel */
int chanop; /* True if the given nick has chanop */
int hasvoice; /* Has voice? (Notice this is a bit unreliable if chanop) */
} NickList;
typedef struct DisplayStru
{
u_char *line;
int linetype;
struct DisplayStru *next;
} Display;
typedef struct WindowStru
{
unsigned int refnum; /* the unique reference number,
* assigned by IRCII */
u_char *name; /* window's logical name */
int server; /* server index */
int prev_server; /* previous server index */
int top; /* The top line of the window, screen
* coordinates */
int bottom; /* The botton line of the window, screen
* coordinates */
int cursor; /* The cursor position in the window, window
* relative coordinates */
int line_cnt; /* counter of number of lines displayed in
* window */
int scroll; /* true, window scrolls... false window wraps */
int display_size; /* number of lines of window - menu lines */
int old_size; /* if new_size != display_size,
* resize_display is called */
int visible; /* true, window is drawn... false window is
* hidden */
int update; /* window needs updating flag */
unsigned miscflags; /* Miscellaneous flags. */
u_char *prompt; /* A prompt string, usually set by EXEC'd process */
u_char *status_line[2]; /* The status line strings */
int double_status; /* Display the 2nd status line ?*/
Display *top_of_display, /* Pointer to first line of display structure */
*display_ip; /* Pointer to insertiong point of display
* structure */
u_char *current_channel; /* Window's current channel */
u_char *bound_channel; /* Channel that belongs in this window */
u_char *query_nick; /* User being QUERY'ied in this window */
NickList *nicks; /* List of nicks that will go to window */
int window_level; /* The LEVEL of the window, determines what
* messages go to it */
/* hold stuff */
int hold_mode; /* true, hold mode is on for window...
* false it isn't */
int hold_on_next_rite; /* true, the next call to rite() will
* activate a hold */
int held; /* true, the window is currently being
* held */
int last_held; /* Previous value of hold flag. Used
* for various updating needs */
Hold *hold_head, /* Pointer to first entry in hold
* list */
*hold_tail; /* Pointer to last entry in hold list */
int held_lines; /* number of lines being held */
int scrolled_lines; /* number of lines scrolled back */
int new_scrolled_lines; /* number of lines since scroll back
* keys where pressed */
WindowMenu menu; /* The menu (if any) */
/* lastlog stuff */
Lastlog *lastlog_head; /* pointer to top of lastlog list */
Lastlog *lastlog_tail; /* pointer to bottom of lastlog list */
int lastlog_level; /* The LASTLOG_LEVEL, determines what
* messages go to lastlog */
int lastlog_size; /* Max number of messages for the window
* lastlog */
int notify_level; /* the notify level.. */
u_char *logfile; /* window's logfile name */
/* window log stuff */
int log; /* true, file logging for window is on */
FILE *log_fp; /* file pointer for the log file */
struct ScreenStru *screen;
int server_group; /* server group number */
struct WindowStru *next; /* pointer to next entry in window list (null
* is end) */
struct WindowStru *prev; /* pointer to previous entry in window list
* (null is end) */
int sticky; /* make channels stick to window when
changing servers ? */
} Window;
/*
* WindowStack: The structure for the POP, PUSH, and STACK functions. A
* simple linked list with window refnums as the data
*/
typedef struct window_stack_stru
{
unsigned int refnum;
struct window_stack_stru *next;
} WindowStack;
typedef struct
{
int top;
int bottom;
int position;
} ShrinkInfo;
typedef struct PromptStru
{
u_char *prompt;
u_char *data;
int type;
void (*func)(u_char *, u_char *);
struct PromptStru *next;
} WaitPrompt;
typedef struct ScreenInputBufferData
{
u_char buf[INPUT_BUFFER_SIZE+1];
unsigned pos;
unsigned minpos;
/* If you put pointers here, remember to change
* change_input_prompt() which uses memcpy to
* make copies of this struct
*/
} ScreenInputBufferData;
typedef struct ScreenInputData
{
ScreenInputBufferData buffer;
ScreenInputBufferData saved_buffer;
/* Used by update_input() to check if the screen geometry has changed */
int old_co, old_li;
/* screen->co = number of columns on screen
*
* buffer.buf = input line and prompt (utf-8 encoded)
* buffer.pos = byte position of the cursor within string
* buffer.minpos = length of prompt in bytes
*
* When update_input() is ran,
* It checks if the prompt in buffer differs from input_prompt.
* If it does, it replaces the buffer-prompt with the new prompt.
* And sets update to UPDATE_ALL
*
* If geometry has changed,
* update is set to UPDATE_ALL
*
* left_ptr = byte-position of the left edge of screen in buffer
* recalculated when:
* update==UPDATE_JUST_CURSOR
* update==UPDATE_ALL
*
* pos_column = column position of the cursor in the buffer
* recalculated when left_ptr is too
*
* cursor_x = cursor horizontal position on screen (columns, not chars, not bytes)
* recalculated when:
* update==UPDATE_JUST_CURSOR
* update==UPDATE_ALL
*
* cursor_y = cursor vertical position on screen (lines)
* recalculated when screen geometry has changed
*
* zone = screen width
*/
unsigned zone;
unsigned cursor_x;
unsigned cursor_y;
unsigned left_ptr;
unsigned pos_column;
} ScreenInputData;
typedef struct ScreenStru
{
int screennum;
Window *current_window;
unsigned int last_window_refnum; /* reference number of the
* window that was last
* the current_window */
Window *window_list; /* List of all visible
* windows */
Window *window_list_end; /* end of visible window
* list */
Window *cursor_window; /* Last window to have
* something written to it */
int visible_windows; /* total number of windows */
WindowStack *window_stack; /* the windows here */
int meta1_hit; /* if meta1 is hit in this
* screen or not */
int meta2_hit; /* above, for meta2 */
int meta3_hit; /* above, for meta3 */
int meta4_hit; /* above, for meta4 */
int meta5_hit; /* above, for meta5 */
int meta6_hit; /* above, for meta6 */
int meta7_hit; /* above, for meta7 */
int meta8_hit; /* above, for meta8 */
int quote_hit; /* true if a key bound to
* QUOTE_CHARACTER has been
* hit. */
int digraph_hit; /* A digraph key has been hit */
int inside_menu; /* what it says. */
u_char digraph_first;
struct ScreenStru *prev; /* These are the Screen list */
struct ScreenStru *next; /* pointers */
FILE *fpin; /* These are the file pointers */
int fdin; /* and descriptions for the */
FILE *fpout; /* screen's input/output */
int fdout;
int wservin; /* control socket for wserv */
WaitPrompt *promptlist;
u_char *redirect_name;
u_char *redirect_token;
int redirect_server;
u_char *tty_name;
int co, li;
/* term.c:term_resize() */
int old_term_co, old_term_li;
ScreenInputData inputdata;
int alive;
} Screen;
/* ChannelList: structure for the list of channels you are current on */
typedef struct channel_stru
{
struct channel_stru *next; /* pointer to next channel entry */
u_char *channel; /* channel name */
int server; /* server index for this channel */
u_long mode; /* current mode settings for channel */
u_char *s_mode; /* string representation of the above */
int limit; /* max users for the channel */
u_char *key; /* key for this channel */
int connected; /* connection status */
#define CHAN_LIMBO -1
#define CHAN_JOINING 0
#define CHAN_JOINED 1
Window *window; /* the window that the channel is "on" */
NickList *nicks; /* pointer to list of nicks on channel */
int status; /* different flags */
#define CHAN_CHOP 0x01
#define CHAN_NAMES 0x04
#define CHAN_MODE 0x08
} ChannelList;
typedef struct list_stru
{
struct list_stru *next;
u_char *name;
} List;
#endif /* __struct_h_ */
|