diff -c /tmp/original/tf-50b8/src/expr.c /tmp/tf-50b8/src/expr.c *** /tmp/original/tf-50b8/src/expr.c Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/expr.c Tue Mar 23 01:28:28 2010 *************** *** 972,977 **** --- 972,989 ---- (n>2 ? opdstd(n-2) : "")); return newint(i); + #if ENABLE_ATCP + case FN_atcp: + i = handle_atcp_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL)); + return newint(i); + #endif + + #if ENABLE_OPTION102 + case FN_option102: + i = handle_option102_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL)); + return newint(i); + #endif + case FN_fake_recv: i = handle_fake_recv_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL), (n>2 ? opdstd(n-2) : "")); diff -c /tmp/original/tf-50b8/src/funclist.h /tmp/tf-50b8/src/funclist.h *** /tmp/original/tf-50b8/src/funclist.h Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/funclist.h Tue Mar 23 01:26:02 2010 *************** *** 17,22 **** --- 17,25 ---- funccode(ascii, 1, 1, 1), funccode(asin, 1, 1, 1), funccode(atan, 1, 1, 1), + #if ENABLE_ATCP + funccode(atcp, 0, 1, 2), + #endif funccode(char, 1, 1, 1), funccode(columns, 0, 0, 0), funccode(cos, 1, 1, 1), *************** *** 62,67 **** --- 65,73 ---- funccode(nlog, 0, 0, 0), funccode(nmail, 0, 0, 0), funccode(nread, 0, 0, 0), + #if ENABLE_OPTION102 + funccode(option102, 0, 1, 2), + #endif funccode(pad, 1, 1, (unsigned)-1), funccode(pow, 1, 2, 2), funccode(prompt, 0, 1, 1), diff -c /tmp/original/tf-50b8/src/globals.h /tmp/tf-50b8/src/globals.h *** /tmp/original/tf-50b8/src/globals.h Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/globals.h Mon Mar 22 02:33:37 2010 *************** *** 158,163 **** --- 158,165 ---- #define TFMAILPATH getstdvar(VAR_TFMAILPATH) #define alert_attr getattrvar(VAR_alert_attr) #define alert_time gettimevar(VAR_alert_time) + #define atcp getintvar(VAR_atcp) + #define OPTION102 getintvar(VAR_OPTION102) #define auto_fg getintvar(VAR_auto_fg) #define background getintvar(VAR_background) #define backslash getintvar(VAR_backslash) diff -c /tmp/original/tf-50b8/src/hooklist.h /tmp/tf-50b8/src/hooklist.h *** /tmp/original/tf-50b8/src/hooklist.h Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/hooklist.h Wed Mar 24 00:12:51 2010 *************** *** 12,17 **** --- 12,20 ---- */ gencode(ACTIVITY, HT_ALERT | HT_XSOCK), + #if ENABLE_ATCP + gencode(ATCP, 0), + #endif gencode(BAMF, HT_WORLD | HT_XSOCK), gencode(BGTEXT, 0), gencode(BGTRIG, HT_ALERT | HT_XSOCK), *************** *** 28,33 **** --- 31,39 ---- gencode(MAIL, HT_ALERT), gencode(MORE, 0), gencode(NOMACRO, 0), + #if ENABLE_OPTION102 + gencode(OPTION102, 0), + #endif gencode(PENDING, HT_WORLD | HT_XSOCK), gencode(PREACTIVITY, 0), gencode(PROCESS, 0), diff -c /tmp/original/tf-50b8/src/socket.c /tmp/tf-50b8/src/socket.c *** /tmp/original/tf-50b8/src/socket.c Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/socket.c Tue Mar 23 01:29:32 2010 *************** *** 436,441 **** --- 436,445 ---- /* 85 & 86 are not standard. See http://www.randomly.org/projects/MCCP/ */ #define TN_COMPRESS ((char)85) /* MCCP v1 */ #define TN_COMPRESS2 ((char)86) /* MCCP v2 */ + /* 200 is not standard. See http://www.ironrealms.com/rapture/manual/files/FeatATCP-txt.html */ + #define TN_ATCP ((char)200) /* ATCP */ + /* 102 is not standard. See http://www.aardwolf.com/blog/category/technical */ + #define TN_102 ((char)102) /* Option 102 */ #define UCHAR unsigned char *************** *** 608,613 **** --- 612,619 ---- telnet_label[(UCHAR)TN_CHARSET] = "CHARSET"; telnet_label[(UCHAR)TN_COMPRESS] = "COMPRESS"; telnet_label[(UCHAR)TN_COMPRESS2] = "COMPRESS2"; + telnet_label[(UCHAR)TN_ATCP] = "ATCP"; + telnet_label[(UCHAR)TN_102] = "102"; telnet_label[(UCHAR)TN_EOR] = "EOR"; telnet_label[(UCHAR)TN_SE] = "SE"; telnet_label[(UCHAR)TN_NOP] = "NOP"; *************** *** 2439,2444 **** --- 2445,2476 ---- return result; } + #if ENABLE_ATCP + int handle_atcp_function(conString *string, const char *world) + { + Sock *old_xsock = xsock; + + xsock = (!world || !*world) ? xsock : find_sock(world); + Sprintf(telbuf, "%c%c%c%s%c%c", TN_IAC, TN_SB, TN_ATCP, string->data, TN_IAC, TN_SE); + telnet_send(telbuf); + xsock = old_xsock; + return 1; + } + #endif + + #if ENABLE_OPTION102 + int handle_option102_function(conString *string, const char *world) + { + Sock *old_xsock = xsock; + + xsock = (!world || !*world) ? xsock : find_sock(world); + Sprintf(telbuf, "%c%c%c%s%c%c", TN_IAC, TN_SB, TN_102, string->data, TN_IAC, TN_SE); + telnet_send(telbuf); + xsock = old_xsock; + return 1; + } + #endif + int handle_fake_recv_function(conString *string, const char *world, const char *flags) { *************** *** 2825,2830 **** --- 2857,2872 ---- } xsock->flags |= SOCKCOMPRESS; break; + #if ENABLE_ATCP + case TN_ATCP: + do_hook(H_ATCP, NULL, "%s", xsock->subbuffer->data + 3); + break; + #endif + #if ENABLE_OPTION102 + case TN_102: + do_hook(H_OPTION102, NULL, "%s", xsock->subbuffer->data + 3); + break; + #endif default: no_reply("unknown option"); break; *************** *** 3128,3133 **** --- 3170,3181 ---- (rawchar == TN_COMPRESS && mccp) || (rawchar == TN_COMPRESS2 && mccp) || #endif + #if ENABLE_ATCP + (rawchar == TN_ATCP && atcp) || + #endif + #if ENABLE_OPTION102 + (rawchar == TN_102 && 102) || + #endif rawchar == TN_ECHO || rawchar == TN_SEND_EOR || rawchar == TN_BINARY) /* accept any of these */ diff -c /tmp/original/tf-50b8/src/socket.h /tmp/tf-50b8/src/socket.h *** /tmp/original/tf-50b8/src/socket.h Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/socket.h Tue Mar 23 01:26:37 2010 *************** *** 45,50 **** --- 45,56 ---- extern int local_echo(int flag); extern int handle_send_function(conString *string, const char *world, const char *flags); + #if ENABLE_ATCP + extern int handle_atcp_function(conString *string, const char *world); + #endif + #if ENABLE_OPTION102 + extern int handle_option102_function(conString *string, const char *world); + #endif extern int handle_fake_recv_function(conString *string, const char *world, const char *flags); extern int is_connected(const char *worldname); diff -c /tmp/original/tf-50b8/src/tfconfig.h.in /tmp/tf-50b8/src/tfconfig.h.in *** /tmp/original/tf-50b8/src/tfconfig.h.in Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/tfconfig.h.in Sun Mar 21 23:57:31 2010 *************** *** 94,99 **** --- 94,100 ---- #define NO_PROCESS 0 #define NO_FLOAT 0 #define NCOLORS 16 + #define ENABLE_ATCP 0 #define HAVE_MCCP (HAVE_ZLIB_H && HAVE_LIBZ) diff -c /tmp/original/tf-50b8/src/varlist.h /tmp/tf-50b8/src/varlist.h *** /tmp/original/tf-50b8/src/varlist.h Sat Jan 13 18:12:39 2007 --- /tmp/tf-50b8/src/varlist.h Mon Mar 22 02:33:58 2010 *************** *** 43,48 **** --- 43,58 ---- varstrx(VAR_TZ, "TZ", NULL, ch_timezone) varstr (VAR_alert_attr, "alert_attr", "Br", ch_attr) vartime(VAR_alert_time, "alert_time", 5,0, NULL) + #if ENABLE_ATCP + varflag(VAR_atcp, "atcp", TRUE, NULL) + #else + varenum(VAR_atcp, "atcp", FALSE, NULL, enum_off) + #endif + #if ENABLE_OPTION102 + varflag(VAR_OPTION102, "option102", TRUE, NULL) + #else + varenum(VAR_OPTION102, "option102", FALSE, NULL, enum_off) + #endif #if 0 varflag(VAR_auto_fg, "auto_fg", FALSE, NULL) #endif