113649Ssam #ifndef lint 2*17835Sralph static char sccsid[] = "@(#)getprm.c 5.2 (Berkeley) 01/22/85"; 313649Ssam #endif 413649Ssam 513649Ssam #include <stdio.h> 613649Ssam 713649Ssam #define LQUOTE '(' 813649Ssam #define RQUOTE ')' 913649Ssam #define NOSYSPART 0 1013649Ssam #define HASSYSPART 1 1113649Ssam 1213649Ssam 13*17835Sralph /* 14*17835Sralph * get next parameter from s 1513649Ssam * 1613649Ssam * return - pointer to next character in s 1713649Ssam */ 1813649Ssam 1913649Ssam char * 2013649Ssam getprm(s, prm) 2113649Ssam register char *s, *prm; 2213649Ssam { 2313649Ssam register char *c; 2413649Ssam char *index(); 2513649Ssam 2613649Ssam while (*s == ' ' || *s == '\t' || *s == '\n') 2713649Ssam s++; 2813649Ssam 2913649Ssam *prm = '\0'; 3013649Ssam if (*s == '\0') 31*17835Sralph return NULL; 3213649Ssam 3313649Ssam if (*s == '>' || *s == '<' || *s == '|' 3413649Ssam || *s == ';' || *s == '&') { 3513649Ssam *prm++ = *s++; 3613649Ssam *prm = '\0'; 37*17835Sralph return s; 3813649Ssam } 3913649Ssam 4013649Ssam /* look for quoted argument */ 4113649Ssam if (*s == LQUOTE) { 4213649Ssam if ((c = index(s + 1, RQUOTE)) != NULL) { 4313649Ssam c++; 4413649Ssam while (c != s) 4513649Ssam *prm++ = *s++; 4613649Ssam *prm = '\0'; 47*17835Sralph return s; 4813649Ssam } 4913649Ssam } 5013649Ssam 5113649Ssam /* look for ` ` string */ 5213649Ssam if (*s == '`') { 5313649Ssam if ((c = index(s + 1, '`')) != NULL) { 5413649Ssam c++; 5513649Ssam while (c != s) 5613649Ssam *prm++ = *s++; 5713649Ssam *prm = '\0'; 58*17835Sralph return s; 5913649Ssam } 6013649Ssam } 6113649Ssam 6213649Ssam while (*s != ' ' && *s != '\t' && *s != '<' 63*17835Sralph && *s != '>' && *s != '|' && *s != '\0' 64*17835Sralph && *s != '&' && *s != ';' && *s != '\n') 6513649Ssam *prm++ = *s++; 6613649Ssam *prm = '\0'; 6713649Ssam 68*17835Sralph return s; 6913649Ssam } 7013649Ssam 71*17835Sralph /* 72*17835Sralph * split into system and file part 7313649Ssam * 7413649Ssam * return codes: 7513649Ssam * NOSYSPART 7613649Ssam * HASSYSPART 7713649Ssam */ 7813649Ssam 7913649Ssam split(name, sys, rest) 8013649Ssam register char *name, *rest; 8113649Ssam char *sys; 8213649Ssam { 8313649Ssam register char *c; 8413649Ssam char *index(), *strcpy(); 8513649Ssam int i; 8613649Ssam 8713649Ssam if (*name == LQUOTE) { 8813649Ssam if ((c = index(name + 1, RQUOTE)) != NULL) { 8913649Ssam /* strip off quotes */ 9013649Ssam name++; 9113649Ssam while (c != name) 9213649Ssam *rest++ = *name++; 9313649Ssam *rest = '\0'; 9413649Ssam *sys = '\0'; 95*17835Sralph return NOSYSPART; 9613649Ssam } 9713649Ssam } 9813649Ssam 9913649Ssam if ((c = index(name, '!')) == NULL) { 10013649Ssam strcpy(rest, name); 10113649Ssam *sys = '\0'; 102*17835Sralph return NOSYSPART; 10313649Ssam } 10413649Ssam 10513649Ssam *c = '\0'; 10613649Ssam for (i = 0; i < 7; i++) 10713649Ssam if ((*sys++ = *name++) == '\0') 10813649Ssam break; 10913649Ssam 11013649Ssam strcpy(rest, ++c); 111*17835Sralph return HASSYSPART; 11213649Ssam } 113