mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
portable documentation
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@269 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
da42200b24
commit
7eed09b34f
6 changed files with 428 additions and 239 deletions
|
@ -1,10 +1,10 @@
|
|||
CFLAGS = -Wall -ggdb
|
||||
|
||||
TARGET = amalgamate
|
||||
OBJS = amalgamate.o
|
||||
TARGETS = amalgamate textfilter
|
||||
OBJS = $(addsuffix .o,$(TARGETS))
|
||||
|
||||
all: $(TARGET)
|
||||
all: $(TARGETS)
|
||||
|
||||
clean:
|
||||
$(RM) $(TARGET) $(OBJS)
|
||||
$(RM) $(TARGETS) $(OBJS)
|
||||
|
||||
|
|
114
tools/textfilter.c
Normal file
114
tools/textfilter.c
Normal file
|
@ -0,0 +1,114 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
static int check_defines(const char **defs, int defcount, char *tdef)
|
||||
{
|
||||
int i, len;
|
||||
|
||||
len = strlen(tdef);
|
||||
for (i = 0; i < len; i++)
|
||||
if (tdef[i] == ' ' || tdef[i] == '\r' || tdef[i] == '\n') break;
|
||||
tdef[i] = 0;
|
||||
|
||||
for (i = 0; i < defcount; i++)
|
||||
{
|
||||
if (strcmp(defs[i], tdef) == 0)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void do_counters(char *str)
|
||||
{
|
||||
static int counters[4] = { 1, 1, 1, 1 };
|
||||
char buff[1024];
|
||||
int counter;
|
||||
char *s = str;
|
||||
|
||||
while ((s = strstr(s, "@@")))
|
||||
{
|
||||
if (s[2] < '0' || s[2] > '3') { s++; continue; }
|
||||
|
||||
counter = s[2] - '0';
|
||||
snprintf(buff, sizeof(buff), "%i%s", counters[counter]++, s + 3);
|
||||
strcpy(s, buff);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char buff[1024];
|
||||
FILE *fi, *fo;
|
||||
int skip_mode = 0, ifdef_level = 0, line = 0;
|
||||
|
||||
if (argc < 3)
|
||||
{
|
||||
printf("usage:\n%s <file_in> <file_out> [defines...]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fi = fopen(argv[1], "r");
|
||||
if (fi == NULL)
|
||||
{
|
||||
printf("failed to open: %s\n", argv[1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
fo = fopen(argv[2], "w");
|
||||
if (fo == NULL)
|
||||
{
|
||||
printf("failed to open: %s\n", argv[2]);
|
||||
return 3;
|
||||
}
|
||||
|
||||
for (++line; !feof(fi); line++)
|
||||
{
|
||||
char *fgs;
|
||||
|
||||
fgs = fgets(buff, sizeof(buff), fi);
|
||||
if (fgs == NULL) break;
|
||||
|
||||
if (buff[0] == '#')
|
||||
{
|
||||
/* control char */
|
||||
if (strncmp(buff, "#ifdef ", 7) == 0)
|
||||
{
|
||||
if (!check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
||||
ifdef_level++;
|
||||
}
|
||||
else if (strncmp(buff, "#ifndef ", 8) == 0)
|
||||
{
|
||||
if ( check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
||||
ifdef_level++;
|
||||
}
|
||||
else if (strncmp(buff, "#endif", 6) == 0)
|
||||
{
|
||||
ifdef_level--;
|
||||
if (ifdef_level == 0) skip_mode = 0;
|
||||
if (ifdef_level < 0)
|
||||
{
|
||||
printf("%i: warning: #endif without #ifdef, ignoring\n", line);
|
||||
ifdef_level = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* skip line */
|
||||
continue;
|
||||
}
|
||||
if (!skip_mode)
|
||||
{
|
||||
do_counters(buff);
|
||||
fputs(buff, fo);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fi);
|
||||
fclose(fo);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue