could not be written in a Hexen-compatible manner.
- Fixed logic for Hexen-compatibility errors: pc_NoShrink by itself does not imply -h.
SVN r3407 (trunk)
case 'H':\r
pc_NoShrink = TRUE;\r
pc_HexenCase = TRUE;\r
+ pc_EnforceHexen = toupper(*text) != 'H';\r
+ pc_WarnNotHexen = toupper(*text) == 'H';\r
break;\r
\r
default:\r
puts("-i [path] Add include path to find include files");\r
puts("-d[file] Output debugging information");\r
puts("-h Create pcode compatible with Hexen and old ZDooms");\r
+ puts("-hh Like -h, but use of new features is only a warning");\r
exit(1);\r
}\r
\r
{ ERR_NOT_A_CHAR_ARRAY, "%s has %d dimensions. Use %d subscripts to get a char array." },\r
{ ERR_CANT_FIND_INCLUDE, "Couldn't find include file \"%s\"." },\r
{ ERR_SCRIPT_NAMED_NONE, "Scripts may not be named \"None\"." },\r
- { ERR_HEXEN_COMPAT, "Attempt to use feature not supported by Hexen pcode with -h specified." },\r
+ { ERR_HEXEN_COMPAT, "Attempt to use feature not supported by Hexen." },\r
+ { ERR_NOT_HEXEN, "Cannot save; new features are not compatible with Hexen." },\r
{ ERR_NONE, NULL }\r
};\r
\r
ERR_CANT_FIND_INCLUDE,\r
ERR_SCRIPT_NAMED_NONE,\r
ERR_HEXEN_COMPAT,\r
+ ERR_NOT_HEXEN,\r
} error_t;\r
\r
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------\r
{\r
MS_Message(MSG_DEBUG, "Strings will be encrypted\n");\r
pc_EncryptStrings = TRUE;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
TK_NextToken();\r
break;\r
\r
#include <string.h>\r
#include <stddef.h>\r
+#include <stdio.h>\r
#include "pcode.h"\r
#include "common.h"\r
#include "error.h"\r
int pc_FunctionCount;\r
boolean pc_NoShrink;\r
boolean pc_HexenCase;\r
+boolean pc_EnforceHexen;\r
+boolean pc_WarnNotHexen;\r
boolean pc_WadAuthor = TRUE;\r
boolean pc_EncryptStrings;\r
int pc_LastAppendedCommand;\r
(pc_FunctionCount > 0) || MapVariablesInit || NumArrays != 0 ||\r
pc_EncryptStrings || NumImports != 0 || HaveExtendedScripts)\r
{\r
- if(pc_NoShrink)\r
- ERR_Exit(ERR_HEXEN_COMPAT, NO);\r
+ if(pc_EnforceHexen)\r
+ {\r
+ ERR_Exit(ERR_NOT_HEXEN, NO);\r
+ }\r
+ if(pc_WarnNotHexen)\r
+ {\r
+ fprintf(stderr, "\nThese scripts have been upgraded because they use new features.\n"\r
+ "They will not be compatible with Hexen.\n");\r
+ }\r
CloseNew();\r
}\r
else\r
MapVariables[index].isString = pa_ConstExprIsString;\r
MapVariables[index].initializer = value;\r
MapVariablesInit = YES;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
}\r
\r
if (flags != 0 || number < 0 || number >= 1000)\r
{\r
HaveExtendedScripts = YES;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
\r
for (i = 0; i < pc_ScriptCount; i++)\r
{\r
ERR_Error(ERR_TOO_MANY_FUNCTIONS, YES, NULL);\r
}\r
- else if(pc_NoShrink)\r
+ else if(pc_EnforceHexen)\r
{\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
}\r
{\r
NumArrays++;\r
ArraySizes[index] = size;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
\r
//==========================================================================\r
{\r
ERR_Exit(ERR_TOO_MANY_IMPORTS, YES);\r
}\r
- else if(pc_NoShrink)\r
+ else if(pc_EnforceHexen)\r
{\r
- ERR_Exit(ERR_HEXEN_COMPAT, YES);\r
+ ERR_Error(ERR_HEXEN_COMPAT, YES);\r
}\r
strncpy(Imports[NumImports], name, 8);\r
return NumImports++;\r
extern int pc_FunctionCount;\r
extern boolean pc_NoShrink;\r
extern boolean pc_HexenCase;\r
+extern boolean pc_EnforceHexen;\r
+extern boolean pc_WarnNotHexen;\r
extern boolean pc_WadAuthor;\r
extern boolean pc_EncryptStrings;\r
extern int pc_LastAppendedCommand;\r
}\r
LanguageInfo[i]->list.stringCount = 0;\r
NumLanguages++;\r
- if(NumLanguages > 1 && pc_NoShrink)\r
+ if(NumLanguages > 1 && pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
return i;\r
}\r
StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
StringLists[list]->stringCount = 0;\r
NumStringLists++;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
return STR_FindInSomeList (StringLists[list], name);\r
}\r
StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
StringLists[list]->stringCount = 0;\r
NumStringLists++;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
return STR_FindInSomeListInsensitive (StringLists[list], name);\r
}\r
StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
StringLists[list]->stringCount = 0;\r
NumStringLists++;\r
- if(pc_NoShrink)\r
+ if(pc_EnforceHexen)\r
+ {\r
ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+ }\r
}\r
return STR_PutStringInSomeList(StringLists[list], StringLists[list]->stringCount, name);\r
}\r