# HG changeset patch # User Mikael Berthe # Date 1159616448 -7200 # Node ID 1ebd2e7ea39517359bf58bf78e3ea842ea497109 # Parent abfe3ca42c359709c4178da039bb804f1b6215ff# Parent d3bfa9e9d88c33502ebc366699ae29766288bf10 Merge with myself diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/commands.c --- a/mcabber/src/commands.c Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/commands.c Sat Sep 30 13:40:48 2006 +0200 @@ -33,6 +33,15 @@ #include "settings.h" #include "events.h" +#define IMSTATUS_AWAY "away" +#define IMSTATUS_ONLINE "online" +#define IMSTATUS_OFFLINE "offline" +#define IMSTATUS_FREE4CHAT "free" +#define IMSTATUS_INVISIBLE "invisible" +#define IMSTATUS_AVAILABLE "avail" +#define IMSTATUS_NOTAVAILABLE "notavail" +#define IMSTATUS_DONOTDISTURB "dnd" + // Commands callbacks static void do_roster(char *arg); static void do_status(char *arg); @@ -221,8 +230,8 @@ const gchar *value; char *newline = line; - // Ignore leading '/' - for (p1 = line ; *p1 == '/' ; p1++) + // Ignore leading COMMAND_CHAR + for (p1 = line ; *p1 == COMMAND_CHAR ; p1++) ; // Locate the end of the word for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++) @@ -235,7 +244,7 @@ if (value) { // There is an alias to expand newline = g_new(char, strlen(value)+strlen(p2)+2); - *newline = '/'; + *newline = COMMAND_CHAR; strcpy(newline+1, value); strcat(newline, p2); } @@ -253,8 +262,8 @@ char *com; GSList *sl_com; - // Ignore leading '/' - for (p1 = command ; *p1 == '/' ; p1++) + // Ignore leading COMMAND_CHAR + for (p1 = command ; *p1 == COMMAND_CHAR ; p1++) ; // Locate the end of the command for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++) @@ -338,12 +347,14 @@ *p = 0; // Command "quit"? - if ((!strncasecmp(xpline, "/quit", 5)) && (scr_get_multimode() != 2) ) + if ((scr_get_multimode() != 2) + && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) if (!xpline[5] || xpline[5] == ' ') return 255; // If verbatim multi-line mode, we check if another /msay command is typed - if ((scr_get_multimode() == 2) && (strncasecmp(xpline, "/msay ", 6))) { + if ((scr_get_multimode() == 2) + && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) { // It isn't an /msay command scr_append_multiline(xpline); g_free(xpline); @@ -397,7 +408,7 @@ return 0; } - if (*line != '/') { + if (*line != COMMAND_CHAR) { // This isn't a command if (scr_get_multimode()) scr_append_multiline(line); @@ -416,57 +427,73 @@ static void do_roster(char *arg) { - if (!strcasecmp(arg, "top")) { + char **paramlst; + char *subcmd; + + paramlst = split_arg(arg, 2, 1); // subcmd, arg + subcmd = *paramlst; + arg = *(paramlst+1); + + if (!subcmd || !*subcmd) { + scr_LogPrint(LPRINT_NORMAL, "Missing parameter."); + free_arg_lst(paramlst); + return; + } + + if (!strcasecmp(subcmd, "top")) { scr_RosterTop(); update_roster = TRUE; - } else if (!strcasecmp(arg, "bottom")) { + } else if (!strcasecmp(subcmd, "bottom")) { scr_RosterBottom(); update_roster = TRUE; - } else if (!strcasecmp(arg, "hide")) { + } else if (!strcasecmp(subcmd, "hide")) { scr_RosterVisibility(0); - } else if (!strcasecmp(arg, "show")) { + } else if (!strcasecmp(subcmd, "show")) { scr_RosterVisibility(1); - } else if (!strcasecmp(arg, "toggle")) { + } else if (!strcasecmp(subcmd, "toggle")) { scr_RosterVisibility(-1); - } else if (!strcasecmp(arg, "hide_offline")) { + } else if (!strcasecmp(subcmd, "hide_offline")) { buddylist_set_hide_offline_buddies(TRUE); if (current_buddy) buddylist_build(); update_roster = TRUE; - } else if (!strcasecmp(arg, "show_offline")) { + } else if (!strcasecmp(subcmd, "show_offline")) { buddylist_set_hide_offline_buddies(FALSE); buddylist_build(); update_roster = TRUE; - } else if (!strcasecmp(arg, "toggle_offline")) { + } else if (!strcasecmp(subcmd, "toggle_offline")) { buddylist_set_hide_offline_buddies(-1); buddylist_build(); update_roster = TRUE; - } else if (!strcasecmp(arg, "unread_first")) { + } else if (!strcasecmp(subcmd, "unread_first")) { scr_RosterUnreadMessage(0); - } else if (!strcasecmp(arg, "unread_next")) { + } else if (!strcasecmp(subcmd, "unread_next")) { scr_RosterUnreadMessage(1); - } else if (!strcasecmp(arg, "alternate")) { + } else if (!strcasecmp(subcmd, "alternate")) { scr_RosterJumpAlternate(); - } else if (!strncasecmp(arg, "search", 6)) { - char *string = arg+6; + } else if (!strncasecmp(subcmd, "search", 6)) { + char *string = subcmd+6; if (*string && (*string != ' ')) { scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!"); + free_arg_lst(paramlst); return; } while (*string == ' ') string++; if (!*string) { scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?"); + free_arg_lst(paramlst); return; } scr_RosterSearch(string); update_roster = TRUE; - } else if (!strcasecmp(arg, "up")) { + } else if (!strcasecmp(subcmd, "up")) { scr_RosterUp(); - } else if (!strcasecmp(arg, "down")) { + } else if (!strcasecmp(subcmd, "down")) { scr_RosterDown(); } else scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!"); + free_arg_lst(paramlst); } // setstatus(recipient, arg) @@ -494,14 +521,14 @@ return; } - if (!strcasecmp(status, "offline")) st = offline; - else if (!strcasecmp(status, "online")) st = available; - else if (!strcasecmp(status, "avail")) st = available; - else if (!strcasecmp(status, "away")) st = away; - else if (!strcasecmp(status, "invisible")) st = invisible; - else if (!strcasecmp(status, "dnd")) st = dontdisturb; - else if (!strcasecmp(status, "notavail")) st = notavail; - else if (!strcasecmp(status, "free")) st = freeforchat; + if (!strcasecmp(status, IMSTATUS_OFFLINE)) st = offline; + else if (!strcasecmp(status, IMSTATUS_ONLINE)) st = available; + else if (!strcasecmp(status, IMSTATUS_AVAILABLE)) st = available; + else if (!strcasecmp(status, IMSTATUS_AWAY)) st = away; + else if (!strcasecmp(status, IMSTATUS_INVISIBLE)) st = invisible; + else if (!strcasecmp(status, IMSTATUS_DONOTDISTURB)) st = dontdisturb; + else if (!strcasecmp(status, IMSTATUS_NOTAVAILABLE)) st = notavail; + else if (!strcasecmp(status, IMSTATUS_FREE4CHAT)) st = freeforchat; else { scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!"); free_arg_lst(paramlst); @@ -804,8 +831,8 @@ scr_LogPrint(LPRINT_NORMAL, "Missing parameter."); scr_LogPrint(LPRINT_NORMAL, "Please read the manual before using " "the /msay command."); - scr_LogPrint(LPRINT_NORMAL, "(Use \"/msay begin\" to enter " - "multi-line mode...)"); + scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter " + "multi-line mode...)", mkcmdstr("msay")); free_arg_lst(paramlst); return; } @@ -841,10 +868,11 @@ scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.", verbat ? "VERBATIM " : ""); - scr_LogPrint(LPRINT_NORMAL, "Select a buddy and use \"/msay send\" " - "when your message is ready."); + scr_LogPrint(LPRINT_NORMAL, "Select a buddy and use \"%s send\" " + "when your message is ready.", mkcmdstr("msay")); if (verbat) - scr_LogPrint(LPRINT_NORMAL, "Use \"/msay abort\" to abort this mode."); + scr_LogPrint(LPRINT_NORMAL, "Use \"%s abort\" to abort this mode.", + mkcmdstr("msay")); g_free(subj_utf8); return; } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) { @@ -856,7 +884,7 @@ if (!scr_get_multimode()) { scr_LogPrint(LPRINT_NORMAL, "No message to send. " - "Use \"/msay begin\" first."); + "Use \"%s begin\" first.", mkcmdstr("msay")); return; } @@ -1050,7 +1078,7 @@ free_arg_lst(paramlst); } -static void do_clear(char *arg) // Alias for "/buffer clear" +static void do_clear(char *arg) // Alias for "buffer clear" { do_buffer("clear"); } @@ -1842,7 +1870,7 @@ arg = to_utf8(arg); // Set the topic - msg = g_strdup_printf("/me has set the topic to: %s", arg); + msg = g_strdup_printf("%s has set the topic to: %s", mkcmdstr("me"), arg); jb_send_msg(buddy_getjid(bud), msg, ROSTER_TYPE_ROOM, arg); g_free(arg); g_free(msg); diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/compl.h --- a/mcabber/src/compl.h Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/compl.h Sat Sep 30 13:40:48 2006 +0200 @@ -3,23 +3,23 @@ #include -#define COMPL_CMD (1<<0) -#define COMPL_JID (1<<2) -#define COMPL_URLJID (1<<3) // Not implemented yet -#define COMPL_NAME (1<<4) // Not implemented yet -#define COMPL_STATUS (1<<5) -#define COMPL_FILENAME (1<<6) // Not implemented yet -#define COMPL_ROSTER (1<<7) -#define COMPL_BUFFER (1<<8) -#define COMPL_GROUP (1<<9) -#define COMPL_GROUPNAME (1<<10) -#define COMPL_MULTILINE (1<<11) -#define COMPL_ROOM (1<<12) -#define COMPL_RESOURCE (1<<13) -#define COMPL_AUTH (1<<14) -#define COMPL_REQUEST (1<<15) -#define COMPL_EVENTS (1<<16) -#define COMPL_EVENTSID (1<<17) +#define COMPL_CMD (1U<<0) +#define COMPL_JID (1U<<1) +#define COMPL_URLJID (1U<<2) // Not implemented yet +#define COMPL_NAME (1U<<3) // Not implemented yet +#define COMPL_STATUS (1U<<4) +#define COMPL_FILENAME (1U<<5) // Not implemented yet +#define COMPL_ROSTER (1U<<6) +#define COMPL_BUFFER (1U<<7) +#define COMPL_GROUP (1U<<8) +#define COMPL_GROUPNAME (1U<<9) +#define COMPL_MULTILINE (1U<<10) +#define COMPL_ROOM (1U<<11) +#define COMPL_RESOURCE (1U<<12) +#define COMPL_AUTH (1U<<13) +#define COMPL_REQUEST (1U<<14) +#define COMPL_EVENTS (1U<<15) +#define COMPL_EVENTSID (1U<<16) void compl_add_category_word(guint, const char *command); void compl_del_category_word(guint categ, const char *word); diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/hooks.c --- a/mcabber/src/hooks.c Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/hooks.c Sat Sep 30 13:40:48 2006 +0200 @@ -57,10 +57,10 @@ bmsg = g_strdup_printf("<%s> %s", resname, msg); } wmsg = bmsg; - if (!strncmp(msg, "/me ", 4)) + if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me ")))) wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4); } else { - if (!strncmp(msg, "/me ", 4)) + if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me ")))) wmsg = mmsg = g_strdup_printf("*%s %s", jid, msg+4); else wmsg = (char*) msg; @@ -92,7 +92,7 @@ wmsg = bmsg = g_strdup(msg); } else { wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", resname, msg); - if (!strncmp(msg, "/me ", 4)) + if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me ")))) wmsg = mmsg = g_strdup_printf("PRIV#*%s %s", resname, msg+4); } } else { @@ -174,7 +174,7 @@ wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg); } else { wmsg = (char*)msg; - if (!strncmp(msg, "/me ", 4)) { + if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me ")))) { const char *myid = settings_opt_get("username"); if (myid) wmsg = mmsg = g_strdup_printf("*%s %s", settings_opt_get("username"), diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/jab_iq.c --- a/mcabber/src/jab_iq.c Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/jab_iq.c Sat Sep 30 13:40:48 2006 +0200 @@ -136,7 +136,7 @@ // could be freed. p = g_slist_next(p); - if ((!i->ts_expire && now_t > i->ts_create + IQS_MAX_TIMEOUT) || + if ((!i->ts_expire && now_t > i->ts_create + (time_t)IQS_MAX_TIMEOUT) || (i->ts_expire && now_t > i->ts_expire)) { iqs_callback(i->id, NULL, IQS_CONTEXT_TIMEOUT); } diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/jab_priv.h --- a/mcabber/src/jab_priv.h Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/jab_priv.h Sat Sep 30 13:40:48 2006 +0200 @@ -21,12 +21,12 @@ }; -#define IQS_DEFAULT_TIMEOUT 90 -#define IQS_MAX_TIMEOUT 600 +#define IQS_DEFAULT_TIMEOUT 90U +#define IQS_MAX_TIMEOUT 600U -#define IQS_CONTEXT_RESULT 0 /* Normal result should be zero */ -#define IQS_CONTEXT_TIMEOUT 1 -#define IQS_CONTEXT_ERROR 2 +#define IQS_CONTEXT_RESULT 0U /* Normal result should be zero */ +#define IQS_CONTEXT_TIMEOUT 1U +#define IQS_CONTEXT_ERROR 2U extern enum enum_jstate jstate; diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/roster.h --- a/mcabber/src/roster.h Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/roster.h Sat Sep 30 13:40:48 2006 +0200 @@ -41,10 +41,10 @@ enum subscr { sub_none = 0, sub_pending = 1, - sub_to = 1 << 2, - sub_from = 1 << 3, + sub_to = 1 << 1, + sub_from = 1 << 2, sub_both = sub_to|sub_from, - sub_remove = 1 << 4 + sub_remove = 1 << 3 }; enum findwhat { @@ -61,17 +61,17 @@ }; // Roster_type is a set of flags, so values should be 2^n -#define ROSTER_TYPE_USER 1 -#define ROSTER_TYPE_GROUP 2 -#define ROSTER_TYPE_AGENT 4 -#define ROSTER_TYPE_ROOM 8 -#define ROSTER_TYPE_SPECIAL 16 +#define ROSTER_TYPE_USER 1U +#define ROSTER_TYPE_GROUP (1U<<1) +#define ROSTER_TYPE_AGENT (1U<<2) +#define ROSTER_TYPE_ROOM (1U<<3) +#define ROSTER_TYPE_SPECIAL (1U<<4) // Flags: -#define ROSTER_FLAG_MSG 1 // Message not read -#define ROSTER_FLAG_HIDE 2 // Group hidden (or buddy window closed) -#define ROSTER_FLAG_LOCK 4 // Node should not be removed from buddylist -// ROSTER_FLAG_LOCAL 8 // Buddy not on server's roster (??) +#define ROSTER_FLAG_MSG 1U // Message not read +#define ROSTER_FLAG_HIDE (1U<<1) // Group hidden (or buddy window closed) +#define ROSTER_FLAG_LOCK (1U<<2) // Node should not be removed from buddylist +// ROSTER_FLAG_LOCAL (1U<<3) // Buddy not on server's roster (??) extern GList *buddylist; extern GList *current_buddy; diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/screen.c --- a/mcabber/src/screen.c Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/screen.c Sat Sep 30 13:40:48 2006 +0200 @@ -305,7 +305,6 @@ intrflush(stdscr, FALSE); start_color(); use_default_colors(); - Curses = TRUE; ParseColors(); @@ -317,6 +316,7 @@ inputLine[0] = 0; ptr_inputline = inputLine; + Curses = TRUE; return; } @@ -2064,7 +2064,7 @@ int quote = FALSE; // Not a command? - if ((ptr_inputline == inputLine) || (inputLine[0] != '/')) { + if ((ptr_inputline == inputLine) || (inputLine[0] != COMMAND_CHAR)) { if (!current_buddy) return -2; if (buddy_gettype(BUDDATA(current_buddy)) == ROSTER_TYPE_ROOM) { *p_row = inputLine; @@ -2253,7 +2253,7 @@ { if (!Curses) return; // Leave multi-line mode - process_command("/msay abort"); + process_command(mkcmdstr("msay abort")); // Same as Ctrl-g, now scr_cancel_current_completion(); scr_end_current_completion(); @@ -2444,7 +2444,7 @@ if (boundcmd) { gchar *cmd, *boundcmd_locale; boundcmd_locale = from_utf8(boundcmd); - cmd = g_strdup_printf("/%s", boundcmd_locale); + cmd = g_strdup_printf(mkcmdstr("%s"), boundcmd_locale); scr_CheckAutoAway(TRUE); if (process_command(cmd)) return 255; // Quit diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/settings.c --- a/mcabber/src/settings.c Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/settings.c Sat Sep 30 13:40:48 2006 +0200 @@ -136,16 +136,18 @@ if ((strchr(line, '=') != NULL)) { // Only accept the set, alias and bind commands - if (strncmp(line, "set ", 4) && - strncmp(line, "bind ", 5) && - strncmp(line, "alias ", 6)) { + if (strncmp(line, "set ", strlen("set ")) && + strncmp(line, "bind ", strlen("bind ")) && + strncmp(line, "alias ", strlen("alias "))) { scr_LogPrint(LPRINT_LOGNORM, "Error in configuration file (l. %d): bad command", ln); err++; continue; } - *(--line) = '/'; // Set the leading '/' to build a command line - process_command(line); // Process the command + // Set the leading COMMAND_CHAR to build a command line + // and process the command + *(--line) = COMMAND_CHAR; + process_command(line); } else { scr_LogPrint(LPRINT_LOGNORM, "Error in configuration file (l. %d): no assignment", ln); diff -r abfe3ca42c35 -r 1ebd2e7ea395 mcabber/src/settings.h --- a/mcabber/src/settings.h Sat Sep 30 13:32:58 2006 +0200 +++ b/mcabber/src/settings.h Sat Sep 30 13:40:48 2006 +0200 @@ -15,9 +15,14 @@ #define SETTINGS_TYPE_ALIAS 2 #define SETTINGS_TYPE_BINDING 3 +#define COMMAND_CHAR '/' +#define COMMAND_CHARSTR "/" + #define settings_opt_get(k) settings_get(SETTINGS_TYPE_OPTION, k) #define settings_opt_get_int(k) settings_get_int(SETTINGS_TYPE_OPTION, k) +#define mkcmdstr(cmd) COMMAND_CHARSTR cmd + int cfg_read_file(char *filename); guint parse_assigment(gchar *assignment, const gchar **pkey, const gchar **pval);