00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <string.h>
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028 #include <ctype.h>
00029 #include "types.h"
00030 #include "globals.h"
00031 #include "errors.h"
00032 #include "odin_util.h"
00033
00034
00035
00036
00037
00038 char *make_signal_name(char *signal_name, int bit)
00039 {
00040 char *return_string;
00041
00042 oassert(signal_name != NULL);
00043 if (bit == -1)
00044 return strdup(signal_name);
00045
00046 return_string = strdup(signal_name);
00047 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(return_string)+1+10+1));
00048 sprintf(return_string, "%s-%d", return_string, bit);
00049 return return_string;
00050 }
00051
00052
00053
00054
00055
00056
00057
00058 char *make_full_ref_name(char *previous, char *module_name, char *module_instance_name, char *signal_name, int bit)
00059 {
00060 char *return_string;
00061 return_string = (char*)malloc(sizeof(char)*1);
00062 return_string[0] = '\0';
00063
00064 if (previous != NULL)
00065 {
00066 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(previous)+1+1));
00067 sprintf(return_string, "%s", previous);
00068 }
00069 if (module_name != NULL)
00070 {
00071 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(return_string)+1+strlen(module_name)+1+strlen(module_instance_name)+1));
00072 sprintf(return_string, "%s.%s+%s", return_string, module_name, module_instance_name);
00073 }
00074 if ((signal_name != NULL) && ((previous != NULL) || ((module_name != NULL))))
00075 {
00076 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(return_string)+1+strlen(signal_name)+1));
00077 strcat(return_string, "^");
00078 strcat(return_string, signal_name);
00079 }
00080 else if (signal_name != NULL)
00081 {
00082 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(return_string)+1+strlen(signal_name)+1));
00083 sprintf(return_string, "%s", signal_name);
00084 }
00085 if (bit != -1)
00086 {
00087 oassert(signal_name != NULL);
00088 return_string = (char*)realloc(return_string, sizeof(char)*(strlen(return_string)+1+10+1));
00089 sprintf(return_string, "%s~%d", return_string, bit);
00090 }
00091 return return_string;
00092 }
00093
00094
00095
00096
00097
00098 char *convert_long_to_bit_string(long long orig_long, int num_bits)
00099 {
00100 int i;
00101 char *return_val = (char*)malloc(sizeof(char)*(num_bits+1));
00102 int mask = 1;
00103
00104 for (i = num_bits-1; i >= 0; i--)
00105 {
00106 if((mask & orig_long) > 0)
00107 {
00108 return_val[i] = '1';
00109 }
00110 else
00111 {
00112 return_val[i] = '0';
00113 }
00114 mask = mask << 1;
00115 }
00116 return_val[num_bits] = '\0';
00117
00118 return return_val;
00119 }
00120
00121
00122
00123
00124 long long convert_dec_string_of_size_to_long(char *orig_string, int size)
00125 {
00126 int i;
00127 long long return_value = 0;
00128 long long current_base_value = 1;
00129 char temp[2];
00130
00131 if (strlen(orig_string) > 19)
00132 {
00133
00134 return -1;
00135 }
00136
00137 for (i = strlen(orig_string)-1; i > -1; i--)
00138 {
00139 if (isdigit(orig_string[i]))
00140 {
00141 sprintf(temp, "%c", orig_string[i]);
00142 return_value += (long long)(atoi(temp) * current_base_value);
00143 }
00144 else
00145 {
00146 error_message(PARSE_ERROR, -1, -1, "This suspected decimal number (%s) is not\n", orig_string);
00147 }
00148 current_base_value *= 10;
00149 }
00150
00151 return return_value;
00152 }
00153
00154
00155
00156
00157 long long convert_hex_string_of_size_to_long(char *orig_string, int size)
00158 {
00159 int i;
00160 long long return_value = 0;
00161 long long current_base_value = 1;
00162 char temp[2];
00163
00164 if (strlen(orig_string) > 16)
00165 {
00166
00167 return -1;
00168 }
00169
00170 for (i = strlen(orig_string)-1; i > -1; i--)
00171 {
00172 if (isdigit(orig_string[i]))
00173 {
00174 sprintf(temp, "%c", orig_string[i]);
00175 return_value += (long long)(atoi(temp) * current_base_value);
00176 }
00177 else if ((orig_string[i] == 'a') || (orig_string[i] == 'A'))
00178 {
00179 return_value += (long long)(10 * current_base_value);
00180 }
00181 else if ((orig_string[i] == 'b') || (orig_string[i] == 'B'))
00182 {
00183 return_value += (long long)(11 * current_base_value);
00184 }
00185 else if ((orig_string[i] == 'c') || (orig_string[i] == 'C'))
00186 {
00187 return_value += (long long)(11 * current_base_value);
00188 }
00189 else if ((orig_string[i] == 'd') || (orig_string[i] == 'D'))
00190 {
00191 return_value += (long long)(11 * current_base_value);
00192 }
00193 else if ((orig_string[i] == 'e') || (orig_string[i] == 'E'))
00194 {
00195 return_value += (long long)(11 * current_base_value);
00196 }
00197 else if ((orig_string[i] == 'f') || (orig_string[i] == 'F'))
00198 {
00199 return_value += (long long)(11 * current_base_value);
00200 }
00201 else
00202 {
00203 error_message(PARSE_ERROR, -1, -1, "This suspected hex number (%s) is not\n", orig_string);
00204 }
00205 current_base_value *= 16;
00206 }
00207
00208 return return_value;
00209 }
00210
00211
00212
00213
00214 long long convert_oct_string_of_size_to_long(char *orig_string, int size)
00215 {
00216 int i;
00217 long long return_value = 0;
00218 long long current_base_value = 1;
00219 char temp[2];
00220
00221 if (strlen(orig_string) > 21)
00222 {
00223
00224 return -1;
00225 }
00226
00227 for (i = strlen(orig_string)-1; i > -1; i--)
00228 {
00229 if (isdigit(orig_string[i]))
00230 {
00231 oassert(atoi(temp) < 8);
00232 sprintf(temp, "%c", orig_string[i]);
00233 return_value += (long long)(atoi(temp) * current_base_value);
00234 }
00235 else
00236 {
00237 error_message(PARSE_ERROR, -1, -1, "This suspected oct number (%s) is not\n", orig_string);
00238 }
00239 current_base_value *= 8;
00240 }
00241
00242 return return_value;
00243 }
00244
00245
00246
00247
00248 long long convert_binary_string_of_size_to_long(char *orig_string, int size)
00249 {
00250 int i;
00251 long long return_value = 0;
00252 long long current_base_value = 1;
00253 char temp[2];
00254
00255 if (strlen(orig_string) > 63)
00256 {
00257
00258 return -1;
00259 }
00260
00261 for (i = strlen(orig_string)-1; i > -1; i--)
00262 {
00263 if ((tolower(orig_string[i]) == 'x') || (tolower(orig_string[i]) == 'z'))
00264 {
00265
00266 return -1;
00267 }
00268 else if (isdigit(orig_string[i]))
00269 {
00270 sprintf(temp, "%c", orig_string[i]);
00271 oassert(atoi(temp) < 2);
00272 return_value += (long long)(atoi(temp) * current_base_value);
00273 }
00274 else
00275 {
00276 error_message(PARSE_ERROR, -1, -1, "This suspected binary number (%s) is not\n", orig_string);
00277 }
00278 current_base_value *= 2;
00279 }
00280
00281 return return_value;
00282 }
00283
00284
00285
00286
00287
00288 long long int my_power(long long int x, long long int y)
00289 {
00290 int i;
00291 long long int value;
00292
00293 if (y == 0)
00294 {
00295 return 1;
00296 }
00297
00298 value = x;
00299
00300 for (i = 1; i < y; i++)
00301 {
00302 value *= x;
00303 }
00304
00305 return value;
00306 }
00307
00308
00309
00310
00311 char *make_string_based_on_id(nnode_t *node)
00312 {
00313 char *return_string;
00314
00315 return_string = (char*)malloc(sizeof(char)*(20+2));
00316
00317 sprintf(return_string, "n%ld", node->unique_id);
00318
00319 return return_string;
00320 }
00321
00322
00323
00324
00325 char *make_simple_name(char *input, char *flatten_string, char flatten_char)
00326 {
00327 int i;
00328 int j;
00329 char *return_string = NULL;
00330 oassert(input != NULL);
00331
00332 return_string = (char*)malloc(sizeof(char)*(strlen(input)+1));
00333
00334 for (i = 0; i < strlen(input); i++)
00335 {
00336 return_string[i] = input[i];
00337 for (j = 0; j < strlen(flatten_string); j++)
00338 {
00339 if (input[i] == flatten_string[j])
00340 {
00341 return_string[i] = flatten_char;
00342 break;
00343 }
00344 }
00345 }
00346
00347 return_string[strlen(input)] = '\0';
00348
00349 return return_string;
00350 }
00351
00352
00353
00354
00355 void *my_malloc_struct(int bytes_to_alloc)
00356 {
00357 void *allocated = NULL;
00358 static long int m_id = 0;
00359
00360
00361
00362
00363 allocated = malloc(bytes_to_alloc);
00364 if(allocated == NULL)
00365 {
00366 fprintf(stderr,"MEMORY FAILURE\n");
00367 oassert (0);
00368 }
00369
00370
00371 *((long int*)allocated) = m_id;
00372
00373 m_id++;
00374
00375 return(allocated);
00376 }
00377
00378
00379
00380 long long int pow2(int to_the_power)
00381 {
00382 int i;
00383 long long int return_val = 1;
00384
00385 for (i = 0; i < to_the_power; i++)
00386 {
00387 return_val = return_val << 1;
00388 }
00389
00390 return return_val;
00391 }