]> git.sur5r.net Git - cc65/blobdiff - src/common/filetype.c
add gotox, gotoy, and gotoxy
[cc65] / src / common / filetype.c
index e74c412b656bdd955b1098a74e99b1f284b51891..3e5779eb8f8c04c4dd82ad67ea5e4e05f508819e 100644 (file)
@@ -6,8 +6,8 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2003-2005, Ullrich von Bassewitz                                      */
-/*                Römerstrasse 52                                            */
+/* (C) 2003-2012, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 #include <string.h>
 
 /* common */
+#include "fileid.h"
 #include "filetype.h"
-#include "fname.h"
 
 
 
 /*****************************************************************************/
-/*                                  Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 
-/* Table that maps extensions to file types. Sorted alphabetically. */
-typedef struct {
-    const char Ext[4];
-    FILETYPE    Type;
-} FileType;
-
-static const FileType TypeTable[] = {
+static const FileId TypeTable[] = {
     /* Upper case stuff for obsolete operating systems */
-    {   "A",   FILETYPE_LIB    },
-    {   "A65", FILETYPE_ASM    },
-    {   "ASM", FILETYPE_ASM    },
-    {   "C",   FILETYPE_C      },
+    {   "A",    FILETYPE_LIB    },
+    {   "A65",  FILETYPE_ASM    },
+    {   "ASM",  FILETYPE_ASM    },
+    {   "C",    FILETYPE_C      },
     {   "EMD",  FILETYPE_O65    },
-    {   "GRC", FILETYPE_GR     },
+    {   "GRC",  FILETYPE_GR     },
     {   "JOY",  FILETYPE_O65    },
-    {   "LIB", FILETYPE_LIB    },
+    {   "LIB",  FILETYPE_LIB    },
     {   "MOU",  FILETYPE_O65    },
-    {   "O",   FILETYPE_OBJ    },
+    {   "O",    FILETYPE_OBJ    },
     {   "O65",  FILETYPE_O65    },
-    {   "OBJ", FILETYPE_OBJ    },
-    {   "S",   FILETYPE_ASM    },
+    {   "OBJ",  FILETYPE_OBJ    },
+    {   "S",    FILETYPE_ASM    },
     {   "SER",  FILETYPE_O65    },
     {   "TGI",  FILETYPE_O65    },
 
-    {   "a",   FILETYPE_LIB    },
-    {   "a65", FILETYPE_ASM    },
-    {   "asm", FILETYPE_ASM    },
-    {   "c",   FILETYPE_C      },
+    {   "a",    FILETYPE_LIB    },
+    {   "a65",  FILETYPE_ASM    },
+    {   "asm",  FILETYPE_ASM    },
+    {   "c",    FILETYPE_C      },
     {   "emd",  FILETYPE_O65    },
-    {   "grc", FILETYPE_GR     },
+    {   "grc",  FILETYPE_GR     },
     {   "joy",  FILETYPE_O65    },
-    {   "lib", FILETYPE_LIB    },
+    {   "lib",  FILETYPE_LIB    },
     {   "mou",  FILETYPE_O65    },
-    {   "o",   FILETYPE_OBJ    },
+    {   "o",    FILETYPE_OBJ    },
     {   "o65",  FILETYPE_O65    },
-    {   "obj", FILETYPE_OBJ    },
-    {   "s",   FILETYPE_ASM    },
+    {   "obj",  FILETYPE_OBJ    },
+    {   "s",    FILETYPE_ASM    },
     {   "ser",  FILETYPE_O65    },
     {   "tgi",  FILETYPE_O65    },
 };
@@ -94,39 +88,21 @@ static const FileType TypeTable[] = {
 
 
 /*****************************************************************************/
-/*                                  Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
 
-static int Compare (const void* Key, const void* Type)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, ((const FileType*) Type)->Ext);
-}
-
-
-
 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.
  */
 {
-    const FileType* FT;
-
-    /* Determine the file type by the extension */
-    const char* Ext = FindExt (Name);
-
-    /* Do we have an extension? */
-    if (Ext == 0) {
-       return FILETYPE_UNKNOWN;
-    }
-
     /* Search for a table entry */
-    FT = bsearch (Ext+1, TypeTable, FILETYPE_COUNT, sizeof (FileType), Compare);
+    const FileId* F = GetFileId (Name, TypeTable, FILETYPE_COUNT);
 
     /* Return the result */
-    return FT? FT->Type : FILETYPE_UNKNOWN;
+    return F? F->Id : FILETYPE_UNKNOWN;
 }