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 Wed Mar 24 00:57:41 2010 *************** *** 972,977 **** --- 972,983 ---- (n>2 ? opdstd(n-2) : "")); return newint(i); + #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 Wed Mar 24 00:58:09 2010 *************** *** 62,67 **** --- 62,70 ---- 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 Wed Mar 24 01:00:18 2010 *************** *** 158,163 **** --- 158,164 ---- #define TFMAILPATH getstdvar(VAR_TFMAILPATH) #define alert_attr getattrvar(VAR_alert_attr) #define alert_time gettimevar(VAR_alert_time) + #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:59:41 2010 *************** *** 28,33 **** --- 28,36 ---- 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 Wed Mar 24 00:58:52 2010 *************** *** 436,441 **** --- 436,443 ---- /* 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 */ + /* 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 **** --- 610,616 ---- telnet_label[(UCHAR)TN_CHARSET] = "CHARSET"; telnet_label[(UCHAR)TN_COMPRESS] = "COMPRESS"; telnet_label[(UCHAR)TN_COMPRESS2] = "COMPRESS2"; + 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 **** --- 2442,2460 ---- return result; } + #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 **** --- 2841,2851 ---- } xsock->flags |= SOCKCOMPRESS; break; + #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 **** --- 3149,3157 ---- (rawchar == TN_COMPRESS && mccp) || (rawchar == TN_COMPRESS2 && mccp) || #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 Wed Mar 24 00:59:04 2010 *************** *** 45,50 **** --- 45,53 ---- extern int local_echo(int flag); extern int handle_send_function(conString *string, const char *world, const char *flags); + #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 Wed Mar 24 00:59:26 2010 *************** *** 94,99 **** --- 94,100 ---- #define NO_PROCESS 0 #define NO_FLOAT 0 #define NCOLORS 16 + #define ENABLE_OPTION102 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 Wed Mar 24 01:00:00 2010 *************** *** 43,48 **** --- 43,53 ---- 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_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