DEADSOFTWARE

manager: remove flag 0x8000 from resource handle id
[flatwaifu.git] / src / files.c
index 55271713c2d95bf12f07fecb44e52790934f6dfc..dc897ed23cb0fd1daa2c2fd96dc19cc890dc0c3c 100644 (file)
@@ -39,6 +39,7 @@
 #include "switch.h"
 #include "weapons.h"
 #include "error.h"
+#include "cp866.h"
 
 typedef struct {
   byte n, i, v, d;
@@ -155,7 +156,7 @@ void F_loadgame (int n) {
   }
 }
 
-void F_addwad (char *fn) {
+void F_addwad (const char *fn) {
   int i;
 
   for(i=0;i<MAX_WADS;++i) if(wads[i][0]==0) {
@@ -223,9 +224,9 @@ void F_initwads (void) {
         ERR_failinit("Не могу открыть файл2:  %s", wads[i]);
       }
       mysplitpath(wads[i], f_drive, f_dir, f_name, f_ext);
-      if (strcasecmp(f_ext, ".lmp") == 0) {
+      if (cp866_strcasecmp(f_ext, ".lmp") == 0) {
         for (k = 0; k < MAX_WAD; ++k) {
-          if (strncasecmp(wad[k].n, f_name, 8) == 0) {
+          if (cp866_strncasecmp(wad[k].n, f_name, 8) == 0) {
             wad[k].o = 0;
             wad[k].l = myfilelength(h);
             wad[k].f = i;
@@ -257,7 +258,7 @@ void F_initwads (void) {
           w.o = myfread32(h); // len
           myfread(w.n, 1, 8, h); // name
           for (k = 0; k < MAX_WAD; ++k) {
-            if (strncasecmp(wad[k].n, w.n, 8) == 0) {
+            if (cp866_strncasecmp(wad[k].n, w.n, 8) == 0) {
               wad[k].o = w.o;
               wad[k].l = w.l;
               wad[k].f = i;
@@ -329,7 +330,7 @@ void F_saveres(int r, void *p, dword o, dword l) {
 int F_findres (const char n[8]) {
   int i;
   for (i = 0; i < wad_num; i++) {
-    if (strncasecmp(wad[i].n, n, 8) == 0) {
+    if (cp866_strncasecmp(wad[i].n, n, 8) == 0) {
       return i;
     }
   }
@@ -350,21 +351,24 @@ void F_getresname (char n[8], int r) {
 }
 
 // get sprite id
-int F_getsprid (const char n[4], int s, int d) {
+int F_getsprid (const char n[4], int s, int d, char *dir) {
   int i;
-  byte a,b;
-
-  s+='A';d+='0';
-  for(i=s_start+1;i<s_end;++i)
-    if(strncasecmp(wad[i].n,n,4)==0 && (wad[i].n[4]==s || wad[i].n[6]==s)) {
-      if(wad[i].n[4]==s) a=wad[i].n[5]; else a=0;
-      if(wad[i].n[6]==s) b=wad[i].n[7]; else b=0;
-      if(a=='0') return i;
-      if(b=='0') return(i|0x8000);
-      if(a==d) return i;
-      if(b==d) return(i|0x8000);
+  byte a, b;
+  s += 'A';
+  d += '0';
+  for (i = s_start + 1; i < s_end; i++) {
+    if (cp866_strncasecmp(wad[i].n, n, 4) == 0 && (wad[i].n[4] == s || wad[i].n[6] == s)) {
+      a = wad[i].n[4] == s ? wad[i].n[5] : 0;
+      b = wad[i].n[6] == s ? wad[i].n[7] : 0;
+      if (a == '0' || b == '0' || a == d || b == d) {
+        if (dir != NULL) {
+          *dir = a != '0' && b == '0' || a != d && b == d;
+        }
+        return i;
+      }
     }
-  ERR_fatal("F_getsprid: изображение %.4s%c%c не найдено",n,(byte)s,(byte)d);
+  }
+  ERR_fatal("F_getsprid: image %.4s%c%c not found", n, s, d);
   return -1;
 }
 
@@ -379,12 +383,12 @@ void F_nextmus (char *s) {
   for(++i;;++i) {
     if(i>=m_end) i=m_start+1;
 
-    if (strcasecmp(wad[i].n,"MENU") == 0 ||
-        strcasecmp(wad[i].n,"INTERMUS") == 0 ||
-        strcasecmp(wad[i].n,"\x8a\x8e\x8d\x85\x96\x0") == 0)
+    if (cp866_strcasecmp(wad[i].n,"MENU") == 0 ||
+        cp866_strcasecmp(wad[i].n,"INTERMUS") == 0 ||
+        cp866_strcasecmp(wad[i].n,"\x8a\x8e\x8d\x85\x96\x0") == 0)
         continue;
 
-    if(strncasecmp(wad[i].n,"DMI",3)!=0) break;
+    if(cp866_strncasecmp(wad[i].n,"DMI",3)!=0) break;
   }
   memcpy(s,wad[i].n,8);
 }