]> cvs.zerfleddert.de Git - micropolis/blame - src/sim/w_util.c
change SDL linking to work with newer SDL versions again
[micropolis] / src / sim / w_util.c
CommitLineData
6a5fa4e0
MG
1/* w_util.c
2 *
3 * Micropolis, Unix Version. This game was released for the Unix platform
4 * in or about 1990 and has been modified for inclusion in the One Laptop
5 * Per Child program. Copyright (C) 1989 - 2007 Electronic Arts Inc. If
6 * you need assistance with this program, you may contact:
7 * http://wiki.laptop.org/go/Micropolis or email micropolis@laptop.org.
8 *
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or (at
12 * your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details. You should have received a
18 * copy of the GNU General Public License along with this program. If
19 * not, see <http://www.gnu.org/licenses/>.
20 *
21 * ADDITIONAL TERMS per GNU GPL Section 7
22 *
23 * No trademark or publicity rights are granted. This license does NOT
24 * give you any right, title or interest in the trademark SimCity or any
25 * other Electronic Arts trademark. You may not distribute any
26 * modification of this program using the trademark SimCity or claim any
27 * affliation or association with Electronic Arts Inc. or its employees.
28 *
29 * Any propagation or conveyance of this program must include this
30 * copyright notice and these terms.
31 *
32 * If you convey this program (or any modifications of it) and assume
33 * contractual liability for the program to recipients of it, you agree
34 * to indemnify Electronic Arts for any liability that those contractual
35 * assumptions impose on Electronic Arts.
36 *
37 * You may not misrepresent the origins of this program; modified
38 * versions of the program must be marked as such and not identified as
39 * the original program.
40 *
41 * This disclaimer supplements the one included in the General Public
42 * License. TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, THIS
43 * PROGRAM IS PROVIDED TO YOU "AS IS," WITH ALL FAULTS, WITHOUT WARRANTY
44 * OF ANY KIND, AND YOUR USE IS AT YOUR SOLE RISK. THE ENTIRE RISK OF
45 * SATISFACTORY QUALITY AND PERFORMANCE RESIDES WITH YOU. ELECTRONIC ARTS
46 * DISCLAIMS ANY AND ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES,
47 * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY,
48 * FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY
49 * RIGHTS, AND WARRANTIES (IF ANY) ARISING FROM A COURSE OF DEALING,
50 * USAGE, OR TRADE PRACTICE. ELECTRONIC ARTS DOES NOT WARRANT AGAINST
51 * INTERFERENCE WITH YOUR ENJOYMENT OF THE PROGRAM; THAT THE PROGRAM WILL
52 * MEET YOUR REQUIREMENTS; THAT OPERATION OF THE PROGRAM WILL BE
53 * UNINTERRUPTED OR ERROR-FREE, OR THAT THE PROGRAM WILL BE COMPATIBLE
54 * WITH THIRD PARTY SOFTWARE OR THAT ANY ERRORS IN THE PROGRAM WILL BE
55 * CORRECTED. NO ORAL OR WRITTEN ADVICE PROVIDED BY ELECTRONIC ARTS OR
56 * ANY AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY. SOME
57 * JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF OR LIMITATIONS ON IMPLIED
58 * WARRANTIES OR THE LIMITATIONS ON THE APPLICABLE STATUTORY RIGHTS OF A
59 * CONSUMER, SO SOME OR ALL OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY
60 * NOT APPLY TO YOU.
61 */
62#include "sim.h"
63
6f214ac0
MG
64void UpdateGameLevel(void);
65
6a5fa4e0
MG
66
67/* comefrom: drawTaxesCollected incBoxValue decBoxValue drawCurrentFunds
68 drawActualBox UpdateFunds updateCurrentCost */
6f214ac0 69void
6a5fa4e0
MG
70makeDollarDecimalStr(char *numStr, char *dollarStr)
71{
72 register short leftMostSet;
73 short numOfDigits;
74 short numOfChars;
75 register short numOfCommas;
76 register short dollarIndex = 0;
77 register short numIndex = 0;
78 register short x;
79
80 numOfDigits = strlen(numStr);
81
82 if (numOfDigits == 1) {
83 dollarStr[0] = '$';
84 dollarStr[1] = numStr[ 0 ];
85 dollarStr[2] = 0;
86 return;
87 } else if (numOfDigits == 2) {
88 dollarStr[0] = '$';
89 dollarStr[1] = numStr[0];
90 dollarStr[2] = numStr[1];
91 dollarStr[3] = 0;
92 return;
93 } else if (numOfDigits == 3) {
94 dollarStr[0] = '$';
95 dollarStr[1] = numStr[0];
96 dollarStr[2] = numStr[1];
97 dollarStr[3] = numStr[2];
98 dollarStr[4] = 0;
99 } else {
100 leftMostSet = numOfDigits % 3;
101 if (leftMostSet == 0)
102 leftMostSet = 3;
103
104 numOfCommas = (numOfDigits - 1) / 3;
105
106 /* add 1 for the dollar sign */
107 numOfChars = numOfDigits + numOfCommas + 1;
108
109 dollarStr[numOfChars] = 0;
110
111 dollarStr[dollarIndex++] = '$';
112
113 for (x = 1; x <= leftMostSet; x++) {
114 dollarStr[dollarIndex++] = numStr[numIndex++];
115 }
116
117 for (x = 1; x <= numOfCommas; x++) {
118 dollarStr[dollarIndex++] = ',';
119 dollarStr[dollarIndex++] = numStr[numIndex++];
120 dollarStr[dollarIndex++] = numStr[numIndex++];
121 dollarStr[dollarIndex++] = numStr[numIndex++];
122 }
123 }
124}
125
126
6f214ac0
MG
127void
128Pause(void)
6a5fa4e0
MG
129{
130 if (!sim_paused) {
131 sim_paused_speed = SimMetaSpeed;
132 setSpeed(0);
133 sim_paused = 1;
134 }
135}
136
137
6f214ac0
MG
138void
139Resume(void)
6a5fa4e0
MG
140{
141 if (sim_paused) {
142 sim_paused = 0;
143 setSpeed(sim_paused_speed);
144 }
145}
146
147
6f214ac0 148void
6a5fa4e0
MG
149setSpeed(short speed)
150{
151 if (speed < 0) speed = 0;
152 else if (speed > 3) speed = 3;
153
154 SimMetaSpeed = speed;
155
156 if (sim_paused) {
157 sim_paused_speed = SimMetaSpeed;
158 speed = 0;
159 }
160
161 SimSpeed = speed;
162
163 if (speed == 0) {
164 StopMicropolisTimer();
165 } else {
166 StartMicropolisTimer();
167 }
168
169 { char buf[256];
170 sprintf(buf, "UISetSpeed %d", sim_paused ? 0 : SimMetaSpeed);
171 Eval(buf);
172 }
173}
174
175
6f214ac0 176void
6a5fa4e0
MG
177setSkips(int skips)
178{
179 sim_skips = skips;
180 sim_skip = 0;
181}
182
183
6f214ac0 184void
6a5fa4e0
MG
185SetGameLevelFunds(short level)
186{
187 switch (level) {
188 default:
189 case 0:
190 SetFunds(20000);
191 SetGameLevel(0);
192 break;
193 case 1:
194 SetFunds(10000);
195 SetGameLevel(1);
196 break;
197 case 2:
198 SetFunds(5000);
199 SetGameLevel(2);
200 break;
201 }
202}
203
204
6f214ac0 205void
6a5fa4e0
MG
206SetGameLevel(short level)
207{
208 GameLevel = level;
209 UpdateGameLevel();
210}
211
212
6f214ac0
MG
213void
214UpdateGameLevel(void)
6a5fa4e0
MG
215{
216 char buf[256];
217
218 sprintf(buf, "UISetGameLevel %d", GameLevel);
219 Eval(buf);
220}
221
222
6f214ac0 223void
6a5fa4e0
MG
224setCityName(char *name)
225{
226 char *cp = name;
227
228 while (*cp) {
229 if (!isalnum(*cp))
230 *cp = '_';
231 cp++;
232 }
233 setAnyCityName(name);
234}
235
236
6f214ac0 237void
6a5fa4e0
MG
238setAnyCityName(char *name)
239{
240 char buf[1024];
241
242 CityName = name;
243 sprintf(buf, "UISetCityName {%s}", CityName);
244 Eval(buf);
245}
246
247
6f214ac0 248void
6a5fa4e0
MG
249SetYear(int year)
250{
251 // Must prevent year from going negative, since it screws up the non-floored modulo arithmetic.
252 if (year < StartingYear) {
253 year = StartingYear;
254 }
255
256 year = (year - StartingYear) - (CityTime / 48);
257 CityTime += year * 48;
258 doTimeStuff();
259}
260
261
262int
6f214ac0 263CurrentYear(void)
6a5fa4e0
MG
264{
265 return (CityTime/48 + StartingYear);
266}
267
268
6f214ac0 269void
6a5fa4e0
MG
270DoSetMapState(SimView *view, short state)
271{
272 char buf[256];
273
274 view->map_state = state;
275 view->invalid = 1;
276 EventuallyRedrawView(view);
277
278 sprintf(buf, "UISetMapState %s %d", Tk_PathName(view->tkwin), state);
279 Eval(buf);
280}
281
282
6f214ac0
MG
283void
284DoNewGame(void)
6a5fa4e0
MG
285{
286 Eval("UINewGame");
287}
288
289
6f214ac0 290void
6a5fa4e0
MG
291DoGeneratedCityImage(char *name, int time, int pop, char *class, int score)
292{
293 /* XXX: TODO: print city */
294}
295
296
6f214ac0 297void
6a5fa4e0
MG
298DoStartElmd()
299{
300 /* XXX: TODO: start elm daemon */
301}
302
303
6f214ac0 304void
6a5fa4e0
MG
305DoPopUpMessage(char *msg)
306{
307 char buf[1024];
308
309 sprintf(buf, "UIPopUpMessage {%s}", msg);
310 Eval(buf);
311}
312
313
Impressum, Datenschutz