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