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