ae2f_docs
Loading...
Searching...
No Matches
main.c
1#include "./main.auto.h"
2#include <stdio.h>
3
4#if STRGEN
5
6char BackSlash[] = "\\\\";
7
8int main(int argc, const char** argv) {
9 int Ch;
10 unsigned Number = 0;
11 unsigned LBL = 0;
12
13OVER:
14 if(argc > 1) {
15 fputs("#define ", stdout);
16 fputs(argv[1], stdout);
17 printf("_%u \\\n", LBL);
18 } else {
19 printf("#define A_%u \\\n", LBL);
20 }
21
22 fputc('"', stdout);
23 while((Ch = fgetc(stdin)) != EOF) {
24 switch(Ch) {
25 case '\0': case '\n': case '\r': /** Line Changing */
26 fputs("\\n\" \\\n\"", stdout);
27 Number += sizeof("\\n\" \\\n\"") - 1;
28 break;
29 case '\\': case '\'': case '\"':
30 BackSlash[1] = Ch;
31 fputs(BackSlash, stdout);
32 Number += 2;
33 break;
34 case '\t':
35 BackSlash[1] = 't';
36 fputs(BackSlash, stdout);
37 Number += 2;
38 break;
39 default:
40 fputc(Ch, stdout);
41 ++Number;
42 break;
43 }
44
45 if(Number >= 500) {
46 ++LBL;
47 Number = 0;
48 puts("\"");
49 goto OVER;
50 }
51 }
52
53 puts("\"");
54
55 if(argc > 1) {
56 fputs("#define ", stdout);
57 fputs(argv[1], stdout);
58 puts(" \\");
59 } else {
60 puts("#define A \\");
61 }
62
63 for(Number = 0; Number < LBL + 1; ++Number) {
64 if(argc > 1) {
65 fputs(argv[1], stdout);
66 printf("_%u \\\n", Number);
67 } else {
68 printf("A_%u \\\n", Number);
69 }
70 }
71
72 puts("\"\"\n");
73
74 return 0;
75}
76#else
77
78char Buff[BINGEN_BUFFSZ];
79size_t BuffLen, BuffI;
80
81int main() {
82 BuffLen = fread(Buff, 1, 1, stdin);
83 if(ferror(stdout)) {
84 return -1;
85 }
86 if(!BuffLen || feof(stdin)) {
87 printf("{}");
88 return 0;
89 }
90
91 printf("{%d", Buff[0]);
92
93RECURSE:
94
95 BuffLen = fread(Buff, 1, BINGEN_BUFFSZ, stdin);
96 if(ferror(stdin)) {
97 return -1;
98 }
99
100 if(BuffLen) {
101 for(BuffI = 0; BuffI < BuffLen; BuffI++) {
102 printf(",%d", Buff[BuffI]);
103 }
104
105 goto RECURSE;
106 }
107
108 putc('}', stdout);
109 return 0;
110}
111
112#endif
#define STRGEN
Definition main.auto.h:3
#define BINGEN_BUFFSZ
Definition main.auto.h:4