Subversion Repositories Kolibri OS

Rev

Rev 3268 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3245 Albom 1
 
8827 rgimad 2
     int i, param_len;
3
     int argc = 1;
4
     int quote = 0;
5
     int argv_len;
6
3245 Albom 7
 
8827 rgimad 8
     if ( param_len == 0 )
9
     return 0;
10
3245 Albom 11
 
8827 rgimad 12
3245 Albom 13
 
8827 rgimad 14
     for (i = 0; i < param_len; i++) {
15
          switch (param[i]) {
16
          case '\\':
17
               if (param[i+1]!='\0') {
18
                    switch(param[i+1]) {
19
3245 Albom 20
 
8827 rgimad 21
                         argv[argc-1][argv_len] = '\n';
22
                         argv_len++;
23
                         i++;
24
                         break;
25
3245 Albom 26
 
8827 rgimad 27
                         argv[argc-1][argv_len] = '\t';
28
                         argv_len++;
29
                         i++;
30
3268 Albom 31
 
8827 rgimad 32
                    case '\'':
33
                    case '"':
34
                    case '?':
35
                         argv[argc-1][argv_len] = param[i+1];
36
                         argv_len++;
37
                         i++;
38
                         break;
39
3268 Albom 40
 
8827 rgimad 41
                         i++;
42
                    };
43
               }
44
               break;
45
3268 Albom 46
 
8827 rgimad 47
               if (quote == 0)
48
                    quote = 1;
3245 Albom 49
               else {
8827 rgimad 50
                    quote = 0;
3245 Albom 51
                    argv[argc-1][argv_len] = '\0';
52
                    argc++;
53
                    argv[argc-1] = (char*) malloc(4096);
54
                    argv[argc-1][argv_len] = '\0';
55
                    argv_len = 0;
56
                    }
57
               break;
8827 rgimad 58
3245 Albom 59
 
8827 rgimad 60
          case 32:
61
               if (quote == 0) {
62
                    if ( ( param[i+1] != 32) || ( param[i+1] != 9) ) {
63
                         if (argv_len != 0) {
64
                              argv[argc-1][argv_len] = '\0';
65
                              argc++;
66
                              argv[argc-1] = (char*) malloc(4096);
67
                              argv[argc-1][argv_len] = '\0';
68
                              argv_len = 0;
69
                         }
3245 Albom 70
                    }
8827 rgimad 71
               } else {
72
                    argv[argc-1][argv_len] = param[i];
3245 Albom 73
                    argv_len++;
74
               }
8827 rgimad 75
               break;
76
          default:
77
               argv[argc-1][argv_len] = param[i];
78
               argv_len++;
79
               break;
80
3245 Albom 81
 
8827 rgimad 82
     } // for end
83
3245 Albom 84
 
8827 rgimad 85
3268 Albom 86
 
8827 rgimad 87
          free(argv[argc-1]);
88
          argc--;
89
     }
90
3245 Albom 91
 
8827 rgimad 92
}
3245 Albom 93
94
 
95
 
8827 rgimad 96
     int i;
97
     for (i = 0; i < argc; i++) free(argv[i]);
98
}
3245 Albom 99