This commit was generated by cvs2svn to track changes on a CVS vendor
[deliverable/binutils-gdb.git] / sim / igen / misc.c
index 660570ca6a5bf41a127e22702e5127f14cf5bbab..8490132f32e6e9c076786b178a08e7bcfb108796 100644 (file)
@@ -1,6 +1,6 @@
 /*  This file is part of the program psim.
 
-    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
+    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
 
     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
 #endif
 #endif
 
+/* NB: Because warning and error can be interchanged, neither append a
+   trailing '\n' */
+
 void
-error (char *msg, ...)
+error (const line_ref *line,
+       char *msg,
+       ...)
 {
   va_list ap;
-  va_start(ap, msg);
-  vprintf(msg, ap);
-  va_end(ap);
+  if (line != NULL)
+    fprintf (stderr, "%s:%d: ", line->file_name, line->line_nr);
+  va_start (ap, msg);
+  vfprintf (stderr, msg, ap);
+  va_end (ap);
   exit (1);
 }
 
-void *
-zalloc(long size)
+void
+warning (const line_ref *line,
+        char *msg,
+        ...)
 {
-  void *memory = malloc(size);
-  if (memory == NULL)
-    error("zalloc failed\n");
-  memset(memory, 0, size);
-  return memory;
+  va_list ap;
+  if (line != NULL)
+    fprintf (stderr, "%s:%d: warning: ", line->file_name, line->line_nr);
+  va_start (ap, msg);
+  vfprintf (stderr, msg, ap);
+  va_end (ap);
 }
 
 void
-dumpf (int indent, char *msg, ...)
+notify (const line_ref *line,
+       char *msg,
+       ...)
 {
   va_list ap;
-  for (; indent > 0; indent--)
-    printf(" ");
+  if (line != NULL)
+    fprintf (stdout, "%s %d: info: ", line->file_name, line->line_nr);
   va_start(ap, msg);
-  vprintf(msg, ap);
+  vfprintf (stdout, msg, ap);
   va_end(ap);
 }
 
+void *
+zalloc(long size)
+{
+  void *memory = malloc(size);
+  if (memory == NULL)
+    ERROR ("zalloc failed");
+  memset(memory, 0, size);
+  return memory;
+}
+
 
 unsigned long long
-a2i(const char *a)
+a2i (const char *a)
 {
   int neg = 0;
   int base = 10;
   unsigned long long num = 0;
   int looping;
-
+  
   while (isspace (*a))
     a++;
+  
+  if (strcmp (a, "true") == 0
+      || strcmp (a, "TRUE") == 0)
+    return 1;
 
-  if (*a == '-') {
-    neg = 1;
-    a++;
-  }
-
-  if (*a == '0') {
-    if (a[1] == 'x' || a[1] == 'X') {
-      a += 2;
-      base = 16;
-    } else if (a[1] == 'b' || a[1] == 'b') {
-      a += 2;
-      base = 2;
-    }
-    else
-      base = 8;
-  }
+  if (strcmp (a, "false") == 0
+      || strcmp (a, "false") == 0)
+    return 0;
 
+  if (*a == '-')
+    {
+      neg = 1;
+      a++;
+    }
+  
+  if (*a == '0')
+    {
+      if (a[1] == 'x' || a[1] == 'X')
+       {
+         a += 2;
+         base = 16;
+       }
+      else if (a[1] == 'b' || a[1] == 'b')
+       {
+         a += 2;
+         base = 2;
+       }
+      else
+       base = 8;
+    }
+  
   looping = 1;
-  while (looping) {
-    int ch = *a++;
-
-    switch (base) {
-    default:
-      looping = 0;
-      break;
-
-    case 2:
-      if (ch >= '0' && ch <= '1') {
-       num = (num * 2) + (ch - '0');
-      } else {
-       looping = 0;
-      }
-      break;
-
-    case 10:
-      if (ch >= '0' && ch <= '9') {
-       num = (num * 10) + (ch - '0');
-      } else {
-       looping = 0;
-      }
-      break;
-
-    case 8:
-      if (ch >= '0' && ch <= '7') {
-       num = (num * 8) + (ch - '0');
-      } else {
-       looping = 0;
-      }
-      break;
-
-    case 16:
-      if (ch >= '0' && ch <= '9') {
-       num = (num * 16) + (ch - '0');
-      } else if (ch >= 'a' && ch <= 'f') {
-       num = (num * 16) + (ch - 'a' + 10);
-      } else if (ch >= 'A' && ch <= 'F') {
-       num = (num * 16) + (ch - 'A' + 10);
-      } else {
-       looping = 0;
-      }
-      break;
+  while (looping)
+    {
+      int ch = *a++;
+      
+      switch (base)
+       {
+       default:
+         looping = 0;
+         break;
+         
+       case 2:
+         if (ch >= '0' && ch <= '1')
+           {
+             num = (num * 2) + (ch - '0');
+           }
+         else
+           {
+             looping = 0;
+           }
+         break;
+         
+       case 10:
+         if (ch >= '0' && ch <= '9')
+           {
+             num = (num * 10) + (ch - '0');
+           }
+         else
+           {
+             looping = 0;
+           }
+         break;
+         
+       case 8:
+         if (ch >= '0' && ch <= '7')
+           {
+             num = (num * 8) + (ch - '0');
+           }
+         else
+           {
+             looping = 0;
+           }
+         break;
+         
+       case 16:
+         if (ch >= '0' && ch <= '9')
+           {
+             num = (num * 16) + (ch - '0');
+           }
+         else if (ch >= 'a' && ch <= 'f')
+           {
+             num = (num * 16) + (ch - 'a' + 10);
+           }
+         else if (ch >= 'A' && ch <= 'F')
+           {
+             num = (num * 16) + (ch - 'A' + 10);
+           }
+         else
+           {
+             looping = 0;
+           }
+         break;
+       }
     }
-  }
-
+  
   if (neg)
     num = - num;
 
@@ -173,34 +226,38 @@ i2target(int ms_bit_nr,
 
 
 int
-name2i(const char *names,
-       const name_map *map)
+name2i (const char *names,
+        const name_map *map)
 {
   const name_map *curr;
   const char *name = names;
-  while (*name != '\0') {
-    /* find our name */
-    char *end = strchr(name, ',');
-    char *next;
-    int len;
-    if (end == NULL) {
-      end = strchr(name, '\0');
-      next = end;
+  while (*name != '\0')
+    {
+      /* find our name */
+      char *end = strchr(name, ',');
+      char *next;
+      unsigned len;
+      if (end == NULL)
+       {
+         end = strchr(name, '\0');
+         next = end;
+       }
+      else
+       {
+         next = end + 1;
+       }
+      len = end - name;
+      /* look it up */
+      curr = map;
+      while (curr->name != NULL)
+       {
+         if (strncmp (curr->name, name, len) == 0
+             && strlen (curr->name) == len)
+           return curr->i;
+         curr++;
+       }
+      name = next;
     }
-    else {
-      next = end + 1;
-    }
-    len = end - name;
-    /* look it up */
-    curr = map;
-    while (curr->name != NULL) {
-      if (strncmp(curr->name, name, len) == 0
-         && strlen(curr->name) == len)
-       return curr->i;
-      curr++;
-    }
-    name = next;
-  }
   /* nothing found, possibly return a default */
   curr = map;
   while (curr->name != NULL)
@@ -208,19 +265,20 @@ name2i(const char *names,
   if (curr->i >= 0)
     return curr->i;
   else
-    error("%s contains no valid names\n", names);
+    error (NULL, "%s contains no valid names", names);
   return 0;
 }
 
 const char *
-i2name(const int i,
-       const name_map *map)
+i2name (const int i,
+        const name_map *map)
 {
-  while (map->name != NULL) {
-    if (map->i == i)
-      return map->name;
-    map++;
-  }
-  error("map lookup failed for %d\n", i);
+  while (map->name != NULL)
+    {
+      if (map->i == i)
+       return map->name;
+      map++;
+    }
+  error (NULL, "map lookup failed for %d\n", i);
   return NULL;
 }
This page took 0.026563 seconds and 4 git commands to generate.