Changeset 5153

Show
Ignore:
Timestamp:
01/05/08 01:04:28 (8 months ago)
Author:
morris
Message:

Make commands with options behave more like normal Unix commands

Add -r command for ls, mostly for debugging

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wire/trunk/wire/commands.c

    r5079 r5153  
    151151          wr_cmd_comment }, 
    152152        { "connect", 
    153           false, "<server> [-l <login>] [-p <password>] [-P <port>]", 
     153          false, "[-l <login>] [-p <password>] [-P <port>] <server>", 
    154154          false, 1, -1, WR_COMPLETER_NONE, 
    155155          wr_cmd_open }, 
     
    199199          wr_cmd_invite }, 
    200200        { "join", 
    201           false, "<server> [-l <login>] [-p <password>] [-P <port>]", 
     201          false, "[-l <login>] [-p <password>] [-P <port>] <server>", 
    202202          false, 1, -1, WR_COMPLETER_NONE, 
    203203          wr_cmd_open }, 
     
    247247          wr_cmd_nick }, 
    248248        { "open", 
    249           true, "<server> [-l <login>] [-p <password>] [-P <port>]", 
     249          true, "[-l <login>] [-p <password>] [-P <port>] <server>", 
    250250          false, 1, -1, WR_COMPLETER_NONE, 
    251251          wr_cmd_open }, 
     
    299299          wr_cmd_search }, 
    300300        { "server", 
    301           false, "<server> [-l <login>] [-p <password>] [-P <port>]", 
     301          false, "[-l <login>] [-p <password>] [-P <port>] <server>", 
    302302          false, 1, -1, WR_COMPLETER_NONE, 
    303303          wr_cmd_open }, 
     
    399399                return; 
    400400        } 
    401  
     401         
    402402        wi_release(wr_last_command); 
    403403        wr_last_command = wi_string_init_with_cstring(wi_string_alloc(), wr_commands[index].name); 
     
    940940 
    941941/* 
    942         /ls <path> 
     942        /ls [-r] <path> 
    943943*/ 
    944944 
    945945static void wr_cmd_ls(wi_array_t *arguments) { 
     946        const char              **argv; 
     947        int                             ch; 
     948        wi_boolean_t    recursive = false; 
     949         
     950        if(wi_array_count(arguments) == 0) 
     951                wi_array_add_data(arguments, WI_STR("ls")); 
     952        else 
     953                wi_array_insert_data_at_index(arguments, WI_STR("ls"), 0); 
     954         
     955        argv = wi_array_create_argv(arguments); 
     956         
     957        wi_getopt_reset(); 
     958 
     959        while((ch = getopt(wi_array_count(arguments), (char **) argv, "rh")) != -1) { 
     960                switch(ch) { 
     961                        case 'r': 
     962                                recursive = true; 
     963                                break; 
     964 
     965                        case '?': 
     966                        case 'h': 
     967                        default: 
     968                                wr_command_usage(WI_STR("ls")); 
     969                                 
     970                                return; 
     971                                break; 
     972                } 
     973        } 
     974         
     975        wi_array_destroy_argv(wi_array_count(arguments), argv); 
     976         
    946977        wr_files_clear(); 
    947978        wr_ls_state = WR_LS_LISTING; 
    948  
    949         if(wi_array_count(arguments) == 0
     979         
     980        if((wi_uinteger_t) optind >= wi_array_count(arguments)
    950981                wr_files_ld = wi_retain(wr_files_cwd); 
    951982        else 
    952                 wr_files_ld = wi_retain(wr_files_full_path(WI_ARRAY(arguments, 0))); 
    953  
    954         wr_send_command(WI_STR("LIST %@"), wr_files_ld); 
     983                wr_files_ld = wi_retain(wr_files_full_path(WI_ARRAY(arguments, optind))); 
     984 
     985        wr_send_command(WI_STR("%@ %@"), recursive ? WI_STR("LISTRECURSIVE") : WI_STR("LIST"), wr_files_ld); 
    955986} 
    956987 
     
    11741205 
    11751206/* 
    1176         /open <server> [-l <login>] [-p <password>] 
     1207        /open [-l <login>] [-p <password>] <server> 
    11771208*/ 
    11781209 
     
    11811212        wi_url_t                *url; 
    11821213        const char              **argv; 
    1183         wi_uinteger_t   argc, i, port; 
     1214        wi_uinteger_t   port; 
    11841215        int                             ch; 
    11851216         
     
    11871218        login = password = NULL; 
    11881219        port = 0; 
    1189          
    1190         argc = wi_array_count(arguments); 
    1191         argv = wi_array_argv(arguments); 
     1220 
     1221        wi_array_insert_data_at_index(arguments, WI_STR("open"), 0); 
     1222        argv = wi_array_create_argv(arguments); 
    11921223         
    11931224        wi_getopt_reset(); 
    11941225 
    1195         while((ch = getopt(argc, (char **) argv, "hl:P:p:")) != -1) { 
     1226        while((ch = getopt(wi_array_count(arguments), (char **) argv, "hl:P:p:")) != -1) { 
    11961227                switch(ch) { 
    11971228                        case 'l': 
     
    12171248        } 
    12181249         
    1219         for(i = 0; i < argc; i++) 
    1220                 free((char *) argv[i]); 
    1221          
    1222         free(argv); 
    1223          
    1224         url = wi_autorelease(wi_url_init_with_string(wi_url_alloc(), WI_ARRAY(arguments, 0))); 
     1250        wi_array_destroy_argv(wi_array_count(arguments), argv); 
     1251         
     1252        if(optind >= wi_array_count(arguments)) { 
     1253                wr_command_usage(WI_STR("open")); 
     1254                 
     1255                return; 
     1256        } 
     1257         
     1258        url = wi_autorelease(wi_url_init_with_string(wi_url_alloc(), WI_ARRAY(arguments, optind))); 
    12251259        host = wi_url_host(url); 
    12261260