home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d536 / chemesthetics.lha / Chemesthetics / Source / Source.LZH / _main.c next >
C/C++ Source or Header  |  1991-04-22  |  1KB  |  61 lines

  1. /* ------------------------------------------ */
  2. /*   These are my modified startup routines   */
  3. /* ------------------------------------------ */
  4.  
  5. #include <exec/types.h>
  6. #include <stdio.h>
  7.  
  8. #define MAXARG 32
  9. #define QUOTE '"'
  10.  
  11. VOID _main(line)
  12. register char *line;
  13. {
  14.     int argc = 0;             /* arg count */
  15.     char *argv[MAXARG];          /* arg pointers */
  16.  
  17.     argc = ParseCommands(0, line, argv);
  18.     if(argc > MAXARG)
  19.       XCEXIT(1);
  20.  
  21.     main(argc, argv);
  22.     XCEXIT(0);
  23. }
  24.  
  25. /* I have separated this to own routine, because I also use this to parse
  26.    redirection file.
  27. */
  28.  
  29. int ParseCommands(int Start, register char *line, char *args[])
  30. {
  31.     register char **pargv;
  32.     int argc;
  33.  
  34.     argc = Start;
  35.  
  36.     while (argc < MAXARG)
  37.     {
  38.     while (isspace(*line))  line++;
  39.     if (*line == '\0')      break;
  40.     pargv = &args[argc++];
  41.     if (*line == QUOTE)
  42.         {
  43.         *pargv = ++line;  /* ptr inside quoted string */
  44.         while ((*line != '\0') && (*line != QUOTE)) line++;
  45.         if (*line == '\0') {
  46.         return(MAXARG+1);
  47.         }
  48.         else        *line++ = '\0';  /* terminate arg */
  49.     }
  50.     else        /* non-quoted arg */
  51.     {
  52.         *pargv = line;
  53.         while ((*line != '\0') && (!isspace(*line))) line++;
  54.         if (*line == '\0')  break;
  55.         else        *line++ = '\0';  /* terminate arg */
  56.     }
  57.     }  /* while */
  58.  
  59.     return(argc);
  60. }
  61.