#include "SymbolTable.h" #include <inttypes.h> #include <stdbool.h> #include <string.h> #include <stdlib.h> #include <assert.h> DataSymbol dataSymbols[NUM_SYMBOLS] = {0}; TextSymbol textSymbols[NUM_SYMBOLS] = {0}; void makeTable(FILE *outF) { int x = -1, j = -1, i = 0; while (dataSymbols[i].binary) { char key[sizeof(dataSymbols[i].key) + 1]; j = -1; while (dataSymbols[i].key[++j] != 0) key[j] = dataSymbols[i].key[j]; fprintf(outF, "0x%08X\t%s\n", dataSymbols[i++].address, key); } while (textSymbols[++x].key != NULL) fprintf(outF, "0x%08X\t%s\n", textSymbols[x].address, textSymbols[x].key); } void cleanTable() { int i = -1, x = -1; while (dataSymbols[++i].binary) free(dataSymbols[i].binary), free(dataSymbols[i].type); while (textSymbols[++x].key) free(textSymbols[x].key); } char *decToBinary(char *dec) { int16_t n = atol(dec); int i = 0, s = 15; char *binaryNum = calloc(IMM_LENGTH, sizeof(char)); while (s >= 0) binaryNum[i++] = ((n >> s--) & 1) ? '1' : '0'; return binaryNum; } char *decToBinary26(char *dec) { int n = atoi(dec), i = 0, s = 25; char *binaryNum = calloc(27, sizeof(char)); while (s >= 0) binaryNum[i++] = ((n >> s--) & 1) ? '1' : '0'; return binaryNum; } char *unDecToBinary(char *dec) { uint16_t n; sscanf(dec, "%hd", &n); int i = 0, s = 15; char *binaryNum = calloc(IMM_LENGTH, sizeof(char)); while (s >= 0) binaryNum[i++] = ((n >> s--) & 1) ? '1' : '0'; return binaryNum; } uint16_t findImm(char *word) { int i = -1; while (dataSymbols[++i].binary) if (!strcmp(word, dataSymbols[i].key)) return dataSymbols[i].address; return 0; }