]> git.sur5r.net Git - cc65/blobdiff - src/common/filetype.c
add gotox, gotoy, and gotoxy
[cc65] / src / common / filetype.c
index 488890bd92a977affd2b6a2d658a54f3b138250f..3e5779eb8f8c04c4dd82ad67ea5e4e05f508819e 100644 (file)
@@ -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       */
 
 
 
+#include <stdlib.h>
 #include <string.h>
 
 /* 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;
 }