Subversion Repositories Kolibri OS

Rev

Rev 3247 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. /// ===========================================================
  3.  
  4. int parameters_prepare(char *param, char* argv[])
  5. {
  6.  
  7. int i, param_len;
  8. int argc = 1;
  9. int quote = 0;
  10. int argv_len;
  11.  
  12. param_len = strlen(param);
  13. if ( param_len == 0 )
  14.    return 0;
  15.  
  16. argv[0] = (char*) malloc(4096);
  17.  
  18. argv_len = 0;
  19. for (i = 0; i < param_len; i++)
  20.     {
  21.     switch (param[i])
  22.            {
  23.  
  24.            case '\\':
  25.                 if (param[i+1]!='\0')
  26.                    {
  27.                     switch(param[i+1])
  28.                         {
  29.  
  30.                         case 'n':
  31.                              argv[argc-1][argv_len] = '\n';
  32.                              argv_len++;
  33.                              i++;
  34.                              break;
  35.  
  36.                         case 't':
  37.                              argv[argc-1][argv_len] = '\t';
  38.                              argv_len++;
  39.                              i++;
  40.  
  41.                         case '\\':
  42.                         case '\'':
  43.                         case '"':
  44.                         case '?':
  45.                              argv[argc-1][argv_len] = param[i+1];
  46.                              argv_len++;
  47.                              i++;
  48.                              break;
  49.  
  50.                         default:
  51.                              i++;
  52.                         };
  53.                    }
  54.                 break;
  55.  
  56.            case '"':
  57.                 if (quote == 0)
  58.                     quote = 1;
  59.                 else
  60.                     {
  61.                     quote = 0;
  62.                     argv[argc-1][argv_len] = '\0';
  63.                     argc++;
  64.                     argv[argc-1] = (char*) malloc(4096);
  65.                     argv[argc-1][argv_len] = '\0';
  66.                     argv_len = 0;
  67.                     }
  68.                 break;
  69.  
  70.            case 9:
  71.            case 32:
  72.                 if (quote == 0)
  73.                    {
  74.                    if ( ( param[i+1] != 32) || ( param[i+1] != 9) )
  75.                       {
  76.                       if (argv_len != 0)
  77.                          {
  78.                          argv[argc-1][argv_len] = '\0';
  79.                          argc++;
  80.                          argv[argc-1] = (char*) malloc(4096);
  81.                          argv[argc-1][argv_len] = '\0';
  82.                          argv_len = 0;
  83.                          }
  84.                       }
  85.                    }
  86.                    else
  87.                     {
  88.                     argv[argc-1][argv_len] = param[i];
  89.                     argv_len++;
  90.                     }
  91.  
  92.                    break;
  93.  
  94.            default:
  95.                    argv[argc-1][argv_len] = param[i];
  96.                    argv_len++;
  97.                    break;
  98.  
  99.            };
  100.     }
  101.  
  102. argv[argc-1][argv_len] = '\0';
  103.  
  104. if ( strlen(argv[argc-1]) == 0 )
  105.    {
  106.    free(argv[argc-1]);
  107.    argc--;
  108.    }
  109.  
  110. return argc;
  111. }
  112.  
  113. /// ===========================================================
  114.  
  115. void parameters_free(int argc, char* argv[])
  116. {
  117.  
  118. int i;
  119.  
  120. for (i = 0; i < argc; i++)
  121.     free(argv[i]);
  122.  
  123. }
  124.  
  125. /// ===========================================================
  126.  
  127.