📄 misc.c
字号:
/* The IGEN simulator generator for GDB, the GNU Debugger. Copyright 2002 Free Software Foundation, Inc. Contributed by Andrew Cagney. This file is part of GDB. 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 (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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. */#include <stdio.h>#include <stdarg.h>#include <ctype.h>#include "config.h"#include "misc.h"#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif#ifdef HAVE_STRING_H#include <string.h>#else#ifdef HAVE_STRINGS_H#include <strings.h>#endif#endif/* NB: Because warning and error can be interchanged, neither append a trailing '\n' */voiderror (const line_ref *line, char *msg, ...){ va_list 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);}voidwarning (const line_ref *line, char *msg, ...){ 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);}voidnotify (const line_ref *line, char *msg, ...){ va_list ap; if (line != NULL) fprintf (stdout, "%s %d: info: ", line->file_name, line->line_nr); va_start (ap, msg); 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 longa2i (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 (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; } } if (neg) num = -num; return num;}unsignedtarget_a2i (int ms_bit_nr, const char *a){ if (ms_bit_nr) return (ms_bit_nr - a2i (a)); else return a2i (a);}unsignedi2target (int ms_bit_nr, unsigned bit){ if (ms_bit_nr) return ms_bit_nr - bit; else return bit;}intname2i (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; 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; } /* nothing found, possibly return a default */ curr = map; while (curr->name != NULL) curr++; if (curr->i >= 0) return curr->i; else error (NULL, "%s contains no valid names", names); return 0;}const char *i2name (const int i, const name_map * map){ while (map->name != NULL) { if (map->i == i) return map->name; map++; } error (NULL, "map lookup failed for %d\n", i); return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -