1 /* 2 * Module/dll handling code written by Colten Edwards. 3 * Copyright 1997 4 */ 5 6 #ifndef _MODULE_H 7 #define _MODULE_H 8 9 10 /* 11 * if we change the table below, we change this module number to the 12 * current date. 13 */ 14 #define MODULE_VERSION 011000 15 16 #include "struct.h" 17 18 typedef int (*Function_ptr)(); 19 20 #ifdef WANT_DLL 21 #ifdef HPUX 22 #include <dl.h> 23 #endif 24 25 #define COMMAND_PROC 0x0001 /* New /command proc return void */ 26 #define ALIAS_PROC 0x0002 /* new $alias proc return new_malloc'd string */ 27 #define CTCP_PROC 0x0004 /* new ctcp proc return new_malloc'd string*/ 28 #define VAR_PROC 0x0008 /* new variable no return */ 29 #define HOOK_PROC 0x0010 /* new numeric proc 30 * return int 1 if we don't want client 31 * to also handle this. 32 * or 0 if we want client to handle 33 */ 34 #define RAW_PROC 0x0020 /* new raw irc proc */ 35 #define DCC_PROC 0x0040 /* add to dcc command list */ 36 #define OUTPUT_PROC 0x0080 /* New output proc for all windows. */ 37 #define WINDOW_PROC 0x0100 /* New window proc */ 38 #define TABLE_PROC 0x8000 /* removing a global_table proc */ 39 40 #define INVALID_MODVERSION -1 41 42 typedef int (Irc_PackageInitProc) (IrcCommandDll **, Function_ptr *); 43 typedef char *(Irc_PackageVersionProc) (IrcCommandDll **); 44 45 typedef struct _function_table 46 { 47 char *name; 48 char *desc; 49 int id; 50 int flag; 51 void *func1; 52 void *func2; 53 } Function; 54 55 typedef struct _package_installed { 56 struct _package_installed *next; 57 char *name; 58 char *version; 59 60 int major; 61 int minor; 62 int lock; 63 64 #if defined(HPUX) 65 shl_t handle; 66 #elif defined(__EMX__) 67 HMODULE handle; 68 #elif defined(WINNT) 69 HINSTANCE handle; 70 #else 71 void *handle; 72 #endif 73 Irc_PackageInitProc *cleanup; 74 } Packages; 75 76 Packages *find_module (char *); 77 int BX_add_module_proc (unsigned int, char *, char *, char *, int, int, void *, void *); 78 int remove_package (char *); 79 int BX_remove_module_proc (unsigned int, char *, char *, char *); 80 int add_module(unsigned int, Function *, char *); 81 82 extern BuiltInDllFunctions *dll_functions; 83 #ifndef __hook_c 84 extern NumericFunction *dll_numeric_list; 85 #endif 86 extern IrcCommandDll *dll_commands; 87 extern CtcpEntryDll *dll_ctcp; 88 extern WindowDll *dll_window; 89 extern IrcVariableDll *dll_variable; 90 91 92 char *BX_get_dllstring_var(char *); 93 int BX_get_dllint_var(char *); 94 void BX_set_dllstring_var(char *, char *); 95 void BX_set_dllint_var(char *, unsigned int); 96 RawDll *find_raw_proc(char *, char **); 97 98 int check_version(unsigned long); 99 #endif /* WANT_DLL */ 100 101 /* 102 * the order of this enum is extremely important. ie a module compiled 103 * on a differant order would fail miserably. So when adding to the list 104 * make sure and add to the end of the list. 105 */ 106 107 enum FUNCTION_VALUE 108 { 109 /* ircaux.c */ 110 MODULE_VERSION_CHECK, 111 /* output.c */ 112 PUT_IT, 113 BITCHSAY, 114 YELL, 115 ADD_TO_LOG, 116 VSNPRINTF, 117 SNPRINTF, 118 NEW_MALLOC, 119 NEW_FREE, 120 NEW_REALLOC, 121 MALLOC_STRCPY, 122 MALLOC_STRCAT, 123 MALLOC_STR2CPY, 124 M_3DUP, 125 M_OPENDUP, 126 M_S3CAT, 127 M_S3CAT_S, 128 M_3CAT, 129 UPPER, 130 LOWER, 131 STRISTR, 132 RSTRISTR, 133 WORD_COUNT, 134 REMOVE_TRAILING_SPACES, 135 MY_STRICMP, 136 MY_STRNICMP, 137 MY_STRNSTR, 138 CHOP, 139 STRMCPY, 140 STRMCAT, 141 SCANSTR, 142 EXPAND_TWIDDLE, 143 CHECK_NICKNAME, 144 SINDEX, 145 RSINDEX, 146 ISNUMBER, 147 RFGETS, 148 PATH_SEARCH, 149 DOUBLE_QUOTE, 150 IRCPANIC, 151 END_STRCMP, 152 BEEP_EM, 153 UZFOPEN, 154 FUNC_GET_TIME, 155 TIME_DIFF, 156 TIME_TO_NEXT_MINUTE, 157 PLURAL, 158 MY_CTIME, 159 LTOA, 160 STRFORMAT, 161 MATCHINGBRACKET, 162 PARSE_NUMBER, 163 SPLITW, 164 UNSPLITW, 165 M_2DUP, 166 M_E3CAT, 167 CHECK_VAL, 168 ON_OFF, 169 STREXTEND, 170 STRFILL, 171 EMPTY_FUNC, 172 REMOVE_BRACKETS, 173 MY_ATOL, 174 M_DUPCHAR, 175 STREQ, 176 STRIEQ, 177 STRMOPENCAT, 178 OV_STRCPY, 179 STRIP_CONTROL, 180 FIGURE_OUT_ADDRESS, 181 STRNRCHR, 182 MASK_DIGITS, 183 CCSPAN, 184 CHARCOUNT, 185 STRPCAT, 186 STRCPY_NOCOLORCODES, 187 CRYPTIT, 188 STRIPDEV, 189 MANGLE_LINE, 190 M_STRDUP, 191 M_STRCAT_UES, 192 M_STRNDUP, 193 MALLOC_SPRINTF, 194 M_SPRINTF, 195 NEXT_ARG, 196 NEW_NEXT_ARG, 197 NEW_NEW_NEXT_ARG, 198 LAST_ARG, 199 NEXT_IN_COMMA_LIST, 200 RANDOM_NUMBER, 201 202 /* words.c */ 203 STRSEARCH, 204 MOVE_TO_ABS_WORD, 205 MOVE_WORD_REL, 206 EXTRACT, 207 EXTRACT2, 208 WILD_MATCH, 209 /* network */ 210 CONNECT_BY_NUMBER, 211 RESOLV, 212 LOOKUP_HOST, 213 LOOKUP_IP, 214 HOST_TO_IP, 215 IP_TO_HOST, 216 ONE_TO_ANOTHER, 217 SET_BLOCKING, 218 SET_NON_BLOCKING, 219 220 /* list.c */ 221 ADD_TO_LIST, 222 ADD_TO_LIST_EXT, 223 REMOVE_FROM_LIST_, 224 REMOVE_FROM_LIST_EXT, 225 REMOVEWILD_FROM_LIST, 226 LIST_LOOKUP, 227 LIST_LOOKUP_EXT, 228 FIND_IN_LIST, 229 FIND_IN_LIST_EXT, 230 /* alist.c */ 231 ADD_TO_ARRAY, 232 REMOVE_FROM_ARRAY, 233 ARRAY_POP, 234 REMOVE_ALL_FROM_ARRAY, 235 ARRAY_LOOKUP, 236 FIND_ARRAY_ITEM, 237 FIND_FIXED_ARRAY_ITEM, 238 239 /* server.c */ 240 SEND_TO_SERVER, 241 QUEUE_SEND_TO_SERVER, 242 MY_SEND_TO_SERVER, 243 /* connecting to the server */ 244 GET_CONNECTED, 245 CONNECT_TO_SERVER_BY_REFNUM, 246 CLOSE_SERVER, 247 IS_SERVER_CONNECTED, 248 FLUSH_SERVER, 249 SERVER_IS_CONNECTED, 250 IS_SERVER_OPEN, 251 CLOSE_ALL_SERVER, 252 /* server file reading */ 253 READ_SERVER_FILE, 254 ADD_TO_SERVER_LIST, 255 BUILD_SERVER_LIST, 256 DISPLAY_SERVER_LIST, 257 CREATE_SERVER_LIST, 258 PARSE_SERVER_INFO, 259 SERVER_LIST_SIZE, 260 /* misc server/nickname functions */ 261 FIND_SERVER_REFNUM, 262 FIND_IN_SERVER_LIST, 263 PARSE_SERVER_INDEX, 264 SET_SERVER_REDIRECT, 265 GET_SERVER_REDIRECT, 266 CHECK_SERVER_REDIRECT, 267 FUDGE_NICKNAME, 268 RESET_NICKNAME, 269 /* various set server struct functions */ 270 SET_SERVER_COOKIE, 271 SET_SERVER_FLAG, 272 SET_SERVER_MOTD, 273 SET_SERVER_OPERATOR, 274 SET_SERVER_ITSNAME, 275 SET_SERVER_VERSION, 276 SET_SERVER_LAG, 277 SET_SERVER_PASSWORD, 278 SET_SERVER_NICKNAME, 279 SET_SERVER2_8, 280 SET_SERVER_AWAY, 281 /* various get server struct functions */ 282 GET_SERVER_COOKIE, 283 GET_SERVER_NICKNAME, 284 GET_SERVER_NAME, 285 GET_SERVER_ITSNAME, 286 GET_SERVER_MOTD, 287 GET_SERVER_OPERATOR, 288 GET_SERVER_VERSION, 289 GET_SERVER_FLAG, 290 GET_POSSIBLE_UMODES, 291 GET_SERVER_PORT, 292 GET_SERVER_LAG, 293 GET_SERVER2_8, 294 GET_UMODE, 295 GET_SERVER_AWAY, 296 GET_SERVER_NETWORK, 297 GET_PENDING_NICKNAME, 298 SERVER_DISCONNECT, 299 300 GET_SERVER_LIST, 301 GET_SERVER_CHANNELS, 302 303 SET_SERVER_LAST_CTCP_TIME, 304 GET_SERVER_LAST_CTCP_TIME, 305 SET_SERVER_TRACE_FLAG, 306 GET_SERVER_TRACE_FLAG, 307 GET_SERVER_READ, 308 GET_SERVER_LINKLOOK, 309 SET_SERVER_LINKLOOK, 310 GET_SERVER_LINKLOOK_TIME, 311 SET_SERVER_LINKLOOK_TIME, 312 GET_SERVER_TRACE_KILL, 313 SET_SERVER_TRACE_KILL, 314 ADD_SERVER_CHANNELS, 315 SET_SERVER_CHANNELS, 316 SEND_MSG_TO_CHANNELS, 317 SEND_MSG_TO_NICKS, 318 IS_SERVER_QUEUE, 319 /* glob.c */ 320 BSD_GLOB, 321 BSD_GLOBFREE, 322 323 CONVERT_OUTPUT_FORMAT, 324 UPDATE_CLOCK, 325 BREAKARGS, 326 PASTEARGS, 327 USERAGE, 328 SEND_TEXT, 329 SET_LASTLOG_MSG_LEVEL, 330 SPLIT_CTCP, 331 RANDOM_STR, 332 DCC_PRINTF, 333 334 MY_ENCRYPT, 335 MY_DECRYPT, 336 PREPARE_COMMAND, 337 BUILD_STATUS, 338 FUNC_LOAD, 339 340 HOOK, 341 /* irc.c */ 342 IRC_IO_FUNC, 343 IRC_EXIT_FUNC, 344 /* alias.c */ 345 LOCK_STACK_FRAME, 346 UNLOCK_STACK_FRAME, 347 348 349 /* input.c */ 350 FUNC_UPDATE_INPUT, 351 CURSOR_TO_INPUT, 352 SET_INPUT, 353 GET_INPUT, 354 SET_INPUT_PROMPT, 355 GET_INPUT_PROMPT, 356 ADDTABKEY, 357 GETTABKEY, 358 GETNEXTNICK, 359 GETCHANNICK, 360 LOOKUP_NICKCOMPLETION, 361 ADD_COMPLETION_TYPE, 362 363 /* module.c */ 364 ADD_MODULE_PROC, 365 REMOVE_MODULE_PROC, 366 /* names.c */ 367 IS_CHANOP, 368 IS_CHANNEL, 369 MAKE_CHANNEL, 370 IM_ON_CHANNEL, 371 IS_ON_CHANNEL, 372 ADD_CHANNEL, 373 ADD_TO_CHANNEL, 374 GET_CHANNEL_KEY, 375 FUNC_RECREATE_MODE, 376 FUNC_COMPRESS_MODES, 377 FUNC_GOT_OPS, 378 GET_CHANNEL_BANS, 379 GET_CHANNEL_MODE, 380 CLEAR_BANS, 381 REMOVE_CHANNEL, 382 REMOVE_FROM_CHANNEL, 383 RENAME_NICK, 384 GET_CHANNEL_OPER, 385 GET_CHANNEL_HALFOP, 386 FETCH_USERHOST, 387 GET_CHANNEL_VOICE, 388 CREATE_CHANNEL_LIST, 389 FLUSH_CHANNEL_STATS, 390 LOOKUP_CHANNEL, 391 392 FIND_NICKLIST_IN_CHANNELLIST, 393 ADD_NICKLIST_TO_CHANNELLIST, 394 NEXT_NICKLIST, 395 396 NEXT_NAMELIST, 397 ADD_NAME_TO_GENERICLIST, 398 FIND_NAME_IN_GENERICLIST, 399 ADD_WHOWAS_USERHOST_CHANNEL, 400 FIND_USERHOST_CHANNEL, 401 NEXT_USERHOST, 402 SORTED_NICKLIST, 403 CLEAR_SORTED_NICKLIST, 404 ADD_NAME_TO_FLOODLIST, 405 FIND_NAME_IN_FLOODLIST, 406 CLEAR_WHOWAS_HASH_TABLE, 407 REMOVE_OLDEST_WHOWAS_HASHLIST, 408 409 410 /* cset.c fset.c vars.c */ 411 FGET_STRING_VAR, 412 FSET_STRING_VAR, 413 GET_WSET_STRING_VAR, 414 SET_WSET_STRING_VAR, 415 SET_CSET_INT_VAR, 416 GET_CSET_INT_VAR, 417 SET_CSET_STR_VAR, 418 GET_CSET_STR_VAR, 419 GET_DLLINT_VAR, 420 SET_DLLINT_VAR, 421 GET_DLLSTRING_VAR, 422 SET_DLLSTRING_VAR, 423 GET_INT_VAR, 424 SET_INT_VAR, 425 GET_STRING_VAR, 426 SET_STRING_VAR, 427 428 ADD_TIMER, 429 DELETE_TIMER, 430 DELETE_ALL_TIMERS, 431 432 /* sockets from misc.c */ 433 ADD_SOCKETREAD, 434 ADD_SOCKETTIMEOUT, 435 CLOSE_SOCKETREAD, 436 GET_SOCKET, 437 SET_SOCKETFLAGS, 438 GET_SOCKETFLAGS, 439 GET_SOCKETINFO, 440 SET_SOCKETINFO, 441 SET_SOCKETWRITE, 442 CHECK_SOCKET, 443 READ_SOCKETS, 444 WRITE_SOCKETS, 445 GET_MAX_FD, 446 NEW_CLOSE, 447 NEW_OPEN, 448 DGETS, 449 450 451 /* screen.c */ 452 PREPARE_DISPLAY, 453 ADD_TO_WINDOW, 454 SKIP_INCOMING_MIRC, 455 ADD_TO_SCREEN, 456 SPLIT_UP_LINE, 457 OUTPUT_LINE, 458 OUTPUT_WITH_COUNT, 459 SCROLL_WINDOW, 460 CURSOR_NOT_IN_DISPLAY, 461 CURSOR_IN_DISPLAY, 462 IS_CURSOR_IN_DISPLAY, 463 REPAINT_WINDOW, 464 CREATE_NEW_SCREEN, 465 CREATE_ADDITIONAL_SCREEN, 466 KILL_SCREEN, 467 XTERM_SETTITLE, 468 ADD_WAIT_PROMPT, 469 SKIP_CTL_C_SEQ, 470 STRIP_ANSI, 471 472 /* window.c */ 473 FREE_FORMATS, 474 REMOVE_WINDOW_FROM_SCREEN, 475 SET_SCREENS_CURRENT_WINDOW, 476 NEW_WINDOW, 477 DELETE_WINDOW, 478 TRAVERSE_ALL_WINDOWS, 479 ADD_TO_INVISIBLE_LIST, 480 ADD_TO_WINDOW_LIST, 481 RECALCULATE_WINDOW_POSITIONS, 482 MOVE_WINDOW, 483 RESIZE_WINDOW, 484 REDRAW_ALL_WINDOWS, 485 REBALANCE_WINDOWS, 486 RECALCULATE_WINDOWS, 487 UPDATE_ALL_WINDOWS, 488 GOTO_WINDOW, 489 HIDE_BX_WINDOW, 490 FUNC_SWAP_LAST_WINDOW, 491 FUNC_SWAP_NEXT_WINDOW, 492 FUNC_SWAP_PREVIOUS_WINDOW, 493 SHOW_WINDOW, 494 GET_STATUS_BY_REFNUM, 495 GET_WINDOW_BY_DESC, 496 GET_WINDOW_BY_REFNUM, 497 GET_VISIBLE_BY_REFNUM, 498 GET_WINDOW_BY_NAME, 499 FUNC_NEXT_WINDOW, 500 FUNC_PREVIOUS_WINDOW, 501 UPDATE_WINDOW_STATUS, 502 UPDATE_ALL_STATUS, 503 UPDATE_WINDOW_STATUS_ALL, 504 STATUS_UPDATE, 505 SET_PROMPT_BY_REFNUM, 506 GET_PROMPT_BY_REFNUM, 507 QUERY_NICK, /* DEFUNCT */ 508 QUERY_HOST, /* DEFUNCT */ 509 QUERY_CMD, /* DEFUNCT */ 510 GET_TARGET_BY_REFNUM, 511 GET_TARGET_CMD_BY_REFNUM, 512 GET_WINDOW_TARGET_BY_DESC, 513 IS_CURRENT_CHANNEL, 514 SET_CURRENT_CHANNEL_BY_REFNUM, 515 GET_CURRENT_CHANNEL_BY_REFNUM, 516 GET_REFNUM_BY_WINDOW, 517 IS_BOUND_TO_WINDOW, 518 GET_WINDOW_BOUND_CHANNEL, 519 IS_BOUND_ANYWHERE, 520 IS_BOUND, 521 UNBIND_CHANNEL, 522 GET_BOUND_CHANNEL, 523 GET_WINDOW_SERVER, 524 SET_WINDOW_SERVER, 525 WINDOW_CHECK_SERVERS, 526 CHANGE_WINDOW_SERVER, 527 SET_LEVEL_BY_REFNUM, 528 SET_SERVER_STAT_FLAG, 529 GET_SERVER_STAT_FLAG, 530 MESSAGE_TO, 531 CLEAR_WINDOW, 532 CLEAR_ALL_WINDOWS, 533 CLEAR_WINDOW_BY_REFNUM, 534 UNCLEAR_WINDOW_BY_REFNUM, 535 SET_SCROLL_LINES, 536 SET_CONTINUED_LINES, 537 CURRENT_REFNUM, 538 NUMBER_OF_WINDOWS_ON_SCREEN, 539 SET_SCROLLBACK_SIZE, 540 IS_WINDOW_NAME_UNIQUE, 541 GET_NICKLIST_BY_WINDOW, 542 SCROLLBACK_BACKWARDS_LINES, 543 SCROLLBACK_FORWARDS_LINES, 544 SCROLLBACK_FORWARDS, 545 SCROLLBACK_BACKWARDS, 546 SCROLLBACK_END, 547 SCROLLBACK_START, 548 SET_HOLD_MODE, 549 UNHOLD_WINDOWS, 550 FUNC_UNSTOP_ALL_WINDOWS, 551 RESET_LINE_CNT, 552 FUNC_TOGGLE_STOP_SCREEN, 553 FLUSH_EVERYTHING_BEING_HELD, 554 UNHOLD_A_WINDOW, 555 RECALCULATE_WINDOW_CURSOR, 556 MAKE_WINDOW_CURRENT, 557 CLEAR_SCROLLBACK, 558 SET_DISPLAY_TARGET, 559 RESET_DISPLAY_TARGET, 560 RESTORE_DISPLAY_TARGET, 561 SAVE_DISPLAY_TARGET, 562 563 IS_OTHER_FLOOD, 564 CHECK_FLOODING, 565 FLOOD_PROT, 566 /* expr.c */ 567 568 NEXT_UNIT, 569 EXPAND_ALIAS, 570 PARSE_INLINE, 571 ALIAS_SPECIAL_CHAR, 572 PARSE_LINE, 573 PARSE_COMMAND_FUNC, 574 MAKE_LOCAL_STACK, 575 DESTROY_LOCAL_STACK, 576 577 /* dcc.c */ 578 DCC_CREATE_FUNC, 579 FIND_DCC_FUNC, 580 ERASE_DCC_INFO, 581 ADD_DCC_BIND, 582 REMOVE_DCC_BIND, 583 REMOVE_ALL_DCC_BINDS, 584 GET_ACTIVE_COUNT, 585 GET_NUM_QUEUE, 586 ADD_TO_QUEUE, 587 DCC_FILESEND, 588 DCC_RESEND, 589 590 /* who.c */ 591 WHOBASE, 592 ISONBASE, 593 USERHOSTBASE, 594 595 FIND_COMMAND_FUNC, 596 597 598 NICKNAME, 599 IRC_VERSION, 600 FROM_SERVER, 601 CONNECTED_TO_SERVER, 602 PRIMARY_SERVER, 603 PARSING_SERVER_INDEX, 604 NOW, 605 START_TIME, 606 IDLE_TIME, 607 608 LOADING_GLOBAL, 609 TARGET_WINDOW, 610 CURRENT_WINDOW, 611 INVISIBLE_LIST, 612 613 MAIN_SCREEN, 614 LAST_INPUT_SCREEN, 615 OUTPUT_SCREEN, 616 SCREEN_LIST, 617 IRCLOG_FP, 618 DOING_NOTICE, 619 LAST_SENT_MSG_BODY, /* NO LONGER USED */ 620 SENT_NICK, /* NO LONGER USED */ 621 622 DLL_FUNCTIONS, 623 DLL_NUMERIC, 624 DLL_COMMANDS, 625 DLL_VARIABLE, 626 DLL_CTCP, 627 DLL_WINDOW, 628 WINDOW_DISPLAY, 629 STATUS_UPDATE_FLAG, 630 TABKEY_ARRAY, 631 AUTOREPLY_ARRAY, 632 IDENTD_SOCKET, 633 634 VAR_TCL_INTERP, 635 LASTCLICKLINEDATA, 636 CONTEXTX, 637 CONTEXTY, 638 GUIIPC, 639 GUI_MUTEX_LOCK, 640 GUI_MUTEX_UNLOCK, 641 642 /* input output functions */ 643 SERV_OPEN_FUNC, 644 SERV_INPUT_FUNC, 645 SERV_OUTPUT_FUNC, 646 SERV_CLOSE_FUNC, 647 CHECK_EXT_MAIL_STATUS, 648 CHECK_EXT_MAIL, 649 DEFAULT_OUTPUT_FUNCTION, 650 DEFAULT_STATUS_OUTPUT_FUNCTION, 651 652 /* names.c */ 653 IS_HALFOP, 654 655 /* leave at the end */ 656 NUMBER_OF_GLOBAL_FUNCTIONS 657 }; 658 659 extern Function_ptr global_table[]; 660 extern IrcCommand irc_command[]; 661 662 #endif 663