OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [sim/] [ppc/] [filter.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/*  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
#include <stdio.h>
23
 
24
#include "config.h"
25
 
26
#ifdef HAVE_STRING_H
27
#include <string.h>
28
#else
29
#ifdef HAVE_STRINGS_H
30
#include <strings.h>
31
#endif
32
#endif
33
 
34
#include "misc.h"
35
#include "filter.h"
36
 
37
struct _filter {
38
  char *flag;
39
  filter *next;
40
};
41
 
42
 
43
filter *
44
new_filter(const char *filt,
45
           filter *filters)
46
{
47
  while (strlen(filt) > 0) {
48
    filter *new_filter;
49
    /* break up the filt list */
50
    char *end = strchr(filt, ',');
51
    char *next;
52
    int len;
53
    if (end == NULL) {
54
      end = strchr(filt, '\0');
55
      next = end;
56
    }
57
    else {
58
      next = end + 1;
59
    }
60
    len = end - filt;
61
    /* add to filter list */
62
    new_filter = ZALLOC(filter);
63
    new_filter->flag = (char*)zalloc(len + 1);
64
    strncpy(new_filter->flag, filt, len);
65
    new_filter->next = filters;
66
    filters = new_filter;
67
    filt = next;
68
  }
69
  return filters;
70
}
71
 
72
 
73
int
74
is_filtered_out(const char *flags,
75
                filter *filters)
76
{
77
  while (strlen(flags) > 0) {
78
    int present;
79
    filter *filt = filters;
80
    /* break the string up */
81
    char *end = strchr(flags, ',');
82
    char *next;
83
    int len;
84
    if (end == NULL) {
85
      end = strchr(flags, '\0');
86
      next = end;
87
    }
88
    else {
89
      next = end + 1;
90
    }
91
    len = end - flags;
92
    /* check that it is present */
93
    present = 0;
94
    filt = filters;
95
    while (filt != NULL) {
96
      if (strncmp(flags, filt->flag, len) == 0
97
          && strlen(filt->flag) == len) {
98
        present = 1;
99
        break;
100
      }
101
      filt = filt->next;
102
    }
103
    if (!present)
104
      return 1;
105
    flags = next;
106
  }
107
  return 0;
108
}
109
 
110
 
111
int
112
it_is(const char *flag,
113
      const char *flags)
114
{
115
  int flag_len = strlen(flag);
116
  while (*flags != '\0') {
117
    if (!strncmp(flags, flag, flag_len)
118
        && (flags[flag_len] == ',' || flags[flag_len] == '\0'))
119
      return 1;
120
    while (*flags != ',') {
121
      if (*flags == '\0')
122
        return 0;
123
      flags++;
124
    }
125
    flags++;
126
  }
127
  return 0;
128
}
129
 
130
 
131
#ifdef MAIN
132
int
133
main(int argc, char **argv)
134
{
135
  filter *filters = NULL;
136
  int i;
137
  if (argc < 2) {
138
    printf("Usage: filter <flags> <filter> ...\n");
139
    exit (1);
140
  }
141
  /* load the filter up */
142
  for (i = 2; i < argc; i++)
143
    filters = new_filter(argv[i], filters);
144
  if (is_filtered_out(argv[1], filters))
145
    printf("fail\n");
146
  else
147
    printf("pass\n");
148
  return 0;
149
}
150
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.