]> git.sur5r.net Git - cc65/commitdiff
Splitted the filetype module into the actual search function (now in fileid)
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Feb 2012 16:24:35 +0000 (16:24 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Feb 2012 16:24:35 +0000 (16:24 +0000)
and the existing file types used by ld65 and cl65.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5558 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/fileid.c [new file with mode: 0644]
src/common/fileid.h [new file with mode: 0644]
src/common/filetype.c
src/common/make/gcc.mak
src/common/make/watcom.mak

diff --git a/src/common/fileid.c b/src/common/fileid.c
new file mode 100644 (file)
index 0000000..8e0a875
--- /dev/null
@@ -0,0 +1,79 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 fileid.c                                  */
+/*                                                                           */
+/*               Determine the id of a file type by extension                */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (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       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#include <stdlib.h>
+#include <string.h>
+
+/* common */
+#include "fileid.h"
+#include "fname.h"
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+static int Compare (const void* Key, const void* Id)
+/* Compare function for bsearch */
+{
+    return strcmp (Key, ((const FileId*) Id)->Ext);
+}
+
+
+
+const FileId* GetFileId (const char* Name, const FileId* Table, unsigned Count)
+/* Determine the id of the given file by looking at file extension of the name.
+ * The table passed to the function must be sorted alphabetically. If the
+ * extension is found, a pointer to the matching table entry is returned. If
+ * no matching table entry was found, the function returns NULL.
+ */
+{
+    /* Determine the file type by the extension */
+    const char* Ext = FindExt (Name);
+
+    /* Do we have an extension? */
+    if (Ext == 0) {
+       return 0;
+    }
+
+    /* Search for a table entry and return it */
+    return bsearch (Ext+1, Table, Count, sizeof (FileId), Compare);
+}
+
+
+
diff --git a/src/common/fileid.h b/src/common/fileid.h
new file mode 100644 (file)
index 0000000..1faf31e
--- /dev/null
@@ -0,0 +1,77 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 fileid.h                                  */
+/*                                                                           */
+/*               Determine the id of a file type by extension                */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (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       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef FILEID_H
+#define FILEID_H
+
+
+
+/*****************************************************************************/
+/*                                  Data                                    */
+/*****************************************************************************/
+
+
+
+/* An entry for a table that maps extensions to some sort of identifier. Such
+ * a table - sorted alphabetically - is passed to GetFileId.
+ */
+typedef struct FileId FileId;
+struct FileId {
+    const char         Ext[4];
+    int         Id;
+};
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+const FileId* GetFileId (const char* Name, const FileId* Table, unsigned Count);
+/* Determine the id of the given file by looking at file extension of the name.
+ * The table passed to the function must be sorted alphabetically. If the
+ * extension is found, a pointer to the matching table entry is returned. If
+ * no matching table entry was found, the function returns NULL.
+ */
+
+
+
+/* End of fileid.h */
+#endif
+
+
+
index e74c412b656bdd955b1098a74e99b1f284b51891..abd66911fa7f8c3d3b40622d88215a24ab90ddd7 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                                                */
 /*                                                                           */
@@ -37,8 +37,8 @@
 #include <string.h>
 
 /* common */
+#include "fileid.h"
 #include "filetype.h"
-#include "fname.h"
 
 
 
 
 
 
-/* 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    },
@@ -99,34 +93,16 @@ static const FileType TypeTable[] = {
 
 
 
-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;
 }
 
 
index 54484a7a7daab815dbbb0a24519b58f43fac8d7e..499080ad3e9296e7ec82f40ff7e36f1574af9342 100644 (file)
@@ -25,6 +25,7 @@ OBJS =        abend.o         \
        cpu.o           \
        debugflag.o     \
        exprdefs.o      \
+        fileid.o        \
        filepos.o       \
        filetype.o      \
        fname.o         \
index e9d7e01c117a7799a0b0e2562e2f582704d81b58..07e39155e598c0b26e1071aa72b97116f880aceb 100644 (file)
@@ -67,6 +67,7 @@ OBJS =        abend.obj       \
         cpu.obj         \
         debugflag.obj   \
        exprdefs.obj    \
+        fileid.obj      \
        filepos.obj     \
         filetype.obj    \
        fname.obj       \