Annotation of micropolis/src/sim/w_util.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.