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
62
63
64
65
66
67
68
69
70
|
/*
mkocp.c
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <malloc.h>
#include <process.h>
/* kpathsea functions
*/
#include <kpathsea/kpathsea.h>
int main(int ac, char **av)
{
int savo, savi;
FILE *fnul;
char name[256];
char fullname[256];
char *p;
kpse_set_program_name(av[0], NULL);
if(ac != 2) {
fprintf(stderr,"%s : Usage %s ocpname\n", av[0], av[0]);
return 1;
}
p = strrchr(av[1], '.');
if(p)
*p = '\0';
strcpy(name, av[1]);
strcpy(fullname, name);
strcat(fullname, ".ocp");
/* save stdout and stdin */
savo = _dup(fileno(stdout));
savi = _dup(fileno(stdin));
/* connect stdout to stderr */
_dup2(fileno(stderr), fileno(stdout));
/* connect stdin to nul device */
if(!(fnul = fopen("nul", "r"))) {
fprintf(stderr, "Cannot open nul device to read\n");
exit(100);
}
_dup2(fileno(fnul), fileno(stdin));
/* COMMAND */
spawnlp(P_WAIT, "otp2ocp", "otp2ocp", name, NULL);
/* END COMMAND */
/* return to original stdout and stdin */
_dup2(savo, fileno(stdout));
close(savo);
_dup2(savi, fileno(stdin));
close(savi);
/* close nul device */
fclose(fnul);
if(_access(fullname, 0) == 0)
printf("%s\n", fullname);
return 0;
}
|