1 /****************************************************************************** 2 * This file is part of TinTin++ * 3 * * 4 * Copyright 2004-2020 Igor van den Hoven * 5 * * 6 * TinTin++ is free software; you can redistribute it and/or modify * 7 * it under the terms of the GNU General Public License as published by * 8 * the Free Software Foundation; either version 3 of the License, or * 9 * (at your option) any later version. * 10 * * 11 * This program is distributed in the hope that it will be useful, * 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 14 * GNU General Public License for more details. * 15 * * 16 * * 17 * You should have received a copy of the GNU General Public License * 18 * along with TinTin++. If not, see https://www.gnu.org/licenses. * 19 ******************************************************************************/ 20 21 /****************************************************************************** 22 * * 23 * (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t * 24 * * 25 * coded by peter unold 1992 * 26 * modified by Bill Reiss 1993 * 27 * recoded by Igor van den Hoven 2004 * 28 ******************************************************************************/ 29 30 #include <stdio.h> 31 #include <zlib.h> 32 #include <ctype.h> 33 #include <termios.h> 34 #include <pcre.h> 35 #include <errno.h> 36 #include <math.h> 37 #include <stdarg.h> 38 39 /****************************************************************************** 40 * Autoconf patching by David Hedbor * 41 *******************************************************************************/ 42 43 #include "config.h" 44 45 #if defined(HAVE_STRING_H) 46 #include <string.h> 47 #elif defined(HAVE_STRINGS_H) 48 #include <strings.h> 49 #endif 50 51 #ifdef HAVE_STDLIB_H 52 #include <stdlib.h> 53 #endif 54 55 #ifdef HAVE_UNISTD_H 56 #include <unistd.h> 57 #endif 58 59 60 #ifdef HAVE_TIME_H 61 #include <time.h> 62 #endif 63 64 65 #ifdef TIME_WITH_SYS_TIME 66 #include <sys/time.h> 67 #endif 68 69 /* 70 #ifdef SOCKS 71 #include <socks.h> 72 #endif 73 */ 74 75 #ifndef BADSIG 76 #define BADSIG (RETSIGTYPE (*)(int))-1 77 #endif 78 79 80 #ifdef HAVE_NET_ERRNO_H 81 #include <net/errno.h> 82 #endif 83 84 85 #ifdef HAVE_GNUTLS_H 86 #include <gnutls/gnutls.h> 87 #include <gnutls/x509.h> 88 #else 89 #define gnutls_session_t int 90 #endif 91 92 #ifdef HAVE_SYS_SOCKET_H 93 #include <sys/socket.h> 94 #endif 95 96 #ifdef HAVE_SYS_TYPES_H 97 #include <sys/types.h> 98 #endif 99 100 #ifdef HAVE_SYS_STAT_H 101 #include <sys/stat.h> 102 #endif 103 104 #if !defined(SO_PEERCRED) 105 #define SO_PEERCRED 17 106 #endif 107 108 #ifndef __TINTIN_H__ 109 #define __TINTIN_H__ 110 111 /* 112 A bunch of constants 113 */ 114 115 #define FLAG_NONE 0 116 117 #define FALSE 0 118 #define TRUE 1 119 120 #define IS_LINE 0 121 #define IS_PROMPT 1 122 123 #define GET_ONE 0 // stop at spaces 124 #define GET_ALL 1 // stop at semicolon 125 #define GET_NST 2 // nest square brackets 126 #define GET_VBT 4 // ignore semicolon for verbatim mode 127 128 #define TEL_N 0 129 #define TEL_Y 1 130 #define TEL_I 2 131 132 #define SCREEN_WIDTH 80 133 #define SCREEN_HEIGHT 24 134 135 #define SORT_PRIORITY 0 136 #define SORT_ALPHA 1 137 #define SORT_ALNUM 2 138 #define SORT_STABLE 3 139 #define SORT_APPEND 4 140 141 #define SEEK_MATCH 0 142 #define SEEK_REPLACE 1 143 #define SEEK_APPEND 2 144 145 #define DEFAULT_OPEN '{' 146 #define DEFAULT_CLOSE '}' 147 148 #define COMMAND_SEPARATOR ';' 149 150 #define ASCII_NUL 0 151 #define ASCII_ENQ 5 // Ignore if possible 152 #define ASCII_HTML_AMP 6 // Might conflict with MSDP 153 #define ASCII_BEL 7 154 #define ASCII_BS 8 155 #define ASCII_HTAB 9 156 #define ASCII_LF 10 157 #define ASCII_VTAB 11 158 #define ASCII_FF 12 159 #define ASCII_CR 13 160 #define ASCII_ESC 27 161 #define ASCII_HTML_OPEN 28 // Also file separator, whatever that is 162 #define ASCII_HTML_CLOSE 30 // Also record separator, whatever that is 163 164 #define CTRL_A 1 165 #define CTRL_B 2 166 #define CTRL_C 3 167 #define CTRL_D 4 168 #define CTRL_E 5 169 #define CTRL_F 6 170 #define CTRL_G 7 171 #define CTRL_H 8 172 #define CTRL_I 9 173 #define CTRL_J 10 174 #define CTRL_K 11 175 #define CTRL_L 12 176 #define CTRL_M 13 177 #define CTRL_N 14 178 #define CTRL_O 15 179 #define CTRL_P 16 180 #define CTRL_Q 17 181 #define CTRL_R 18 182 #define CTRL_S 19 183 #define CTRL_T 20 184 #define CTRL_U 21 185 #define CTRL_V 22 186 #define CTRL_W 23 187 #define CTRL_X 24 188 #define CTRL_Y 25 189 #define CTRL_Z 26 190 191 192 #define ASCII_DEL 127 193 194 #define DAEMON_DIR "daemons" 195 #define TINTIN_DIR ".tintin" 196 197 #define HISTORY_FILE "history.txt" 198 199 #define BUFFER_SIZE 40000 200 #define INPUT_SIZE 10000 201 #define PATH_SIZE 4096 202 #define STACK_SIZE 1000 203 #define NAME_SIZE 256 204 #define NUMBER_SIZE 100 205 #define LEGEND_SIZE 50 206 #define COLOR_SIZE 50 207 #define CHAR_SIZE 5 208 #define LIST_SIZE 2 209 210 #define STRING_SIZE 2 * BUFFER_SIZE 211 212 #define CLIENT_NAME "TinTin++" 213 #define CLIENT_VERSION "2.02.12 " 214 215 216 #define XT_E 0x27 217 #define XT_C 0x5B 218 #define XT_O 0x5D 219 #define XT_W 0x74 220 #define XT_T 0x07 221 #define XT_CS 0x73 222 #define XT_S "\073" 223 #define XT_V "\000" 224 225 /* 226 <faa> - red 227 <afa> - green 228 <ffa> - yellow 229 <aaf> - blue 230 <faf> - magenta 231 <aff> - cyan 232 <fff> - white 233 <acf> - Azure 234 <afc> - Jade 235 <caf> - Violet 236 <cfa> - Lime 237 <fac> - Pink 238 <fca> - Orange 239 */ 240 241 #define COLOR_BRACE "\e[38;5;164m" // "<eae>" // magenta 242 #define COLOR_COMMAND "\e[38;5;044m" // "<aee>" // cyan 243 #define COLOR_CONFIG "\e[38;5;208m" // "<fca>" // orange 244 #define COLOR_RESET "\e[0m" // "<088>" // reset 245 #define COLOR_SEPARATOR "\e[38;5;160m" // "<eaa>" // red 246 #define COLOR_STATEMENT "\e[38;5;040m" // "<aea>" // green 247 #define COLOR_STRING "\e[38;5;188m" // "<eee>" // white 248 //#define COLOR_TEXT "\e[38;5;122m" // "<cfe>" // pale jade 249 #define COLOR_TEXT "\e[0m" // "<cfe>" // pale jade 250 #define COLOR_TINTIN "\e[38;5;184m" // "<eea>" // yellow 251 #define COLOR_REPEAT "\e[38;5;33m" // "<acf>" // azure 252 253 /* 254 Index for lists used by tintin 255 */ 256 257 enum lists 258 { 259 LIST_ACTION, 260 LIST_ALIAS, 261 LIST_BUTTON, 262 LIST_CLASS, 263 LIST_COMMAND, 264 LIST_CONFIG, 265 LIST_DELAY, 266 LIST_EVENT, 267 LIST_FUNCTION, 268 LIST_GAG, 269 LIST_HIGHLIGHT, 270 LIST_HISTORY, 271 LIST_LANDMARK, 272 LIST_MACRO, 273 LIST_PATH, 274 LIST_PATHDIR, 275 LIST_PROMPT, 276 LIST_SUBSTITUTE, 277 LIST_TAB, 278 LIST_TERRAIN, 279 LIST_TICKER, 280 LIST_VARIABLE, 281 LIST_MAX, 282 }; 283 /* 284 #define LIST_ACTION 0 285 #define LIST_ALIAS 1 286 #define LIST_BUTTON 2 287 #define LIST_CLASS 3 288 #define LIST_COMMAND 4 289 #define LIST_CONFIG 5 290 #define LIST_DELAY 6 291 #define LIST_EVENT 7 292 #define LIST_FUNCTION 8 293 #define LIST_GAG 9 294 #define LIST_HIGHLIGHT 10 295 #define LIST_HISTORY 11 296 #define LIST_LANDMARK 12 297 #define LIST_MACRO 13 298 #define LIST_PATH 14 299 #define LIST_PATHDIR 15 300 #define LIST_PROMPT 16 301 #define LIST_SUBSTITUTE 17 302 #define LIST_TAB 18 303 #define LIST_TERRAIN 19 304 #define LIST_TICKER 20 305 #define LIST_VARIABLE 21 306 #define LIST_MAX 22 307 */ 308 /* 309 Command type 310 */ 311 312 enum operators 313 { 314 TOKEN_TYPE_BREAK, 315 TOKEN_TYPE_CASE, 316 TOKEN_TYPE_COMMAND, 317 TOKEN_TYPE_CONTINUE, 318 TOKEN_TYPE_DEFAULT, 319 TOKEN_TYPE_END, 320 TOKEN_TYPE_ELSE, 321 TOKEN_TYPE_ELSEIF, 322 TOKEN_TYPE_FOREACH, 323 TOKEN_TYPE_BROKEN_FOREACH, 324 TOKEN_TYPE_IF, 325 TOKEN_TYPE_LOOP, 326 TOKEN_TYPE_BROKEN_LOOP, 327 TOKEN_TYPE_PARSE, 328 TOKEN_TYPE_BROKEN_PARSE, 329 TOKEN_TYPE_REGEX, 330 TOKEN_TYPE_RETURN, 331 TOKEN_TYPE_SESSION, 332 TOKEN_TYPE_STRING, 333 TOKEN_TYPE_SWITCH, 334 TOKEN_TYPE_WHILE, 335 TOKEN_TYPE_BROKEN_WHILE, 336 TOKEN_TYPE_STATEMENT, 337 TOKEN_TYPE_CONFIG, 338 TOKEN_TYPE_REPEAT 339 }; 340 341 /* 342 Various flags 343 */ 344 #define BV00 (0 << 0) 345 346 #define BV01 (1 << 0) 347 #define BV02 (1 << 1) 348 #define BV03 (1 << 2) 349 #define BV04 (1 << 3) 350 #define BV05 (1 << 4) 351 #define BV06 (1 << 5) 352 #define BV07 (1 << 6) 353 #define BV08 (1 << 7) 354 #define BV09 (1 << 8) 355 #define BV10 (1 << 9) 356 #define BV11 (1 << 10) 357 #define BV12 (1 << 11) 358 #define BV13 (1 << 12) 359 #define BV14 (1 << 13) 360 #define BV15 (1 << 14) 361 #define BV16 (1 << 15) 362 #define BV17 (1 << 16) 363 #define BV18 (1 << 17) 364 #define BV19 (1 << 18) 365 #define BV20 (1 << 19) 366 #define BV21 (1 << 20) 367 #define BV22 (1 << 21) 368 #define BV23 (1 << 22) 369 #define BV24 (1 << 23) 370 #define BV25 (1 << 24) 371 #define BV26 (1 << 25) 372 #define BV27 (1 << 26) 373 #define BV28 (1 << 27) 374 #define BV29 (1 << 28) 375 #define BV30 (1 << 29) 376 #define BV31 (1 << 30) 377 #define BV32 (1LL << 31) 378 #define BV33 (1LL << 32) 379 #define BV34 (1LL << 33) 380 #define BV35 (1LL << 34) 381 #define BV36 (1LL << 35) 382 #define BV37 (1LL << 36) 383 #define BV38 (1LL << 37) 384 #define BV39 (1LL << 38) 385 #define BV40 (1LL << 39) 386 #define BV41 (1LL << 40) 387 388 389 #define BUFFER_FLAG_GREP BV01 390 391 392 #define CHAR_FLAG_DIGIT BV01 393 #define CHAR_FLAG_ALPHA BV02 394 #define CHAR_FLAG_VAR BV03 395 #define CHAR_FLAG_SPACE BV04 396 #define CHAR_FLAG_HEX BV05 397 #define CHAR_FLAG_CSI BV06 398 #define CHAR_FLAG_PRINT BV07 // max 399 400 401 #define CHARSET_FLAG_UTF8 BV01 402 #define CHARSET_FLAG_BIG5 BV02 403 #define CHARSET_FLAG_GBK1 BV03 404 #define CHARSET_FLAG_CP949 BV04 405 406 #define CHARSET_FLAG_BIG5TOUTF8 BV05 407 #define CHARSET_FLAG_FANSITOUTF8 BV06 408 #define CHARSET_FLAG_GBK1TOUTF8 BV07 409 #define CHARSET_FLAG_ISO1TOUTF8 BV08 410 #define CHARSET_FLAG_ISO2TOUTF8 BV09 411 #define CHARSET_FLAG_KOI8TOUTF8 BV10 412 #define CHARSET_FLAG_CP1251TOUTF8 BV11 413 #define CHARSET_FLAG_CP949TOUTF8 BV12 414 415 #define CHARSET_FLAG_EUC CHARSET_FLAG_BIG5|CHARSET_FLAG_GBK1|CHARSET_FLAG_CP949 416 #define CHARSET_FLAG_ALL_TOUTF8 CHARSET_FLAG_BIG5TOUTF8|CHARSET_FLAG_CP1251TOUTF8|CHARSET_FLAG_FANSITOUTF8|CHARSET_FLAG_GBK1TOUTF8|CHARSET_FLAG_ISO1TOUTF8|CHARSET_FLAG_ISO2TOUTF8|CHARSET_FLAG_KOI8TOUTF8|CHARSET_FLAG_CP949TOUTF8 417 #define CHARSET_FLAG_ALL CHARSET_FLAG_UTF8|CHARSET_FLAG_ALL_TOUTF8|CHARSET_FLAG_EUC 418 419 420 #define COL_BLD BV01 421 #define COL_ITA BV02 422 #define COL_UND BV03 423 #define COL_BLK BV04 424 #define COL_REV BV05 425 426 #define COL_XTF BV06 427 #define COL_XTF_5 BV07 428 #define COL_XTF_R BV08 429 #define COL_XTB BV09 430 #define COL_XTB_5 BV10 431 #define COL_XTB_R BV11 432 433 #define COL_TCF BV12 434 #define COL_TCF_2 BV13 435 #define COL_TCF_R BV14 436 #define COL_TCB BV15 437 #define COL_TCB_2 BV16 438 #define COL_TCB_R BV17 439 440 #define CHAT_NAME_CHANGE 1 441 #define CHAT_REQUEST_CONNECTIONS 2 442 #define CHAT_CONNECTION_LIST 3 443 #define CHAT_TEXT_EVERYBODY 4 444 #define CHAT_TEXT_PERSONAL 5 445 #define CHAT_TEXT_GROUP 6 446 #define CHAT_MESSAGE 7 447 #define CHAT_DO_NOT_DISTURB 8 448 #define CHAT_SEND_ACTION 9 449 #define CHAT_SEND_ALIAS 10 450 #define CHAT_SEND_MACRO 11 451 #define CHAT_SEND_VARIABLE 12 452 #define CHAT_SEND_EVENT 13 453 #define CHAT_SEND_GAG 14 454 #define CHAT_SEND_HIGHLIGHT 15 455 #define CHAT_SEND_LIST 16 456 #define CHAT_SEND_ARRAY 17 457 #define CHAT_SEND_BARITEM 18 458 #define CHAT_VERSION 19 459 #define CHAT_FILE_START 20 460 #define CHAT_FILE_DENY 21 461 #define CHAT_FILE_BLOCK_REQUEST 22 462 #define CHAT_FILE_BLOCK 23 463 #define CHAT_FILE_END 24 464 #define CHAT_FILE_CANCEL 25 465 #define CHAT_PING_REQUEST 26 466 #define CHAT_PING_RESPONSE 27 467 #define CHAT_PEEK_CONNECTIONS 28 468 #define CHAT_PEEK_LIST 29 469 #define CHAT_SNOOP_START 30 470 #define CHAT_SNOOP_DATA 31 471 472 #define CHAT_END_OF_COMMAND 255 473 474 #define CHAT_FLAG_PRIVATE BV01 475 #define CHAT_FLAG_REQUEST BV02 476 #define CHAT_FLAG_SERVE BV03 477 #define CHAT_FLAG_IGNORE BV04 478 #define CHAT_FLAG_FORWARD BV05 479 #define CHAT_FLAG_FORWARDBY BV06 480 #define CHAT_FLAG_FORWARDALL BV07 481 #define CHAT_FLAG_DND BV08 482 #define CHAT_FLAG_LINKLOST BV09 483 484 #define INPUT_FLAG_EDIT BV01 485 #define INPUT_FLAG_HISTORYBROWSE BV02 486 #define INPUT_FLAG_HISTORYSEARCH BV03 487 #define INPUT_FLAG_CONVERTMETACHAR BV04 488 489 #define PORT_FLAG_PRIVATE BV01 490 #define PORT_FLAG_REQUEST BV02 491 #define PORT_FLAG_SERVE BV03 492 #define PORT_FLAG_IGNORE BV04 493 #define PORT_FLAG_FORWARD BV05 494 #define PORT_FLAG_FORWARDBY BV06 495 #define PORT_FLAG_FORWARDALL BV07 496 #define PORT_FLAG_DND BV08 497 #define PORT_FLAG_LINKLOST BV09 498 499 #define PORT_RANK_SPY 0 // observer 500 #define PORT_RANK_DIPLOMAT 1 // 501 #define PORT_RANK_SCOUT 2 502 503 #define RANK_FLAG_SCOUT BV01 504 505 #define COMM_FLAG_DISCONNECT BV01 506 #define COMM_FLAG_PASSWORD BV02 507 #define COMM_FLAG_REMOTEECHO BV03 508 #define COMM_FLAG_EOR BV04 509 #define COMM_FLAG_MSDPUPDATE BV05 510 #define COMM_FLAG_256COLORS BV06 511 #define COMM_FLAG_UTF8 BV07 512 #define COMM_FLAG_GMCP BV08 513 514 #define MSDP_FLAG_COMMAND BV01 515 #define MSDP_FLAG_LIST BV02 516 #define MSDP_FLAG_SENDABLE BV03 517 #define MSDP_FLAG_REPORTABLE BV04 518 #define MSDP_FLAG_CONFIGURABLE BV05 519 #define MSDP_FLAG_REPORTED BV06 520 #define MSDP_FLAG_UPDATED BV07 521 522 #define MTTS_FLAG_ANSI BV01 523 #define MTTS_FLAG_VT100 BV02 524 #define MTTS_FLAG_UTF8 BV03 525 #define MTTS_FLAG_256COLORS BV04 526 #define MTTS_FLAG_MOUSETRACKING BV05 527 #define MTTS_FLAG_COLORPALETTE BV06 528 #define MTTS_FLAG_SCREENREADER BV07 529 #define MTTS_FLAG_PROXY BV08 530 #define MTTS_FLAG_TRUECOLOR BV09 531 532 #define SCREEN_FLAG_CSIP BV01 533 #define SCREEN_FLAG_OSCT BV02 534 #define SCREEN_FLAG_OMIT BV03 535 #define SCREEN_FLAG_GET_ONE BV04 536 #define SCREEN_FLAG_GET_ALL BV05 537 #define SCREEN_FLAG_GET_NONE BV06 538 539 #define SCREEN_FLAG_SCROLLMODE BV07 540 #define SCREEN_FLAG_SCROLLUPDATE BV08 541 542 #define SCROLL_FLAG_RESIZE BV01 543 544 #define STR_FLAG_STACK BV01 545 #define STR_FLAG_LIST BV02 546 #define STR_FLAG_FREE BV03 547 548 549 // combines with event flags 550 551 #define SUB_NONE BV00 552 553 #define SUB_ARG BV01 554 #define SUB_SEC BV02 555 #define SUB_BRA BV03 556 #define SUB_CMD BV04 557 #define SUB_VAR BV05 558 #define SUB_FUN BV06 559 #define SUB_COL BV07 560 #define SUB_ESC BV08 561 #define SUB_EOL BV09 // telnet 562 #define SUB_LNF BV10 563 #define SUB_SIL BV11 // silent 564 #define SUB_LIT BV12 // no soft escaping 565 566 /* 567 #define SUB_ARG BV01 568 #define SUB_SEC BV02 569 #define SUB_BRA BV03 570 */ 571 #define EVENT_FLAG_CATCH BV04 572 #define EVENT_FLAG_CLASS BV05 573 #define EVENT_FLAG_GAG BV06 574 #define EVENT_FLAG_INPUT BV07 575 #define EVENT_FLAG_MAP BV08 576 #define EVENT_FLAG_MOUSE BV09 577 #define EVENT_FLAG_OUTPUT BV10 578 #define EVENT_FLAG_PORT BV11 579 #define EVENT_FLAG_SCAN BV12 580 #define EVENT_FLAG_SCREEN BV13 581 #define EVENT_FLAG_SESSION BV14 582 #define EVENT_FLAG_SYSTEM BV15 583 #define EVENT_FLAG_TELNET BV16 584 #define EVENT_FLAG_TIME BV17 585 #define EVENT_FLAG_UPDATE BV18 586 #define EVENT_FLAG_VARIABLE BV19 587 #define EVENT_FLAG_VT100 BV20 588 589 #define TAB_FLAG_FORWARD BV01 590 #define TAB_FLAG_BACKWARD BV02 591 #define TAB_FLAG_COMPLETE BV03 592 #define TAB_FLAG_CASELESS BV04 593 #define TAB_FLAG_DICTIONARY BV05 594 #define TAB_FLAG_LIST BV06 595 #define TAB_FLAG_SCROLLBACK BV07 596 597 #define REGEX_FLAG_NONE 0 598 #define REGEX_FLAG_FIX BV01 599 #define REGEX_FLAG_ARG BV02 600 #define REGEX_FLAG_CMD BV03 601 602 603 604 #define TINTIN_FLAG_GETNUMBER BV01 // UNUSED 605 #define TINTIN_FLAG_SESSIONUPDATE BV02 606 #define TINTIN_FLAG_PROCESSINPUT BV03 607 #define TINTIN_FLAG_INHERITANCE BV04 608 #define TINTIN_FLAG_INSERTINPUT BV05 609 #define TINTIN_FLAG_CHILDLOCK BV06 610 #define TINTIN_FLAG_TERMINATE BV07 611 #define TINTIN_FLAG_MOUSETRACKING BV08 612 #define TINTIN_FLAG_DISPLAYUPDATE BV09 613 #define TINTIN_FLAG_DAEMONIZE BV10 614 #define TINTIN_FLAG_HIDDENCURSOR BV11 615 #define TINTIN_FLAG_LOCAL BV12 616 #define TINTIN_FLAG_PRESERVEMACRO BV13 617 #define TINTIN_FLAG_WINCHUPDATE BV14 618 619 #define CONFIG_FLAG_AUTOPATCH BV01 620 #define CONFIG_FLAG_AUTOPROMPT BV02 621 #define CONFIG_FLAG_COLORPATCH BV03 622 #define CONFIG_FLAG_CONVERTMETA BV04 623 #define CONFIG_FLAG_ECHOCOMMAND BV05 624 #define CONFIG_FLAG_MCCP BV06 625 #define CONFIG_FLAG_MOUSEDEBUG BV07 626 #define CONFIG_FLAG_MOUSEINFO BV08 627 #define CONFIG_FLAG_MOUSEPIXELS BV09 628 #define CONFIG_FLAG_MOUSETRACKING BV10 629 #define CONFIG_FLAG_REPEATENTER BV11 630 #define CONFIG_FLAG_SCREENREADER BV12 631 #define CONFIG_FLAG_SCROLLLOCK BV13 632 #define CONFIG_FLAG_SPEEDWALK BV14 633 #define CONFIG_FLAG_TELNET BV15 634 #define CONFIG_FLAG_VERBATIM BV16 635 #define CONFIG_FLAG_VERBOSE BV17 636 #define CONFIG_FLAG_WORDWRAP BV18 637 638 #define SES_FLAG_BUFFERUPDATE BV01 639 #define SES_FLAG_CLOSED BV02 640 #define SES_FLAG_CONNECTED BV03 641 #define SES_FLAG_GAG BV04 642 #define SES_FLAG_PATHMAPPING BV05 643 #define SES_FLAG_PRINTBUFFER BV06 644 #define SES_FLAG_PRINTLINE BV07 645 #define SES_FLAG_READMUD BV08 646 #define SES_FLAG_RUN BV09 647 #define SES_FLAG_SCANABORT BV10 648 #define SES_FLAG_SCROLLSPLIT BV11 649 #define SES_FLAG_SNOOP BV12 650 #define SES_FLAG_SNOOPSCROLL BV13 651 #define SES_FLAG_SPLIT BV14 652 #define SES_FLAG_UPDATEVTMAP BV15 653 654 655 #define TELOPT_FLAG_TELNET BV01 656 #define TELOPT_FLAG_SGA BV02 657 #define TELOPT_FLAG_ECHO BV03 658 #define TELOPT_FLAG_NAWS BV04 659 #define TELOPT_FLAG_PROMPT BV05 660 #define TELOPT_FLAG_DEBUG BV06 661 #define TELOPT_FLAG_TSPEED BV07 662 #define TELOPT_FLAG_TTYPE BV08 663 #define TELOPT_FLAG_MTTS BV09 664 #define TELOPT_FLAG_UPDATENAWS BV10 665 #define TELOPT_FLAG_CR BV11 666 #define TELOPT_FLAG_LF BV12 667 #define TELOPT_FLAG_NUL BV13 668 669 #define LIST_FLAG_IGNORE BV01 670 #define LIST_FLAG_PRIORITY BV02 671 #define LIST_FLAG_MESSAGE BV03 672 #define LIST_FLAG_DEBUG BV04 673 #define LIST_FLAG_INFO BV05 674 #define LIST_FLAG_LOG BV06 675 #define LIST_FLAG_CLASS BV07 676 #define LIST_FLAG_READ BV08 677 #define LIST_FLAG_WRITE BV09 678 #define LIST_FLAG_HIDE BV10 679 #define LIST_FLAG_INHERIT BV11 680 #define LIST_FLAG_REGEX BV12 681 #define LIST_FLAG_NEST BV13 682 #define LIST_FLAG_DEFAULT LIST_FLAG_MESSAGE 683 684 #define NODE_FLAG_ONESHOT BV01 685 686 #define LOG_FLAG_NONE 0 687 #define LOG_FLAG_LINEFEED BV01 688 #define LOG_FLAG_OVERWRITE BV02 689 #define LOG_FLAG_APPEND BV03 690 #define LOG_FLAG_NEXT BV04 691 #define LOG_FLAG_LOW BV05 692 693 #define LOG_FLAG_HTML BV06 694 #define LOG_FLAG_PLAIN BV07 695 #define LOG_FLAG_RAW BV08 696 #define LOG_FLAG_OLD_HTML BV09 697 #define LOG_FLAG_OLD_PLAIN BV10 698 #define LOG_FLAG_OLD_RAW BV11 699 700 701 // Saved in map files, so don't swap around 702 703 // keep synced with exit flags 704 705 #define ROOM_FLAG_AVOID BV01 706 #define ROOM_FLAG_HIDE BV02 707 #define ROOM_FLAG_LEAVE BV03 708 #define ROOM_FLAG_VOID BV04 709 #define ROOM_FLAG_STATIC BV05 710 #define ROOM_FLAG_CURVED BV06 711 #define ROOM_FLAG_PATH BV07 712 #define ROOM_FLAG_NOGLOBAL BV08 713 #define ROOM_FLAG_INVIS BV09 714 715 #define ROOM_FLAG_AVOID_TMP BV10|ROOM_FLAG_AVOID // To realign exit and room flags in the future. 716 #define ROOM_FLAG_HIDE_TMP BV11|ROOM_FLAG_HIDE 717 #define ROOM_FLAG_LEAVE_TMP BV12|ROOM_FLAG_LEAVE 718 #define ROOM_FLAG_VOID_TMP BV13|ROOM_FLAG_VOID 719 #define ROOM_FLAG_STATIC_TMP BV13|ROOM_FLAG_STATIC 720 #define ROOM_FLAG_CURVED_TMP BV14|ROOM_FLAG_CURVED 721 #define ROOM_FLAG_BLOCK BV15 722 #define ROOM_FLAG_TERRAIN BV20 723 #define ROOM_FLAG_FOG BV21 724 725 // keep synced with room flags 726 727 #define EXIT_FLAG_HIDE BV01 728 #define EXIT_FLAG_AVOID BV02 729 #define EXIT_FLAG_INVIS BV03 730 #define EXIT_FLAG_BLOCK BV04 731 #define EXIT_FLAG_ALL BV01|BV02|BV03|BV04 732 733 #define EXIT_GRID_0 0 734 #define EXIT_GRID_N 1 735 #define EXIT_GRID_E 2 736 #define EXIT_GRID_S 3 737 #define EXIT_GRID_W 4 738 #define EXIT_GRID_U 5 739 #define EXIT_GRID_D 6 740 #define EXIT_GRID_NE 7 741 #define EXIT_GRID_NW 8 742 #define EXIT_GRID_SE 9 743 #define EXIT_GRID_SW 10 744 745 #define MAP_FLAG_STATIC BV01 746 #define MAP_FLAG_VTMAP BV02 747 #define MAP_FLAG_DIRECTION BV03 748 #define MAP_FLAG_ASCIIGRAPHICS BV04 749 #define MAP_FLAG_ASCIIVNUMS BV05 750 #define MAP_FLAG_MUDFONT BV06 751 #define MAP_FLAG_NOFOLLOW BV07 752 #define MAP_FLAG_SYMBOLGRAPHICS BV08 753 #define MAP_FLAG_UNICODEGRAPHICS BV09 754 #define MAP_FLAG_BLOCKGRAPHICS BV10 755 #define MAP_FLAG_RESIZE BV11 756 #define MAP_FLAG_SYNC BV12 757 #define MAP_FLAG_ASCIILENGTH BV13 // For debugging but might be useful 758 #define MAP_FLAG_TERRAIN BV14 759 #define MAP_FLAG_UPDATETERRAIN BV15 760 #define MAP_FLAG_DOUBLED BV16 761 #define MAP_FLAG_QUIET BV17 762 #define MAP_FLAG_READ BV18 763 764 #define MAP_SEARCH_NAME 0 765 #define MAP_SEARCH_EXITS 1 766 #define MAP_SEARCH_DESC 2 767 #define MAP_SEARCH_AREA 3 768 #define MAP_SEARCH_NOTE 4 769 #define MAP_SEARCH_TERRAIN 5 770 #define MAP_SEARCH_FLAG 6 771 #define MAP_SEARCH_ID 7 772 #define MAP_SEARCH_DISTANCE 8 773 #define MAP_SEARCH_MAX 9 774 775 #define MAP_EXIT_N 1 776 #define MAP_EXIT_E 2 777 #define MAP_EXIT_S 4 778 #define MAP_EXIT_W 8 779 #define MAP_EXIT_U 16 780 #define MAP_EXIT_D 32 781 782 #define MAP_DIR_N (1LL << MAP_EXIT_N) 783 #define MAP_DIR_E (1LL << MAP_EXIT_E) 784 #define MAP_DIR_S (1LL << MAP_EXIT_S) 785 #define MAP_DIR_W (1LL << MAP_EXIT_W) 786 #define MAP_DIR_U (1LL << MAP_EXIT_U) 787 #define MAP_DIR_D (1LL << MAP_EXIT_D) 788 789 #define MAP_DIR_NE (1LL << (MAP_EXIT_N|MAP_EXIT_E)) 790 #define MAP_DIR_NW (1LL << (MAP_EXIT_N|MAP_EXIT_W)) 791 #define MAP_DIR_SE (1LL << (MAP_EXIT_S|MAP_EXIT_E)) 792 #define MAP_DIR_SW (1LL << (MAP_EXIT_S|MAP_EXIT_W)) 793 794 #define MAP_UNDO_MOVE (1 << 0) 795 #define MAP_UNDO_CREATE (1 << 1) 796 #define MAP_UNDO_LINK (1 << 2) 797 #define MAP_UNDO_INSERT (1 << 3) 798 799 #define TERRAIN_FLAG_DENSE BV01 800 #define TERRAIN_FLAG_AMPLE BV02 801 #define TERRAIN_FLAG_SPARSE BV03 802 #define TERRAIN_FLAG_SCANT BV04 803 #define TERRAIN_FLAG_NARROW BV05 804 #define TERRAIN_FLAG_STANDARD BV06 805 #define TERRAIN_FLAG_WIDE BV07 806 #define TERRAIN_FLAG_VAST BV08 807 #define TERRAIN_FLAG_FADEIN BV09 808 #define TERRAIN_FLAG_FADEOUT BV10 809 #define TERRAIN_FLAG_DOUBLE BV11 810 811 #define MOUSE_FLAG_BUTTON_A 1 812 #define MOUSE_FLAG_BUTTON_B 2 813 #define MOUSE_FLAG_SHIFT 4 814 #define MOUSE_FLAG_ALT 8 815 #define MOUSE_FLAG_CTRL 16 816 #define MOUSE_FLAG_MOTION 32 817 #define MOUSE_FLAG_WHEEL 64 818 #define MOUSE_FLAG_EXTRA 128 819 #define MOUSE_FLAG_RELEASE 256 820 821 #define CURSOR_FLAG_ALWAYS 1 822 //#define CURSOR_FLAG_NEVER 2 823 #define CURSOR_FLAG_GET_ONE 4 824 #define CURSOR_FLAG_GET_ALL 8 825 826 #define STARTUP_FLAG_NOGREETING 1 827 #define STARTUP_FLAG_SCREENREADER 2 828 #define STARTUP_FLAG_NORESET 4 829 #define STARTUP_FLAG_ARGUMENT 8 830 #define STARTUP_FLAG_NOTITLE 16 831 #define STARTUP_FLAG_VERBOSE 32 832 833 #define WRAP_FLAG_NONE 0 834 #define WRAP_FLAG_DISPLAY BV01 835 #define WRAP_FLAG_WORD BV02 836 #define WRAP_FLAG_SPLIT BV03 837 #define WRAP_FLAG_TAIL BV04 838 839 #define LEGEND_ASCII 0 840 #define LEGEND_ASCII_MISC 16 841 #define LEGEND_ASCII_CURVED 20 842 #define LEGEND_ASCII_DIRS 24 843 #define LEGEND_UNICODE 32 844 #define LEGEND_UNICODE_MISC 48 845 #define LEGEND_UNICODE_CURVED 52 846 #define LEGEND_UNICODE_DIRS 56 847 #define LEGEND_MUDFONT 64 848 #define LEGEND_MUDFONT_NWS 64 849 #define LEGEND_MUDFONT_NES 96 850 #define LEGEND_MUDFONT_CURVED 192 851 #define LEGEND_UNICODE_GRAPHICS 196 852 #define LEGEND_MAX 230 853 854 #define UNICODE_DIR_SE 1 855 #define UNICODE_DIR_NE 2 856 #define UNICODE_DIR_SW 4 857 #define UNICODE_DIR_NW 8 858 859 #define UNICODE_DIR_D 16 860 #define UNICODE_DIR_N 17 861 #define UNICODE_DIR_S 18 862 #define UNICODE_DIR_NS 19 863 #define UNICODE_DIR_U 20 864 #define UNICODE_DIR_E 21 865 #define UNICODE_DIR_W 22 866 #define UNICODE_DIR_EW 23 867 #define UNICODE_DIR_RL 24 868 #define UNICODE_DIR_RL_CURVED 25 869 #define UNICODE_DIR_RR 26 870 #define UNICODE_DIR_RR_CURVED 27 871 872 873 874 #define MAP_COLOR_AVOID 0 875 #define MAP_COLOR_BACK 1 876 #define MAP_COLOR_BLOCK 2 877 #define MAP_COLOR_EXIT 3 878 #define MAP_COLOR_FOG 4 879 #define MAP_COLOR_HIDE 5 880 #define MAP_COLOR_INVIS 6 881 #define MAP_COLOR_PATH 7 882 #define MAP_COLOR_ROOM 8 883 #define MAP_COLOR_SYMBOL 9 884 #define MAP_COLOR_USER 10 885 886 #define MAP_COLOR_MAX 11 887 888 889 /* 890 Some macros to deal with double linked lists 891 */ 892 893 #define LINK(link, head, tail) \ 894 { \ 895 if ((head) == NULL) \ 896 { \ 897 (head) = (link); \ 898 } \ 899 else \ 900 { \ 901 (tail)->next = (link); \ 902 } \ 903 (link)->next = NULL; \ 904 (link)->prev = (tail); \ 905 (tail) = (link); \ 906 } 907 908 /* 909 #define INSERT_LEFT(link, right, head) \ 910 { \ 911 (link)->prev = (right)->prev; \ 912 (right)->prev = (link); \ 913 (link)->next = (right); \ 914 \ 915 if ((link)->prev) \ 916 { \ 917 (link)->prev->next = (link); \ 918 } \ 919 else \ 920 { \ 921 (head) = (link); \ 922 } \ 923 } 924 925 926 #define INSERT_RIGHT(link, left, tail) \ 927 { \ 928 (link)->next = (left)->next; \ 929 (left)->next = (link); \ 930 (link)->prev = (left); \ 931 \ 932 if ((link)->next) \ 933 { \ 934 (link)->next->prev = (link); \ 935 } \ 936 else \ 937 { \ 938 (tail) = (link); \ 939 } \ 940 } 941 */ 942 943 #define UNLINK(link, head, tail) \ 944 { \ 945 if (((link)->prev == NULL && (link) != head) \ 946 || ((link)->next == NULL && (link) != tail)) \ 947 { \ 948 tintin_printf2(NULL, "#UNLINK ERROR in file %s on line %d", __FILE__, __LINE__); \ 949 dump_stack(); \ 950 } \ 951 if ((link)->prev == NULL) \ 952 { \ 953 (head) = (link)->next; \ 954 } \ 955 else \ 956 { \ 957 (link)->prev->next = (link)->next; \ 958 } \ 959 if ((link)->next == NULL) \ 960 { \ 961 (tail) = (link)->prev; \ 962 } \ 963 else \ 964 { \ 965 (link)->next->prev = (link)->prev; \ 966 } \ 967 (link)->next = NULL; \ 968 (link)->prev = NULL; \ 969 } 970 971 /* 972 string allocation 973 */ 974 975 #define RESTRING(point, value) \ 976 { \ 977 if (point) \ 978 { \ 979 free(point); \ 980 } \ 981 point = strdup((value)); \ 982 } 983 /* 984 #define FREE(point) \ 985 { \ 986 free((point)); \ 987 point = NULL; \ 988 } 989 */ 990 /* 991 Bit operations 992 */ 993 994 #define HAS_BIT(bitvector, bit) ((bitvector) & (bit)) 995 #define SET_BIT(bitvector, bit) ((bitvector) |= (bit)) 996 #define DEL_BIT(bitvector, bit) ((bitvector) &= (~(bit))) 997 #define TOG_BIT(bitvector, bit) ((bitvector) ^= (bit)) 998 #define FFS_BIT(bitvector) ((ffs(bitvector) - 1)) 999 1000 /* 1001 Generic 1002 */ 1003 1004 #define URANGE(a, b, c) ((b) < (a) ? (a) : (b) > (c) ? (c) : (b)) 1005 //#define URANGE(a, b, c) ((b) <= (a) ? (a) : (c) >= (b) ? (b) : (c) < (b) ? (b) : (c)) 1006 1007 #define UMAX(a, b) ((a) > (b) ? (a) : (b)) 1008 #define UMIN(a, b) ((a) < (b) ? (a) : (b)) 1009 1010 #define next_arg(u) (u < 99 ? u++ : u) 1011 1012 #define IS_SPLIT(ses) (gtd->screen->rows != (ses)->split->bot_row) 1013 1014 #define SCROLL(ses) ((ses)->cur_row == 0 || ((ses)->cur_row >= (ses)->split->top_row && (ses)->cur_row <= (ses)->split->bot_row) || ((ses)->cur_row >= ses->input->top_row && (ses)->cur_row <= ses->input->bot_row)) 1015 1016 #define VERBATIM(ses) (gtd->level->verbatim || (gtd->level->input == 0 && (HAS_BIT((ses)->config_flags, CONFIG_FLAG_VERBATIM) || HAS_BIT(gtd->flags, TINTIN_FLAG_CHILDLOCK)))) 1017 1018 1019 1020 /* 1021 Compatibility 1022 */ 1023 1024 1025 #define atoll(str) (strtoll(str, NULL, 10)) 1026 1027 /************************ structures *********************/ 1028 1029 struct listroot 1030 { 1031 struct listnode ** list; 1032 struct session * ses; 1033 int size; 1034 int used; 1035 int update; 1036 short type; 1037 short flags; 1038 }; 1039 1040 struct listnode 1041 { 1042 struct listroot * root; // variable 1043 char * arg1; 1044 char * arg2; 1045 char * arg3; 1046 char * arg4; 1047 char * group; 1048 unsigned int shots; 1049 union 1050 { 1051 pcre * regex; // act, alias, gag, highlight, substitute 1052 char * data; // class 1053 struct room_data * room; // terrain 1054 long long val64; // delay, tick, path 1055 short val16[4]; // button 1056 int val32[2]; // landmark, event, pathdir 1057 }; 1058 }; 1059 1060 /* 1061 struct tableroot 1062 { 1063 struct listtable ** table; 1064 int size; 1065 int used; 1066 }; 1067 1068 struct tablenode 1069 { 1070 struct tableroot * root; 1071 char * arg1; 1072 char * arg2; 1073 }; 1074 */ 1075 1076 struct scriptroot 1077 { 1078 struct scriptnode * next; 1079 struct scriptnode * prev; 1080 struct session * ses; 1081 struct listroot * local; 1082 int list; 1083 }; 1084 1085 struct process_data 1086 { 1087 pid_t pid; 1088 uid_t uid; 1089 gid_t gid; 1090 }; 1091 1092 struct tintin_data 1093 { 1094 struct session * ses; 1095 struct session * update; 1096 struct session * dispose_next; 1097 struct session * dispose_prev; 1098 struct listroot * dispose_list; 1099 struct listroot * banner_list; 1100 struct chat_data * chat; 1101 struct screen_data * screen; 1102 struct level_data * level; 1103 struct memory_data * memory; 1104 struct system_data * system; 1105 struct termios old_terminal; 1106 char * detach_file; 1107 int detach_port; 1108 struct process_data detach_info; 1109 int detach_sock; 1110 char * attach_file; 1111 int attach_pid; 1112 int attach_sock; 1113 int daemon; 1114 char * buf; 1115 char * out; 1116 char * mud_output_buf; 1117 int mud_output_max; 1118 int mud_output_len; 1119 unsigned char * mccp_buf; 1120 int mccp_len; 1121 char macro_buf[BUFFER_SIZE]; 1122 char is_result[NUMBER_SIZE]; 1123 time_t time; 1124 time_t time_daemon; 1125 time_t time_input; 1126 time_t time_session; 1127 unsigned long long utime; 1128 unsigned long long utime_next_delay; 1129 unsigned long long utime_next_tick; 1130 long long total_io_exec; 1131 long long total_io_delay; 1132 long long convert_time; 1133 int history_size; 1134 unsigned short command_ref[32]; 1135 int msdp_table_size; 1136 int flags; 1137 int event_flags; 1138 struct scriptroot * script_stack[STACK_SIZE]; 1139 int script_index; 1140 char tintin_char; 1141 char verbatim_char; 1142 char repeat_char; 1143 char * vars[100]; 1144 char * cmds[100]; 1145 int args[100]; 1146 char color_reset[COLOR_SIZE]; 1147 }; 1148 1149 struct session 1150 { 1151 struct session * next; 1152 struct session * prev; 1153 struct map_data * map; 1154 struct port_data * port; 1155 z_stream * mccp2; 1156 z_stream * mccp3; 1157 gnutls_session_t ssl; 1158 struct termios cur_terminal; 1159 struct log_data * log; 1160 struct scroll_data * scroll; 1161 struct split_data * split; 1162 struct input_data * input; 1163 char * name; 1164 char * group; 1165 char * line_capturefile; 1166 int line_captureindex; 1167 int gagline; 1168 struct listroot * list[LIST_MAX]; 1169 time_t created; 1170 int cur_row; 1171 int sav_row; 1172 int cur_col; 1173 int sav_col; 1174 int wrap; 1175 int fgc; 1176 int bgc; 1177 int vtc; 1178 int socket; 1179 int telopts; 1180 int telopt_flag[8]; 1181 int event_flags; 1182 int config_flags; 1183 int flags; 1184 int charset; 1185 char * session_host; 1186 char * session_ip; 1187 char * session_port; 1188 char * cmd_color; 1189 unsigned char * read_buf; 1190 int read_len; 1191 int read_max; 1192 unsigned long long connect_retry; 1193 int connect_error; 1194 // char more_output[BUFFER_SIZE]; 1195 char * more_output; 1196 int color; 1197 char color_patch[100]; 1198 unsigned long long packet_patch; 1199 unsigned long long check_output; 1200 int scrollback_tab; 1201 int tab_width; 1202 unsigned long long rand; 1203 unsigned short rkey; 1204 struct port_data * proxy; 1205 }; 1206 1207 struct edit_data 1208 { 1209 struct row_data ** line; 1210 int used; 1211 int size; 1212 int update; 1213 }; 1214 1215 struct system_data 1216 { 1217 char * tt_dir; 1218 char * home; 1219 char * lang; 1220 char * os; 1221 char * term; 1222 char * exec; 1223 }; 1224 1225 struct input_data 1226 { 1227 struct edit_data * line; 1228 struct edit_data * edit; 1229 char * line_name; 1230 char * edit_name; 1231 1232 int flags; 1233 1234 int sav_top_row; 1235 int sav_top_col; 1236 int sav_bot_row; 1237 int sav_bot_col; 1238 1239 int top_row; 1240 int top_col; 1241 int bot_row; 1242 int bot_col; 1243 1244 int cur_row; 1245 1246 int str_len; 1247 int raw_len; 1248 int str_pos; 1249 int raw_pos; 1250 1251 int str_hid; 1252 int raw_hid; 1253 1254 int str_off; 1255 1256 char *buf; 1257 char *tmp; 1258 char *cut; 1259 }; 1260 1261 struct level_data 1262 { 1263 unsigned int background; 1264 unsigned int convert; 1265 unsigned int debug; 1266 unsigned int grep; 1267 unsigned int ignore; 1268 unsigned int info; 1269 unsigned int input; 1270 unsigned int local; 1271 unsigned int mshot; 1272 unsigned int quiet; 1273 unsigned int repeat; 1274 unsigned int scan; 1275 unsigned int scroll; 1276 unsigned int shots; 1277 unsigned int verbatim; 1278 unsigned int verbose; 1279 }; 1280 1281 struct log_data 1282 { 1283 FILE * file; 1284 char * name; 1285 int mode; 1286 FILE * next_file; 1287 char * next_name; 1288 time_t next_time; 1289 FILE * line_file; 1290 char * line_name; 1291 time_t line_time; 1292 char stamp_text[100]; 1293 char * stamp_strf; 1294 time_t stamp_time; 1295 }; 1296 1297 struct split_data 1298 { 1299 int sav_top_row; 1300 int sav_top_col; 1301 int sav_bot_row; 1302 int sav_bot_col; 1303 int top_row; 1304 int top_col; 1305 int bot_row; 1306 int bot_col; 1307 }; 1308 1309 struct scroll_data 1310 { 1311 struct buffer_data ** buffer; 1312 int base; 1313 int line; 1314 int used; 1315 int size; 1316 int wrap; 1317 time_t time; 1318 char * input; 1319 int flags; 1320 int width; 1321 }; 1322 1323 struct buffer_data 1324 { 1325 int width; 1326 int height; 1327 unsigned short lines; 1328 unsigned short flags; 1329 time_t time; 1330 char * str; 1331 }; 1332 1333 struct chat_data 1334 { 1335 struct chat_data * next; 1336 struct chat_data * prev; 1337 struct chat_data * update; 1338 char * name; 1339 char * ip; 1340 char * version; 1341 char * download; 1342 char * reply; 1343 char * prefix; 1344 char * paste_buf; 1345 char * color; 1346 char * group; 1347 int port; 1348 int fd; 1349 time_t timeout; 1350 int flags; 1351 unsigned long long paste_time; 1352 FILE * file_pt; 1353 char * file_name; 1354 long long file_size; 1355 int file_block_cnt; 1356 int file_block_tot; 1357 int file_block_patch; 1358 unsigned long long file_start_time; 1359 }; 1360 1361 struct port_data 1362 { 1363 struct port_data * next; 1364 struct port_data * prev; 1365 struct port_data * update; 1366 char * name; 1367 char * ip; 1368 char * prefix; 1369 char * color; 1370 char * group; 1371 int port; 1372 int fd; 1373 int flags; 1374 int comm_flags; 1375 int mtts_flags; 1376 struct msdp_data ** msdp_data; 1377 char * proxy; 1378 char * ttype; 1379 char telbuf[BUFFER_SIZE]; 1380 int teltop; 1381 char inbuf[BUFFER_SIZE]; 1382 int intop; 1383 int cols; 1384 int rows; 1385 int total; 1386 int rank; 1387 z_stream * mccp2; 1388 z_stream * mccp3; 1389 struct session * ses; 1390 }; 1391 1392 struct link_data 1393 { 1394 struct link_data * next; 1395 struct link_data * prev; 1396 char * str1; 1397 char * str2; 1398 char * str3; 1399 }; 1400 1401 struct map_data 1402 { 1403 struct room_data ** room_list; 1404 struct room_data ** grid_rooms; 1405 int * grid_vnums; 1406 FILE * logfile; 1407 struct link_data * undo_head; 1408 struct link_data * undo_tail; 1409 struct search_data * search; 1410 char * buf; 1411 char * out; 1412 char color[MAP_COLOR_MAX][COLOR_SIZE]; 1413 char color_raw[MAP_COLOR_MAX][COLOR_SIZE]; 1414 int center_x; 1415 int center_y; 1416 int center_z; 1417 int max_grid_x; 1418 int max_grid_y; 1419 int sav_top_row; 1420 int sav_top_col; 1421 int sav_bot_row; 1422 int sav_bot_col; 1423 int top_row; 1424 int top_col; 1425 int bot_row; 1426 int bot_col; 1427 int rows; 1428 int cols; 1429 int undo_size; 1430 int dir; 1431 int size; 1432 int flags; 1433 int in_room; 1434 int at_room; 1435 int last_room; 1436 int global_vnum; 1437 struct exit_data * global_exit; 1438 int version; 1439 short display_stamp; 1440 int nofollow; 1441 char legend[LEGEND_MAX][LEGEND_SIZE]; 1442 char legend_raw[LEGEND_MAX][LEGEND_SIZE]; 1443 }; 1444 1445 struct room_data 1446 { 1447 struct exit_data * f_exit; 1448 struct exit_data * l_exit; 1449 struct exit_data * exit_grid[11]; 1450 int vnum; 1451 long long exit_dirs; 1452 float length; 1453 float weight; 1454 unsigned short exit_size; 1455 unsigned short search_stamp; 1456 unsigned short display_stamp; 1457 int flags; 1458 int w; 1459 int x; 1460 int y; 1461 int z; 1462 int terrain_index; 1463 short terrain_flags; 1464 char * area; 1465 char * color; 1466 char * data; 1467 char * desc; 1468 char * id; 1469 char * name; 1470 char * note; 1471 char * symbol; 1472 char * terrain; 1473 }; 1474 1475 struct exit_data 1476 { 1477 struct exit_data * next; 1478 struct exit_data * prev; 1479 int vnum; 1480 int dir; 1481 int grid; 1482 int flags; 1483 float weight; 1484 float delay; 1485 char * name; 1486 char * cmd; 1487 char * color; 1488 char * data; 1489 }; 1490 1491 struct search_data 1492 { 1493 int vnum; 1494 int min; 1495 int max; 1496 unsigned short stamp; 1497 char * arg; 1498 pcre * name; 1499 int exit_size; 1500 long long exit_dirs; 1501 char * exit_list; 1502 pcre * desc; 1503 pcre * area; 1504 pcre * note; 1505 pcre * terrain; 1506 long long flag; 1507 long long galf; 1508 char * id; 1509 float distance; 1510 }; 1511 1512 struct msdp_data 1513 { 1514 char * value; 1515 int flags; 1516 }; 1517 1518 struct memory_data 1519 { 1520 struct stack_data ** debug; 1521 int debug_len; 1522 int debug_max; 1523 1524 struct str_data ** stack; 1525 int stack_len; 1526 int stack_cap; 1527 int stack_max; 1528 1529 struct str_data ** list; 1530 int list_len; 1531 int list_max; 1532 1533 int * free; 1534 int free_len; 1535 int free_max; 1536 }; 1537 1538 struct row_data 1539 { 1540 char * str; 1541 }; 1542 1543 struct screen_data 1544 { 1545 struct row_data ** line; 1546 struct row_data ** grid; 1547 int flags; 1548 int rows; 1549 int cols; 1550 int height; 1551 int width; 1552 int tot_height; 1553 int tot_width; 1554 int pos_height; 1555 int pos_width; 1556 int minimized; 1557 int focus; 1558 int char_height; 1559 int char_width; 1560 int desk_rows; 1561 int desk_cols; 1562 int desk_height; 1563 int desk_width; 1564 int top_row; 1565 int bot_row; 1566 int cur_row; 1567 int cur_col; 1568 int max_row; 1569 int sav_lev; 1570 int sav_row[STACK_SIZE]; 1571 int sav_col[STACK_SIZE]; 1572 }; 1573 1574 struct stack_data 1575 { 1576 char * name; 1577 int index; 1578 }; 1579 1580 struct str_data 1581 { 1582 int index; 1583 int max; 1584 int len; 1585 short flags; 1586 short blank; 1587 }; 1588 1589 1590 // unused 1591 1592 struct window_data 1593 { 1594 char *name; 1595 1596 int top_row; 1597 int top_col; 1598 int bot_row; 1599 int bot_col; 1600 1601 int off_row; 1602 int off_col; 1603 1604 int max_row; 1605 int max_col; 1606 1607 int pos_row; 1608 int pos_col; 1609 1610 struct input_data **buffer; 1611 }; 1612 1613 #define DO_BUFFER(buffer) void buffer (struct session *ses, char *arg, char *arg1, char *arg2) 1614 #define DO_CHAT(chat) void chat (char *arg1, char *arg2) 1615 #define DO_COMMAND(command) struct session *command (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3, char *arg4) 1616 #define DO_CONFIG(config) struct session *config (struct session *ses, char *arg1, char *arg2, int index) 1617 #define DO_CURSOR(cursor) void cursor (struct session *ses, char *arg) 1618 #define DO_DAEMON(daemon) void daemon (struct session *ses, char *arg, char *arg1, char *arg2) 1619 #define DO_EDIT(edit) struct session *edit (struct session *ses, char *arg, char *arg1, char *arg2) 1620 #define DO_HISTORY(history) void history (struct session *ses, char *arg, char *arg1, char *arg2) 1621 #define DO_LINE(line) struct session *line (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3) 1622 #define DO_MAP(map) void map (struct session *ses, char *arg, char *arg1, char *arg2) 1623 #define DO_PATH(path) void path (struct session *ses, char *arg) 1624 #define DO_PORT(port) struct session *port (struct session *ses, char *arg, char *arg1, char *arg2) 1625 1626 1627 /* 1628 Typedefs 1629 */ 1630 1631 typedef int CMPFUNC (const void *a, const void *b); 1632 1633 typedef void BUFFER (struct session *ses, char *arg, char *arg1, char *arg2); 1634 typedef void CHAT (char *arg1, char *arg2); 1635 typedef struct session *CONFIG (struct session *ses, char *arg1, char *arg2, int index); 1636 typedef struct session *COMMAND (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3, char *arg4); 1637 typedef void CURSOR (struct session *ses, char *arg); 1638 typedef void DAEMON (struct session *ses, char *arg, char *arg1, char *arg2); 1639 typedef struct session *EDIT (struct session *ses, char *arg, char *arg1, char *arg2); 1640 typedef void HISTORY (struct session *ses, char *arg, char *arg1, char *arg2); 1641 typedef struct session *LINE (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3); 1642 typedef void MAP (struct session *ses, char *arg, char *arg1, char *arg2); 1643 typedef void MSDP (struct session *ses, struct port_data *buddy, int index); 1644 typedef void PATH (struct session *ses, char *arg); 1645 typedef struct session *PORT (struct session *ses, char *arg, char *arg1, char *arg2); 1646 1647 1648 /* 1649 Structures for tables.c 1650 */ 1651 1652 struct buffer_type 1653 { 1654 char * name; 1655 BUFFER * fun; 1656 char * desc; 1657 }; 1658 1659 struct charset_type 1660 { 1661 char * name; 1662 char * html; 1663 int flags; 1664 }; 1665 1666 struct chat_type 1667 { 1668 char * name; 1669 CHAT * fun; 1670 int lval; 1671 int rval; 1672 char * desc; 1673 }; 1674 1675 struct color_type 1676 { 1677 char * name; 1678 char * code; 1679 int len; 1680 }; 1681 1682 struct command_type 1683 { 1684 char * name; 1685 COMMAND * command; 1686 int args; 1687 int type; 1688 }; 1689 1690 struct config_type 1691 { 1692 char * name; 1693 char * msg_on; 1694 char * msg_off; 1695 CONFIG * config; 1696 }; 1697 1698 struct cursor_type 1699 { 1700 char * name; 1701 char * desc; 1702 char * code; 1703 int flags; 1704 CURSOR * fun; 1705 char * arg; 1706 }; 1707 1708 struct daemon_type 1709 { 1710 char * name; 1711 DAEMON * fun; 1712 char * desc; 1713 }; 1714 1715 struct edit_type 1716 { 1717 char * name; 1718 EDIT * fun; 1719 char * desc; 1720 }; 1721 1722 struct event_type 1723 { 1724 char * name; 1725 int level; 1726 int flags; 1727 char * group; 1728 char * desc; 1729 }; 1730 1731 struct history_type 1732 { 1733 char * name; 1734 HISTORY * fun; 1735 char * desc; 1736 }; 1737 1738 struct list_type 1739 { 1740 char * name; 1741 char * name_multi; 1742 int mode; 1743 int args; 1744 int script_arg; 1745 int priority_arg; 1746 int flags; 1747 }; 1748 1749 1750 struct line_type 1751 { 1752 char * name; 1753 LINE * fun; 1754 char * desc; 1755 }; 1756 1757 struct map_type 1758 { 1759 char * name; 1760 MAP * fun; 1761 int flags; 1762 int check; 1763 char * desc; 1764 }; 1765 1766 struct map_legend_type 1767 { 1768 char * name; 1769 char * group; 1770 char * min; 1771 char * max; 1772 }; 1773 1774 struct map_legend_group_type 1775 { 1776 char * name; 1777 char * group; 1778 int min_row; 1779 int min_col; 1780 int max_row; 1781 int max_col; 1782 int start; 1783 int end; 1784 char * reset; 1785 }; 1786 1787 struct msdp_type 1788 { 1789 char * name; 1790 int flags; 1791 int rank; 1792 MSDP * fun; 1793 }; 1794 1795 struct path_type 1796 { 1797 char * name; 1798 PATH * fun; 1799 char * desc; 1800 }; 1801 1802 struct port_type 1803 { 1804 char * name; 1805 PORT * fun; 1806 int lval; 1807 int rval; 1808 char * desc; 1809 }; 1810 1811 struct pulse_type 1812 { 1813 unsigned char update_input; 1814 unsigned char update_sessions; 1815 unsigned char update_delays; 1816 unsigned char update_daemon; 1817 unsigned char update_chat; 1818 unsigned char update_port; 1819 unsigned char update_ticks; 1820 unsigned char update_paths; 1821 unsigned char update_packets; 1822 unsigned char update_terminal; 1823 unsigned char update_memory; 1824 unsigned char update_time; 1825 }; 1826 1827 1828 struct rank_type 1829 { 1830 char * name; 1831 int flags; 1832 }; 1833 1834 struct stamp_type 1835 { 1836 char * name; 1837 int length; 1838 char * desc; 1839 }; 1840 1841 struct substitution_type 1842 { 1843 char * name; 1844 int bitvector; 1845 }; 1846 1847 struct timer_type 1848 { 1849 char * name; 1850 }; 1851 1852 struct telopt_type 1853 { 1854 char * name; 1855 int want; 1856 int flags; 1857 }; 1858 1859 #endif 1860 1861 1862 /* 1863 Function declarations 1864 */ 1865 1866 1867 #ifndef __BANNER_H__ 1868 #define __BANNER_H__ 1869 1870 extern DO_COMMAND(do_banner); 1871 1872 #endif 1873 1874 1875 #ifndef __BASE_H__ 1876 #define __BASE_H__ 1877 1878 extern int str_to_base64(char *in, char *out, size_t size); 1879 extern int base64_to_str(char *in, char *out, size_t size); 1880 1881 extern void str_to_base64z(char *in, char *out, size_t size); 1882 extern void base64z_to_str(char *in, char *out, size_t size); 1883 1884 extern int str_to_base252(char *in, char *out, size_t size); 1885 extern int base252_to_str(char *in, char *out, size_t size); 1886 1887 extern void str_to_base252z(char *in, char *out, size_t size); 1888 extern void base252z_to_str(char *in, char *out, size_t size); 1889 1890 #endif 1891 1892 #ifndef __BUFFER_H__ 1893 #define __BUFFER_H__ 1894 1895 extern DO_COMMAND(do_buffer); 1896 extern DO_COMMAND(do_grep); 1897 1898 extern void init_buffer(struct session *ses, int size); 1899 extern void add_line_buffer(struct session *ses, char *line, int more_output); 1900 extern int show_buffer(struct session *ses); 1901 1902 extern DO_BUFFER(buffer_up); 1903 extern DO_BUFFER(buffer_clear); 1904 extern DO_BUFFER(buffer_down); 1905 extern DO_BUFFER(buffer_get); 1906 extern DO_BUFFER(buffer_home); 1907 extern DO_BUFFER(buffer_end); 1908 extern DO_BUFFER(buffer_find); 1909 extern DO_BUFFER(buffer_jump); 1910 extern DO_BUFFER(buffer_lock); 1911 extern DO_BUFFER(buffer_refresh); 1912 extern DO_BUFFER(buffer_write); 1913 extern DO_BUFFER(buffer_info); 1914 1915 #endif 1916 1917 1918 #ifndef __CHAT_H__ 1919 #define __CHAT_H__ 1920 1921 extern DO_COMMAND(do_chat); 1922 1923 extern void process_chat_connections(fd_set *read_set, fd_set *write_set, fd_set *exc_set); 1924 extern void chat_socket_printf(struct chat_data *buddy, char *format, ...); 1925 extern void close_chat(struct chat_data *buddy, int unlink); 1926 extern void chat_forward_session(struct session *ses, char *linelog); 1927 1928 extern DO_CHAT(chat_accept); 1929 extern DO_CHAT(chat_call); 1930 extern DO_CHAT(chat_cancelfile); 1931 extern DO_CHAT(chat_color); 1932 extern DO_CHAT(chat_decline); 1933 extern DO_CHAT(chat_dnd); 1934 extern DO_CHAT(chat_downloaddir); 1935 extern DO_CHAT(chat_emote); 1936 extern DO_CHAT(chat_filestat); 1937 extern DO_CHAT(chat_group); 1938 extern DO_CHAT(chat_forward); 1939 extern DO_CHAT(chat_forwardall); 1940 extern DO_CHAT(chat_ignore); 1941 extern DO_CHAT(chat_initialize); 1942 extern DO_CHAT(chat_info); 1943 extern DO_CHAT(chat_ip); 1944 extern DO_CHAT(chat_message); 1945 extern DO_CHAT(chat_name); 1946 extern DO_CHAT(chat_paste); 1947 extern DO_CHAT(chat_peek); 1948 extern DO_CHAT(chat_ping); 1949 extern DO_CHAT(chat_prefix); 1950 extern DO_CHAT(chat_private); 1951 extern DO_CHAT(chat_public); 1952 extern DO_CHAT(chat_reply); 1953 extern DO_CHAT(chat_request); 1954 extern DO_CHAT(chat_send); 1955 extern DO_CHAT(chat_sendfile); 1956 extern DO_CHAT(chat_transfer); 1957 extern DO_CHAT(chat_serve); 1958 extern DO_CHAT(chat_uninitialize); 1959 extern DO_CHAT(chat_who); 1960 extern DO_CHAT(chat_zap); 1961 1962 #endif 1963 1964 #ifndef __COMMAND_H__ 1965 #define __COMMAND_H__ 1966 1967 extern void init_commands(void); 1968 1969 #endif 1970 1971 #ifndef __CURSOR_H__ 1972 #define __CURSOR_H__ 1973 1974 extern DO_COMMAND(do_cursor); 1975 1976 int inputline_cur_row(void); 1977 int inputline_cur_col(void); 1978 int inputline_cur_off(void); 1979 int inputline_cur_str_len(void); 1980 int inputline_max_str_len(void); 1981 int inputline_max_row(void); 1982 int inputline_editor(void); 1983 int inputline_rows(struct session *ses); 1984 1985 void inputline_insert(char *arg, int str_pos); 1986 void inputline_set(char *arg, int str_pos); 1987 1988 extern DO_CURSOR(cursor_backspace); 1989 extern DO_CURSOR(cursor_brace); 1990 extern DO_CURSOR(cursor_buffer_down); 1991 extern DO_CURSOR(cursor_buffer_end); 1992 extern DO_CURSOR(cursor_buffer_home); 1993 extern DO_CURSOR(cursor_buffer_lock); 1994 extern DO_CURSOR(cursor_buffer_up); 1995 extern DO_CURSOR(cursor_check_line); 1996 extern DO_CURSOR(cursor_check_line_modified); 1997 extern DO_CURSOR(cursor_clear_left); 1998 extern DO_CURSOR(cursor_clear_line); 1999 extern DO_CURSOR(cursor_clear_right); 2000 extern DO_CURSOR(cursor_convert_meta); 2001 extern DO_CURSOR(cursor_delete); 2002 extern DO_CURSOR(cursor_delete_or_exit); 2003 extern DO_CURSOR(cursor_delete_word_left); 2004 extern DO_CURSOR(cursor_delete_word_right); 2005 extern DO_CURSOR(cursor_echo); 2006 extern DO_CURSOR(cursor_end); 2007 extern DO_CURSOR(cursor_enter); 2008 extern DO_CURSOR(cursor_enter_finish); 2009 extern DO_CURSOR(cursor_flag); 2010 extern DO_CURSOR(cursor_get); 2011 extern DO_CURSOR(cursor_history_find); 2012 extern DO_CURSOR(cursor_history_next); 2013 extern DO_CURSOR(cursor_history_prev); 2014 extern DO_CURSOR(cursor_history_search); 2015 extern DO_CURSOR(cursor_home); 2016 extern DO_CURSOR(cursor_info); 2017 extern DO_CURSOR(cursor_insert); 2018 extern DO_CURSOR(cursor_macro); 2019 extern DO_CURSOR(cursor_move_page_down); 2020 extern DO_CURSOR(cursor_move_down); 2021 extern DO_CURSOR(cursor_move_left); 2022 extern DO_CURSOR(cursor_move_left_word); 2023 extern DO_CURSOR(cursor_move_right); 2024 extern DO_CURSOR(cursor_move_right_word); 2025 extern DO_CURSOR(cursor_move_page_up); 2026 extern DO_CURSOR(cursor_move_up); 2027 extern DO_CURSOR(cursor_page); 2028 extern DO_CURSOR(cursor_paste_buffer); 2029 extern DO_CURSOR(cursor_position); 2030 extern DO_CURSOR(cursor_redraw_input); 2031 extern DO_CURSOR(cursor_redraw_line); 2032 extern DO_CURSOR(cursor_redraw_singleline); 2033 extern DO_CURSOR(cursor_redraw_multiline); 2034 extern DO_CURSOR(cursor_redraw_edit); 2035 extern DO_CURSOR(cursor_set); 2036 extern DO_CURSOR(cursor_soft_enter); 2037 extern DO_CURSOR(cursor_suspend); 2038 extern DO_CURSOR(cursor_tab); 2039 2040 #endif 2041 2042 2043 #ifndef __INPUT_H__ 2044 #define __INPUT_H__ 2045 2046 extern void process_input(void); 2047 extern void read_line(char *input, int len); 2048 extern void read_key(char *input, int len); 2049 extern int check_key(char *input, int len); 2050 extern void convert_meta(char *input, char *output, int eol); 2051 extern char *str_convert_meta(char *input, int eol); 2052 extern void echo_command(struct session *ses, char *line); 2053 extern void init_input(struct session *ses, int top_row, int top_col, int bot_row, int bot_col); 2054 extern void free_input(struct session *ses); 2055 extern void input_printf(char *format, ...); 2056 extern void modified_input(void); 2057 2058 #endif 2059 2060 2061 #ifndef __MAPPER_H__ 2062 #define __MAPPER_H__ 2063 2064 extern DO_COMMAND(do_map); 2065 2066 extern void delete_room_data(struct room_data *room); 2067 extern int follow_map(struct session *ses, char *argument); 2068 extern void show_vtmap(struct session *ses); 2069 extern void map_mouse_handler(struct session *ses, char *left, char *right, int row, int col, int rev_row, int rev_col, int height, int width); 2070 extern int delete_map(struct session *ses); 2071 2072 extern DO_MAP(map_at); 2073 extern DO_MAP(map_center); 2074 extern DO_MAP(map_color); 2075 extern DO_MAP(map_create); 2076 extern DO_MAP(map_debug); 2077 extern DO_MAP(map_delete); 2078 extern DO_MAP(map_destroy); 2079 extern DO_MAP(map_dig); 2080 extern DO_MAP(map_entrance); 2081 extern DO_MAP(map_exit); 2082 extern DO_MAP(map_exitflag); 2083 extern DO_MAP(map_explore); 2084 extern DO_MAP(map_find); 2085 extern DO_MAP(map_flag); 2086 extern DO_MAP(map_get); 2087 extern DO_MAP(map_global); 2088 extern DO_MAP(map_goto); 2089 extern DO_MAP(map_info); 2090 extern DO_MAP(map_insert); 2091 extern DO_MAP(map_jump); 2092 extern DO_MAP(map_landmark); 2093 extern DO_MAP(map_leave); 2094 extern DO_MAP(map_legend); 2095 extern DO_MAP(map_link); 2096 extern DO_MAP(map_list); 2097 extern DO_MAP(map_map); 2098 extern DO_MAP(map_move); 2099 extern DO_MAP(map_name); 2100 extern DO_MAP(map_offset); 2101 extern DO_MAP(map_read); 2102 extern DO_MAP(map_resize); 2103 extern DO_MAP(map_return); 2104 extern DO_MAP(map_roomflag); 2105 extern DO_MAP(map_run); 2106 extern DO_MAP(map_set); 2107 extern DO_MAP(map_sync); 2108 extern DO_MAP(map_terrain); 2109 extern DO_MAP(map_travel); 2110 extern DO_MAP(map_undo); 2111 extern DO_MAP(map_uninsert); 2112 extern DO_MAP(map_unlandmark); 2113 extern DO_MAP(map_unlink); 2114 extern DO_MAP(map_unterrain); 2115 extern DO_MAP(map_update); 2116 extern DO_MAP(map_vnum); 2117 extern DO_MAP(map_write); 2118 2119 #endif 2120 2121 2122 #ifndef __TT_MATH_H__ 2123 #define __TT_MATH_H__ 2124 2125 extern long double mathexp(struct session *ses, char *str, char *result, int seed); 2126 extern int is_math(struct session *ses, char *str); 2127 extern int get_ellipsis(struct session *ses, unsigned int size, char *name, int *min, int *max); 2128 extern long double get_number(struct session *ses, char *str); 2129 extern unsigned long long get_ulong(struct session *ses, char *str); 2130 extern long double get_double(struct session *ses, char *str); 2131 extern void get_number_string(struct session *ses, char *str, char *result); 2132 extern long double mathswitch(struct session *ses, char *left, char *right); 2133 extern long double tintoi(char *str); 2134 extern unsigned long long tintou(char *str); 2135 2136 2137 #endif 2138 2139 2140 #ifndef __CONFIG_H__ 2141 #define __CONFIG_H__ 2142 2143 extern DO_COMMAND(do_configure); 2144 2145 extern DO_CONFIG(config_autotab); 2146 extern DO_CONFIG(config_buffersize); 2147 extern DO_CONFIG(config_charset); 2148 extern DO_CONFIG(config_colormode); 2149 extern DO_CONFIG(config_colorpatch); 2150 extern DO_CONFIG(config_commandcolor); 2151 extern DO_CONFIG(config_commandecho); 2152 extern DO_CONFIG(config_connectretry); 2153 extern DO_CONFIG(config_childlock); 2154 extern DO_CONFIG(config_convertmeta); 2155 extern DO_CONFIG(config_debugtelnet); 2156 extern DO_CONFIG(config_historysize); 2157 extern DO_CONFIG(config_inheritance); 2158 extern DO_CONFIG(config_loglevel); 2159 extern DO_CONFIG(config_logmode); 2160 extern DO_CONFIG(config_mccp); 2161 extern DO_CONFIG(config_mousetracking); 2162 extern DO_CONFIG(config_packetpatch); 2163 extern DO_CONFIG(config_randomseed); 2164 extern DO_CONFIG(config_repeatchar); 2165 extern DO_CONFIG(config_repeatenter); 2166 extern DO_CONFIG(config_screenreader); 2167 extern DO_CONFIG(config_scrolllock); 2168 extern DO_CONFIG(config_speedwalk); 2169 extern DO_CONFIG(config_tabwidth); 2170 extern DO_CONFIG(config_telnet); 2171 extern DO_CONFIG(config_tintinchar); 2172 extern DO_CONFIG(config_verbatim); 2173 extern DO_CONFIG(config_verbatimchar); 2174 extern DO_CONFIG(config_verbose); 2175 extern DO_CONFIG(config_wordwrap); 2176 2177 #endif 2178 2179 2180 2181 #ifndef __DAEMON_H__ 2182 #define __DAEMON_H__ 2183 2184 extern DO_COMMAND(do_daemon); 2185 2186 extern DO_DAEMON(daemon_attach); 2187 extern DO_DAEMON(daemon_detach); 2188 extern DO_DAEMON(daemon_input); 2189 extern DO_DAEMON(daemon_kill); 2190 extern DO_DAEMON(daemon_list); 2191 2192 extern void reset_daemon(void); 2193 extern void winch_daemon(void); 2194 2195 #endif 2196 2197 #ifndef __DATA_H__ 2198 #define __DATA_H__ 2199 2200 extern DO_COMMAND(do_kill); 2201 2202 extern void kill_list(struct listroot *root); 2203 extern void free_list(struct listroot *root); 2204 extern int show_node_with_wild(struct session *ses, char *cptr, struct listroot *root); 2205 extern void show_node(struct listroot *root, struct listnode *node, int level); 2206 extern void show_nest(struct listnode *node, char *result); 2207 extern void show_list(struct listroot *root, int level); 2208 extern void remove_node_list(struct session *ses, int type, struct listnode *node); 2209 extern void remove_index_list(struct listroot *root, int index); 2210 extern void dispose_node(struct listnode *node); 2211 extern void delete_node_list(struct session *ses, int type, struct listnode *node); 2212 extern int delete_node_with_wild(struct session *ses, int index, char *string); 2213 extern void delete_index_list(struct listroot *root, int index); 2214 extern int search_index_list(struct listroot *root, char *text, char *priority); 2215 extern int locate_index_list(struct listroot *root, char *text, char *priority); 2216 extern int bsearch_alpha_list(struct listroot *root, char *text, int seek); 2217 extern int bsearch_alnum_list(struct listroot *root, char *text, int seek); 2218 extern int bsearch_priority_list(struct listroot *root, char *text, char *priority, int seek); 2219 extern int nsearch_list(struct listroot *root, char *text); 2220 extern struct listroot *init_list(struct session *ses, int type, int size); 2221 extern struct listroot *copy_list(struct session *ses, struct listroot *sourcelist, int type); 2222 extern struct listnode *create_node_list(struct listroot *root, char *arg1, char *arg2, char *arg3, char *arg4); 2223 extern struct listnode *insert_node_list(struct listroot *root, struct listnode *node); 2224 extern struct listnode *insert_index_list(struct listroot *root, struct listnode *node, int index); 2225 extern struct listnode *update_node_list(struct listroot *root, char *arg1, char *arg2, char *arg3, char *arg4); 2226 extern struct listnode *search_node_list(struct listroot *root, char *text); 2227 2228 2229 #endif 2230 2231 2232 #ifndef __DEBUG_H__ 2233 #define __DEBUG_H__ 2234 2235 extern void push_call(char *format, ...); 2236 extern int push_call_printf(char *format, ...); 2237 extern void pop_call(void); 2238 extern void dump_stack(void); 2239 2240 #endif 2241 2242 #ifndef __DICT_H__ 2243 #define __DICT_H__ 2244 2245 extern DO_COMMAND(do_dictionary); 2246 2247 extern int spellcheck_count(struct session *ses, char *in); 2248 extern int cursor_dictionary_tab_add(int stop_after_first); 2249 2250 #endif 2251 2252 #ifndef __EDIT_H__ 2253 #define __EDIT_H__ 2254 2255 DO_COMMAND(do_edit); 2256 2257 DO_EDIT(edit_create); 2258 DO_EDIT(edit_load); 2259 DO_EDIT(edit_read); 2260 DO_EDIT(edit_resume); 2261 DO_EDIT(edit_save); 2262 DO_EDIT(edit_suspend); 2263 DO_EDIT(edit_write); 2264 2265 extern struct edit_data *create_editor(void); 2266 2267 extern void enable_editor(struct edit_data *edit); 2268 extern void delete_editor(struct edit_data *edit); 2269 extern void resize_editor(struct edit_data *edit, int size); 2270 extern void clear_editor(struct edit_data *edit); 2271 extern int str_save_editor(struct edit_data *edit, char **str); 2272 extern int var_save_editor(struct edit_data *edit, char **str); 2273 extern void create_line(struct edit_data *edit, int index, char *str); 2274 extern void delete_line(struct edit_data *edit, int index); 2275 extern void insert_line(struct edit_data *edit, int index, char *str); 2276 extern void remove_line(struct edit_data *edit, int index); 2277 #endif 2278 2279 #ifndef __DRAW_H__ 2280 #define __DRAW_H__ 2281 2282 extern DO_COMMAND(do_draw); 2283 2284 #endif 2285 2286 2287 #ifndef __EVENT_H__ 2288 #define __EVENT_H__ 2289 2290 //extern DO_COMMAND(do_event); 2291 //extern DO_COMMAND(do_unevent); 2292 2293 extern int check_all_events(struct session *ses, int flags, int args, int vars, char *fmt, ...); 2294 extern void mouse_handler(struct session *ses, int val1, int val2, int val3); 2295 2296 #endif 2297 2298 2299 #ifndef __FILES_H__ 2300 #define __FILES_H__ 2301 2302 extern DO_COMMAND(do_read); 2303 extern DO_COMMAND(do_write); 2304 2305 extern struct session *read_file(struct session *ses, FILE *fp, char *filename); 2306 extern void write_node(struct session *ses, int mode, struct listnode *node, FILE *file); 2307 extern char *fread_one_line(char **str, FILE *fp); 2308 2309 #endif 2310 2311 2312 #ifndef __HELP_H__ 2313 #define __HELP_H__ 2314 2315 extern DO_COMMAND(do_help); 2316 2317 #endif 2318 2319 2320 #ifndef __HISTORY_H__ 2321 #define __HISTORY_H__ 2322 2323 extern DO_COMMAND(do_history); 2324 2325 extern void add_line_history(struct session *ses, char *line); 2326 extern void insert_line_history(struct session *ses, char *line); 2327 extern struct session *repeat_history(struct session *ses, char *line); 2328 extern int write_history(struct session *ses, char *filename); 2329 extern int read_history(struct session *ses, char *filename); 2330 2331 DO_HISTORY(history_character); 2332 DO_HISTORY(history_delete); 2333 DO_HISTORY(history_get); 2334 DO_HISTORY(history_insert); 2335 DO_HISTORY(history_list); 2336 DO_HISTORY(history_size); 2337 DO_HISTORY(history_read); 2338 DO_HISTORY(history_write); 2339 2340 #endif 2341 2342 2343 #ifndef __LINE_H__ 2344 #define __LINE_H__ 2345 2346 extern DO_COMMAND(do_line); 2347 2348 extern DO_LINE(line_background); 2349 extern DO_LINE(line_benchmark); 2350 extern DO_LINE(line_capture); 2351 extern DO_LINE(line_convert); 2352 extern DO_LINE(line_debug); 2353 extern DO_LINE(line_gag); 2354 extern DO_LINE(line_ignore); 2355 extern DO_LINE(line_local); 2356 extern DO_LINE(line_log); 2357 extern DO_LINE(line_logmode); 2358 extern DO_LINE(line_logverbatim); 2359 extern DO_LINE(line_msdp); 2360 extern DO_LINE(line_multishot); 2361 extern DO_LINE(line_oneshot); 2362 extern DO_LINE(line_quiet); 2363 extern DO_LINE(line_strip); 2364 extern DO_LINE(line_substitute); 2365 extern DO_LINE(line_verbatim); 2366 extern DO_LINE(line_verbose); 2367 2368 #endif 2369 2370 2371 #ifndef __LOG_H__ 2372 #define __LOG_H__ 2373 2374 extern void logheader(struct session *ses, FILE *file, int newline); 2375 extern void init_log(struct session *ses); 2376 extern void free_log(struct session *ses); 2377 2378 extern void logit(struct session *ses, char *txt, FILE *file, int newline); 2379 extern void write_html_header(struct session *ses, FILE *fp); 2380 extern void vt102_to_html(struct session *ses, char *txt, char *out); 2381 2382 #endif 2383 2384 2385 #ifndef __MAIN_H__ 2386 #define __MAIN_H__ 2387 2388 extern struct session *gts; 2389 extern struct tintin_data *gtd; 2390 extern void winch_handler(int signal); 2391 extern void abort_handler(int signal); 2392 extern void pipe_handler(int signal); 2393 extern void suspend_handler(int signal); 2394 extern void trap_handler(int signal); 2395 extern int main(int argc, char **argv); 2396 extern void init_tintin(int greeting); 2397 extern void quitmsg(char *message); 2398 extern void syserr_fatal(int signal, char *msg); 2399 extern void syserr_printf(struct session *ses, char *fmt, ...); 2400 2401 #endif 2402 2403 #ifndef __MCCP_H__ 2404 #define __MCCP_H__ 2405 2406 void *zlib_alloc(void *opaque, unsigned int items, unsigned int size); 2407 void zlib_free(void *opaque, void *address); 2408 2409 #endif 2410 2411 #ifndef __MEMORY_H__ 2412 #define __MEMORY_H__ 2413 2414 extern char *restring(char *point, char *string); 2415 extern char *restringf(char *point, char *fmt, ...); 2416 2417 extern void init_memory(void); 2418 2419 extern struct str_data *get_str_ptr(char *str); 2420 extern char *get_str_str(struct str_data *str_ptr); 2421 2422 extern int str_len(char *str); 2423 extern int str_max(char *str); 2424 extern int str_fix(char *str); 2425 2426 extern char *str_alloc(int len); 2427 extern void str_free(char *ptr); 2428 2429 extern char *str_mim(char *original); 2430 extern char *str_dup(char *original); 2431 extern char *str_dup_clone(char *original); 2432 extern char *str_dup_printf(char *fmt, ...); 2433 extern char *str_ndup(char *original, int len); 2434 2435 extern char *str_resize(char **ptr, int add); 2436 extern void str_clone(char **clone, char *original); 2437 extern char *str_cpy(char **ptr, char *str); 2438 extern char *str_cpy_printf(char **ptr, char *fmt, ...); 2439 extern char *str_ncpy(char **ptr, char *str, int len); 2440 extern char *str_cat_len(char **str, char *arg, int len); 2441 extern char *str_cat(char **str, char *arg); 2442 extern char *str_cat_chr(char **ptr, char chr); 2443 extern char *str_cat_printf(char **str, char *fmt, ...); 2444 extern char *str_cap(char **str, int index, char *buf); 2445 extern char *str_ins(char **str, int index, char *buf); 2446 extern char *str_ins_printf(char **str, int index, char *fmt, ...); 2447 extern char *str_mov(char **str, int dst, int src); 2448 2449 extern char *str_alloc_stack(int size); 2450 2451 #endif 2452 2453 2454 #ifndef __MISC_H__ 2455 #define __MISC_H__ 2456 2457 extern DO_COMMAND(do_end); 2458 extern DO_COMMAND(do_nop); 2459 extern DO_COMMAND(do_test); 2460 2461 #endif 2462 2463 #ifndef __MSDP_H__ 2464 #define __MSDP_H__ 2465 2466 extern void init_msdp_table(void); 2467 extern int msdp_find(char *var); 2468 extern void arachnos_devel(struct session *ses, char *fmt, ...); 2469 extern void arachnos_mudlist(struct session *ses, char *fmt, ...); 2470 extern void msdp_update_all(char *var, char *fmt, ...); 2471 extern void msdp_update_var(struct session *ses, struct port_data *buddy, char *var, char *str); 2472 extern void msdp_update_varf(struct session *ses, struct port_data *buddy, char *var, char *fmt, ...); 2473 extern void msdp_update_var_instant(struct session *ses, struct port_data *buddy, char *var, char *fmt, ...); 2474 extern void msdp_send_update(struct session *ses, struct port_data *buddy); 2475 extern char *msdp_get_var(struct session *ses, struct port_data *buddy, char *var); 2476 extern void process_msdp_varval(struct session *ses, struct port_data *buddy, char *var, char *val ); 2477 extern void msdp_command_list(struct session *ses, struct port_data *buddy, int index); 2478 extern void msdp_command_report(struct session *ses, struct port_data *buddy, int index); 2479 extern void msdp_command_reset(struct session *ses, struct port_data *buddy, int index); 2480 extern void msdp_command_send(struct session *ses, struct port_data *buddy, int index); 2481 extern void msdp_command_unreport(struct session *ses, struct port_data *buddy, int index); 2482 extern void msdp_configure_arachnos(struct session *ses, struct port_data *buddy, int index); 2483 extern void write_msdp_to_descriptor(struct session *ses, struct port_data *buddy, char *src, int length); 2484 extern int msdp2json(unsigned char *src, int srclen, char *out); 2485 extern int json2msdp(unsigned char *src, int srclen, char *out); 2486 extern int tintin2msdp(char *src, char *out); 2487 extern void arachnos_devel(struct session *ses, char *fmt, ...); 2488 extern void arachnos_mudlist(struct session *ses, char *fmt, ...); 2489 extern struct msdp_type msdp_table[]; 2490 2491 #endif 2492 2493 #ifndef __NEST_H__ 2494 #define __NEST_H__ 2495 2496 extern struct listroot *search_nest_base_ses(struct session *ses, char *arg); 2497 extern struct listroot *search_nest_root(struct listroot *root, char *arg); 2498 extern struct listnode *search_base_node(struct listroot *root, char *variable); 2499 extern struct listnode *search_nest_node(struct listroot *root, char *variable); 2500 extern struct listnode *search_nest_node_ses(struct session *ses, char *variable); 2501 extern int search_nest_index(struct listroot *root, char *variable); 2502 extern struct listroot *update_nest_root(struct listroot *root, char *arg); 2503 extern void update_nest_node(struct listroot *root, char *arg); 2504 extern int delete_nest_node(struct listroot *root, char *variable); 2505 extern int get_nest_size_key(struct listroot *root, char *variable, char **result); 2506 extern int get_nest_size_val(struct listroot *root, char *variable, char **result); 2507 extern struct listnode *get_nest_node_key(struct listroot *root, char *variable, char **result, int def); 2508 extern struct listnode *get_nest_node_val(struct listroot *root, char *variable, char **result, int def); 2509 extern int get_nest_index(struct listroot *root, char *variable, char **result, int def); 2510 extern void show_nest_node(struct listnode *node, char **result, int initialize); 2511 extern void view_nest_node(struct listnode *node, char **str_result, int nest, int initialize, int color); 2512 extern struct listnode *set_nest_node_ses(struct session *ses, char *arg1, char *format, ...); 2513 extern struct listnode *add_nest_node_ses(struct session *ses, char *arg1, char *format, ...); 2514 extern struct listnode *set_nest_node(struct listroot *root, char *arg1, char *format, ...); 2515 extern struct listnode *add_nest_node(struct listroot *root, char *arg1, char *format, ...); 2516 extern void copy_nest_node(struct listroot *dst_root, struct listnode *dst, struct listnode *src); 2517 2518 #endif 2519 2520 2521 #ifndef __NET_H__ 2522 #define __NET_H__ 2523 2524 extern int connect_mud(struct session *ses, char *host, char *port); 2525 extern void write_line_mud(struct session *ses, char *line, int size); 2526 extern int read_buffer_mud(struct session *ses); 2527 extern void readmud(struct session *ses); 2528 extern void process_mud_output(struct session *ses, char *linebuf, int prompt); 2529 2530 #endif 2531 2532 #ifndef __PARSE_H__ 2533 #define __PARSE_H__ 2534 2535 extern int is_abbrev(char *str1, char *str2); 2536 extern int is_member(char *str1, char *str2); 2537 extern int is_vowel(char *str); 2538 extern void filename_string(char *input, char *output); 2539 extern struct session *execute(struct session *ses, char *format, ...); 2540 extern struct session *command(struct session *ses, COMMAND *cmd, char *format, ...); 2541 extern struct session *parse_input(struct session *ses, char *input); 2542 extern struct session *parse_command(struct session *ses, char *input); 2543 extern int is_speedwalk(struct session *ses, char *input); 2544 extern char *substitute_speedwalk(struct session *ses, char *input, char *output); 2545 extern void process_speedwalk(struct session *ses, char *input); 2546 extern struct session *parse_tintin_command(struct session *ses, char *input); 2547 extern int cnt_arg_all(struct session *ses, char *string, int flag); 2548 extern char *get_arg_all(struct session *ses, char *string, char *result, int verbatim); 2549 extern char *sub_arg_all(struct session *ses, char *string, char *result, int verbatim, int sub); 2550 extern char *get_arg_in_braces(struct session *ses, char *string, char *result, int flag); 2551 extern char *sub_arg_in_braces(struct session *ses, char *string, char *result, int flag, int sub); 2552 extern char *get_arg_with_spaces(struct session *ses, char *string, char *result, int flag); 2553 extern char *get_arg_stop_spaces(struct session *ses, char *string, char *result, int flag); 2554 extern char *sub_arg_stop_spaces(struct session *ses, char *string, char *result, int flag, int sub); 2555 2556 extern char *get_arg_stop_digits(struct session *ses, char *string, char *result, int flag); 2557 extern char *space_out(char *string); 2558 extern char *get_arg_to_brackets(struct session *ses, char *string, char *result); 2559 extern char *get_arg_at_brackets(struct session *ses, char *string, char *result); 2560 extern char *get_arg_in_brackets(struct session *ses, char *string, char *result); 2561 extern char *get_char(struct session *ses, char *string, char *result); 2562 extern void write_mud(struct session *ses, char *command, int flags); 2563 extern void do_one_line(char *line, struct session *ses); 2564 2565 #endif 2566 2567 2568 #ifndef __PATH_H__ 2569 #define __PATH_H__ 2570 2571 extern DO_COMMAND(do_pathdir); 2572 2573 int is_pathdir(struct session *ses, char *dir); 2574 int exit_to_dir(struct session *ses, char *name); 2575 unsigned char pdir(struct listnode *node); 2576 char *dir_to_exit(struct session *ses, int dir); 2577 2578 extern void check_append_path(struct session *ses, char *forward, char *backward, float delay, int force, int follow); 2579 2580 extern DO_PATH(path_create); 2581 extern DO_PATH(path_describe); 2582 extern DO_PATH(path_delete); 2583 extern DO_PATH(path_destroy); 2584 extern DO_PATH(path_get); 2585 extern DO_PATH(path_goto); 2586 extern DO_PATH(path_insert); 2587 extern DO_PATH(path_load); 2588 extern DO_PATH(path_map); 2589 extern DO_PATH(path_move); 2590 extern DO_PATH(path_run); 2591 extern DO_PATH(path_save); 2592 extern DO_PATH(path_start); 2593 extern DO_PATH(path_stop); 2594 extern DO_PATH(path_swap); 2595 extern DO_PATH(path_undo); 2596 extern DO_PATH(path_unzip); 2597 extern DO_PATH(path_walk); 2598 extern DO_PATH(path_zip); 2599 2600 // old 2601 2602 extern DO_PATH(path_new); 2603 extern DO_PATH(path_end); 2604 2605 #endif 2606 2607 2608 #ifndef __PORT_H__ 2609 #define __PORT_H__ 2610 2611 extern DO_PORT(port_call); 2612 extern DO_PORT(port_color); 2613 extern DO_PORT(port_flag); 2614 extern DO_PORT(port_group); 2615 extern DO_PORT(port_ignore); 2616 extern DO_PORT(port_initialize); 2617 extern DO_PORT(port_info); 2618 extern DO_PORT(port_message); 2619 extern DO_PORT(port_name); 2620 extern DO_PORT(port_prefix); 2621 extern DO_PORT(port_proxy); 2622 extern DO_PORT(port_rank); 2623 extern DO_PORT(port_send); 2624 extern DO_PORT(port_uninitialize); 2625 extern DO_PORT(port_who); 2626 extern DO_PORT(port_zap); 2627 2628 extern int port_new(struct session *ses, int s); 2629 extern void close_port(struct session *ses, struct port_data *buddy, int unlink); 2630 extern void process_port_connections(struct session *ses, fd_set *read_set, fd_set *write_set, fd_set *exc_set); 2631 extern void port_forward_session(struct session *ses, char *linelog); 2632 extern void port_socket_printf(struct session *ses, struct port_data *buddy, char *format, ...); 2633 extern void port_telnet_printf(struct session *ses, struct port_data *buddy, size_t length, char *format, ...); 2634 extern void port_log_printf(struct session *ses, struct port_data *buddy, char *format, ...); 2635 extern void port_printf(struct session *ses, char *format, ...); 2636 extern int process_port_input(struct session *ses, struct port_data *buddy); 2637 extern void get_port_commands(struct session *ses, struct port_data *buddy, char *buf, int len); 2638 extern void port_name_change(struct session *ses, struct port_data *buddy, char *txt); 2639 extern void port_receive_message(struct session *ses, struct port_data *buddy, char *txt); 2640 2641 extern void port_puts(struct session *ses, char *arg); 2642 extern struct port_data *find_port_buddy(struct session *ses, char *arg); 2643 extern struct port_data *find_port_group(struct session *ses, char *arg); 2644 2645 #endif 2646 2647 #ifndef __SCREEN_H__ 2648 #define __SCREEN_H__ 2649 2650 extern DO_COMMAND(do_screen); 2651 2652 extern void init_inputregion(struct session *ses, int top_row, int top_col, int bot_row, int bot_col); 2653 extern int get_row_index(struct session *ses, int val); 2654 extern int get_col_index(struct session *ses, int val); 2655 extern int get_row_index_arg(struct session *ses, char *arg); 2656 extern int get_col_index_arg(struct session *ses, char *arg); 2657 extern void csip_handler(int var1, int var2, int var3); 2658 extern void csit_handler(int var1, int var2, int var3); 2659 extern void rqlp_handler(int event, int button, int row, int col); 2660 extern void osc_handler(char ind, char *arg); 2661 extern void erase_scroll_region(struct session *ses); 2662 extern void erase_input_region(struct session *ses); 2663 extern void erase_split_region(struct session *ses); 2664 extern void erase_bot_region(struct session *ses); 2665 extern void erase_top_region(struct session *ses); 2666 extern void erase_left_region(struct session *ses); 2667 extern void erase_right_region(struct session *ses); 2668 extern void erase_square(struct session *ses, int top_row, int top_col, int bot_row, int bot_col); 2669 extern void fill_top_region(struct session *ses, char *arg); 2670 extern void fill_bot_region(struct session *ses, char *arg); 2671 extern void fill_left_region(struct session *ses, char *arg); 2672 extern void fill_right_region(struct session *ses, char *arg); 2673 extern void fill_split_region(struct session *ses, char *arg); 2674 extern int inside_scroll_region(struct session *ses, int row, int col); 2675 extern void add_row_index(struct row_data **row, int index); 2676 extern void del_row_index(struct row_data **row, int index); 2677 2678 extern void print_scroll_region(struct session *ses); 2679 extern void print_screen(); 2680 extern void init_screen(int rows, int cols, int pix_rows, int pix_cols); 2681 extern void destroy_screen(); 2682 extern int inside_scroll_region(struct session *ses, int row, int col); 2683 extern void set_grid_screen(struct session *ses, char *str, int row, int col); 2684 extern void add_line_screen(struct session *ses, char *str, int row); 2685 2686 extern void set_line_screen(struct session *ses, char *ins, int row, int col); 2687 2688 extern void get_line_screen(char *str, int row); 2689 extern int get_link_screen(struct session *ses, char *var, char *val, int flags, int row, int col); 2690 extern void get_word_screen(char *str, int row, int col); 2691 2692 #endif 2693 2694 2695 #ifndef __SESSION_H__ 2696 #define __SESSION_H__ 2697 2698 extern DO_COMMAND(do_session); 2699 extern DO_COMMAND(do_snoop); 2700 extern DO_COMMAND(do_zap); 2701 2702 extern struct session *session_command(char *arg, struct session *ses); 2703 extern struct session *find_session(char *name); 2704 extern struct session *newactive_session(void); 2705 extern struct session *activate_session(struct session *ses); 2706 extern struct session *new_session(struct session *ses, char *name, char *address, int desc, int ssl); 2707 extern struct session *connect_session(struct session *ses); 2708 extern void cleanup_session(struct session *ses); 2709 extern void dispose_session(struct session *ses); 2710 2711 #endif 2712 2713 2714 #ifndef __SHOW_H__ 2715 #define __SHOW_H__ 2716 2717 extern void show_message(struct session *ses, int index, char *format, ...); 2718 extern void show_error(struct session *ses, int index, char *format, ...); 2719 extern void show_debug(struct session *ses, int index, char *format, ...); 2720 extern void show_info(struct session *ses, int index, char *format, ...); 2721 extern void print_lines(struct session *ses, int flags, char *format, ...); 2722 extern void show_lines(struct session *ses, char *str); 2723 extern void tintin_header(struct session *ses, int width, char *format, ...); 2724 extern void socket_printf(struct session *ses, size_t length, char *format, ...); 2725 extern void telnet_printf(struct session *ses, int length, char *format, ...); 2726 2727 extern void tintin_printf2(struct session *ses, char *format, ...); 2728 extern void tintin_printf(struct session *ses, char *format, ...); 2729 2730 extern void tintin_puts3(struct session *ses, char *string, int prompt); 2731 extern void tintin_puts2(struct session *ses, char *string); 2732 extern void tintin_puts(struct session *ses, char *string); 2733 2734 #endif 2735 2736 2737 #ifndef __SORT_H__ 2738 #define __SORT_H__ 2739 2740 extern void quadsort(void *array, size_t nmemb, size_t size, CMPFUNC *cmp); 2741 extern int cmp_int(const void * a, const void * b); 2742 extern int cmp_str(const void * a, const void * b); 2743 extern int cmp_num(const void * a, const void * b); 2744 2745 #endif 2746 2747 #ifndef __SPLIT_H__ 2748 #define __SPLIT_H__ 2749 2750 extern DO_COMMAND(do_split); 2751 extern DO_COMMAND(do_unsplit); 2752 2753 extern void init_split(struct session *ses, int top, int bot, int left, int right); 2754 extern void reset_screen(struct session *ses); 2755 extern void dirty_screen(struct session *ses); 2756 extern void split_show(struct session *ses, char *prompt, char *row, char *col); 2757 2758 #endif 2759 2760 2761 #ifndef __SSL_H__ 2762 #define __SSL_H__ 2763 2764 extern gnutls_session_t ssl_negotiate(struct session *ses); 2765 2766 #endif 2767 2768 #ifndef __STRING_H__ 2769 #define __STRING_H__ 2770 2771 extern int get_raw_len_str_range_str_width(struct session *ses, char *str, int start, int end, int *raw_width); 2772 extern int get_raw_off_str_range_raw_width(struct session *ses, char *str, int start, int end, int *raw_width); 2773 2774 extern int raw_len_str(struct session *ses, char *str, int start, int end); 2775 extern int str_len_raw(struct session *ses, char *str, int start, int end); 2776 2777 extern char *str_ins_str(struct session *ses, char **str, char *ins, int str_start, int str_end); 2778 2779 extern char *calign(struct session *ses, char *in, char *out, int width); 2780 extern char *lalign(struct session *ses, char *in, char *out, int width); 2781 extern char *ralign(struct session *ses, char *in, char *out, int width); 2782 extern char *ualign(struct session *ses, char *in, char *out, int width); 2783 2784 extern char char_cmp(char left, char right); 2785 2786 extern char is_alnum(char input); 2787 extern char is_alpha(char input); 2788 extern char is_digit(char input); 2789 extern char is_hex(char input); 2790 extern char is_print(char input); 2791 extern char is_space(char input); 2792 extern char is_varchar(char input); 2793 extern char is_csichar(char input); 2794 2795 #endif 2796 2797 #ifndef __SUBSTITUTE_H__ 2798 #define __SUBSTITUTE_H__ 2799 2800 extern int valid_escape(struct session *ses, char *arg); 2801 extern char *fuzzy_color_code(struct session *ses, char *pti); 2802 extern char *dim_color_code(struct session *ses, char *pti, int mod); 2803 extern char *lit_color_code(struct session *ses, char *pti, int mod); 2804 extern int color_gradient(char *pti, int low, int max); 2805 extern int is_color_code(char *str); 2806 extern int is_color_name(char *str); 2807 extern int substitute_color(char *input, char *output, int colors); 2808 2809 #endif 2810 2811 #ifndef __SYSTEM_H__ 2812 #define __SYSTEM_H__ 2813 2814 extern DO_COMMAND(do_suspend); 2815 2816 #endif 2817 2818 2819 #ifndef __TABLES_H__ 2820 #define __TABLES_H__ 2821 2822 extern struct buffer_type buffer_table[]; 2823 extern struct charset_type charset_table[]; 2824 extern struct chat_type chat_table[]; 2825 extern char character_table[]; 2826 extern struct color_type color_table[]; 2827 extern struct color_type map_color_table[]; 2828 extern struct config_type config_table[]; 2829 extern struct cursor_type cursor_table[]; 2830 extern struct daemon_type daemon_table[]; 2831 extern struct edit_type edit_table[]; 2832 extern struct event_type event_table[]; 2833 extern struct history_type history_table[]; 2834 extern struct line_type line_table[]; 2835 extern struct list_type list_table[LIST_MAX]; 2836 extern struct map_type map_table[]; 2837 extern struct path_type path_table[]; 2838 extern struct port_type port_table[]; 2839 extern struct rank_type rank_table[]; 2840 extern struct stamp_type huge_stamp_table[]; 2841 extern struct substitution_type substitution_table[]; 2842 extern struct telopt_type telopt_table[]; 2843 extern char *telcmds[]; 2844 extern struct timer_type timer_table[]; 2845 extern struct map_legend_type map_legend_table[]; 2846 extern struct map_legend_group_type map_legend_group_table[]; 2847 2848 #endif 2849 2850 2851 #ifndef __TELOPT_H__ 2852 #define __TELOPT_H__ 2853 2854 extern int client_translate_telopts(struct session *ses, unsigned char *src, int cplen); 2855 extern int client_write_compressed(struct session *ses, char *txt, int length); 2856 extern int client_send_sb_naws(struct session *ses, int cplen, unsigned char *cpsrc); 2857 extern void announce_support(struct session *ses, struct port_data *buddy); 2858 extern int server_translate_telopts(struct session *ses, struct port_data *buddy, unsigned char *src, int srclen, unsigned char *out, int outlen); 2859 extern void write_mccp2(struct session *ses, struct port_data *buddy, char *txt, int length); 2860 extern void client_end_mccp2(struct session *ses); 2861 extern void end_mccp2(struct session *ses, struct port_data *buddy); 2862 extern void client_end_mccp3(struct session *ses); 2863 extern void end_mccp3(struct session *ses, struct port_data *buddy); 2864 extern void init_msdp_table(void); 2865 2866 #endif 2867 2868 2869 #ifndef __TERMINAL_H__ 2870 #define __TERMINAL_H__ 2871 2872 extern void init_terminal(struct session *ses); 2873 extern void reset_terminal(struct session *ses); 2874 extern void save_session_terminal(struct session *ses); 2875 extern void refresh_session_terminal(struct session *ses); 2876 extern void echo_on(struct session *ses); 2877 extern void echo_off(struct session *ses); 2878 extern void init_terminal_size(struct session *ses); 2879 extern int get_scroll_rows(struct session *ses); 2880 extern int get_scroll_cols(struct session *ses); 2881 extern char *get_charset(struct session *ses); 2882 2883 #endif 2884 2885 2886 #ifndef __TEXT_H__ 2887 #define __TEXT_H__ 2888 2889 extern void print_line(struct session *ses, char **str, int isaprompt); 2890 extern void print_stdout(int row, int col, char *format, ...); 2891 extern int word_wrap(struct session *ses, char *textin, char *textout, int display, int *height, int *width); 2892 extern int word_wrap_split(struct session *ses, char *textin, char *textout, int wrap, int start, int end, int flags, int *height, int *width); 2893 2894 #endif 2895 2896 2897 2898 2899 #ifndef __TINEXP_H__ 2900 #define __TINEXP_H__ 2901 2902 DO_COMMAND(do_regexp); 2903 2904 extern int substitute(struct session *ses, char *string, char *result, int flags); 2905 extern int match(struct session *ses, char *str, char *exp, int flags); 2906 extern int find(struct session *ses, char *str, char *exp, int sub, int flag); 2907 extern int regexp_compare(struct session *ses, pcre *regex, char *str, char *exp, int option, int flag); 2908 extern int check_one_regexp(struct session *ses, struct listnode *node, char *line, char *original, int option); 2909 extern int tintin_regexp_check(struct session *ses, char *exp); 2910 extern int tintin_regexp(struct session *ses, pcre *pcre, char *str, char *exp, int option, int flag); 2911 extern pcre *regexp_compile(struct session *ses, char *exp, int option); 2912 extern pcre *tintin_regexp_compile(struct session *ses, struct listnode *node, char *exp, int option); 2913 extern void tintin_macro_compile(char *input, char *output); 2914 2915 #endif 2916 2917 2918 #ifndef __TOKENIZE_H__ 2919 #define __TOKENIZE_H__ 2920 2921 extern void init_local(struct session *ses); 2922 extern struct scriptroot *push_script_stack(struct session *ses, int list); 2923 extern void pop_script_stack(); 2924 extern struct listroot *local_list(struct session *ses); 2925 extern struct session *script_driver(struct session *ses, int list, char *str); 2926 extern char *view_script(struct session *ses, struct scriptroot *root); 2927 extern char *script_writer(struct session *ses, char *str); 2928 extern char *script_viewer(struct session *ses, char *str); 2929 #endif 2930 2931 2932 #ifndef __TRIGGER_H__ 2933 #define __TRIGGER_H__ 2934 2935 extern DO_COMMAND(do_delay); 2936 2937 extern void check_all_actions(struct session *ses, char *original, char *line, char *buf); 2938 extern int check_all_aliases(struct session *ses, char *input); 2939 extern void check_all_buttons(struct session *ses, short row, short col, char *arg1, char *arg2, char *word, char *line); 2940 extern void check_all_gags(struct session *ses, char *original, char *line); 2941 extern void check_all_highlights(struct session *ses, char *original, char *line); 2942 extern int check_all_prompts(struct session *ses, char *original, char *line); 2943 extern void check_all_substitutions(struct session *ses, char *original, char *line); 2944 2945 #endif 2946 2947 // update.c 2948 2949 extern void mainloop(void); 2950 extern void show_cpu(struct session *ses); 2951 2952 2953 #ifndef __UTILS_H__ 2954 #define __UTILS_H__ 2955 2956 2957 2958 extern int is_number(char *str); 2959 extern unsigned long long hex_number_64bit(char *str); 2960 extern unsigned int hex_number_32bit(char *str); 2961 extern int hex_number_8bit(char *str); 2962 extern int oct_number(char *str); 2963 extern int unicode_8_bit(char *str, char *out); 2964 extern int unicode_12_bit(char *str, char *out); 2965 extern int unicode_16_bit(char *str, char *out); 2966 extern int unicode_20_bit(char *str, char *out); 2967 extern int unicode_21_bit(char *str, char *out); 2968 extern unsigned long long utime(void); 2969 extern time_t get_time(struct session *ses, char *str); 2970 extern char *str_time(struct session *ses, char *format, time_t time); 2971 extern unsigned long long generate_rand(struct session *ses); 2972 extern void seed_rand(struct session *ses, unsigned long long seed); 2973 extern char *capitalize(char *str); 2974 extern char *ftos(float number); 2975 extern char *ntos(long long number); 2976 extern char *indent_one(int len); 2977 extern char *indent(int len); 2978 extern int cat_sprintf(char *dest, char *fmt, ...); 2979 extern void ins_sprintf(char *dest, char *fmt, ...); 2980 extern char *str_ins_printf(char **str, int index, char *fmt, ...); 2981 extern int is_suffix(char *str1, char *str2); 2982 2983 2984 2985 #endif 2986 2987 2988 #ifndef __UTF8_H__ 2989 #define __UTF8_H__ 2990 2991 extern void big5toutf8_info(struct session *ses); 2992 extern void utf8tobig5_info(struct session *ses); 2993 2994 extern int get_ascii_width(char *str, int *width); 2995 2996 extern int is_utf8_head(char *str); 2997 extern int is_utf8_tail(char *str); 2998 extern int get_utf8_size(char *str); 2999 extern int get_utf8_width(char *str, int *width, int *index); 3000 extern int get_utf8_index(char *str, int *index); 3001 extern int unicode_to_utf8(int index, char *out); 3002 extern int utf8_strlen(char *str, int *width); 3003 3004 extern int utf8_to_all(struct session *ses, char *in, char *out); 3005 extern int all_to_utf8(struct session *ses, char *in, char *out); 3006 extern int cp1251_to_utf8(char *input, char *output); 3007 extern int utf8_to_cp1251(char *input, char *output); 3008 extern int iso1_to_utf8(char *input, char *output); 3009 extern int utf8_to_iso1(char *input, char *output); 3010 extern int iso2_to_utf8(char *input, char *output); 3011 extern int utf8_to_iso2(char *input, char *output); 3012 extern int koi8_to_utf8(char *input, char *output); 3013 extern int utf8_to_koi8(char *input, char *output); 3014 extern int fansi_to_utf8(char *input, char *output); 3015 extern int is_euc_head(struct session *ses, char *str); 3016 extern int get_euc_size(struct session *ses, char *str); 3017 extern int get_euc_width(struct session *ses, char *str, int *width); 3018 extern int is_big5(char *str); 3019 extern int big5_to_utf8(char *input, char *output); 3020 extern int utf8_to_big5(char *input, char *output); 3021 extern int is_gbk1(char *str); 3022 extern int gbk1_to_utf8(char *input, char *output); 3023 extern int utf8_to_gbk1(char *input, char *output); 3024 extern int is_cp949(char *str); 3025 extern int cp949_to_utf8(char *input, char *output); 3026 extern int utf8_to_cp949(char *input, char *output); 3027 3028 #endif 3029 3030 #ifndef __VARIABLE_H__ 3031 #define __VARIABLE_H__ 3032 3033 extern int valid_variable(struct session *ses, char *arg); 3034 extern int string_raw_str_len(struct session *ses, char *str, int start, int end); 3035 extern int string_str_raw_len(struct session *ses, char *str, int start, int end); 3036 extern int translate_color_names(struct session *ses, char *string, char *result); 3037 extern int get_color_names(struct session *ses, char *htype, char *result); 3038 extern void lowerstring(char *str); 3039 extern void upperstring(char *str); 3040 extern void numbertocharacter(struct session *ses, char *str); 3041 extern void charactertonumber(struct session *ses, char *str); 3042 extern int delete_variable(struct session *ses, char *variable); 3043 extern void justify_string(struct session *ses, char *in, char *out, int align, int cut); 3044 extern void format_string(struct session *ses, char *format, char *arg, char *out); 3045 extern struct listnode *search_variable(struct session *ses, char *variable); 3046 extern struct listnode *get_variable(struct session *ses, char *variable, char *result); 3047 extern struct listnode *set_variable(struct session *ses, char *variable, char *format, ...); 3048 3049 3050 #endif 3051 3052 3053 #ifndef __VT102_H__ 3054 #define __VT102_H__ 3055 3056 extern void init_pos(struct session *ses, int row, int col); 3057 extern void hide_cursor(struct session *ses); 3058 extern void show_cursor(struct session *ses); 3059 extern void save_pos(struct session *ses); 3060 extern void goto_pos(struct session *ses, int row, int col); 3061 extern void restore_pos(struct session *ses); 3062 extern void erase_cols(int cnt); 3063 extern void erase_scroll_region(struct session *ses); 3064 extern void reset(struct session *ses); 3065 extern void scroll_region(struct session *ses, int top, int bottom); 3066 extern void reset_scroll_region(struct session *ses); 3067 extern int find_color_code(char *str); 3068 extern int find_escaped_color_code(char *str); 3069 extern int find_secure_color_code(char *str); 3070 extern int get_vt102_width(struct session *ses, char *str, int *width); 3071 extern int strip_vt102_width(struct session *ses, char *str, int *width); 3072 extern int skip_vt102_codes(char *str); 3073 extern int skip_vt102_codes_non_graph(char *str); 3074 extern int strip_vt102_codes(char *str, char *buf); 3075 extern void strip_vt102_codes_non_graph(char *str, char *buf); 3076 extern void strip_non_vt102_codes(char *str, char *buf); 3077 extern void get_color_codes(char *old, char *str, char *buf, int flags); 3078 extern int strip_vt102_strlen(struct session *ses, char *str); 3079 extern int strip_color_strlen(struct session *ses, char *str); 3080 extern char *strip_vt102_strstr(char *str, char *buf, int *len); 3081 extern int interpret_vt102_codes(struct session *ses, char *str, int real); 3082 extern int catch_vt102_codes(struct session *ses, unsigned char *str, int cplen); 3083 3084 #endif 3085