-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
113 lines (95 loc) · 1.98 KB
/
main.c
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bstr.h"
#include "e2convert.h"
void
usage(char *prognam)
{
printf("\n");
printf("Usage %s <command> [param1, param2, ...]\n", prognam);
printf("\n");
printf("Commands:\n");
printf("\tsoundpatch <partnr>: Display the specified part's"
" sound parameters, along with relevant global setting.\n");
printf("\n");
}
#define E2TXT_CMD_NONE 0
#define E2TXT_CMD_SOUNDPATCH 1
int
main(int argc, char **argv)
{
char *prognam;
char *cmdstr;
int cmd;
int partnr;
bstr_t *sysex;
int ret;
bstr_t *out;
sysex = NULL;
out = NULL;
prognam = argv[0];
cmd = E2TXT_CMD_NONE;
if(argc < 2) {
usage(prognam);
exit(-1);
}
cmdstr = argv[1];
if(xstrempty(cmdstr)) {
fprintf(stderr, "No or invalid command\n");
exit(-1);
}
if(!xstrcmp(cmdstr, "soundpatch")) {
if(argc != 3 || xstrempty(argv[2])) {
usage(prognam);
exit(-1);
}
partnr = xatoi(argv[2]);
if(partnr < 1 || partnr > E2CONV_MAXPART) {
fprintf(stderr, "Invalid part specified.\n");
exit(-1);
}
cmd = E2TXT_CMD_SOUNDPATCH;
} else {
fprintf(stderr, "Unknown command \"%s\"\n", cmdstr);
exit(-1);
}
/* Read sysex data. */
sysex = binit();
if(sysex == NULL) {
fprintf(stderr, "Couldn't allocate bstr for sysex data.\n");
exit(-1);
}
ret = bfromfilep(sysex, stdin);
if(ret != 0) {
fprintf(stderr, "Couldn't read sysex data: %s.\n",
strerror(ret));
buninit(&sysex);
exit(-1);
}
ret = e2c_check_sysex(sysex);
if(ret != 0) {
fprintf(stderr, "Sysex data invalid or incomplete.\n");
buninit(&sysex);
exit(-1);
}
/* Execute command. */
out = binit();
if(out == NULL) {
fprintf(stderr, "Couldn't allocate bstr for output data.\n");
buninit(&sysex);
exit(-1);
}
switch(cmd) {
case E2TXT_CMD_SOUNDPATCH:
ret = e2c_convert_soundpatch(out, sysex, partnr);
if(ret != 0) {
fprintf(stderr, "Couldn't convert soundpatch.\n");
}
btofilep(stdout, out);
break;
}
buninit(&out);
buninit(&sysex);
return 0;
}