Mercurial > hg > forks > dxa
view table.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 | ec2f8f6f1dc9 |
children |
line wrap: on
line source
/*\ * dxa v0.1.1 -- symbolic 65xx disassembler * * Copyright (C) 1993, 1994 Marko M\"akel\"a * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * * Contacting the author: * * Via Internet E-mail: * <Marko.Makela@FTP.FUNET.FI> * * Via Snail Mail: * Marko M\"akel\"a * Sillitie 10 A * FIN-01480 VANTAA * Finland \*/ /* table.c */ #define _TABLE_C_ #include "proto.h" #include <stdlib.h> static unsigned int firstunused = 0; table *FindNextEntryType(table *entry, unsigned char andmask, unsigned char eormask) { if (!scantable) return NULL; if (!entry || entry >= &scantable[entrycount]) entry = scantable; else if (++entry >= &scantable[entrycount]) return NULL; for (; entry < &scantable[entrycount]; entry++) if (entry->type && !((entry->type & andmask) ^ eormask)) return entry; return NULL; } table *FindNextEntryTypeParent(table *entry, ADDR_T parent, unsigned char andmask, unsigned char eormask) { if (!scantable) return NULL; if (!entry || entry >= &scantable[entrycount]) entry = scantable; else if (++entry >= &scantable[entrycount]) return NULL; for (; entry < &scantable[entrycount]; entry++) if (entry->parent == parent && entry->type && !((entry->type & andmask) ^ eormask)) return entry; return NULL; } table *FindNextEntry(table *entry, ADDR_T address, unsigned char andmask, unsigned char eormask) { if (!scantable) return NULL; if (!entry || entry >= &scantable[entrycount]) entry = scantable; else if (++entry >= &scantable[entrycount]) return NULL; for (; entry < &scantable[entrycount]; entry++) if (entry->address == address && entry->type && !((entry->type & andmask) ^ eormask)) return entry; return NULL; } void AddEntry(ADDR_T address, ADDR_T parent, unsigned char type) { if (firstunused < entrycount) { scantable[firstunused].address = address; scantable[firstunused].parent = parent; scantable[firstunused].type = type; while (++firstunused < entrycount && scantable[firstunused].type); } else { scantable = scantable ? realloc(scantable, (entrycount + 1) * sizeof *scantable) : malloc(sizeof *scantable); scantable[entrycount].address = address; scantable[entrycount].parent = parent; scantable[entrycount].type = type; firstunused = ++entrycount; } } void DeleteEntry(table *entry) { entry->type = TBL_DELETED; if (firstunused > entry - scantable) firstunused = entry - scantable; }