OSDN Git Service

- Added desaturation translation support to ACC. This is the same as the % syntax...
[zandronum/zandronum-acc.git] / strlist.c
index 386cd5e..baf0b07 100644 (file)
--- a/strlist.c
+++ b/strlist.c
@@ -45,6 +45,7 @@ typedef struct
 \r
 static int STR_PutStringInSomeList(stringList_t *list, int index, char *name);\r
 static int STR_FindInSomeList(stringList_t *list, char *name);\r
+static int STR_FindInSomeListInsensitive(stringList_t *list, char *name);\r
 static void DumpStrings(stringList_t *list, int lenadr, boolean quad, boolean crypt);\r
 static void Encrypt(void *data, int key, int len);\r
 \r
@@ -111,6 +112,10 @@ int STR_FindLanguage(char *name)
                }\r
                LanguageInfo[i]->list.stringCount = 0;\r
                NumLanguages++;\r
+               if(NumLanguages > 1 && pc_EnforceHexen)\r
+               {\r
+                       ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+               }\r
        }\r
        return i;\r
 }\r
@@ -150,6 +155,10 @@ int STR_FindInList(int list, char *name)
                StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
                StringLists[list]->stringCount = 0;\r
                NumStringLists++;\r
+               if(pc_EnforceHexen)\r
+               {\r
+                       ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+               }\r
        }\r
        return STR_FindInSomeList (StringLists[list], name);\r
 }\r
@@ -177,6 +186,48 @@ static int STR_FindInSomeList(stringList_t *list, char *name)
 \r
 //==========================================================================\r
 //\r
+// STR_FindInListInsensitive\r
+//\r
+//==========================================================================\r
+\r
+int STR_FindInListInsensitive(int list, char *name)\r
+{\r
+       if (StringLists[list] == NULL)\r
+       {\r
+               StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
+               StringLists[list]->stringCount = 0;\r
+               NumStringLists++;\r
+               if(pc_EnforceHexen)\r
+               {\r
+                       ERR_Error(ERR_HEXEN_COMPAT, YES);\r
+               }\r
+       }\r
+       return STR_FindInSomeListInsensitive (StringLists[list], name);\r
+}\r
+\r
+//==========================================================================\r
+//\r
+// STR_FindInSomeListInsensitive\r
+//\r
+//==========================================================================\r
+\r
+static int STR_FindInSomeListInsensitive(stringList_t *list, char *name)\r
+{\r
+       int i;\r
+\r
+       for(i = 0; i < list->stringCount; i++)\r
+       {\r
+               if(strcasecmp(list->strings[i].name, name) == 0)\r
+               {\r
+                       return i;\r
+               }\r
+       }\r
+       // Add to list\r
+       return STR_PutStringInSomeList(list, i, name);\r
+}\r
+\r
+//==========================================================================\r
+//\r
 // STR_GetString\r
 //\r
 //==========================================================================\r
@@ -207,6 +258,10 @@ int STR_AppendToList(int list, char *name)
                StringLists[list] = MS_Alloc(sizeof(stringList_t), ERR_OUT_OF_MEMORY);\r
                StringLists[list]->stringCount = 0;\r
                NumStringLists++;\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
@@ -274,7 +329,7 @@ int STR_ListSize(int list)
 void STR_WriteStrings(void)\r
 {\r
        int i;\r
-       U_LONG pad;\r
+       U_INT pad;\r
 \r
        MS_Message(MSG_DEBUG, "---- STR_WriteStrings ----\n");\r
        for(i = 0; i < LanguageInfo[0]->list.stringCount; i++)\r
@@ -300,10 +355,10 @@ void STR_WriteList(void)
        int i;\r
 \r
        MS_Message(MSG_DEBUG, "---- STR_WriteList ----\n");\r
-       PC_AppendLong((U_LONG)LanguageInfo[0]->list.stringCount);\r
+       PC_AppendInt((U_INT)LanguageInfo[0]->list.stringCount);\r
        for(i = 0; i < LanguageInfo[0]->list.stringCount; i++)\r
        {\r
-               PC_AppendLong((U_LONG)LanguageInfo[0]->list.strings[i].address);\r
+               PC_AppendInt((U_INT)LanguageInfo[0]->list.strings[i].address);\r
        }\r
 }\r
 \r
@@ -321,10 +376,10 @@ void STR_WriteChunk(int language, boolean encrypt)
        MS_Message(MSG_DEBUG, "---- STR_WriteChunk %d ----\n", language);\r
        PC_Append(encrypt ? "STRE" : "STRL", 4);\r
        lenadr = pc_Address;\r
-       PC_SkipLong();\r
+       PC_SkipInt();\r
        PC_Append(&lang->name, 4);\r
-       PC_AppendLong(lang->list.stringCount);\r
-       PC_AppendLong(0);       // Used in-game for stringing lists together\r
+       PC_AppendInt(lang->list.stringCount);\r
+       PC_AppendInt(0);        // Used in-game for stringing lists together\r
 \r
        DumpStrings (&lang->list, lenadr, NO, encrypt);\r
 }\r
@@ -343,14 +398,14 @@ void STR_WriteListChunk(int list, int id, boolean quad)
        {\r
                MS_Message(MSG_DEBUG, "---- STR_WriteListChunk %d %c%c%c%c----\n", list,\r
                        id&255, (id>>8)&255, (id>>16)&255, (id>>24)&255);\r
-               PC_AppendLong((U_LONG)id);\r
+               PC_AppendInt((U_INT)id);\r
                lenadr = pc_Address;\r
-               PC_SkipLong();\r
-               PC_AppendLong(StringLists[list]->stringCount);\r
+               PC_SkipInt();\r
+               PC_AppendInt(StringLists[list]->stringCount);\r
                if (quad && pc_Address%8 != 0)\r
                { // If writing quadword indices, align the indices to an\r
                  // 8-byte boundary.\r
-                       U_LONG pad = 0;\r
+                       U_INT pad = 0;\r
                        PC_Append (&pad, 4);\r
                }\r
                DumpStrings(StringLists[list], lenadr, quad, NO);\r
@@ -373,16 +428,16 @@ static void DumpStrings(stringList_t *list, int lenadr, boolean quad, boolean cr
        {\r
                if (list->strings[i].name != NULL)\r
                {\r
-                       PC_AppendLong((U_LONG)ofs);\r
+                       PC_AppendInt((U_INT)ofs);\r
                        ofs += strlen(list->strings[i].name) + 1;\r
                }\r
                else\r
                {\r
-                       PC_AppendLong(0);\r
+                       PC_AppendInt(0);\r
                }\r
                if (quad)\r
                {\r
-                       PC_AppendLong(0);\r
+                       PC_AppendInt(0);\r
                }\r
        }\r
 \r
@@ -410,11 +465,11 @@ static void DumpStrings(stringList_t *list, int lenadr, boolean quad, boolean cr
        }\r
        if(pc_Address%4 != 0)\r
        { // Need to align\r
-               U_LONG pad = 0;\r
+               U_INT pad = 0;\r
                PC_Append((void *)&pad, 4-(pc_Address%4));\r
        }\r
 \r
-       PC_WriteLong(pc_Address - lenadr - 4, lenadr);\r
+       PC_WriteInt(pc_Address - lenadr - 4, lenadr);\r
 }\r
 \r
 static void Encrypt(void *data, int key, int len)\r