X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcommon%2Ffiletype.c;h=3e5779eb8f8c04c4dd82ad67ea5e4e05f508819e;hb=3e156bdd67d630d1bb141b7ef0242327fddb3896;hp=488890bd92a977affd2b6a2d658a54f3b138250f;hpb=d0bb32e6c68d22b690c7ae112d4c250d7edcd1d8;p=cc65 diff --git a/src/common/filetype.c b/src/common/filetype.c index 488890bd9..3e5779eb8 100644 --- a/src/common/filetype.c +++ b/src/common/filetype.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ +/* (C) 2003-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -33,76 +33,76 @@ +#include #include /* common */ +#include "fileid.h" #include "filetype.h" -#include "fname.h" /*****************************************************************************/ -/* Data */ +/* Data */ /*****************************************************************************/ -/* Table that maps extensions to file types */ -static const struct { - const char Ext[4]; - unsigned Type; -} FileTypes [] = { - { "c", FILETYPE_C }, - { "s", FILETYPE_ASM }, - { "asm", FILETYPE_ASM }, - { "a65", FILETYPE_ASM }, - { "o", FILETYPE_OBJ }, - { "obj", FILETYPE_OBJ }, - { "a", FILETYPE_LIB }, - { "lib", FILETYPE_LIB }, - { "grc", FILETYPE_GR }, - { "o65", FILETYPE_O65 }, +static const FileId TypeTable[] = { + /* Upper case stuff for obsolete operating systems */ + { "A", FILETYPE_LIB }, + { "A65", FILETYPE_ASM }, + { "ASM", FILETYPE_ASM }, + { "C", FILETYPE_C }, + { "EMD", FILETYPE_O65 }, + { "GRC", FILETYPE_GR }, + { "JOY", FILETYPE_O65 }, + { "LIB", FILETYPE_LIB }, + { "MOU", FILETYPE_O65 }, + { "O", FILETYPE_OBJ }, + { "O65", FILETYPE_O65 }, + { "OBJ", FILETYPE_OBJ }, + { "S", FILETYPE_ASM }, + { "SER", FILETYPE_O65 }, + { "TGI", FILETYPE_O65 }, + + { "a", FILETYPE_LIB }, + { "a65", FILETYPE_ASM }, + { "asm", FILETYPE_ASM }, + { "c", FILETYPE_C }, { "emd", FILETYPE_O65 }, + { "grc", FILETYPE_GR }, { "joy", FILETYPE_O65 }, + { "lib", FILETYPE_LIB }, + { "mou", FILETYPE_O65 }, + { "o", FILETYPE_OBJ }, + { "o65", FILETYPE_O65 }, + { "obj", FILETYPE_OBJ }, + { "s", FILETYPE_ASM }, + { "ser", FILETYPE_O65 }, { "tgi", FILETYPE_O65 }, }; +#define FILETYPE_COUNT (sizeof (TypeTable) / sizeof (TypeTable[0])) + /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ -int GetFileType (const char* Name) +FILETYPE GetFileType (const char* Name) /* Determine the type of the given file by looking at the name. If the file * type could not be determined, the function returns FILETYPE_UNKOWN. */ { - unsigned I; - - /* Determine the file type by the extension */ - const char* Ext = FindExt (Name); - - /* Do we have an extension? */ - if (Ext == 0) { - return FILETYPE_UNKNOWN; - } - - /* Skip the dot */ - ++Ext; - - /* Check for known extensions */ - for (I = 0; I < sizeof (FileTypes) / sizeof (FileTypes [0]); ++I) { - if (strcmp (FileTypes [I].Ext, Ext) == 0) { - /* Found */ - return FileTypes [I].Type; - } - } - - /* Not found, return the default */ - return FILETYPE_UNKNOWN; + /* Search for a table entry */ + const FileId* F = GetFileId (Name, TypeTable, FILETYPE_COUNT); + + /* Return the result */ + return F? F->Id : FILETYPE_UNKNOWN; }