1/*  This file is part of the program psim.
2
3    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19    */
20
21
22/* Frustrating header junk */
23
24#include "config.h"
25
26#include <stdio.h>
27#include <ctype.h>
28
29#ifdef HAVE_STRING_H
30#include <string.h>
31#else
32#ifdef HAVE_STRINGS_H
33#include <strings.h>
34#endif
35#endif
36
37#ifdef HAVE_STDLIB_H
38#include <stdlib.h>
39#endif
40
41#if !defined (__attribute__) && (!defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7))
42#define __attribute__(arg)
43#endif
44
45
46
47#include "filter_filename.h"
48
49extern void error
50(char *msg, ...);
51
52#define ASSERT(EXPRESSION) \
53do { \
54  if (!(EXPRESSION)) { \
55    error("%s:%d: assertion failed - %s\n", \
56	  filter_filename (__FILE__), __LINE__, #EXPRESSION); \
57  } \
58} while (0)
59
60#define ZALLOC(TYPE) (TYPE*)zalloc(sizeof(TYPE))
61#define NZALLOC(TYPE,N) ((TYPE*) zalloc (sizeof(TYPE) * (N)))
62
63extern void *zalloc
64(long size);
65
66extern void dumpf
67(int indent, char *msg, ...);
68
69extern unsigned target_a2i
70(int ms_bit_nr,
71 const char *a);
72
73extern unsigned i2target
74(int ms_bit_nr,
75 unsigned bit);
76
77extern unsigned a2i
78(const char *a);
79
80/* Try looking for name in the map table (returning the corresponding
81   integer value).  If that fails, try converting the name into an
82   integer */
83
84typedef struct _name_map {
85  const char *name;
86  int i;
87} name_map;
88
89extern int name2i
90(const char *name,
91 const name_map *map);
92
93extern const char *i2name
94(const int i,
95 const name_map *map);
96