Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • root_commands.c

    r3cd4016 r8358691  
    5555       
    5656        len = strlen( cmd[0] );
    57         for( i = 0; commands[i].command; i++ )
    58                 if( g_strncasecmp( commands[i].command, cmd[0], len ) == 0 )
    59                 {
    60                         if( commands[i+1].command &&
    61                             g_strncasecmp( commands[i+1].command, cmd[0], len ) == 0 )
     57        for( i = 0; root_commands[i].command; i++ )
     58                if( g_strncasecmp( root_commands[i].command, cmd[0], len ) == 0 )
     59                {
     60                        if( root_commands[i+1].command &&
     61                            g_strncasecmp( root_commands[i+1].command, cmd[0], len ) == 0 )
    6262                                /* Only match on the first letters if the match is unique. */
    6363                                break;
    6464                       
    65                         MIN_ARGS( commands[i].required_parameters );
     65                        MIN_ARGS( root_commands[i].required_parameters );
    6666                       
    67                         commands[i].execute( irc, cmd );
     67                        root_commands[i].execute( irc, cmd );
    6868                        return;
    6969                }
     
    12841284}
    12851285
    1286 static void cmd_nick( irc_t *irc, char **cmd )
    1287 {
    1288         irc_usermsg( irc, "This command is deprecated. Try: account %s set display_name", cmd[1] );
    1289 }
    1290 
    12911286/* Maybe this should be a stand-alone command as well? */
    12921287static void bitlbee_whatsnew( irc_t *irc )
     
    13291324
    13301325/* IMPORTANT: Keep this list sorted! The short command logic needs that. */
    1331 const command_t commands[] = {
     1326command_t root_commands[] = {
    13321327        { "account",        1, cmd_account,        0 },
    13331328        { "add",            2, cmd_add,            0 },
     
    13431338        { "identify",       1, cmd_identify,       0 },
    13441339        { "info",           1, cmd_info,           0 },
    1345         { "nick",           1, cmd_nick,           0 },
    13461340        { "no",             0, cmd_yesno,          0 },
    13471341        { "qlist",          0, cmd_qlist,          0 },
     
    13531347        { "transfer",       0, cmd_transfer,       0 },
    13541348        { "yes",            0, cmd_yesno,          0 },
    1355         { NULL }
     1349        /* Not expecting too many plugins adding root commands so just make a
     1350           dumb array with some empty entried at the end. */
     1351        { NULL },
     1352        { NULL },
     1353        { NULL },
     1354        { NULL },
     1355        { NULL },
     1356        { NULL },
     1357        { NULL },
     1358        { NULL },
     1359        { NULL },
    13561360};
     1361static const int num_root_commands = sizeof( root_commands ) / sizeof( command_t );
     1362
     1363gboolean root_command_add( const char *command, int params, void (*func)(irc_t *, char **args), int flags )
     1364{
     1365        int i;
     1366       
     1367        if( root_commands[num_root_commands-2].command )
     1368                /* Planning fail! List is full. */
     1369                return FALSE;
     1370       
     1371        for( i = 0; root_commands[i].command; i++ )
     1372        {
     1373                if( g_strcasecmp( root_commands[i].command, command ) == 0 )
     1374                        return FALSE;
     1375                else if( g_strcasecmp( root_commands[i].command, command ) > 0 )
     1376                        break;
     1377        }
     1378        memmove( root_commands + i + 1, root_commands + i,
     1379                 sizeof( command_t ) * ( num_root_commands - i - 1 ) );
     1380       
     1381        root_commands[i].command = g_strdup( command );
     1382        root_commands[i].required_parameters = params;
     1383        root_commands[i].execute = func;
     1384        root_commands[i].flags = flags;
     1385       
     1386        return TRUE;
     1387}
Note: See TracChangeset for help on using the changeset viewer.