/* X-Chat * Copyright (C) 1998 Peter Zelezny. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #ifdef HAVE_STRINGS_H #include #endif #ifdef WIN32 #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #else #include #include #endif #include #include #include #include "../common/xchat.h" #include "../common/xchatc.h" #include "../common/cfgfiles.h" #include "../common/outbound.h" #include "../common/util.h" #include "../common/fe.h" #include "fe-text.h" static int done = FALSE; /* finished ? */ static void send_command (char *cmd) { handle_multiline (current_tab, cmd, TRUE, FALSE); } static gboolean handle_line (GIOChannel *channel, GIOCondition cond, gpointer data) { gchar *str_return; gsize length, terminator_pos; GError *error = NULL; GIOStatus result; result = g_io_channel_read_line(channel, &str_return, &length, &terminator_pos, &error); if (result == G_IO_STATUS_ERROR) { return FALSE; } else { send_command(str_return); g_free(str_return); return TRUE; } } static int done_intro = 0; void fe_new_window (struct session *sess, int focus) { char buf[512]; sess->gui = malloc (4); current_sess = sess; if (!sess->server->front_session) sess->server->front_session = sess; if (!sess->server->server_session) sess->server->server_session = sess; if (!current_tab || focus) current_tab = sess; if (done_intro) return; done_intro = 1; snprintf (buf, sizeof (buf), "\n" " \017XChat-Text \00310"PACKAGE_VERSION"\n" " \017Running on \00310%s \017glib \00310%d.%d.%d\n" " \017This binary compiled \00310"__DATE__"\017\n", get_cpu_str(), glib_major_version, glib_minor_version, glib_micro_version); fe_print_text (sess, buf, 0); fe_print_text (sess, "\n\nCompiled in Features\0032:\017 " #ifdef USE_PLUGIN "Plugin " #endif #ifdef ENABLE_NLS "NLS " #endif #ifdef USE_OPENSSL "OpenSSL " #endif #ifdef USE_IPV6 "IPv6" #endif "\n\n", 0); fflush (stdout); fflush (stdin); } static int get_stamp_str (time_t tim, char *dest, int size) { return strftime (dest, size, prefs.stamp_format, localtime (&tim)); } static int timecat (char *buf, time_t stamp) { char stampbuf[64]; /* set the stamp to the current time if not provided */ if (!stamp) stamp = time (0); get_stamp_str (stamp, stampbuf, sizeof (stampbuf)); strcat (buf, stampbuf); return strlen (stampbuf); } /* Windows doesn't handle ANSI codes in cmd.exe, need to not display them */ #ifndef WIN32 /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ static const short colconv[] = { 0, 7, 4, 2, 1, 3, 5, 11, 13, 12, 6, 16, 14, 15, 10, 7 }; void fe_print_text (struct session *sess, char *text, time_t stamp) { int dotime = FALSE; char num[8]; int reverse = 0, under = 0, bold = 0, comma, k, i = 0, j = 0, len = strlen (text); unsigned char *newtext = malloc (len + 1024); if (prefs.timestamp) { newtext[0] = 0; j += timecat (newtext, stamp); } while (i < len) { if (dotime && text[i] != 0) { dotime = FALSE; newtext[j] = 0; j += timecat (newtext, stamp); } switch (text[i]) { case 3: i++; if (!isdigit (text[i])) { newtext[j] = 27; j++; newtext[j] = '['; j++; newtext[j] = 'm'; j++; goto endloop; } k = 0; comma = FALSE; while (i < len) { if (text[i] >= '0' && text[i] <= '9' && k < 2) { num[k] = text[i]; k++; } else { int col, mirc; num[k] = 0; newtext[j] = 27; j++; newtext[j] = '['; j++; if (k == 0) { newtext[j] = 'm'; j++; } else { if (comma) col = 40; else col = 30; mirc = atoi (num); mirc = colconv[mirc]; if (mirc > 9) { mirc += 50; sprintf ((char *) &newtext[j], "%dm", mirc + col); } else { sprintf ((char *) &newtext[j], "%dm", mirc + col); } j = strlen (newtext); } switch (text[i]) { case ',': comma = TRUE; break; default: goto endloop; } k = 0; } i++; } break; /* don't actually want hidden text */ case '\010': /* hidden */ break; case '\026': /* REVERSE */ if (reverse) { reverse = FALSE; strcpy (&newtext[j], "\033[27m"); }
/*

  Copyright (c) 2010 Samuel Lidén Borell <samuel@kodafritt.se>

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.

*/

#ifndef FISH_H
#define FISH_H

#include <stddef.h>

#include <glib.h>

char *fish_encrypt(const char *key, size_t keylen, const char *message);
char *fish_decrypt(const char *key, size_t keylen, const char *data);
char *fish_encrypt_for_nick(const char *nick, const char *data);
char *fish_decrypt_from_nick(const char *nick, const char *data);

#endif
wory about */ case FE_GUI_FOCUS: current_sess = sess; current_tab = sess; sess->server->front_session = sess; break; default: break; } } int fe_gui_info (session *sess, int info_type) { return -1; } void * fe_gui_info_ptr (session *sess, int info_type) { return NULL; } void fe_confirm (const char *message, void (*yesproc)(void *), void (*noproc)(void *), void *ud) { } char *fe_get_inputbox_contents (struct session *sess) { return NULL; } void fe_set_inputbox_contents (struct session *sess, char *text) { } int fe_get_inputbox_cursor (struct session *sess) { return 0; } void fe_set_inputbox_cursor (struct session *sess, int delta, int pos) { } void fe_open_url (const char *url) { } void fe_menu_del (menu_entry *me) { } char *fe_menu_add (menu_entry *me) { return NULL; } void fe_menu_update (menu_entry *me) { } void fe_uselect (struct session *sess, char *word[], int do_clear, int scroll_to) { } void fe_server_event (server *serv, int type, int arg) { } void fe_flash_window (struct session *sess) { } void fe_get_file (const char *title, char *initial, void (*callback) (void *userdata, char *file), void *userdata, int flags) { } void fe_tray_set_flash (const char *filename1, const char *filename2, int timeout){} void fe_tray_set_file (const char *filename){} void fe_tray_set_icon (feicon icon){} void fe_tray_set_tooltip (const char *text){} void fe_tray_set_balloon (const char *title, const char *text){} void fe_userlist_update (session *sess, struct User *user){}