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