1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
/* ISC license. */
#include <string.h>
#include <skalibs/strerr2.h>
#include <execline/execline.h>
#include "exlsn.h"
#define USAGE "see http://skarnet.org/software/execline/multisubstitute.html"
static char const *const commands[8] =
{
"define",
"importas",
"import",
"elglob",
"elgetpositionals",
"multidefine",
0
} ;
static exlsnfunc_t_ref const functions[8] =
{
&exlsn_define,
&exlsn_importas,
&exlsn_import,
&exlsn_elglob,
&exlsn_exlp,
&exlsn_multidefine,
0
} ;
int main (int argc, char const **argv, char const *const *envp)
{
exlsn_t info = EXLSN_ZERO ;
int argc1 ;
PROG = "multisubstitute" ;
if (!--argc) strerr_dieusage(100, USAGE) ;
argc1 = el_semicolon(++argv) ;
if (argc1 >= argc) strerr_dief1x(100, "unterminated block") ;
if (argc1 + 1 == argc) strerr_dieusage(100, USAGE) ;
while (argc1)
{
int n ;
unsigned int i = 0 ;
for (; commands[i] ; i++) if (!strcmp(*argv, commands[i])) break ;
if (!commands[i]) strerr_dief3x(100, "syntax error: unrecognized", " directive ", *argv) ;
n = (*(functions[i]))(argc1, argv, envp, &info) ;
if (n < 0) switch (n)
{
case -3 : strerr_dief3x(100, "syntax error at", " directive ", commands[i]) ;
case -2 : strerr_dief3x(100, "wrong key for", " directive ", commands[i]) ;
case -1 : strerr_diefu3sys(111, "run", " directive ", commands[i]) ;
default : strerr_dief3x(111, "unknown error with", " directive ", commands[i]) ;
}
argv += n ; argc1 -= n ; argc -= n ;
}
el_substandrun(argc-1, argv+1, envp, &info) ;
}
|