rnd-20090623-1-src
[rocksndiamonds.git] / src / game_sp / GeneralTricks.c
1 // ----------------------------------------------------------------------------
2 // GeneralTricks.c
3 // ----------------------------------------------------------------------------
4
5 #include "GeneralTricks.h"
6
7 static char *VB_Name = "GeneralTricks_Module";
8 // --- Option Explicit
9 // --- Option Compare Text
10
11 double ValEx(char *TS)
12 {
13   double ValEx;
14
15   // Extends the Val() function for
16   // german-style number-representing strings
17   int i;
18   char *LS, *RS;
19
20   i = InStr(1, TS, ",");
21   if (i != 0)
22   {
23     LS = Left(TS, i - 1);
24     RS = Right(TS, Len(TS) - i);
25     ValEx = Val(CAT(LS, ".", RS));
26   }
27   else
28   {
29     ValEx = Val(TS);
30   }
31
32   return ValEx;
33 }
34
35 void INC(int *VAR, int Delta)
36 {
37   *VAR = *VAR + Delta;
38 }
39
40 void DEC(int *VAR, int Delta)
41 {
42   *VAR = *VAR - Delta;
43 }
44
45 char *MySplit(char *TS, char *Sep, long SCount)
46 {
47   char *MySplit;
48
49   char *T;
50   long i, J, k, q, L, SL;
51   char *RA;
52
53   T = TS;
54   L = Len(TS);
55   SL = Len(Sep);
56   J = SCount;
57   if (J < 1)
58   {
59     J = 0;
60     i = 1;
61     while (i <= L)
62     {
63       k = InStr(i, T, Sep);
64       if (k < i)
65         break;
66
67       if (i < k)
68         J = J + 1;
69
70       i = k + SL;
71     }
72
73     if (i <= L)
74       J = J + 1;
75   }
76
77   if (0 < J)
78     RA = REDIM_1D(sizeof(char), 0, J + 1 - 1);
79   else
80     return MySplit;
81
82   i = 1;
83   q = 0;
84   while (i <= L)
85   {
86     k = InStr(i, T, Sep);
87     if (k < i)
88       break;
89
90     if (i < k)
91     {
92       if (J <= q + 1)
93         break;
94
95       q = q + 1;
96       RA[q] = Mid(T, i, k - i);
97     }
98
99     i = k + SL;
100   }
101
102   if (i <= L)
103   {
104     q = q + 1;
105     T = Right(T, L - i + 1);
106     do
107     {
108       if (Len(T) <= SL)
109         break;
110
111       if (Right(T, SL) == Sep)
112       {
113         T = Left(T, Len(T) - SL);
114       }
115       else
116       {
117         break;
118       }
119     }
120     while (1);
121
122     strcpy(&RA[q], T); // RA(q) = T
123   }
124
125   MySplit = RA;
126
127   return MySplit;
128 }
129
130 void MyReplace(char *TS, char *Pat1, char *Pat2)
131 {
132   long k, SL1, SL2, TL;
133
134   TL = Len(TS);
135   SL1 = Len(Pat1);
136   SL2 = Len(Pat2);
137   k = InStr(1, TS, Pat1);
138   if (k == 0)
139     return;
140
141   do
142   {
143     TS = CAT(Left(TS, k - 1), Pat2, Right(TS, TL - k - SL1 + 1));
144     TL = TL + SL2 - SL1;
145     k = InStr(k + SL2, TS, Pat1);
146   }
147   while (!(k == 0));
148 }
149