Mercurial > hg > forks > dxa
diff label.c @ 16:a2a81589380d default tip
Reformat the whole source via clang-format for better consistency.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 14 Oct 2021 01:53:20 +0300 |
parents | 84c0facfc43c |
children |
line wrap: on
line diff
--- a/label.c Thu Oct 14 01:40:24 2021 +0300 +++ b/label.c Thu Oct 14 01:53:20 2021 +0300 @@ -22,144 +22,144 @@ #define _LABEL_C_ +#include <stdio.h> #include <stdlib.h> -#include <stdio.h> #include <string.h> -#include "proto.h" +#include "opcodes.h" #include "options.h" -#include "opcodes.h" +#include "proto.h" label *labeltable; char defaultlabel[512]; unsigned numLabels = 0; - void AddLabel(ADDR_T address, char *name, int is_range, ADDR_T len) { - label * entry = numLabels ? - realloc (labeltable, (numLabels + 1) * sizeof *entry) : - malloc (sizeof *entry); + label *entry = numLabels ? realloc(labeltable, (numLabels + 1) * sizeof *entry) : malloc(sizeof *entry); - if (!entry) return; + if (!entry) + return; - labeltable = entry; - entry = &labeltable[numLabels++]; + labeltable = entry; + entry = &labeltable[numLabels++]; - entry->address = address; - entry->name = strdup(name); - entry->is_range = is_range; - entry->len = len; + entry->address = address; + entry->name = strdup(name); + entry->is_range = is_range; + entry->len = len; } - int IsInsideRegion(ADDR_T address) { - label *entry; + label *entry; - for (entry = &labeltable[numLabels]; entry-- > labeltable;) - { - int offs = address - entry->address; - if (entry->is_range && offs > 0 && offs < entry->len) - return TRUE; - } - return FALSE; + for (entry = &labeltable[numLabels]; entry-- > labeltable;) + { + int offs = address - entry->address; + if (entry->is_range && offs > 0 && offs < entry->len) + return TRUE; + } + return FALSE; } - char *Label(ADDR_T address, int admode, int allow_range) { - label *entry; - int match = 0; + label *entry; + int match = 0; + + if (!IsLabeled(address)) + { + // dirty kludge to allow zero page stuff to still work. this sometimes + // guesses wrong + if (admode == zp) + { + snprintf(defaultlabel, sizeof(defaultlabel), "$%02x", address); + } + else + { + snprintf(defaultlabel, sizeof(defaultlabel), "$%04x", address); + } + + return defaultlabel; + } - if (!IsLabeled (address)) { - // dirty kludge to allow zero page stuff to still work. this sometimes - // guesses wrong - if (admode == zp) { - snprintf(defaultlabel, sizeof(defaultlabel), "$%02x", address); - } else { - snprintf(defaultlabel, sizeof(defaultlabel), "$%04x", address); + for (entry = &labeltable[numLabels]; entry-- > labeltable;) + { + if (entry->address == address) + return entry->name; } + for (entry = &labeltable[numLabels]; entry-- > labeltable;) + { + int offs = address - entry->address; + if (entry->is_range && offs >= 0 && offs < entry->len) + { + match = 1; + if (allow_range) + { + snprintf(defaultlabel, sizeof(defaultlabel), (offs < 16) ? "%s + %d" : "%s + $%x", entry->name, offs); + return defaultlabel; + } + else + break; + } + } + + if (match) + snprintf(defaultlabel, sizeof(defaultlabel), "XXX_%x", address); + else + snprintf(defaultlabel, sizeof(defaultlabel), "l_%x", address); + return defaultlabel; - } - - for (entry = &labeltable[numLabels]; entry-- > labeltable;) - { - if (entry->address == address) - return entry->name; - } - - for (entry = &labeltable[numLabels]; entry-- > labeltable;) - { - int offs = address - entry->address; - if (entry->is_range && offs >= 0 && offs < entry->len) - { - match = 1; - if (allow_range) - { - snprintf(defaultlabel, sizeof(defaultlabel), - (offs < 16) ? "%s + %d" : "%s + $%x", - entry->name, offs); - return defaultlabel; - } - else - break; - } - } - - if (match) - snprintf(defaultlabel, sizeof(defaultlabel), "XXX_%x", address); - else - snprintf(defaultlabel, sizeof(defaultlabel), "l_%x", address); - - return defaultlabel; } - -void Collect (void) +void Collect(void) { - unsigned counter = 0; - table *entry = NULL, *entry2; - label *labels; + unsigned counter = 0; + table *entry = NULL, *entry2; + label *labels; - if (fVerbose) - fprintf (stderr, "%s: collecting garbage.\n", prog); - - while ((entry = entry2 = FindNextEntryType (entry, 0, 0))) - { - counter++; + if (fVerbose) + fprintf(stderr, "%s: collecting garbage.\n", prog); - PutLabel (entry->address); - PutLowByte (entry->address); - PutHighByte (entry->address); - - while ((entry2 = FindNextEntry (entry2, entry->address, ~0, entry->type))) + while ((entry = entry2 = FindNextEntryType(entry, 0, 0))) { - DeleteEntry (entry2); /* remove duplicate warnings */ - } - } + counter++; - if ((entry = malloc (counter * sizeof *entry))) { /* compact the table */ - entrycount = counter; + PutLabel(entry->address); + PutLowByte(entry->address); + PutHighByte(entry->address); - for (entry2 = scantable; counter; entry2++) { - if (!entry2->type) continue; - - memcpy (&entry[--counter], entry2, sizeof *entry); + while ((entry2 = FindNextEntry(entry2, entry->address, ~0, entry->type))) + { + DeleteEntry(entry2); /* remove duplicate warnings */ + } } - free (scantable); - scantable = entry; - } + if ((entry = malloc(counter * sizeof *entry))) + { /* compact the table */ + entrycount = counter; + + for (entry2 = scantable; counter; entry2++) + { + if (!entry2->type) + continue; + + memcpy(&entry[--counter], entry2, sizeof *entry); + } - for (labels = &labeltable[numLabels]; labels-- > labeltable;) - { - if ((ADDR_T)(labels->address - StartAddress) < (ADDR_T)(EndAddress - StartAddress)) + free(scantable); + scantable = entry; + } + + for (labels = &labeltable[numLabels]; labels-- > labeltable;) { - PutLabel (labels->address); - PutLowByte (labels->address); - PutHighByte (labels->address); + if ((ADDR_T)(labels->address - StartAddress) < (ADDR_T)(EndAddress - StartAddress)) + { + PutLabel(labels->address); + PutLowByte(labels->address); + PutHighByte(labels->address); + } } - } }