Initial import of the ircii-pana-1.1-final source tree.

git-svn-id: svn://svn.code.sf.net/p/bitchx/code/tags/ircii-pana-1.1-final@1 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
Kevin Easton
2008-02-25 09:25:32 +00:00
commit 28febcfea9
1429 changed files with 250653 additions and 0 deletions

241
source/readlog.c Normal file
View File

@@ -0,0 +1,241 @@
/*
* Copyright Colten Edwards 1996
*/
#include "irc.h"
static char cvsrevision[] = "$Id: readlog.c,v 1.1.1.2 2003/05/17 07:00:23 root Exp $";
CVS_REVISION(readlog_c)
#include "struct.h"
#include <sys/stat.h>
#include "ircterm.h"
#include "server.h"
#include "vars.h"
#include "ircaux.h"
#include "input.h"
#include "window.h"
#include "screen.h"
#include "output.h"
#include "status.h"
#include "misc.h"
#define MAIN_SOURCE
#include "modval.h"
#ifdef WANT_HEBREW
#include "hebrew.h"
#endif
FILE * msg_fp = NULL;
static Window *msg_window = NULL;
static int finished_msg_paging = 0;
static Screen *msg_screen = NULL;
static int use_msg_window = 0;
static void log_prompt (char *name, char *line);
static void set_msg_screen (Screen *);
static char *(*read_log_func) (char *, int, FILE *);
void log_put_it(const char *topic, const char *format, ...);
BUILT_IN_COMMAND(remove_log)
{
char *expand;
char *filename = NULL;
int old_display = window_display;
int reset_logptr = 0;
if ((get_string_var(MSGLOGFILE_VAR) == NULL) || (get_string_var(CTOOLZ_DIR_VAR) == NULL))
return;
malloc_sprintf(&filename, "%s/%s", get_string_var(CTOOLZ_DIR_VAR), get_string_var(MSGLOGFILE_VAR));
expand = expand_twiddle(filename);
new_free(&filename);
window_display = 0;
reset_logptr = logmsg(LOG_CURRENT, NULL, 3, NULL);
log_toggle(0, NULL);
window_display = old_display;
if (unlink(expand))
{
bitchsay("Error unlinking: %s", expand);
new_free(&expand);
return;
}
window_display = 0;
set_int_var(MSGCOUNT_VAR, 0);
if (reset_logptr)
log_toggle(1, NULL);
window_display = old_display;
bitchsay("Removed %s.", expand);
status_update(1);
new_free(&expand);
}
static int in_read_log = 0;
BUILT_IN_COMMAND(readlog)
{
char *expand;
struct stat stat_buf;
char *filename = NULL;
char buffer[BIG_BUFFER_SIZE + 1];
read_log_func = fgets;
if (!get_string_var(MSGLOGFILE_VAR))
if (!args || (args && !*args))
return;
if (msg_window)
return;
if (command)
{
in_read_log = 1;
if (my_stricmp(command, "MORE"))
{
if (args && !my_strnicmp(args, "-resume", 2))
{
next_arg(args, &args);
read_log_func = (char *(*)(char *, int, FILE *))global[RFGETS];
}
}
}
if (args && *args)
malloc_sprintf(&filename, "%s", args);
else
malloc_sprintf(&filename, "%s/%s", get_string_var(CTOOLZ_DIR_VAR), get_string_var(MSGLOGFILE_VAR));
expand = expand_twiddle(filename);
new_free(&filename);
stat(expand, &stat_buf);
strcpy(buffer, expand);
if (stat_buf.st_mode & S_IFDIR)
return;
if ((msg_fp = fopen(expand, "r")) == NULL)
{
log_put_it(expand, "%s Error Opening Log file %s", thing_ansi, expand);
new_free(&expand);
msg_fp = NULL;
return;
}
if (read_log_func == (char *(*)(char *, int, FILE *))global[RFGETS])
fseek(msg_fp, 0, SEEK_END);
new_free(&expand);
msg_window = current_window;
msg_screen = current_window->screen;
log_prompt(buffer, NULL);
}
/*
* show_help: show's either a page of text from a help_fp, or the whole
* thing, depending on the value of HELP_PAGER_VAR. If it gets to the end,
* (in either case it will eventally), it closes the file, and returns 0
* to indicate this.
*/
static int show_log(Window *window, char *name)
{
Window *old_window;
int rows = 0;
char line[500];
if (window)
{
old_window = current_window;
current_window = window;
}
else
{
old_window = NULL;
window = current_window;
}
if (get_int_var(HELP_PAGER_VAR))
rows = window->display_size - (window->double_status + 2);
while (--rows)
{
if ((*read_log_func)(line, 499, msg_fp))
{
if (*(line + strlen(line) - 1) == '\n')
*(line + strlen(line) - 1) = (char) 0;
#ifdef WANT_HEBREW
if (get_int_var(HEBREW_TOGGLE_VAR))
hebrew_process(line);
#endif
log_put_it(name, "%s", line);
}
else
{
if (msg_fp) fclose(msg_fp);
set_msg_screen(NULL);
msg_fp = NULL;
return (0);
}
}
return (1);
}
void remove_away_log(char *stuff, char *line)
{
if ((line && toupper(*line) == 'Y'))
remove_log(NULL, NULL, NULL, NULL);
in_read_log = 0;
}
static void set_msg_screen(Screen *screen)
{
msg_screen = screen;
if (!msg_screen && msg_window)
{
if (use_msg_window)
{
int display = window_display;
window_display = 0;
delete_window(msg_window);
window_display = display;
}
msg_window = NULL;
update_all_windows();
}
}
/*
* log_prompt: The main procedure called to display the log file
* currently being accessed. Using add_wait_prompt(), it sets it
* self up to be recalled when the next page is asked for. If
* called when we have finished paging the log file, we exit, as
* there is nothing left to show. If line is 'q' or 'Q', exit the
* log pager, clean up, etc.. If all is cool for now, we call
* show_help, and either if its finished, exit, or prompt for the
* next page.
*/
static void log_prompt(char *name, char *line)
{
if (line && *line && (toupper(*line) == 'Q'))
{
finished_msg_paging = 1;
if (msg_fp)
fclose(msg_fp);
msg_fp = NULL;
set_msg_screen(NULL);
if (!in_read_log)
add_wait_prompt("Delete msg log [y/N]? ", remove_away_log, empty_string, WAIT_PROMPT_LINE,1);
return;
}
if (show_log(msg_window, name))
{
add_wait_prompt("*** Hit any key for more, 'q' to quit ***",
log_prompt, name, WAIT_PROMPT_KEY,1);
}
else
{
if (msg_fp)
fclose(msg_fp);
set_msg_screen(NULL);
msg_fp = NULL;
if (!in_read_log)
add_wait_prompt("Delete msg log [y/N]? ", remove_away_log, empty_string, WAIT_PROMPT_LINE,1);
}
}