]> andersk Git - moira.git/blob - clients/mmoira/forms.awk
fix duplicated accelerators
[moira.git] / clients / mmoira / forms.awk
1 # $Header$
2
3 BEGIN           { numfields = 0; numforms = 0; orfield = 0;
4                   printf("/* This file is machine generated, do not edit. */");
5                   printf("\n#include <Xm/Text.h>\n");
6                   printf("#include \"mmoira.h\"\n\n");
7                 }
8
9 /^;/            { next; }
10 NF == 0         { next; }
11 NF == 1 && $1 == "or" { orfield = 1; next; }
12
13 $1 == "{"       { formname = sprintf("form%d", numforms);
14                   formrealname = $2;
15                   numforms++;
16                   instructions = $3;
17                   for (i = 4; i <= NF; i++)
18                         instructions = sprintf("%s %s", instructions, $i);
19                   next;
20                 }
21
22 $1 == "}"       { printf("static UserPrompt *%s_fields[] = {\n", formname);
23                   for (i = 0; i < numfields; i++)
24                         printf("\t&%s_fld%d,\n", formname, i);
25                   printf("\t(UserPrompt *)NULL\n};\n");
26                   printf("static EntryForm %s = {\n\t\"%s\",\n", \
27                         formname, formrealname);
28                   printf("\t\"%s\",\n\t%s_fields\n};\n", \
29                         instructions, formname);
30                   numfields = 0;
31                   next
32                 }
33
34 $NF == "s" || $NF == "S" \
35                 { printf("static UserPrompt %s_fld%d = { \"", \
36                         formname, numfields);
37                   for (i = 1; i < NF; i++) printf("%s ", $i);
38                   if (orfield) {
39                         printf("\", FT_STRING, True };\n");
40                         orfield = 0;
41                   } else {
42                         printf("\", FT_STRING, False };\n");
43                   }
44                   numfields++;
45                   next
46                 }
47
48 $NF == "b" || $NF == "B" \
49                 { printf("static UserPrompt %s_fld%d = { \"", \
50                         formname, numfields);
51                   for (i = 1; i < NF; i++) printf("%s ", $i);
52                   if (orfield) {
53                         printf("\", FT_BOOLEAN, True };\n");
54                         orfield = 0;
55                   } else {
56                         printf("\", FT_BOOLEAN, False };\n");
57                   }
58                   numfields++;
59                   next
60                 }
61
62 $NF == "k" || $NF == "K" \
63                 { printf("static UserPrompt %s_fld%d = { \"", \
64                         formname, numfields);
65                   for (i = 1; i < NF; i++) printf("%s ", $i);
66                   if (orfield) {
67                         printf("\", FT_KEYWORD, True };\n");
68                         orfield = 0;
69                   } else {
70                         printf("\", FT_KEYWORD, False };\n");
71                   }
72                   numfields++;
73                   next
74                 }
75
76                 { printf("forms syntax error on line %d of file %s:\n%s\n", \
77                         NR, FILENAME, $0);
78                   exit 1
79                 }
80
81 END             {
82                   printf("EntryForm *MoiraForms[] = {\n");
83                   for (i = 0; i < numforms; i++)
84                         printf("\t&form%d,\n", i);
85                   printf("\t(EntryForm *)NULL,\n};\n");
86                 }
This page took 0.081538 seconds and 5 git commands to generate.