void add_mode(ChannelList *chan, char *mode, int plus, char *nick, char *reason, int max_modes) { char buffer[BIG_BUFFER_SIZE+1]; if (mode_len >= (IRCD_BUFFER_SIZE-100)) { flush_mode(chan); push_len = 0; } if (reason) { sprintf(buffer, "KICK %s %s :%s\r\n", chan->channel, nick, reason); push_len = strlen(buffer); add_mode_buffer(buffer, push_len); } else { mode_str_len++; strcat(plus_mode, plus ? "+" : "-"); malloc_strcat(&mode_str, mode); m_s3cat(&user, space, nick); if (mode_str_len >= max_modes) { sprintf(buffer, "MODE %s %s%s %s\r\n", chan->channel, plus_mode, mode_str, user); push_len = strlen(buffer); add_mode_buffer(buffer, push_len); new_free(&mode_str); new_free(&user); memset(plus_mode, 0, sizeof(plus_mode)); mode_str_len = push_len = 0; } } }
void nick_completion(char dumb, char *dumber) { char *q, *line; int i = -1; char *nick = NULL, *tmp; q = line = m_strdup(¤t_screen->input_buffer[MIN_POS]); if (in_completion == STATE_NORMAL) { i = word_count(line); nick = extract_words(line, i - 1, i); } if (nick) line[strlen(line) - strlen(nick)] = 0; else *line = 0; if ((tmp = getchannick(input_lastmsg, nick && *nick ? nick : NULL))) { malloc_strcat(&q, tmp); set_input(q); update_input(UPDATE_ALL); malloc_strcpy(&input_lastmsg, tmp); in_completion = STATE_COMPLETE; } new_free(&q); new_free(&nick); }
void foreach(u_char *command, u_char *args, u_char *subargs) { u_char *struc = NULL, *ptr, *body = NULL, *var = NULL; u_char **sublist; int total; int i; int slen; if ((ptr = new_next_arg(args, &args)) == NULL) { yell("FOREACH: missing structure expression"); return; } malloc_strcpy(&struc, ptr); malloc_strcat(&struc, UP(".")); upper(struc); if ((var = next_arg(args, &args)) == NULL) { new_free(&struc); yell("FOREACH: missing variable"); return; } while (isspace(*args)) args++; if ((body = next_expr(&args, '{')) == NULL) /* } */ { new_free(&struc); yell("FOREACH: missing statement"); return; } sublist = match_alias(struc, &total, VAR_ALIAS); slen = my_strlen(struc); for (i = 0; i < total; i++) { unsigned display; display = set_display_off(); add_alias(VAR_ALIAS, var, sublist[i]+slen); set_display(display); parse_line(NULL, body, subargs ? subargs : empty_string(), 0, 0, 0); new_free(&sublist[i]); } new_free(&sublist); new_free(&struc); }
void add_mode_buffer( char *buffer, int mode_str_len) { malloc_strcat(&mode_buf, buffer); mode_len += push_len; }
/* * set_translation: Called when the TRANSLATION variable is SET. * Attempts to load a new translation table. */ void set_translation(Window *win, char *tablename, int unused) { FILE *table; unsigned char temp_table[512]; char *filename = NULL, *s; int inputs[8]; int j, c = 0; char buffer[BIG_BUFFER_SIZE + 1]; if (!tablename) { translation = 0; return; } for (s = tablename; *s; s++) { if (isspace((unsigned char)*s)) { *s = '\0'; break; } } tablename = upper(tablename); /* Check for transparent mode; ISO-8859/1, Latin-1 */ if (!strcmp("LATIN_1", tablename)) { translation = 0; return; } /* Else try loading the translation table from disk. */ malloc_strcpy(&filename, TRANSLATION_PATH "/"); malloc_strcat(&filename, tablename); if ( !(table = uzfopen(&filename, ".", 0)) ) { say("Cannot open character table definition \"%s\" !", tablename); set_string_var(TRANSLATION_VAR, NULL); new_free(&filename); return; } /* Any problems in the translation tables between hosts are * almost certain to be caused here. * many scanf implementations do not work as defined. In particular, * scanf should ignore white space including new lines (many stop * at the new line character, hence the fgets and sscanf workaround), * many fail to read 0xab as a hexadecimal number (failing on the * x) despite the 0x being defined as optionally existing on input, * and others zero out all the output variables if there is trailing * non white space in the format string which doesn't appear on the * input. Overall, the standard I/O libraries have a tendancy not * to be very standard. */ while (fgets(buffer, 80, table)) { sscanf(buffer, "0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x", inputs+0, inputs+1, inputs+2, inputs+3, inputs+4, inputs+5, inputs+6, inputs+7); for (j = 0; j<8; j++) temp_table[c++] = (unsigned char) inputs[j]; } fclose(table); new_free(&filename); if (c == 512) { for (c = 0; c <= 255; c++) { transToClient[c] = temp_table[c]; transFromClient[c] = temp_table[c | 256]; } #if 0 for (c = 0; c <= 255; c++) transToClient[c] = c; #endif translation = 1; } else { say("Error loading translation table \"%s\" !", tablename); set_string_var(TRANSLATION_VAR, NULL); } }
void sort_scan (IrcCommandDll *this_not_used, char *called, char *args, char *subargs) { int numberofpeople = 0, server = -1; char *channel = NULL, *qbert = NULL; ChannelList *chanlist; NickList *anick, *ops = NULL, *nops = NULL, *voice = NULL, *tmp = NULL; if (!(chanlist = prepare_command (&server, channel, NO_OP)) ) return; for (anick = next_nicklist (chanlist, NULL); anick; anick = next_nicklist (chanlist, anick)) { if (!nick_isop(anick) && !nick_isvoice(anick)) { tmp = (NickList *)new_malloc (sizeof (NickList)); memcpy (tmp, anick, sizeof (NickList)); tmp -> next = NULL; add_to_list ((List **)&nops, (List *)tmp); } else if (nick_isvoice(anick) && !nick_isop(anick)) { tmp = (NickList *)new_malloc (sizeof (NickList)); memcpy (tmp, anick, sizeof (NickList)); tmp -> next = NULL; add_to_list ((List **)&voice, (List *)tmp); } else if (nick_isop(anick)) { tmp = (NickList *)new_malloc (sizeof (NickList)); memcpy (tmp, anick, sizeof (NickList)); tmp -> next = NULL; add_to_list ((List **)&ops, (List *)tmp); } numberofpeople++; } put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FSET), "%s %s %d %s", update_clock (GET_TIME), chanlist -> channel, numberofpeople, space)); numberofpeople = 0; for (anick = ops; anick; anick = anick -> next) { malloc_strcat (&qbert, convert_output_format (fget_string_var (FORMAT_NAMES_OPCOLOR_FSET), "@ %s", anick -> nick)); malloc_strcat (&qbert, space); if (numberofpeople++ == 4) { if (fget_string_var (FORMAT_NAMES_BANNER_FSET)) put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert); else put_it ("%s", qbert); new_free (&qbert); numberofpeople = 0; } } for (anick = voice; anick; anick = anick -> next) { malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_VOICECOLOR_FSET), "+ %s", anick -> nick)); malloc_strcat (&qbert, space); if (numberofpeople++ == 4) { if (fget_string_var (FORMAT_NAMES_BANNER_FSET)) put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert); else put_it ("%s", qbert); new_free (&qbert); numberofpeople = 0; } } for (anick = nops; anick; anick = anick -> next) { malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_NICKCOLOR_FSET), "$ %s", anick -> nick)); malloc_strcat (&qbert, space); if (numberofpeople++ == 4) { if (fget_string_var (FORMAT_NAMES_BANNER_FSET)) put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert); else put_it ("%s", qbert); new_free (&qbert); numberofpeople = 0; } } if (numberofpeople && qbert) { if (fget_string_var (FORMAT_NAMES_BANNER_FSET)) put_it ("%s%s", convert_output_format (fget_string_var (FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert); else put_it ("%s", qbert); } new_free (&qbert); if (fget_string_var (FORMAT_NAMES_FOOTER_FSET)) put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FOOTER_FSET), NULL, NULL)); clear_sorted_nicklist (&ops); clear_sorted_nicklist (&nops); clear_sorted_nicklist (&voice); }
/* * init_variables: initializes the string variables that can't really be * initialized properly above */ void init_variables() { #if defined(WINNT) || defined(__EMX__) char *shell; #endif int old_display = window_display; int i; char *s; for (i = 1; i < NUMBER_OF_VARIABLES - 1; i++) if (strcmp(irc_variable[i-1].name, irc_variable[i].name) >= 0) nappanic("Variable [%d] (%s) is out of order.", i, irc_variable[i].name); window_display = 0; set_string_var(DEFAULT_EMAIL_VAR, "blah@opennap"); set_string_var(DEFAULT_SERVER_VAR, "bitchx.dimension6.com"); if (*password) set_string_var(DEFAULT_PASSWORD_VAR, password); else set_string_var(DEFAULT_PASSWORD_VAR, "blah"); if (*nickname) set_string_var(DEFAULT_NICKNAME_VAR, nickname); else set_string_var(DEFAULT_NICKNAME_VAR, "blah"); set_string_var(DEFAULT_SPEED_VAR, "?"); set_string_var(PTEST_CHANGE_PORT_VAR, "8899 0"); s = m_strdup(irc_lib); malloc_strcat(&s, "/help"); set_string_var(HELP_PATH_VAR, s); new_free(&s); set_string_var(LOGFILE_VAR, DEFAULT_LOGFILE); set_string_var(FORMAT_DIRECTORY_VAR, "%d"); set_string_var(FORMAT_FILENAME_VAR, "%g4.1L %b %t %f"); set_string_var(SEARCH_FORMAT_VAR, "%-40f %b %3.1H %t %g4.1L %N %1.3p"); set_string_var(NAMES_NICKCOLOR_VAR, FORMAT_NICKCOLOR); set_string_var(DOWNLOAD_DIRECTORY_VAR, DEFAULT_DOWNLOAD_DIRECTORY); set_string_var(SHOW_NUMERICS_STR_VAR, DEFAULT_SHOW_NUMERICS_STR); set_numeric_string(current_window, DEFAULT_SHOW_NUMERICS_STR, 0); set_string_var(CMDCHARS_VAR, DEFAULT_CMDCHARS); set_string_var(LOGFILE_VAR, DEFAULT_LOGFILE); set_string_var(WORD_BREAK_VAR, DEFAULT_WORD_BREAK); #if defined(__EMX__) if ((shell = getenv("SHELL"))) { set_string_var(SHELL_VAR, path_search(shell, getenv("PATH"))); if (getenv("SHELL_FLAGS")) set_string_var(SHELL_FLAGS_VAR, getenv("SHELL_FLAGS")); } else { shell = "cmd.exe"; set_string_var(SHELL_FLAGS_VAR, "/c"); set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH")))); } #elif WINNT if ((shell = getenv("SHELL"))) { set_string_var(SHELL_VAR, path_search(shell, getenv("PATH"))); if (getenv("SHELL_FLAGS")) set_string_var(SHELL_FLAGS_VAR, getenv("SHELL_FLAGS")); } else if (gdwPlatform == VER_PLATFORM_WIN32_WINDOWS) { shell = "command.com"; set_string_var(SHELL_FLAGS_VAR, "/c"); set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH")))); } else { shell = "cmd.exe"; set_string_var(SHELL_FLAGS_VAR, "/c"); set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH")))); } #else set_string_var(SHELL_VAR, DEFAULT_SHELL); set_string_var(SHELL_FLAGS_VAR, DEFAULT_SHELL_FLAGS); #endif set_string_var(CONTINUED_LINE_VAR, DEFAULT_CONTINUED_LINE); set_string_var(INPUT_PROMPT_VAR, DEFAULT_INPUT_PROMPT); set_string_var(HIGHLIGHT_CHAR_VAR, DEFAULT_HIGHLIGHT_CHAR); set_string_var(LASTLOG_LEVEL_VAR, DEFAULT_LASTLOG_LEVEL); set_string_var(STATUS_FORMAT1_VAR, DEFAULT_STATUS_FORMAT1); set_string_var(STATUS_FORMAT2_VAR, DEFAULT_STATUS_FORMAT2); set_string_var(STATUS_CHANNEL_VAR, DEFAULT_STATUS_CHANNEL); set_string_var(STATUS_CLOCK_VAR, DEFAULT_STATUS_CLOCK); set_string_var(STATUS_CPU_SAVER_VAR, DEFAULT_STATUS_CPU_SAVER); set_string_var(STATUS_HOLD_VAR, DEFAULT_STATUS_HOLD); set_string_var(STATUS_HOLD_LINES_VAR, DEFAULT_STATUS_HOLD_LINES); set_string_var(STATUS_INSERT_VAR, DEFAULT_STATUS_INSERT); set_string_var(STATUS_NICK_VAR, DEFAULT_STATUS_NICK); set_string_var(STATUS_NOTIFY_VAR, DEFAULT_STATUS_NOTIFY); set_string_var(STATUS_OVERWRITE_VAR, DEFAULT_STATUS_OVERWRITE); set_string_var(STATUS_QUERY_VAR, DEFAULT_STATUS_QUERY); set_string_var(STATUS_SERVER_VAR, DEFAULT_STATUS_SERVER); set_string_var(STATUS_STATS_VAR, DEFAULT_STATUS_STATS); set_string_var(STATUS_USER0_VAR, DEFAULT_STATUS_USER); set_string_var(STATUS_USER1_VAR, DEFAULT_STATUS_USER1); set_string_var(STATUS_USER2_VAR, DEFAULT_STATUS_USER2); set_string_var(STATUS_USER3_VAR, DEFAULT_STATUS_USER3); set_string_var(STATUS_USER4_VAR, DEFAULT_STATUS_USER4); set_string_var(STATUS_USER5_VAR, DEFAULT_STATUS_USER5); set_string_var(STATUS_USER6_VAR, DEFAULT_STATUS_USER6); set_string_var(STATUS_USER7_VAR, DEFAULT_STATUS_USER7); set_string_var(STATUS_USER8_VAR, DEFAULT_STATUS_USER8); set_string_var(STATUS_USER9_VAR, DEFAULT_STATUS_USER9); set_string_var(STATUS_USER10_VAR, DEFAULT_STATUS_USER10); set_string_var(STATUS_USER11_VAR, DEFAULT_STATUS_USER11); set_string_var(STATUS_USER12_VAR, DEFAULT_STATUS_USER12); set_string_var(STATUS_USER13_VAR, DEFAULT_STATUS_USER13); set_string_var(STATUS_USER14_VAR, DEFAULT_STATUS_USER14); set_string_var(STATUS_USER15_VAR, DEFAULT_STATUS_USER15); set_string_var(STATUS_USER16_VAR, DEFAULT_STATUS_USER16); set_string_var(STATUS_USER17_VAR, DEFAULT_STATUS_USER17); set_string_var(STATUS_USER18_VAR, DEFAULT_STATUS_USER18); set_string_var(STATUS_USER19_VAR, DEFAULT_STATUS_USER19); set_string_var(STATUS_USER20_VAR, DEFAULT_STATUS_USER20); set_string_var(STATUS_USER21_VAR, DEFAULT_STATUS_USER21); set_string_var(STATUS_USER22_VAR, DEFAULT_STATUS_USER22); set_string_var(STATUS_USER23_VAR, DEFAULT_STATUS_USER23); set_string_var(STATUS_USER24_VAR, DEFAULT_STATUS_USER24); set_string_var(STATUS_USER25_VAR, DEFAULT_STATUS_USER25); set_string_var(STATUS_USER26_VAR, DEFAULT_STATUS_USER26); set_string_var(STATUS_USER27_VAR, DEFAULT_STATUS_USER27); set_string_var(STATUS_USER28_VAR, DEFAULT_STATUS_USER28); set_string_var(STATUS_USER29_VAR, DEFAULT_STATUS_USER29); set_string_var(STATUS_USER30_VAR, DEFAULT_STATUS_USER30); set_string_var(STATUS_USER31_VAR, DEFAULT_STATUS_USER31); set_string_var(STATUS_USER32_VAR, DEFAULT_STATUS_USER32); set_string_var(STATUS_USER33_VAR, DEFAULT_STATUS_USER33); set_string_var(STATUS_USER34_VAR, DEFAULT_STATUS_USER34); set_string_var(STATUS_USER35_VAR, DEFAULT_STATUS_USER35); set_string_var(STATUS_USER36_VAR, DEFAULT_STATUS_USER36); set_string_var(STATUS_USER37_VAR, DEFAULT_STATUS_USER37); set_string_var(STATUS_USER38_VAR, DEFAULT_STATUS_USER38); set_string_var(STATUS_USER39_VAR, DEFAULT_STATUS_USER39); set_string_var(STATUS_WINDOW_VAR, DEFAULT_STATUS_WINDOW); set_string_var(STATUS_SCROLLBACK_VAR, DEFAULT_STATUS_SCROLLBACK); set_string_var(ILLEGAL_CHARS_VAR, DEFAULT_ILLEGAL_CHARS); set_beep_on_msg(current_window, DEFAULT_BEEP_ON_MSG, 0); set_cd_device(current_window, "/dev/cdrom", 0); set_lastlog_size(current_window, NULL, irc_variable[LASTLOG_VAR].integer); set_history_size(current_window, NULL, irc_variable[HISTORY_VAR].integer); set_lastlog_level(current_window, irc_variable[LASTLOG_LEVEL_VAR].string, 0); set_input_prompt(current_window, DEFAULT_INPUT_PROMPT, 0); build_status(current_window, NULL, 0); window_display = old_display; }
/* * set_translation: Called when the TRANSLATION variable is SET. * Attempts to load a new translation table. */ void set_translation (void *stuff) { VARIABLE *v; const char *orig; FILE *table; unsigned char temp_table[512]; char *filename = (char *) 0; int inputs[8]; int j, c = 0; char buffer[81]; char *tablename; v = (VARIABLE *)stuff; orig = v->string; if (!orig) { translation = 0; return; } tablename = LOCAL_COPY(orig); upper(tablename); /* Check for transparent mode; ISO-8859/1, Latin-1 */ if (!strcmp("LATIN_1", tablename)) { translation = 0; return; } /* Else try loading the translation table from disk. */ if (get_string_var(TRANSLATION_PATH_VAR)) malloc_strcpy(&filename, get_string_var(TRANSLATION_PATH_VAR)); malloc_strcat(&filename, tablename); if ( !(table = fopen(filename, "r")) ) { say("Cannot open character table definition \"%s\" !", tablename); new_free(&v->string); new_free(&filename); return; } /* * Any problems in the translation tables between hosts are * almost certain to be caused here. * many scanf implementations do not work as defined. In particular, * scanf should ignore white space including new lines (many stop * at the new line character, hence the fgets and sscanf workaround), * many fail to read 0xab as a hexadecimal number (failing on the * x) despite the 0x being defined as optionally existing on input, * and others zero out all the output variables if there is trailing * non white space in the format string which doesn't appear on the * input. Overall, the standard I/O libraries have a tendancy not * to be very standard. */ while (fgets(buffer, 80, table)) { sscanf(buffer, "0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x", inputs+0, inputs+1, inputs+2, inputs+3, inputs+4, inputs+5, inputs+6, inputs+7); for (j = 0; j<8; j++) temp_table[c++] = (unsigned char) inputs[j]; } fclose(table); new_free(&filename); if (c == 512) { for (c = 0; c <= 255; c++) { transToClient[c] = temp_table[c]; transFromClient[c] = temp_table[c | 256]; } translation = 1; } else { say("Error loading translation table \"%s\" !", tablename); new_free(&v->string); } }