manual page distributed with 4.1BSD
[unix-history] / usr / src / usr.bin / uucp / libuu / getprm.c
CommitLineData
b4f997bc 1#ifndef lint
46b15d8a 2static char sccsid[] = "@(#)getprm.c 5.2 (Berkeley) %G%";
b4f997bc
SL
3#endif
4
5#include <stdio.h>
6
7#define LQUOTE '('
8#define RQUOTE ')'
9#define NOSYSPART 0
10#define HASSYSPART 1
11
12
46b15d8a
RC
13/*
14 * get next parameter from s
b4f997bc
SL
15 *
16 * return - pointer to next character in s
17 */
18
19char *
20getprm(s, prm)
21register 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')
46b15d8a 31 return NULL;
b4f997bc
SL
32
33 if (*s == '>' || *s == '<' || *s == '|'
34 || *s == ';' || *s == '&') {
35 *prm++ = *s++;
36 *prm = '\0';
46b15d8a 37 return s;
b4f997bc
SL
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';
46b15d8a 47 return s;
b4f997bc
SL
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';
46b15d8a 58 return s;
b4f997bc
SL
59 }
60 }
61
62 while (*s != ' ' && *s != '\t' && *s != '<'
46b15d8a
RC
63 && *s != '>' && *s != '|' && *s != '\0'
64 && *s != '&' && *s != ';' && *s != '\n')
b4f997bc
SL
65 *prm++ = *s++;
66 *prm = '\0';
67
46b15d8a 68 return s;
b4f997bc
SL
69}
70
46b15d8a
RC
71/*
72 * split into system and file part
b4f997bc
SL
73 *
74 * return codes:
75 * NOSYSPART
76 * HASSYSPART
77 */
78
79split(name, sys, rest)
80register char *name, *rest;
81char *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';
46b15d8a 95 return NOSYSPART;
b4f997bc
SL
96 }
97 }
98
99 if ((c = index(name, '!')) == NULL) {
100 strcpy(rest, name);
101 *sys = '\0';
46b15d8a 102 return NOSYSPART;
b4f997bc
SL
103 }
104
105 *c = '\0';
106 for (i = 0; i < 7; i++)
107 if ((*sys++ = *name++) == '\0')
108 break;
109
110 strcpy(rest, ++c);
46b15d8a 111 return HASSYSPART;
b4f997bc 112}