This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#include <ctype.h>
#include <stdarg.h>
-#include "config.h"
+#include "build-config.h"
#include "misc.h"
#include "lf.h"
#include "table.h"
/****************************************************************/
int spreg_lookup_table = 1;
-int number_lines = 1;
enum {
nr_of_sprs = 1024,
};
static spreg_table *
spreg_table_load(char *file_name)
{
- table *file = table_open(file_name, nr_spreg_fields);
+ table *file = table_open(file_name, nr_spreg_fields, 0);
spreg_table *table = ZALLOC(spreg_table);
{
spreg_table_entry *entry;
char **attribute;
- lf_print_copyleft(file);
+ lf_print__gnu_copyleft(file);
lf_printf(file, "\n");
lf_printf(file, "#ifndef _SPREG_H_\n");
lf_printf(file, "#define _SPREG_H_\n");
lf_printf(file, "\n");
- lf_printf(file, "#ifndef INLINE_SPREG\n");
- lf_printf(file, "#define INLINE_SPREG\n");
- lf_printf(file, "#endif\n");
- lf_printf(file, "\n");
lf_printf(file, "typedef unsigned_word spreg;\n");
lf_printf(file, "\n");
lf_printf(file, "typedef enum {\n");
for (attribute = spreg_attributes;
*attribute != NULL;
attribute++) {
- if (strcmp(*attribute, "name") == 0)
- lf_printf(file, "INLINE_SPREG char *spr_%s(sprs spr);\n",
- *attribute);
- else
- lf_printf(file, "INLINE_SPREG int spr_%s(sprs spr);\n",
- *attribute);
+ if (strcmp(*attribute, "name") == 0) {
+ lf_print_function_type(file, "const char *", "INLINE_SPREG", " ");
+ lf_printf(file, "spr_%s(sprs spr);\n", *attribute);
+ }
+ else {
+ lf_print_function_type(file, "int", "INLINE_SPREG", " ");
+ lf_printf(file, "spr_%s(sprs spr);\n", *attribute);
+ }
}
lf_printf(file, "\n");
lf_printf(file, "#endif /* _SPREG_H_ */\n");
char **attribute;
int spreg_nr;
- lf_print_copyleft(file);
+ lf_print__gnu_copyleft(file);
lf_printf(file, "\n");
lf_printf(file, "#ifndef _SPREG_C_\n");
lf_printf(file, "#define _SPREG_C_\n");
lf_printf(file, "\n");
- lf_printf(file, "#include \"words.h\"\n");
+ lf_printf(file, "#include \"basics.h\"\n");
lf_printf(file, "#include \"spreg.h\"\n");
lf_printf(file, "\n");
*attribute != NULL;
attribute++) {
lf_printf(file, "\n");
- if (strcmp(*attribute, "name") == 0)
- lf_printf(file, "INLINE_SPREG char *\n");
- else
- lf_printf(file, "INLINE_SPREG int\n");
+ if (strcmp(*attribute, "name") == 0) {
+ lf_print_function_type(file, "const char *", "INLINE_SPREG", "\n");
+ }
+ else {
+ lf_print_function_type(file, "int", "INLINE_SPREG", "\n");
+ }
lf_printf(file, "spr_%s(sprs spr)\n", *attribute);
lf_printf(file, "{\n");
if (spreg_lookup_table
char **argv,
char **envp)
{
+ lf_file_references file_references = lf_include_references;
spreg_table *sprs = NULL;
char *real_file_name = NULL;
+ int is_header = 0;
int ch;
if (argc <= 1) {
printf("Usage: dgen ...\n");
printf("-s Use switch instead of table\n");
- printf("-n Use this as cpp line numbering name\n");
- printf("-[Pp] <spreg> Output spreg.h(P) or spreg.c(p)\n");
- printf("-l Suppress cpp line numbering in output files\n");
+ printf("-n <file-name> Use this as cpp line numbering name\n");
+ printf("-h Output header file\n");
+ printf("-p <spreg-file> Output spreg.h(P) or spreg.c(p)\n");
+ printf("-L Suppress cpp line numbering in output files\n");
}
- while ((ch = getopt(argc, argv, "lsn:r:P:p:")) != -1) {
+ while ((ch = getopt(argc, argv, "hLsn:r:p:")) != -1) {
fprintf(stderr, "\t-%c %s\n", ch, ( optarg ? optarg : ""));
switch(ch) {
- case 'l':
- number_lines = 0;
- break;
case 's':
spreg_lookup_table = 0;
break;
case 'n':
real_file_name = strdup(optarg);
break;
- case 'P':
+ case 'L':
+ file_references = lf_omit_references;
+ break;
+ case 'h':
+ is_header = 1;
+ break;
case 'p':
{
- lf *file = lf_open(optarg, real_file_name, number_lines);
- switch (ch) {
- case 'P':
+ lf *file = lf_open(optarg, real_file_name, file_references,
+ (is_header ? lf_is_h : lf_is_c),
+ argv[0]);
+ if (is_header)
gen_spreg_h(sprs, file);
- break;
- case 'p':
+ else
gen_spreg_c(sprs, file);
- break;
- }
lf_close(file);
+ is_header = 0;
}
real_file_name = NULL;
break;