|
|
1.1 ! root 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 [email protected]. ! 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: ! 64: ! 65: /* comefrom: drawTaxesCollected incBoxValue decBoxValue drawCurrentFunds ! 66: drawActualBox UpdateFunds updateCurrentCost */ ! 67: makeDollarDecimalStr(char *numStr, char *dollarStr) ! 68: { ! 69: register short leftMostSet; ! 70: short numOfDigits; ! 71: short numOfChars; ! 72: register short numOfCommas; ! 73: register short dollarIndex = 0; ! 74: register short numIndex = 0; ! 75: register short x; ! 76: ! 77: numOfDigits = strlen(numStr); ! 78: ! 79: if (numOfDigits == 1) { ! 80: dollarStr[0] = '$'; ! 81: dollarStr[1] = numStr[ 0 ]; ! 82: dollarStr[2] = 0; ! 83: return; ! 84: } else if (numOfDigits == 2) { ! 85: dollarStr[0] = '$'; ! 86: dollarStr[1] = numStr[0]; ! 87: dollarStr[2] = numStr[1]; ! 88: dollarStr[3] = 0; ! 89: return; ! 90: } else if (numOfDigits == 3) { ! 91: dollarStr[0] = '$'; ! 92: dollarStr[1] = numStr[0]; ! 93: dollarStr[2] = numStr[1]; ! 94: dollarStr[3] = numStr[2]; ! 95: dollarStr[4] = 0; ! 96: } else { ! 97: leftMostSet = numOfDigits % 3; ! 98: if (leftMostSet == 0) ! 99: leftMostSet = 3; ! 100: ! 101: numOfCommas = (numOfDigits - 1) / 3; ! 102: ! 103: /* add 1 for the dollar sign */ ! 104: numOfChars = numOfDigits + numOfCommas + 1; ! 105: ! 106: dollarStr[numOfChars] = 0; ! 107: ! 108: dollarStr[dollarIndex++] = '$'; ! 109: ! 110: for (x = 1; x <= leftMostSet; x++) { ! 111: dollarStr[dollarIndex++] = numStr[numIndex++]; ! 112: } ! 113: ! 114: for (x = 1; x <= numOfCommas; x++) { ! 115: dollarStr[dollarIndex++] = ','; ! 116: dollarStr[dollarIndex++] = numStr[numIndex++]; ! 117: dollarStr[dollarIndex++] = numStr[numIndex++]; ! 118: dollarStr[dollarIndex++] = numStr[numIndex++]; ! 119: } ! 120: } ! 121: } ! 122: ! 123: ! 124: Pause() ! 125: { ! 126: if (!sim_paused) { ! 127: sim_paused_speed = SimMetaSpeed; ! 128: setSpeed(0); ! 129: sim_paused = 1; ! 130: } ! 131: } ! 132: ! 133: ! 134: Resume() ! 135: { ! 136: if (sim_paused) { ! 137: sim_paused = 0; ! 138: setSpeed(sim_paused_speed); ! 139: } ! 140: } ! 141: ! 142: ! 143: setSpeed(short speed) ! 144: { ! 145: if (speed < 0) speed = 0; ! 146: else if (speed > 3) speed = 3; ! 147: ! 148: SimMetaSpeed = speed; ! 149: ! 150: if (sim_paused) { ! 151: sim_paused_speed = SimMetaSpeed; ! 152: speed = 0; ! 153: } ! 154: ! 155: SimSpeed = speed; ! 156: ! 157: if (speed == 0) { ! 158: StopMicropolisTimer(); ! 159: } else { ! 160: StartMicropolisTimer(); ! 161: } ! 162: ! 163: { char buf[256]; ! 164: sprintf(buf, "UISetSpeed %d", sim_paused ? 0 : SimMetaSpeed); ! 165: Eval(buf); ! 166: } ! 167: } ! 168: ! 169: ! 170: setSkips(int skips) ! 171: { ! 172: sim_skips = skips; ! 173: sim_skip = 0; ! 174: } ! 175: ! 176: ! 177: SetGameLevelFunds(short level) ! 178: { ! 179: switch (level) { ! 180: default: ! 181: case 0: ! 182: SetFunds(20000); ! 183: SetGameLevel(0); ! 184: break; ! 185: case 1: ! 186: SetFunds(10000); ! 187: SetGameLevel(1); ! 188: break; ! 189: case 2: ! 190: SetFunds(5000); ! 191: SetGameLevel(2); ! 192: break; ! 193: } ! 194: } ! 195: ! 196: ! 197: SetGameLevel(short level) ! 198: { ! 199: GameLevel = level; ! 200: UpdateGameLevel(); ! 201: } ! 202: ! 203: ! 204: UpdateGameLevel() ! 205: { ! 206: char buf[256]; ! 207: ! 208: sprintf(buf, "UISetGameLevel %d", GameLevel); ! 209: Eval(buf); ! 210: } ! 211: ! 212: ! 213: setCityName(char *name) ! 214: { ! 215: char *cp = name; ! 216: ! 217: while (*cp) { ! 218: if (!isalnum(*cp)) ! 219: *cp = '_'; ! 220: cp++; ! 221: } ! 222: setAnyCityName(name); ! 223: } ! 224: ! 225: ! 226: setAnyCityName(char *name) ! 227: { ! 228: char buf[1024]; ! 229: ! 230: CityName = name; ! 231: sprintf(buf, "UISetCityName {%s}", CityName); ! 232: Eval(buf); ! 233: } ! 234: ! 235: ! 236: SetYear(int year) ! 237: { ! 238: // Must prevent year from going negative, since it screws up the non-floored modulo arithmetic. ! 239: if (year < StartingYear) { ! 240: year = StartingYear; ! 241: } ! 242: ! 243: year = (year - StartingYear) - (CityTime / 48); ! 244: CityTime += year * 48; ! 245: doTimeStuff(); ! 246: } ! 247: ! 248: ! 249: int ! 250: CurrentYear() ! 251: { ! 252: return (CityTime/48 + StartingYear); ! 253: } ! 254: ! 255: ! 256: DoSetMapState(SimView *view, short state) ! 257: { ! 258: char buf[256]; ! 259: ! 260: view->map_state = state; ! 261: view->invalid = 1; ! 262: EventuallyRedrawView(view); ! 263: ! 264: sprintf(buf, "UISetMapState %s %d", Tk_PathName(view->tkwin), state); ! 265: Eval(buf); ! 266: } ! 267: ! 268: ! 269: DoNewGame() ! 270: { ! 271: Eval("UINewGame"); ! 272: } ! 273: ! 274: ! 275: DoGeneratedCityImage(char *name, int time, int pop, char *class, int score) ! 276: { ! 277: /* XXX: TODO: print city */ ! 278: } ! 279: ! 280: ! 281: DoStartElmd() ! 282: { ! 283: /* XXX: TODO: start elm daemon */ ! 284: } ! 285: ! 286: ! 287: DoPopUpMessage(char *msg) ! 288: { ! 289: char buf[1024]; ! 290: ! 291: sprintf(buf, "UIPopUpMessage {%s}", msg); ! 292: Eval(buf); ! 293: } ! 294: ! 295:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.