mirror of
https://github.com/weechat/weechat.git
synced 2026-07-08 02:33:12 +02:00
First CVS upload.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
# WeeChat with Curses interface
|
||||
ifeq ($(GUI), curses)
|
||||
curses: curses/gui.a
|
||||
curses/gui.a:
|
||||
cd curses && make
|
||||
endif
|
||||
|
||||
# WeeChat with Gtk+ interface
|
||||
ifeq ($(GUI), gtk)
|
||||
gtk: gtk/gui.a
|
||||
gtk/gui.a:
|
||||
cd gtk && make
|
||||
endif
|
||||
|
||||
# WeeChat with Qt interface
|
||||
ifeq ($(GUI), qt)
|
||||
qt: qt/gui.a
|
||||
qt/gui.a:
|
||||
cd qt && make
|
||||
endif
|
||||
|
||||
# WeeChat with Text interface
|
||||
ifeq ($(GUI), text)
|
||||
text: text/gui.a
|
||||
text/gui.a:
|
||||
cd text && make
|
||||
endif
|
||||
|
||||
|
||||
all:
|
||||
make curses GUI=curses
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~ core
|
||||
cd curses && make clean
|
||||
cd gtk && make clean
|
||||
cd qt && make clean
|
||||
cd text && make clean
|
||||
@@ -0,0 +1,38 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
CC=gcc
|
||||
|
||||
OPTIONS=-Wall -W -pipe -O2
|
||||
|
||||
OUTPUT=../gui.a
|
||||
OBJS=gui-display.o gui-input.o
|
||||
DEFINES=WEE_CURSES
|
||||
|
||||
all: $(OBJS)
|
||||
ar r $(OUTPUT) $(OBJS)
|
||||
|
||||
$(OBJS):
|
||||
$(CC) $(OPTIONS) -o $@ -c $< $(INCLUDES) -D$(DEFINES)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~ core
|
||||
|
||||
gui-display.o: gui-display.c ../../weechat.h ../gui.h ../../completion.h \
|
||||
../../history.h ../../config.h ../../irc/irc.h ../../gui/gui.h
|
||||
gui-input.o: gui-input.c ../../weechat.h ../gui.h ../../completion.h \
|
||||
../../history.h ../../command.h ../../irc/irc.h ../../gui/gui.h
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,541 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
/* gui-input: user input functions for Curses GUI */
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <curses.h>
|
||||
|
||||
#include "../../weechat.h"
|
||||
#include "../gui.h"
|
||||
#include "../../config.h"
|
||||
#include "../../command.h"
|
||||
#include "../../irc/irc.h"
|
||||
|
||||
|
||||
/*
|
||||
* gui_optimize_input_buffer_size: optimize input buffer size by adding
|
||||
* or deleting data block (predefined size)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_optimize_input_buffer_size (t_gui_window *window)
|
||||
{
|
||||
int optimal_size;
|
||||
|
||||
optimal_size = ((window->input_buffer_size / INPUT_BUFFER_BLOCK_SIZE) *
|
||||
INPUT_BUFFER_BLOCK_SIZE) + INPUT_BUFFER_BLOCK_SIZE;
|
||||
if (window->input_buffer_alloc != optimal_size)
|
||||
{
|
||||
window->input_buffer_alloc = optimal_size;
|
||||
window->input_buffer = realloc (window->input_buffer, optimal_size);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_delete_previous_word: delete previous word
|
||||
*/
|
||||
|
||||
void
|
||||
gui_delete_previous_word ()
|
||||
{
|
||||
int i, j, num_char_deleted, num_char_end;
|
||||
|
||||
if (gui_current_window->input_buffer_pos > 0)
|
||||
{
|
||||
i = gui_current_window->input_buffer_pos - 1;
|
||||
while ((i >= 0) &&
|
||||
(gui_current_window->input_buffer[i] == ' '))
|
||||
i--;
|
||||
if (i >= 0)
|
||||
{
|
||||
while ((i >= 0) &&
|
||||
(gui_current_window->input_buffer[i] != ' '))
|
||||
i--;
|
||||
if (i >= 0)
|
||||
{
|
||||
while ((i >= 0) &&
|
||||
(gui_current_window->input_buffer[i] == ' '))
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= 0)
|
||||
i++;
|
||||
i++;
|
||||
num_char_deleted = gui_current_window->input_buffer_pos - i;
|
||||
num_char_end = gui_current_window->input_buffer_size -
|
||||
gui_current_window->input_buffer_pos;
|
||||
|
||||
for (j = 0; j < num_char_end; j++)
|
||||
gui_current_window->input_buffer[i + j] =
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_pos + j];
|
||||
|
||||
gui_current_window->input_buffer_size -= num_char_deleted;
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
gui_current_window->input_buffer_pos = i;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->completion.position = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_move_previous_word: move to beginning of previous word
|
||||
*/
|
||||
|
||||
void
|
||||
gui_move_previous_word ()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gui_current_window->input_buffer_pos > 0)
|
||||
{
|
||||
i = gui_current_window->input_buffer_pos - 1;
|
||||
while ((i >= 0) &&
|
||||
(gui_current_window->input_buffer[i] == ' '))
|
||||
i--;
|
||||
if (i < 0)
|
||||
gui_current_window->input_buffer_pos = 0;
|
||||
else
|
||||
{
|
||||
while ((i >= 0) &&
|
||||
(gui_current_window->input_buffer[i] != ' '))
|
||||
i--;
|
||||
gui_current_window->input_buffer_pos = i + 1;
|
||||
}
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_move_next_word: move to the end of next
|
||||
*/
|
||||
|
||||
void
|
||||
gui_move_next_word ()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gui_current_window->input_buffer_pos <
|
||||
gui_current_window->input_buffer_size + 1)
|
||||
{
|
||||
i = gui_current_window->input_buffer_pos;
|
||||
while ((i <= gui_current_window->input_buffer_size) &&
|
||||
(gui_current_window->input_buffer[i] == ' '))
|
||||
i++;
|
||||
if (i > gui_current_window->input_buffer_size)
|
||||
gui_current_window->input_buffer_pos = i - 1;
|
||||
else
|
||||
{
|
||||
while ((i <= gui_current_window->input_buffer_size) &&
|
||||
(gui_current_window->input_buffer[i] != ' '))
|
||||
i++;
|
||||
if (i > gui_current_window->input_buffer_size)
|
||||
gui_current_window->input_buffer_pos =
|
||||
gui_current_window->input_buffer_size;
|
||||
else
|
||||
gui_current_window->input_buffer_pos = i;
|
||||
|
||||
}
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_insert_string: insert a string into the input buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_insert_string (char *string, int pos)
|
||||
{
|
||||
int i, start, end, length;
|
||||
|
||||
length = strlen (string);
|
||||
|
||||
/* increase buffer size */
|
||||
gui_current_window->input_buffer_size += length;
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
|
||||
/* move end of string to the right */
|
||||
start = pos + length;
|
||||
end = gui_current_window->input_buffer_size - 1;
|
||||
for (i = end; i >= start; i--)
|
||||
gui_current_window->input_buffer[i] =
|
||||
gui_current_window->input_buffer[i - length];
|
||||
|
||||
/* insert new string */
|
||||
strncpy (gui_current_window->input_buffer + pos, string, length);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_read_keyb: read keyboard line
|
||||
*/
|
||||
|
||||
void
|
||||
gui_read_keyb ()
|
||||
{
|
||||
int key, i;
|
||||
t_gui_window *ptr_window;
|
||||
char new_char[2];
|
||||
|
||||
key = getch ();
|
||||
if (key != ERR)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
/* resize event: do nothing */
|
||||
case KEY_RESIZE:
|
||||
gui_redraw_window (gui_current_window);
|
||||
break;
|
||||
case KEY_F(6):
|
||||
gui_switch_to_previous_window ();
|
||||
break;
|
||||
/* next window */
|
||||
case KEY_F(7):
|
||||
gui_switch_to_next_window ();
|
||||
break;
|
||||
/* cursor up */
|
||||
case KEY_UP:
|
||||
if (gui_current_window->ptr_history)
|
||||
{
|
||||
gui_current_window->ptr_history =
|
||||
gui_current_window->ptr_history->next_history;
|
||||
if (!gui_current_window->ptr_history)
|
||||
gui_current_window->ptr_history =
|
||||
gui_current_window->history;
|
||||
}
|
||||
else
|
||||
gui_current_window->ptr_history =
|
||||
gui_current_window->history;
|
||||
if (gui_current_window->ptr_history)
|
||||
{
|
||||
gui_current_window->input_buffer_size =
|
||||
strlen (gui_current_window->ptr_history->text);
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->input_buffer_pos =
|
||||
gui_current_window->input_buffer_size;
|
||||
strcpy (gui_current_window->input_buffer,
|
||||
gui_current_window->ptr_history->text);
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* cursor down */
|
||||
case KEY_DOWN:
|
||||
if (gui_current_window->ptr_history)
|
||||
{
|
||||
gui_current_window->ptr_history =
|
||||
gui_current_window->ptr_history->prev_history;
|
||||
if (gui_current_window->ptr_history)
|
||||
gui_current_window->input_buffer_size =
|
||||
strlen (gui_current_window->ptr_history->text);
|
||||
else
|
||||
gui_current_window->input_buffer_size = 0;
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->input_buffer_pos =
|
||||
gui_current_window->input_buffer_size;
|
||||
if (gui_current_window->ptr_history)
|
||||
strcpy (gui_current_window->input_buffer,
|
||||
gui_current_window->ptr_history->text);
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* cursor left */
|
||||
case KEY_LEFT:
|
||||
if (gui_current_window->input_buffer_pos > 0)
|
||||
{
|
||||
gui_current_window->input_buffer_pos--;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* cursor right */
|
||||
case KEY_RIGHT:
|
||||
if (gui_current_window->input_buffer_pos <
|
||||
gui_current_window->input_buffer_size)
|
||||
{
|
||||
gui_current_window->input_buffer_pos++;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* home key */
|
||||
case KEY_HOME:
|
||||
if (gui_current_window->input_buffer_pos > 0)
|
||||
{
|
||||
gui_current_window->input_buffer_pos = 0;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* end key */
|
||||
case KEY_END:
|
||||
if (gui_current_window->input_buffer_pos <
|
||||
gui_current_window->input_buffer_size)
|
||||
{
|
||||
gui_current_window->input_buffer_pos =
|
||||
gui_current_window->input_buffer_size;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* page up */
|
||||
case KEY_PPAGE:
|
||||
gui_move_page_up ();
|
||||
break;
|
||||
/* page down */
|
||||
case KEY_NPAGE:
|
||||
gui_move_page_down ();
|
||||
break;
|
||||
/* erase before cursor and move cursor to the left */
|
||||
case 127:
|
||||
case KEY_BACKSPACE:
|
||||
if (gui_current_window->input_buffer_pos > 0)
|
||||
{
|
||||
i = gui_current_window->input_buffer_pos-1;
|
||||
while (gui_current_window->input_buffer[i])
|
||||
{
|
||||
gui_current_window->input_buffer[i] =
|
||||
gui_current_window->input_buffer[i+1];
|
||||
i++;
|
||||
}
|
||||
gui_current_window->input_buffer_size--;
|
||||
gui_current_window->input_buffer_pos--;
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
gui_draw_window_input (gui_current_window);
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->completion.position = -1;
|
||||
}
|
||||
break;
|
||||
/* Control + Backspace */
|
||||
case 0x08:
|
||||
gui_delete_previous_word ();
|
||||
break;
|
||||
/* erase char under cursor */
|
||||
case KEY_DC:
|
||||
if (gui_current_window->input_buffer_pos <
|
||||
gui_current_window->input_buffer_size)
|
||||
{
|
||||
i = gui_current_window->input_buffer_pos;
|
||||
while (gui_current_window->input_buffer[i])
|
||||
{
|
||||
gui_current_window->input_buffer[i] =
|
||||
gui_current_window->input_buffer[i+1];
|
||||
i++;
|
||||
}
|
||||
gui_current_window->input_buffer_size--;
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
gui_draw_window_input (gui_current_window);
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->completion.position = -1;
|
||||
}
|
||||
break;
|
||||
/* Tab : completion */
|
||||
case '\t':
|
||||
completion_search (&(gui_current_window->completion),
|
||||
CHANNEL(gui_current_window),
|
||||
gui_current_window->input_buffer,
|
||||
gui_current_window->input_buffer_size,
|
||||
gui_current_window->input_buffer_pos);
|
||||
if (gui_current_window->completion.word_found)
|
||||
{
|
||||
// replace word with new completed word into input buffer
|
||||
gui_current_window->input_buffer_size +=
|
||||
gui_current_window->completion.diff_size;
|
||||
gui_optimize_input_buffer_size (gui_current_window);
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
|
||||
if (gui_current_window->completion.diff_size > 0)
|
||||
{
|
||||
for (i = gui_current_window->input_buffer_size - 1;
|
||||
i >= gui_current_window->completion.position_replace +
|
||||
(int)strlen (gui_current_window->completion.word_found); i--)
|
||||
gui_current_window->input_buffer[i] =
|
||||
gui_current_window->input_buffer[i -
|
||||
gui_current_window->completion.diff_size];
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = gui_current_window->completion.position_replace +
|
||||
strlen (gui_current_window->completion.word_found);
|
||||
i < gui_current_window->input_buffer_size; i++)
|
||||
gui_current_window->input_buffer[i] =
|
||||
gui_current_window->input_buffer[i -
|
||||
gui_current_window->completion.diff_size];
|
||||
}
|
||||
|
||||
strncpy (gui_current_window->input_buffer + gui_current_window->completion.position_replace,
|
||||
gui_current_window->completion.word_found,
|
||||
strlen (gui_current_window->completion.word_found));
|
||||
gui_current_window->input_buffer_pos =
|
||||
gui_current_window->completion.position_replace +
|
||||
strlen (gui_current_window->completion.word_found);
|
||||
gui_current_window->completion.position =
|
||||
gui_current_window->input_buffer_pos;
|
||||
|
||||
/* add space or completor to the end of completion, if needed */
|
||||
if (gui_current_window->completion.base_word[0] == '/')
|
||||
{
|
||||
if (gui_current_window->input_buffer[gui_current_window->input_buffer_pos] != ' ')
|
||||
gui_buffer_insert_string (" ",
|
||||
gui_current_window->input_buffer_pos);
|
||||
gui_current_window->completion.position++;
|
||||
gui_current_window->input_buffer_pos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gui_current_window->completion.base_word_pos == 0)
|
||||
{
|
||||
if (strncmp (gui_current_window->input_buffer + gui_current_window->input_buffer_pos,
|
||||
cfg_look_completor, strlen (cfg_look_completor)) != 0)
|
||||
gui_buffer_insert_string (cfg_look_completor,
|
||||
gui_current_window->input_buffer_pos);
|
||||
gui_current_window->completion.position += strlen (cfg_look_completor);
|
||||
gui_current_window->input_buffer_pos += strlen (cfg_look_completor);
|
||||
if (gui_current_window->input_buffer[gui_current_window->input_buffer_pos] != ' ')
|
||||
gui_buffer_insert_string (" ",
|
||||
gui_current_window->input_buffer_pos);
|
||||
gui_current_window->completion.position++;
|
||||
gui_current_window->input_buffer_pos++;
|
||||
}
|
||||
}
|
||||
gui_draw_window_input (gui_current_window);
|
||||
}
|
||||
break;
|
||||
/* escape code (for control-key) */
|
||||
case KEY_ESCAPE:
|
||||
if ((key = getch()) != ERR)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case KEY_LEFT:
|
||||
gui_switch_to_previous_window ();
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
gui_switch_to_next_window ();
|
||||
break;
|
||||
case 79:
|
||||
/* TODO: replace 79 by constant name! */
|
||||
if (key == 79)
|
||||
{
|
||||
if ((key = getch()) != ERR)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
/* Control + Right */
|
||||
case 99:
|
||||
gui_move_next_word ();
|
||||
break;
|
||||
/* Control + Left */
|
||||
case 100:
|
||||
gui_move_previous_word ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
/* send command/message */
|
||||
case '\n':
|
||||
if (gui_current_window->input_buffer_size > 0)
|
||||
{
|
||||
gui_current_window->input_buffer[gui_current_window->input_buffer_size] = '\0';
|
||||
history_add (gui_current_window, gui_current_window->input_buffer);
|
||||
gui_current_window->input_buffer_size = 0;
|
||||
gui_current_window->input_buffer_pos = 0;
|
||||
gui_current_window->input_buffer_1st_display = 0;
|
||||
gui_current_window->completion.position = -1;
|
||||
gui_current_window->ptr_history = NULL;
|
||||
ptr_window = gui_current_window;
|
||||
user_command (SERVER(gui_current_window),
|
||||
gui_current_window->input_buffer);
|
||||
if (ptr_window == gui_current_window)
|
||||
gui_draw_window_input (ptr_window);
|
||||
if (ptr_window)
|
||||
ptr_window->input_buffer[0] = '\0';
|
||||
}
|
||||
break;
|
||||
/* other key => add to input buffer */
|
||||
default:
|
||||
/*gui_printf (gui_current_window,
|
||||
"[Debug] key pressed = %d, as octal: %o\n", key, key);*/
|
||||
new_char[0] = key;
|
||||
new_char[1] = '\0';
|
||||
gui_buffer_insert_string (new_char,
|
||||
gui_current_window->input_buffer_pos);
|
||||
gui_current_window->input_buffer_pos++;
|
||||
gui_draw_window_input (gui_current_window);
|
||||
gui_current_window->completion.position = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_main_loop: main loop for WeeChat with ncurses GUI
|
||||
*/
|
||||
|
||||
void
|
||||
gui_main_loop ()
|
||||
{
|
||||
fd_set read_fd;
|
||||
static struct timeval timeout;
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
quit_weechat = 0;
|
||||
while (!quit_weechat)
|
||||
{
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 10000;
|
||||
FD_ZERO (&read_fd);
|
||||
FD_SET (STDIN_FILENO, &read_fd);
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->sock4 >= 0)
|
||||
FD_SET (ptr_server->sock4, &read_fd);
|
||||
}
|
||||
if (select (FD_SETSIZE, &read_fd, NULL, NULL, &timeout))
|
||||
{
|
||||
if (FD_ISSET (STDIN_FILENO, &read_fd))
|
||||
{
|
||||
gui_read_keyb ();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if ((ptr_server->sock4 >= 0) &&
|
||||
(FD_ISSET (ptr_server->sock4, &read_fd)))
|
||||
server_recv (ptr_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
CC=gcc
|
||||
|
||||
OPTIONS=-Wall -W -pipe -O2
|
||||
|
||||
OUTPUT=../gui.a
|
||||
OBJS=gui-display.o gui-input.o
|
||||
DEFINES=WEE_GTK
|
||||
|
||||
all: $(OBJS)
|
||||
ar r $(OUTPUT) $(OBJS)
|
||||
|
||||
$(OBJS):
|
||||
$(CC) $(OPTIONS) -o $@ -c $< $(INCLUDES) -D$(DEFINES)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~ core
|
||||
|
||||
gui-display.o: gui-display.c ../../weechat.h ../gui.h ../../config.h \
|
||||
../../irc/irc.h ../../gui/gui.h
|
||||
gui-input.o: gui-input.c ../../weechat.h ../gui.h
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
/* gui-gtk.c: Gtk+ GUI for WeeChat */
|
||||
|
||||
|
||||
/* ***** Gtk+ GUI for WeeChat, NOT developed! ***** */
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_GTK_H
|
||||
#define __WEECHAT_GUI_GTK_H 1
|
||||
|
||||
#endif /* gui-gtk.h */
|
||||
+229
@@ -0,0 +1,229 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_H
|
||||
#define __WEECHAT_GUI_H 1
|
||||
|
||||
#ifdef WEE_CURSES
|
||||
#include <curses.h>
|
||||
#endif
|
||||
|
||||
#include "../completion.h"
|
||||
#include "../history.h"
|
||||
|
||||
#ifdef WEE_CURSES
|
||||
#define KEY_ESCAPE 27
|
||||
#endif
|
||||
|
||||
#define INPUT_BUFFER_BLOCK_SIZE 256
|
||||
|
||||
#define NUM_COLORS 35
|
||||
#define COLOR_WIN_TITLE 1
|
||||
#define COLOR_WIN_CHAT 2
|
||||
#define COLOR_WIN_CHAT_TIME 3
|
||||
#define COLOR_WIN_CHAT_TIME_SEP 4
|
||||
#define COLOR_WIN_CHAT_PREFIX1 5
|
||||
#define COLOR_WIN_CHAT_PREFIX2 6
|
||||
#define COLOR_WIN_CHAT_NICK 7
|
||||
#define COLOR_WIN_CHAT_HOST 8
|
||||
#define COLOR_WIN_CHAT_CHANNEL 9
|
||||
#define COLOR_WIN_CHAT_DARK 10
|
||||
#define COLOR_WIN_STATUS 11
|
||||
#define COLOR_WIN_STATUS_ACTIVE 12
|
||||
#define COLOR_WIN_STATUS_DATA_MSG 13
|
||||
#define COLOR_WIN_STATUS_DATA_OTHER 14
|
||||
#define COLOR_WIN_STATUS_MORE 15
|
||||
#define COLOR_WIN_INPUT 16
|
||||
#define COLOR_WIN_INPUT_CHANNEL 17
|
||||
#define COLOR_WIN_INPUT_NICK 18
|
||||
#define COLOR_WIN_NICK 19
|
||||
#define COLOR_WIN_NICK_OP 20
|
||||
#define COLOR_WIN_NICK_HALFOP 21
|
||||
#define COLOR_WIN_NICK_VOICE 22
|
||||
#define COLOR_WIN_NICK_SEP 23
|
||||
#define COLOR_WIN_NICK_SELF 24
|
||||
#define COLOR_WIN_NICK_PRIVATE 25
|
||||
#define COLOR_WIN_NICK_FIRST 26
|
||||
#define COLOR_WIN_NICK_LAST 35
|
||||
#define COLOR_WIN_NICK_NUMBER (COLOR_WIN_NICK_LAST - COLOR_WIN_NICK_FIRST + 1)
|
||||
|
||||
#define SERVER(window) ((t_irc_server *)(window->server))
|
||||
#define CHANNEL(window) ((t_irc_channel *)(window->channel))
|
||||
|
||||
#define WIN_IS_SERVER(window) (SERVER(window) && !CHANNEL(window))
|
||||
#define WIN_IS_CHANNEL(window) (CHANNEL(window) && (CHANNEL(window)->type == CHAT_CHANNEL))
|
||||
#define WIN_IS_PRIVATE(window) (CHANNEL(window) && (CHANNEL(window)->type == CHAT_PRIVATE))
|
||||
|
||||
#define MSG_TYPE_TIME 0
|
||||
#define MSG_TYPE_NICK 1
|
||||
#define MSG_TYPE_INFO 2
|
||||
#define MSG_TYPE_MSG 3
|
||||
|
||||
#define gui_printf_color(window, color, fmt, argz...) \
|
||||
gui_printf_color_type(window, MSG_TYPE_INFO, color, fmt, ##argz)
|
||||
|
||||
#define gui_printf(window, fmt, argz...) \
|
||||
gui_printf_color_type(window, MSG_TYPE_INFO, -1, fmt, ##argz)
|
||||
|
||||
typedef struct t_gui_message t_gui_message;
|
||||
|
||||
struct t_gui_message
|
||||
{
|
||||
int type; /* type of message (time, nick, other) */
|
||||
int color; /* color of message */
|
||||
char *message; /* message content */
|
||||
t_gui_message *prev_message; /* link to previous message for line */
|
||||
t_gui_message *next_message; /* link to next message for line */
|
||||
};
|
||||
|
||||
typedef struct t_gui_line t_gui_line;
|
||||
|
||||
struct t_gui_line
|
||||
{
|
||||
int length; /* length of the line (in char) */
|
||||
int length_align; /* alignment length (time or time/nick) */
|
||||
int line_with_message; /* line contains a message from a user? */
|
||||
t_gui_message *messages; /* messages for the line */
|
||||
t_gui_message *last_message; /* last message of the line */
|
||||
t_gui_line *prev_line; /* link to previous line */
|
||||
t_gui_line *next_line; /* link to next line */
|
||||
};
|
||||
|
||||
typedef struct t_gui_color t_gui_color;
|
||||
|
||||
struct t_gui_color
|
||||
{
|
||||
char *name;
|
||||
int color;
|
||||
};
|
||||
|
||||
typedef struct t_gui_window t_gui_window;
|
||||
|
||||
struct t_gui_window
|
||||
{
|
||||
/* server/channel */
|
||||
void *server; /* window's server */
|
||||
void *channel; /* window's channel */
|
||||
|
||||
/* global position & size */
|
||||
int win_x, win_y; /* position of window */
|
||||
int win_width, win_height; /* window geometry */
|
||||
|
||||
/* chat window settings */
|
||||
int win_chat_x, win_chat_y; /* chat window position */
|
||||
int win_chat_width; /* width of chat window */
|
||||
int win_chat_height; /* height of chat window */
|
||||
int win_chat_cursor_x; /* position of cursor in chat window */
|
||||
int win_chat_cursor_y; /* position of cursor in chat window */
|
||||
|
||||
/* nicklist window settings */
|
||||
int win_nick_x, win_nick_y; /* chat window position */
|
||||
int win_nick_width; /* width of chat window */
|
||||
int win_nick_height; /* height of chat window */
|
||||
|
||||
/* windows */
|
||||
#ifdef WEE_CURSES
|
||||
WINDOW *win_title; /* title window */
|
||||
WINDOW *win_chat; /* chat window (exemple: channel) */
|
||||
WINDOW *win_nick; /* nick window */
|
||||
WINDOW *win_status; /* status window */
|
||||
WINDOW *win_input; /* input window */
|
||||
#endif
|
||||
#ifdef WEE_GTK
|
||||
/* TODO: declare Gtk+ window */
|
||||
#endif
|
||||
#ifdef WEE_QT
|
||||
/* TODO: declare Qt window */
|
||||
#endif
|
||||
|
||||
/* chat content (lines, line is composed by many messages) */
|
||||
t_gui_line *lines; /* lines of chat window */
|
||||
t_gui_line *last_line; /* last line of chat window */
|
||||
int first_line_displayed; /* = 1 if first line is displayed */
|
||||
int sub_lines; /* if > 0 then do not display until end */
|
||||
int line_complete; /* current line complete ? (\n ending) */
|
||||
int unread_data; /* highlight windows with unread data */
|
||||
|
||||
/* inupt buffer */
|
||||
char *input_buffer; /* input buffer */
|
||||
int input_buffer_alloc; /* input buffer: allocated size in mem */
|
||||
int input_buffer_size; /* buffer size (user input length) */
|
||||
int input_buffer_pos; /* position into buffer */
|
||||
int input_buffer_1st_display; /* first char displayed on screen */
|
||||
|
||||
/* completion */
|
||||
t_completion completion; /* for cmds/nicks completion */
|
||||
|
||||
/* history */
|
||||
t_history *history; /* commands history */
|
||||
t_history *ptr_history; /* current command in history */
|
||||
|
||||
/* link to next window */
|
||||
t_gui_window *prev_window; /* link to previous window */
|
||||
t_gui_window *next_window; /* link to next window */
|
||||
};
|
||||
|
||||
/* variables */
|
||||
|
||||
extern int gui_ready;
|
||||
extern t_gui_window *gui_windows;
|
||||
extern t_gui_window *gui_current_window;
|
||||
|
||||
/* prototypes */
|
||||
|
||||
extern int gui_assign_color (int *, char *);
|
||||
extern int gui_get_color_by_name (char *);
|
||||
extern char *gui_get_color_by_value (int);
|
||||
|
||||
extern void gui_draw_window_title (t_gui_window *);
|
||||
extern void gui_redraw_window_title (t_gui_window *);
|
||||
extern void gui_draw_window_chat (t_gui_window *);
|
||||
extern void gui_redraw_window_chat (t_gui_window *);
|
||||
extern void gui_draw_window_nick (t_gui_window *);
|
||||
extern void gui_redraw_window_nick (t_gui_window *);
|
||||
extern void gui_draw_window_status (t_gui_window *);
|
||||
extern void gui_redraw_window_status (t_gui_window *);
|
||||
extern void gui_draw_window_input (t_gui_window *);
|
||||
extern void gui_redraw_window_input (t_gui_window *);
|
||||
extern void gui_redraw_window (t_gui_window *);
|
||||
|
||||
extern void gui_window_clear (t_gui_window *);
|
||||
extern void gui_window_clear_all ();
|
||||
|
||||
extern void gui_switch_to_window (t_gui_window *);
|
||||
extern void gui_switch_to_previous_window ();
|
||||
extern void gui_switch_to_next_window ();
|
||||
|
||||
extern void gui_move_page_up ();
|
||||
extern void gui_move_page_down ();
|
||||
|
||||
extern void gui_init ();
|
||||
/* TODO: add coordinates and size */
|
||||
extern t_gui_window *gui_window_new (void *, void * /*int, int, int, int*/);
|
||||
extern void gui_window_free (t_gui_window *);
|
||||
extern void gui_end ();
|
||||
extern void gui_printf_color_type (t_gui_window *, int, int, char *, ...);
|
||||
extern void gui_display_nick (t_gui_window *, void *, int, int, int, int);
|
||||
|
||||
extern void gui_main_loop ();
|
||||
|
||||
#endif /* gui.h */
|
||||
@@ -0,0 +1,37 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
CC=gcc
|
||||
|
||||
OPTIONS=-Wall -W -pipe -O2
|
||||
|
||||
OUTPUT=../gui.a
|
||||
OBJS=gui-display.o gui-input.o
|
||||
DEFINES=WEE_QT
|
||||
|
||||
all: $(OBJS)
|
||||
ar r $(OUTPUT) $(OBJS)
|
||||
|
||||
$(OBJS):
|
||||
$(CC) $(OPTIONS) -o $@ -c $< $(INCLUDES) -D$(DEFINES)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~ core
|
||||
|
||||
gui-display.o: gui-display.c ../../weechat.h ../gui.h ../../config.h \
|
||||
../../irc/irc.h ../../gui/gui.h
|
||||
gui-input.o: gui-input.c ../../weechat.h ../gui.h
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
/* gui-qt.c: Qt GUI for WeeChat */
|
||||
|
||||
|
||||
/* ***** Qt GUI for WeeChat, NOT developed! ***** */
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_QT_H
|
||||
#define __WEECHAT_GUI_QT_H 1
|
||||
|
||||
#endif /* gui-qt.h */
|
||||
@@ -0,0 +1,37 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
CC=gcc
|
||||
|
||||
OPTIONS=-Wall -W -pipe -O2
|
||||
|
||||
OUTPUT=../gui.a
|
||||
OBJS=gui-display.o gui-input.o
|
||||
DEFINES=WEE_TEXT
|
||||
|
||||
all: $(OBJS)
|
||||
ar r $(OUTPUT) $(OBJS)
|
||||
|
||||
$(OBJS):
|
||||
$(CC) $(OPTIONS) -o $@ -c $< $(INCLUDES) -D$(DEFINES)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~ core
|
||||
|
||||
gui-display.o: gui-display.c ../../weechat.h ../gui.h ../../config.h \
|
||||
../../irc/irc.h ../../gui/gui.h
|
||||
gui-input.o: gui-input.c ../../weechat.h ../gui.h
|
||||
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
/* gui-text.c: text GUI - display functions */
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "gui-text.h"
|
||||
#include "command.h"
|
||||
#include "irc.h"
|
||||
|
||||
|
||||
/*
|
||||
* gui_init: init GUI
|
||||
*/
|
||||
|
||||
void
|
||||
gui_init ()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gui_init_irc_window: allocates a window for a channel or server
|
||||
*/
|
||||
|
||||
void
|
||||
gui_init_irc_window (t_irc_window * window)
|
||||
{
|
||||
/* no window in text GUI */
|
||||
window->text = NULL;
|
||||
window->window = NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gui_free_irc_window: free a GUI window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_free_irc_window (t_irc_window * window)
|
||||
{
|
||||
/* no window in text GUI */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gui_end: GUI end
|
||||
*/
|
||||
|
||||
void
|
||||
gui_end ()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* read_keyb: read keyboard line
|
||||
*/
|
||||
|
||||
void
|
||||
read_keyb ()
|
||||
{
|
||||
int num_read;
|
||||
static char buffer[4096];
|
||||
static int pos_buffer = 0;
|
||||
char buffer_tmp[1024];
|
||||
int pos_buffer_tmp;
|
||||
|
||||
num_read = read (STDIN_FILENO, buffer_tmp, sizeof (buffer_tmp) - 1);
|
||||
pos_buffer_tmp = 0;
|
||||
while (pos_buffer_tmp < num_read)
|
||||
{
|
||||
switch (buffer_tmp[pos_buffer_tmp])
|
||||
{
|
||||
case '\r':
|
||||
break;
|
||||
case '\n':
|
||||
buffer[pos_buffer] = '\0';
|
||||
pos_buffer = 0;
|
||||
user_command (buffer);
|
||||
break;
|
||||
default:
|
||||
buffer[pos_buffer] = buffer_tmp[pos_buffer_tmp];
|
||||
if (pos_buffer < (int) (sizeof (buffer) - 2))
|
||||
pos_buffer++;
|
||||
}
|
||||
pos_buffer_tmp++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gui_main_loop: main loop for WeeChat with text GUI
|
||||
*/
|
||||
|
||||
void
|
||||
gui_main_loop ()
|
||||
{
|
||||
struct timeval timeout;
|
||||
fd_set read_fd;
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
quit_weechat = 0;
|
||||
while (!quit_weechat)
|
||||
{
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 10000;
|
||||
FD_ZERO (&read_fd);
|
||||
FD_SET (STDIN_FILENO, &read_fd);
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
FD_SET (ptr_server->sock4, &read_fd);
|
||||
}
|
||||
select (FD_SETSIZE, &read_fd, NULL, NULL, &timeout);
|
||||
if (FD_ISSET (STDIN_FILENO, &read_fd))
|
||||
{
|
||||
read_keyb ();
|
||||
}
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (FD_ISSET (ptr_server->sock4, &read_fd))
|
||||
recv_from_server (ptr_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gui_display_message: display a message on the screen
|
||||
*/
|
||||
|
||||
void
|
||||
gui_display_message (char *message)
|
||||
{
|
||||
printf ("%s\n", message);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_TEXT_H
|
||||
#define __WEECHAT_GUI_TEXT_H 1
|
||||
|
||||
#endif /* gui-text.h */
|
||||
Reference in New Issue
Block a user