3 type_name = ""; # GtkEnumType
4 type_macro = ""; # GTK_TYPE_ENUM_TYPE
5 type_ident = ""; # _gtk_enum_type
13 for (i = 2; i < ARGC; i++)
15 if (ARGV[i] == "macros")
17 else if (ARGV[i] == "entries")
19 else if (ARGV[i] == "variables")
26 printf ("/* type macros, generated by maketypes.awk */\n");
28 printf ("#ifdef G_OS_WIN32\n");
29 printf ("# ifdef GTK_COMPILATION\n");
30 printf ("# define GTKTYPEBUILTINS_VAR __declspec(dllexport)\n");
32 printf ("# define GTKTYPEBUILTINS_VAR extern __declspec(dllimport)\n");
35 printf ("# ifdef GTK_COMPILATION\n");
36 printf ("# define GTKTYPEBUILTINS_VAR\n");
38 printf ("# define GTKTYPEBUILTINS_VAR extern\n");
44 printf ("/* type entries, generated by maketypes.awk */\n\n");
46 printf ("/* type variables, generated by maketypes.awk */\n\n");
49 printf ("hm? what do you want me to do?\n") > "/dev/stderr";
54 function set_type (set_type_1)
57 type_name = set_type_1;
58 type_macro = "GTK_TYPE_";
61 # OK, the following is ridiculous, and sed s///g would be far easier
62 gsub ("[A-Z]", "@&", tmp);
63 gsub ("[^A-Z]@", "&_", tmp);
65 gsub ("[A-Z][A-Z][A-Z][0-9a-z]", "@&", tmp);
66 gsub ("@..", "&_", tmp);
68 type_macro = type_macro toupper (tmp);
69 type_ident = "_" tolower (tmp);
71 sub ("^GTK_TYPE_GTK_", "GTK_TYPE_", type_macro);
74 function generate (generate_what)
78 printf ("GTKTYPEBUILTINS_VAR GType %s;\n", type_macro);
82 printf (" { \"%s\", &%s,\n", type_name, type_macro);
83 if (generate_what == "BOXED")
84 printf (" GTK_TYPE_%s, %s, %s, },\n", generate_what, boxed_copy, boxed_free);
86 printf (" GTK_TYPE_%s, %s_values },\n", generate_what, type_ident);
90 printf ("GTKTYPEBUILTINS_VAR GType %s = 0;\n", type_macro);
94 # skip scheme comments
103 printf ("huh? define-enum keyword without arg?\n") > "/dev/stderr";
113 printf ("huh? define-flags keyword without arg?\n") > "/dev/stderr";
123 printf ("huh? define-boxed keyword without arg?\n") > "/dev/stderr";
132 } while ($0 ~ /^[ \t]*$/);
134 if ($0 ~ /\)/) { generate("BOXED"); next; }
138 } while ($0 ~ /^[ \t]*$/);
140 sub (/\).*/, "", tmp_var2);
141 if (tmp_var1 ~ /^[_A-Za-z][_A-Za-z0-9]*$/ &&
142 tmp_var2 ~ /^[_A-Za-z][_A-Za-z0-9]*$/)
144 boxed_copy = tmp_var1;
145 boxed_free = tmp_var2;
146 # printf ("read boxed funcs: %s %s\n", boxed_copy, boxed_free) > "/dev/stderr";
154 printf("\n#define\tGTK_TYPE_N_BUILTINS\t(%u)\n", type_counter);