]> git.sur5r.net Git - cc65/commitdiff
Allow numeric OS types in the config file
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 14 Feb 2005 10:36:23 +0000 (10:36 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 14 Feb 2005 10:36:23 +0000 (10:36 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3386 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/config.c
src/ld65/o65.h

index 670f4dedbc3e55cd1ce63a658ad9469465398d35..9f9fba2c6516a35b9af19aee7103ab5fb660f5c4 100644 (file)
@@ -912,7 +912,7 @@ static void ParseO65 (void)
                    CfgError ("Exported symbol `%s' cannot be an import", CfgSVal);
                }
                /* Check if we have this symbol defined already. The entry
-                * routine will check this also, but we get a more verbose
+                * routine will check this also, but we get a more verbose
                 * error message when checking it here.
                 */
                if (O65GetExport (O65FmtDesc, CfgSValId) != 0) {
@@ -962,20 +962,27 @@ static void ParseO65 (void)
                    default:
                        CfgError ("Unexpected type token");
                }
-               break;
+               break;
 
            case CFGTOK_OS:
-               /* Cannot use this attribute twice */
-               FlagAttr (&AttrFlags, atOS, "OS");
-               /* Get the operating system */
-               CfgSpecialToken (OperatingSystems, ENTRY_COUNT (OperatingSystems), "OS type");
-               switch (CfgTok) {
-                   case CFGTOK_LUNIX:  OS = O65OS_LUNIX;       break;
-                   case CFGTOK_OSA65:  OS = O65OS_OSA65;       break;
-                   case CFGTOK_CC65:   OS = O65OS_CC65;        break;
-                   default:            CfgError ("Unexpected OS token");
-               }
-               break;
+               /* Cannot use this attribute twice */
+               FlagAttr (&AttrFlags, atOS, "OS");
+               /* Get the operating system. It may be specified as name or
+                 * as a number in the range 1..255.
+                 */
+               if (CfgTok == CFGTOK_INTCON) {
+                   CfgRangeCheck (O65OS_MIN, O65OS_MAX);
+                   OS = (unsigned) CfgIVal;
+               } else {
+                    CfgSpecialToken (OperatingSystems, ENTRY_COUNT (OperatingSystems), "OS type");
+                    switch (CfgTok) {
+                        case CFGTOK_LUNIX:  OS = O65OS_LUNIX;       break;
+                        case CFGTOK_OSA65:  OS = O65OS_OSA65;       break;
+                        case CFGTOK_CC65:   OS = O65OS_CC65;        break;
+                        default:            CfgError ("Unexpected OS token");
+                    }
+                }
+               break;
 
             case CFGTOK_ID:
                 /* Cannot have this attribute twice */
@@ -1010,8 +1017,8 @@ static void ParseO65 (void)
 
     /* Check for attributes that may not be combined */
     if (OS == O65OS_CC65) {
-        if ((AttrFlags & (atImport | atExport)) != 0) {
-            CfgError ("OS type CC65 may not have imports or exports");
+        if ((AttrFlags & (atImport | atExport)) != 0 && ModuleId < 0x8000) {
+            CfgError ("OS type CC65 may not have imports or exports for ids < $8000");
         }
     } else {
         if (AttrFlags & atID) {
index 5115eabc6a97af8f6f84649b2b503dbad9810025..d9e8832f885d23033a32599acfe5035f8f487826 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1999-2003 Ullrich von Bassewitz                                       */
+/* (C) 1999-2005 Ullrich von Bassewitz                                       */
 /*               Römerstrasse 52                                             */
 /*               D-70794 Filderstadt                                         */
 /* EMail:        uz@cc65.org                                                 */
@@ -62,9 +62,11 @@ typedef struct O65Desc O65Desc;
 #define O65OPT_TIMESTAMP       4
 
 /* Operating system codes for O65OPT_OS */
+#define O65OS_MIN               1
 #define O65OS_OSA65            1
 #define O65OS_LUNIX            2
 #define O65OS_CC65              3
+#define O65OS_MAX               255