| 1 | #include <stdio.h> |
| 2 | |
| 3 | #define LQUOTE '(' |
| 4 | #define RQUOTE ')' |
| 5 | #define NOSYSPART 0 |
| 6 | #define HASSYSPART 1 |
| 7 | |
| 8 | /******* |
| 9 | * char * |
| 10 | * getprm(s, prm) get next parameter from s |
| 11 | * char *s, *prm; |
| 12 | * |
| 13 | * return - pointer to next character in s |
| 14 | */ |
| 15 | |
| 16 | char * |
| 17 | getprm(s, prm) |
| 18 | char *s, *prm; |
| 19 | { |
| 20 | char *c; |
| 21 | |
| 22 | while (*s == ' ' || *s == '\t' || *s == '\n') |
| 23 | s++; |
| 24 | |
| 25 | *prm = '\0'; |
| 26 | if (*s == '\0') |
| 27 | return(NULL); |
| 28 | |
| 29 | if (*s == '>' || *s == '<' || *s == '|' |
| 30 | || *s == ';') { |
| 31 | *prm++ = *s++; |
| 32 | *prm = '\0'; |
| 33 | return(s); |
| 34 | } |
| 35 | |
| 36 | /* look for quoted argument */ |
| 37 | if (*s == LQUOTE) { |
| 38 | if ((c = index(s + 1, RQUOTE)) != NULL) { |
| 39 | c++; |
| 40 | while (c != s) |
| 41 | *prm++ = *s++; |
| 42 | *prm = '\0'; |
| 43 | return(s); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | while (*s != ' ' && *s != '\t' && *s != '<' |
| 48 | && *s != '>' && *s != '|' && *s != '\0' |
| 49 | && *s != ';' && *s != '\n') |
| 50 | *prm++ = *s++; |
| 51 | *prm = '\0'; |
| 52 | |
| 53 | return(s); |
| 54 | } |
| 55 | |
| 56 | /*** |
| 57 | * split(name, sys, rest) split into system and file part |
| 58 | * char *name, *sys, *rest; |
| 59 | |
| 60 | * |
| 61 | * return codes: |
| 62 | * NOSYSPART |
| 63 | * HASSYSPART |
| 64 | */ |
| 65 | |
| 66 | split(name, sys, rest) |
| 67 | char *name, *sys, *rest; |
| 68 | { |
| 69 | char *c; |
| 70 | int i; |
| 71 | |
| 72 | if (*name == LQUOTE) { |
| 73 | if ((c = index(name + 1, RQUOTE)) != NULL) { |
| 74 | /* strip off quotes */ |
| 75 | name++; |
| 76 | while (c != name) |
| 77 | *rest++ = *name++; |
| 78 | *rest = '\0'; |
| 79 | *sys = '\0'; |
| 80 | return(NOSYSPART); |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | if ((c = index(name, '!')) == NULL) { |
| 85 | strcpy(rest, name); |
| 86 | *sys = '\0'; |
| 87 | return(NOSYSPART); |
| 88 | } |
| 89 | |
| 90 | *c = '\0'; |
| 91 | for (i = 0; i < 7; i++) |
| 92 | if ((*sys++ = *name++) == '\0') |
| 93 | break; |
| 94 | |
| 95 | strcpy(rest, ++c); |
| 96 | return(HASSYSPART); |
| 97 | } |