rnd-20090623-1-src
[rocksndiamonds.git] / src / game_sp / GeneralTricks.c
diff --git a/src/game_sp/GeneralTricks.c b/src/game_sp/GeneralTricks.c
new file mode 100644 (file)
index 0000000..19de0d6
--- /dev/null
@@ -0,0 +1,149 @@
+// ----------------------------------------------------------------------------
+// GeneralTricks.c
+// ----------------------------------------------------------------------------
+
+#include "GeneralTricks.h"
+
+static char *VB_Name = "GeneralTricks_Module";
+// --- Option Explicit
+// --- Option Compare Text
+
+double ValEx(char *TS)
+{
+  double ValEx;
+
+  // Extends the Val() function for
+  // german-style number-representing strings
+  int i;
+  char *LS, *RS;
+
+  i = InStr(1, TS, ",");
+  if (i != 0)
+  {
+    LS = Left(TS, i - 1);
+    RS = Right(TS, Len(TS) - i);
+    ValEx = Val(CAT(LS, ".", RS));
+  }
+  else
+  {
+    ValEx = Val(TS);
+  }
+
+  return ValEx;
+}
+
+void INC(int *VAR, int Delta)
+{
+  *VAR = *VAR + Delta;
+}
+
+void DEC(int *VAR, int Delta)
+{
+  *VAR = *VAR - Delta;
+}
+
+char *MySplit(char *TS, char *Sep, long SCount)
+{
+  char *MySplit;
+
+  char *T;
+  long i, J, k, q, L, SL;
+  char *RA;
+
+  T = TS;
+  L = Len(TS);
+  SL = Len(Sep);
+  J = SCount;
+  if (J < 1)
+  {
+    J = 0;
+    i = 1;
+    while (i <= L)
+    {
+      k = InStr(i, T, Sep);
+      if (k < i)
+        break;
+
+      if (i < k)
+        J = J + 1;
+
+      i = k + SL;
+    }
+
+    if (i <= L)
+      J = J + 1;
+  }
+
+  if (0 < J)
+    RA = REDIM_1D(sizeof(char), 0, J + 1 - 1);
+  else
+    return MySplit;
+
+  i = 1;
+  q = 0;
+  while (i <= L)
+  {
+    k = InStr(i, T, Sep);
+    if (k < i)
+      break;
+
+    if (i < k)
+    {
+      if (J <= q + 1)
+        break;
+
+      q = q + 1;
+      RA[q] = Mid(T, i, k - i);
+    }
+
+    i = k + SL;
+  }
+
+  if (i <= L)
+  {
+    q = q + 1;
+    T = Right(T, L - i + 1);
+    do
+    {
+      if (Len(T) <= SL)
+        break;
+
+      if (Right(T, SL) == Sep)
+      {
+        T = Left(T, Len(T) - SL);
+      }
+      else
+      {
+        break;
+      }
+    }
+    while (1);
+
+    strcpy(&RA[q], T); // RA(q) = T
+  }
+
+  MySplit = RA;
+
+  return MySplit;
+}
+
+void MyReplace(char *TS, char *Pat1, char *Pat2)
+{
+  long k, SL1, SL2, TL;
+
+  TL = Len(TS);
+  SL1 = Len(Pat1);
+  SL2 = Len(Pat2);
+  k = InStr(1, TS, Pat1);
+  if (k == 0)
+    return;
+
+  do
+  {
+    TS = CAT(Left(TS, k - 1), Pat2, Right(TS, TL - k - SL1 + 1));
+    TL = TL + SL2 - SL1;
+    k = InStr(k + SL2, TS, Pat1);
+  }
+  while (!(k == 0));
+}
+