xref: /csrg-svn/usr.bin/uucp/libuu/getprm.c (revision 23603)
113649Ssam #ifndef lint
2*23603Sbloom static char sccsid[] = "@(#)getprm.c	5.3 (Berkeley) 06/19/85";
313649Ssam #endif
413649Ssam 
5*23603Sbloom #include "uucp.h"
613649Ssam 
713649Ssam #define LQUOTE	'('
813649Ssam #define RQUOTE ')'
913649Ssam #define NOSYSPART	0
1013649Ssam #define HASSYSPART	1
1113649Ssam 
12*23603Sbloom /*LINTLIBRARY*/
1313649Ssam 
1417835Sralph /*
1517835Sralph  *	get next parameter from s
1613649Ssam  *
1713649Ssam  *	return - pointer to next character in s
1813649Ssam  */
1913649Ssam 
2013649Ssam char *
2113649Ssam getprm(s, prm)
2213649Ssam register char *s, *prm;
2313649Ssam {
2413649Ssam 	register char *c;
2513649Ssam 
2613649Ssam 	while (*s == ' ' || *s == '\t' || *s == '\n')
2713649Ssam 		s++;
2813649Ssam 
2913649Ssam 	*prm = '\0';
3013649Ssam 	if (*s == '\0')
3117835Sralph 		return NULL;
3213649Ssam 
3313649Ssam 	if (*s == '>' || *s == '<' || *s == '|'
3413649Ssam 	  || *s == ';' || *s == '&') {
3513649Ssam 		*prm++ = *s++;
3613649Ssam 		*prm = '\0';
3717835Sralph 		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';
4717835Sralph 			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';
5817835Sralph 			return s;
5913649Ssam 		}
6013649Ssam 	}
6113649Ssam 
6213649Ssam 	while (*s != ' ' && *s != '\t' && *s != '<'
6317835Sralph 		&& *s != '>' && *s != '|' && *s != '\0'
6417835Sralph 		&& *s != '&' && *s != ';' && *s != '\n')
6513649Ssam 		*prm++ = *s++;
6613649Ssam 	*prm = '\0';
6713649Ssam 
6817835Sralph 	return s;
6913649Ssam }
7013649Ssam 
7117835Sralph /*
7217835Sralph  *	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;
84*23603Sbloom 	register int i;
8513649Ssam 
8613649Ssam 	if (*name == LQUOTE) {
8713649Ssam 		if ((c = index(name + 1, RQUOTE)) != NULL) {
8813649Ssam 		/* strip off quotes */
8913649Ssam 			name++;
9013649Ssam 			while (c != name)
9113649Ssam 				*rest++ = *name++;
9213649Ssam 			*rest = '\0';
9313649Ssam 			*sys = '\0';
9417835Sralph 			return NOSYSPART;
9513649Ssam 		}
9613649Ssam 	}
9713649Ssam 
9813649Ssam 	if ((c = index(name, '!')) == NULL) {
9913649Ssam 		strcpy(rest, name);
10013649Ssam 		*sys = '\0';
10117835Sralph 		return NOSYSPART;
10213649Ssam 	}
10313649Ssam 
104*23603Sbloom 	*c++ = '\0';
105*23603Sbloom 	strncpy(sys, name, MAXBASENAME);
106*23603Sbloom 	sys[MAXBASENAME] = '\0';
10713649Ssam 
108*23603Sbloom 	strcpy(rest, c);
10917835Sralph 	return HASSYSPART;
11013649Ssam }
111