xref: /csrg-svn/usr.bin/uucp/libuu/getprm.c (revision 17835)
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