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