[BACK]Return to main.c CVS log [TXT][DIR] Up to [contributed] / brogue-ce / src / platform

Annotation of brogue-ce/src/platform/main.c, Revision 1.1

1.1     ! rubenllo    1: #include <math.h>
        !             2: #include <limits.h>
        !             3: #include "platform.h"
        !             4:
        !             5: // Expanding a macro as a string constant requires two levels of macros
        !             6: #define _str(x)  #x
        !             7: #define STRINGIFY(x)  _str(x)
        !             8:
        !             9: struct brogueConsole currentConsole;
        !            10:
        !            11: char dataDirectory[BROGUE_FILENAME_MAX] = STRINGIFY(DATADIR);
        !            12: boolean serverMode = false;
        !            13: boolean hasGraphics = false;
        !            14: boolean graphicsEnabled = false;
        !            15: boolean isCsvFormat = false;
        !            16:
        !            17: static void printCommandlineHelp() {
        !            18:     printf("%s",
        !            19:     "--help         -h          print this help message\n"
        !            20:     "--version      -V          print the version (i.e., " BROGUE_VERSION_STRING ")\n"
        !            21:     "--scores                   dump scores to output and exit immediately\n"
        !            22:     "-n                         start a new game, skipping the menu\n"
        !            23:     "-s seed                    start a new game with the specified numerical seed\n"
        !            24:     "-o filename[.broguesave]   open a save file (extension optional)\n"
        !            25:     "-v recording[.broguerec]   view a recording (extension optional)\n"
        !            26: #ifdef BROGUE_WEB
        !            27:     "--server-mode              run the game in web-brogue server mode\n"
        !            28: #endif
        !            29: #ifdef BROGUE_SDL
        !            30:     "--size N                   starts the game at font size N (1 to 20)\n"
        !            31:     "--graphics     -G          enable graphical tiles\n"
        !            32:     "--full-screen  -F          enable full screen\n"
        !            33:     "--no-gpu                   disable hardware-accelerated graphics and HiDPI\n"
        !            34: #endif
        !            35: #ifdef BROGUE_CURSES
        !            36:     "--term         -t          run in ncurses-based terminal mode\n"
        !            37: #endif
        !            38:     "--stealth      -S          display stealth range\n"
        !            39:     "--no-effects   -E          disable color effects\n"
        !            40:     "--wizard       -W          run in wizard mode, invincible with powerful items\n"
        !            41:     "[--csv] --print-seed-catalog [START NUM LEVELS]\n"
        !            42:     "                           (optional csv format)\n"
        !            43:     "                           prints a catalog of the first LEVELS levels of NUM\n"
        !            44:     "                           seeds from seed START (defaults: 1 1000 5)\n"
        !            45:     );
        !            46:     return;
        !            47: }
        !            48:
        !            49: static void badArgument(const char *arg) {
        !            50:     printf("Bad argument: %s\n\n", arg);
        !            51:     printCommandlineHelp();
        !            52: }
        !            53:
        !            54: int main(int argc, char *argv[])
        !            55: {
        !            56:
        !            57: #if 0
        !            58: #define TOD(x)  ((double) (x) / FP_FACTOR)
        !            59:     fixpt y, x1 = 1, x2 = FP_FACTOR * 70 / 100;
        !            60:     for (int i=0; i < 10; i++) {
        !            61:         y = fp_pow(x2, x1); printf("%.5f ^ %i = %.5f  (%lli)\n", TOD(x2), x1, TOD(y), y);
        !            62:         // y = fp_sqrt(x1); printf("sqrt(%.5f) = %.5f  (%lli)\n", TOD(x1), TOD(y), y);
        !            63:         x1 += 1;
        !            64:     }
        !            65:     exit(0);
        !            66: #endif
        !            67:
        !            68: #ifdef BROGUE_SDL
        !            69:     currentConsole = sdlConsole;
        !            70: #elif BROGUE_WEB
        !            71:     currentConsole = webConsole;
        !            72: #elif BROGUE_CURSES
        !            73:     currentConsole = cursesConsole;
        !            74: #endif
        !            75:
        !            76:     rogue.nextGame = NG_NOTHING;
        !            77:     rogue.nextGamePath[0] = '\0';
        !            78:     rogue.nextGameSeed = 0;
        !            79:     rogue.wizard = false;
        !            80:     rogue.displayAggroRangeMode = false;
        !            81:     rogue.trueColorMode = false;
        !            82:
        !            83:     boolean initialGraphics = false;
        !            84:
        !            85:     int i;
        !            86:     for (i = 1; i < argc; i++) {
        !            87:         if (strcmp(argv[i], "--scores") == 0) {
        !            88:             // just dump the scores and quit!
        !            89:             dumpScores();
        !            90:             return 0;
        !            91:         }
        !            92:
        !            93:         if (strcmp(argv[i], "--seed") == 0 || strcmp(argv[i], "-s") == 0) {
        !            94:             // pick a seed!
        !            95:             if (i + 1 < argc) {
        !            96:                 unsigned int seed = atof(argv[i + 1]); // plenty of precision in a double, and simpler than any other option
        !            97:                 if (seed != 0) {
        !            98:                     i++;
        !            99:                     rogue.nextGameSeed = seed;
        !           100:                     rogue.nextGame = NG_NEW_GAME_WITH_SEED;
        !           101:                     continue;
        !           102:                 }
        !           103:             }
        !           104:         }
        !           105:
        !           106:         if (strcmp(argv[i], "-n") == 0) {
        !           107:             if (rogue.nextGameSeed == 0) {
        !           108:                 rogue.nextGame = NG_NEW_GAME;
        !           109:             } else {
        !           110:                 rogue.nextGame = NG_NEW_GAME_WITH_SEED;
        !           111:             }
        !           112:             continue;
        !           113:         }
        !           114:
        !           115:         if (strcmp(argv[i], "-o") == 0 || strcmp(argv[i], "--open") == 0) {
        !           116:             if (i + 1 < argc) {
        !           117:                 strncpy(rogue.nextGamePath, argv[i + 1], BROGUE_FILENAME_MAX);
        !           118:                 rogue.nextGamePath[BROGUE_FILENAME_MAX - 1] = '\0';
        !           119:                 rogue.nextGame = NG_OPEN_GAME;
        !           120:
        !           121:                 if (!endswith(rogue.nextGamePath, GAME_SUFFIX)) {
        !           122:                     append(rogue.nextGamePath, GAME_SUFFIX, BROGUE_FILENAME_MAX);
        !           123:                 }
        !           124:
        !           125:                 i++;
        !           126:                 continue;
        !           127:             }
        !           128:         }
        !           129:
        !           130:         if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--view") == 0) {
        !           131:             if (i + 1 < argc) {
        !           132:                 strncpy(rogue.nextGamePath, argv[i + 1], BROGUE_FILENAME_MAX);
        !           133:                 rogue.nextGamePath[BROGUE_FILENAME_MAX - 1] = '\0';
        !           134:                 rogue.nextGame = NG_VIEW_RECORDING;
        !           135:
        !           136:                 if (!endswith(rogue.nextGamePath, RECORDING_SUFFIX)) {
        !           137:                     append(rogue.nextGamePath, RECORDING_SUFFIX, BROGUE_FILENAME_MAX);
        !           138:                 }
        !           139:
        !           140:                 i++;
        !           141:                 continue;
        !           142:             }
        !           143:         }
        !           144:
        !           145:         if (strcmp(argv[i], "--print-seed-catalog") == 0) {
        !           146:             if (i + 3 < argc) {
        !           147:                 // Use convertions from types the next size up, because they're signed
        !           148:                 unsigned long startingSeed = atof(argv[i + 1]);
        !           149:                 unsigned long numberOfSeeds = atoll(argv[i + 2]);
        !           150:                 unsigned int numberOfLevels = atol(argv[i + 3]);
        !           151:
        !           152:                 if (startingSeed > 0 && numberOfLevels <= 40) {
        !           153:                     printSeedCatalog(startingSeed, numberOfSeeds, numberOfLevels, isCsvFormat);
        !           154:                     return 0;
        !           155:                 }
        !           156:             } else {
        !           157:                 printSeedCatalog(1, 1000, 5, isCsvFormat);
        !           158:                 return 0;
        !           159:             }
        !           160:         }
        !           161:
        !           162:         if (strcmp(argv[i], "-V") == 0 || strcmp(argv[i], "--version") == 0) {
        !           163:             printf("%s\n", BROGUE_VERSION_STRING);
        !           164:             return 0;
        !           165:         }
        !           166:
        !           167:         if (!(strcmp(argv[i], "-?") && strcmp(argv[i], "-h") && strcmp(argv[i], "--help"))) {
        !           168:             printCommandlineHelp();
        !           169:             return 0;
        !           170:         }
        !           171:
        !           172:         if (strcmp(argv[i], "-G") == 0 || strcmp(argv[i], "--graphics") == 0) {
        !           173:             initialGraphics = true;  // we call setGraphicsEnabled later
        !           174:             continue;
        !           175:         }
        !           176:
        !           177:         if (strcmp(argv[i], "--csv") == 0 ) {
        !           178:             isCsvFormat = true;  // we call printSeedCatalog later
        !           179:             continue;
        !           180:         }
        !           181:
        !           182: #ifdef BROGUE_SDL
        !           183:         if (strcmp(argv[i], "--size") == 0) {
        !           184:             if (i + 1 < argc) {
        !           185:                 int size = atoi(argv[i + 1]);
        !           186:                 if (size > 0 && size <= 20) {
        !           187:                     windowWidth = round(pow(1.1, size) * 620.);
        !           188:                     // Height set automatically
        !           189:                 };
        !           190:
        !           191:                 i++;
        !           192:                 continue;
        !           193:             }
        !           194:         }
        !           195:
        !           196:         if (strcmp(argv[i], "-F") == 0 || strcmp(argv[i], "--full-screen") == 0) {
        !           197:             fullScreen = true;
        !           198:             continue;
        !           199:         }
        !           200:
        !           201:         if (strcmp(argv[i], "--no-gpu") == 0) {
        !           202:             softwareRendering = true;
        !           203:             continue;
        !           204:         }
        !           205: #endif
        !           206:
        !           207: #ifdef BROGUE_CURSES
        !           208:         if (strcmp(argv[i], "--term") == 0 || strcmp(argv[i], "-t") == 0) {
        !           209:             currentConsole = cursesConsole;
        !           210:             continue;
        !           211:         }
        !           212: #endif
        !           213:
        !           214: #ifdef BROGUE_WEB
        !           215:         if(strcmp(argv[i], "--server-mode") == 0) {
        !           216:             currentConsole = webConsole;
        !           217:             rogue.nextGame = NG_NEW_GAME;
        !           218:             serverMode = true;
        !           219:             continue;
        !           220:         }
        !           221: #endif
        !           222:
        !           223:         if (strcmp(argv[i], "--stealth") == 0 || strcmp(argv[i], "-S") == 0) {
        !           224:             rogue.displayAggroRangeMode = true;
        !           225:             continue;
        !           226:         }
        !           227:
        !           228:         if (strcmp(argv[i], "--no-effects") == 0 || strcmp(argv[i], "-E") == 0) {
        !           229:             rogue.trueColorMode = true;
        !           230:             continue;
        !           231:         }
        !           232:
        !           233:         if (strcmp(argv[i], "--wizard") == 0 || strcmp(argv[i], "-W") == 0) {
        !           234:             rogue.wizard = true;
        !           235:             continue;
        !           236:         }
        !           237:
        !           238:         // maybe it ends with .broguesave or .broguerec, then?
        !           239:         if (endswith(argv[i], GAME_SUFFIX)) {
        !           240:             strncpy(rogue.nextGamePath, argv[i], BROGUE_FILENAME_MAX);
        !           241:             rogue.nextGamePath[BROGUE_FILENAME_MAX - 1] = '\0';
        !           242:             rogue.nextGame = NG_OPEN_GAME;
        !           243:             continue;
        !           244:         }
        !           245:
        !           246:         if (endswith(argv[i], RECORDING_SUFFIX)) {
        !           247:             strncpy(rogue.nextGamePath, argv[i], BROGUE_FILENAME_MAX);
        !           248:             rogue.nextGamePath[BROGUE_FILENAME_MAX - 1] = '\0';
        !           249:             rogue.nextGame = NG_VIEW_RECORDING;
        !           250:             continue;
        !           251:         }
        !           252:
        !           253:         badArgument(argv[i]);
        !           254:         return 1;
        !           255:     }
        !           256:
        !           257:     hasGraphics = (currentConsole.setGraphicsEnabled != NULL);
        !           258:     // Now actually set graphics. We do this to ensure there is exactly one
        !           259:     // call, whether true or false
        !           260:     graphicsEnabled = setGraphicsEnabled(initialGraphics);
        !           261:
        !           262:     loadKeymap();
        !           263:     currentConsole.gameLoop();
        !           264:
        !           265:     return 0;
        !           266: }
        !           267:

CVSweb