X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcommon%2Faddrsize.c;h=82dc14d0073c73d6fd1cd56c58cb161c8c25702e;hb=0d8e8a95338560a1e0d96258d6def311cf2ad368;hp=845cb0e75e04d3d1358860727b0861442dfc0be2;hpb=7e740788015cdb2c817d51fffa7c60e5a9d49646;p=cc65 diff --git a/src/common/addrsize.c b/src/common/addrsize.c index 845cb0e75..82dc14d00 100644 --- a/src/common/addrsize.c +++ b/src/common/addrsize.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstraße 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ +/* (C) 2003-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -35,11 +35,12 @@ /* common */ #include "addrsize.h" +#include "strutil.h" /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ @@ -52,9 +53,45 @@ const char* AddrSizeToStr (unsigned char AddrSize) case ADDR_SIZE_ZP: return "zeropage"; case ADDR_SIZE_ABS: return "absolute"; case ADDR_SIZE_FAR: return "far"; + case ADDR_SIZE_LONG: return "long"; default: return "unknown"; } } +unsigned char AddrSizeFromStr (const char* Str) +/* Return the address size for a given string. Returns ADDR_SIZE_INVALID if + * the string cannot be mapped to an address size. + */ +{ + static const struct { + const char* Name; + unsigned char AddrSize; + } AddrSizeTable[] = { + { "abs", ADDR_SIZE_ABS }, + { "absolute", ADDR_SIZE_ABS }, + { "default", ADDR_SIZE_DEFAULT }, + { "direct", ADDR_SIZE_ZP }, + { "dword", ADDR_SIZE_LONG }, + { "far", ADDR_SIZE_FAR }, + { "long", ADDR_SIZE_LONG }, + { "near", ADDR_SIZE_ABS }, + { "zeropage", ADDR_SIZE_ZP }, + { "zp", ADDR_SIZE_ZP }, + }; + unsigned I; + + for (I = 0; I < sizeof (AddrSizeTable) / sizeof (AddrSizeTable[0]); ++I) { + if (StrCaseCmp (Str, AddrSizeTable[I].Name) == 0) { + /* Found */ + return AddrSizeTable[I].AddrSize; + } + } + + /* Not found */ + return ADDR_SIZE_INVALID; +} + + +