5 * This work is licensed under the terms of 3-clause BSD license.
6 * See COPYING file in the top-level directory.
13 #include "my_assert.h"
17 #include "protoparse.h"
19 int main(int argc, char *argv[])
21 const struct parsed_proto *pp;
23 char basename[256] = { 0, };
34 for (arg = 1; arg < argc; arg++) {
35 if (IS(argv[arg], "-n"))
37 else if (IS(argv[arg], "-b") && arg < argc - 1)
38 snprintf(basename, sizeof(basename), "%s", argv[++arg]);
43 if (argc != arg + 2) {
44 printf("usage:\n%s [-n] [-b <basename>] <.h> <.def>\n", argv[0]);
49 fhdr = fopen(hdrfn, "r");
50 my_assert_not(fhdr, NULL);
52 fout = fopen(argv[arg++], "w");
53 my_assert_not(fout, NULL);
55 if (basename[0] == 0) {
56 p = strrchr(hdrfn, '.');
57 my_assert_not(p, NULL);
58 p2 = strrchr(hdrfn, '/');
62 my_assert((unsigned int)l < 256, 1);
63 memcpy(basename, p2, l);
67 snprintf(fmt, sizeof(fmt), "%s_%%d", basename);
69 fprintf(fout, "LIBRARY %s\n", basename);
70 fprintf(fout, "EXPORTS\n");
72 while (fgets(line, sizeof(line), fhdr))
78 if (IS_START(p, "//"))
82 while (p != NULL && *p != 0) {
83 p = next_word(word, sizeof(word), p);
84 ret = sscanf(word, fmt, &ord);
89 printf("scan for '%s' failed for '%s'\n", fmt, line);
93 snprintf(word, sizeof(word), fmt, ord);
94 pp = proto_parse(fhdr, word, 0);
99 fputc(pp->is_fastcall ? '@' : ' ', fout);
100 fprintf(fout, "%s", word);
102 fprintf(fout, "@%-2d", pp->argc * 4);
105 fprintf(fout, " @%d", ord);
107 fprintf(fout, " NONAME");
116 // vim:ts=2:shiftwidth=2:expandtab