1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 04:30:10 +00:00

Allow numeric OS types in the config file

git-svn-id: svn://svn.cc65.org/cc65/trunk@3386 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2005-02-14 10:36:23 +00:00
parent 6c796774d8
commit 26ae91efff
2 changed files with 25 additions and 16 deletions

View File

@ -912,7 +912,7 @@ static void ParseO65 (void)
CfgError ("Exported symbol `%s' cannot be an import", CfgSVal); CfgError ("Exported symbol `%s' cannot be an import", CfgSVal);
} }
/* Check if we have this symbol defined already. The entry /* 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. * error message when checking it here.
*/ */
if (O65GetExport (O65FmtDesc, CfgSValId) != 0) { if (O65GetExport (O65FmtDesc, CfgSValId) != 0) {
@ -962,20 +962,27 @@ static void ParseO65 (void)
default: default:
CfgError ("Unexpected type token"); CfgError ("Unexpected type token");
} }
break; break;
case CFGTOK_OS: case CFGTOK_OS:
/* Cannot use this attribute twice */ /* Cannot use this attribute twice */
FlagAttr (&AttrFlags, atOS, "OS"); FlagAttr (&AttrFlags, atOS, "OS");
/* Get the operating system */ /* Get the operating system. It may be specified as name or
CfgSpecialToken (OperatingSystems, ENTRY_COUNT (OperatingSystems), "OS type"); * as a number in the range 1..255.
switch (CfgTok) { */
case CFGTOK_LUNIX: OS = O65OS_LUNIX; break; if (CfgTok == CFGTOK_INTCON) {
case CFGTOK_OSA65: OS = O65OS_OSA65; break; CfgRangeCheck (O65OS_MIN, O65OS_MAX);
case CFGTOK_CC65: OS = O65OS_CC65; break; OS = (unsigned) CfgIVal;
default: CfgError ("Unexpected OS token"); } else {
} CfgSpecialToken (OperatingSystems, ENTRY_COUNT (OperatingSystems), "OS type");
break; 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: case CFGTOK_ID:
/* Cannot have this attribute twice */ /* Cannot have this attribute twice */
@ -1010,8 +1017,8 @@ static void ParseO65 (void)
/* Check for attributes that may not be combined */ /* Check for attributes that may not be combined */
if (OS == O65OS_CC65) { if (OS == O65OS_CC65) {
if ((AttrFlags & (atImport | atExport)) != 0) { if ((AttrFlags & (atImport | atExport)) != 0 && ModuleId < 0x8000) {
CfgError ("OS type CC65 may not have imports or exports"); CfgError ("OS type CC65 may not have imports or exports for ids < $8000");
} }
} else { } else {
if (AttrFlags & atID) { if (AttrFlags & atID) {

View File

@ -6,7 +6,7 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1999-2003 Ullrich von Bassewitz */ /* (C) 1999-2005 Ullrich von Bassewitz */
/* Römerstrasse 52 */ /* Römerstrasse 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
@ -62,9 +62,11 @@ typedef struct O65Desc O65Desc;
#define O65OPT_TIMESTAMP 4 #define O65OPT_TIMESTAMP 4
/* Operating system codes for O65OPT_OS */ /* Operating system codes for O65OPT_OS */
#define O65OS_MIN 1
#define O65OS_OSA65 1 #define O65OS_OSA65 1
#define O65OS_LUNIX 2 #define O65OS_LUNIX 2
#define O65OS_CC65 3 #define O65OS_CC65 3
#define O65OS_MAX 255