void JE_helpBox( JE_word x, JE_word y, const char *message, JE_byte boxwidth ) { JE_byte startpos, endpos, pos; JE_boolean endstring; char substring[256]; if (strlen(message) == 0) { return; } pos = 1; endpos = 0; endstring = false; do { startpos = endpos + 1; do { endpos = pos; do { pos++; if (pos == strlen(message)) { endstring = true; if (pos - startpos < boxwidth) { endpos = pos + 1; } } } while (!(message[pos-1] == ' ' || endstring)); } while (!(pos - startpos > boxwidth || endstring)); JE_textShade(x, y, strnztcpy(substring, message + startpos - 1, endpos - startpos), helpBoxColor, helpBoxBrightness, helpBoxShadeType); y += verticalHeight; } while (!endstring); if (endpos != pos + 1) { JE_textShade(x, y, message + endpos, helpBoxColor, helpBoxBrightness, helpBoxShadeType); } helpBoxColor = 12; helpBoxShadeType = FULL_SHADE; }
void JE_helpBox( SDL_Surface *screen, int x, int y, const char *message, unsigned int boxwidth ) { uint8_t startpos, endpos, pos; bool endstring; char substring[256]; if (strlen(message) == 0) { return; } pos = 1; endpos = 0; endstring = false; do { startpos = endpos + 1; do { endpos = pos; do { pos++; if (pos == strlen(message)) { endstring = true; if ((unsigned)(pos - startpos) < boxwidth) { endpos = pos + 1; } } } while (!(message[pos-1] == ' ' || endstring)); } while (!((unsigned)(pos - startpos) > boxwidth || endstring)); JE_textShade(screen, x, y, strnztcpy(substring, message + startpos - 1, endpos - startpos), helpBoxColor, helpBoxBrightness, helpBoxShadeType); y += verticalHeight; } while (!endstring); if (endpos != pos + 1) { JE_textShade(screen, x, y, message + endpos, helpBoxColor, helpBoxBrightness, helpBoxShadeType); } helpBoxColor = 12; helpBoxShadeType = FULL_SHADE; }
void JE_paramCheck( int argc, char *argv[] ) { const Options options[] = { { 'h', 'h', "help", false }, { 's', 's', "no-sound", false }, { 'j', 'j', "no-joystick", false }, { 'x', 'x', "no-xmas", false }, { 't', 't', "data", true }, { 'n', 'n', "net", true }, { 256, 0, "net-player-name", true }, // TODO: no short codes because there should { 257, 0, "net-player-number", true }, // be a menu for entering these in the future { 'p', 'p', "net-port", true }, { 'd', 'd', "net-delay", true }, { 'X', 'X', "xmas", false }, { 'c', 'c', "constant", false }, { 'k', 'k', "death", false }, { 'r', 'r', "record", false }, { 'l', 'l', "loot", false }, { 0, 0, NULL, false} }; Option option = { 0, NULL, 0 }; for (; ; ) { option = parse_args(argc, (const char **)argv, options); if (option.value == NOT_OPTION) break; switch (option.value) { case INVALID_OPTION: case AMBIGUOUS_OPTION: case OPTION_MISSING_ARG: fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]); exit(EXIT_FAILURE); break; case 'h': printf("Usage: %s [OPTION...]\n\n" "Options:\n" " -h, --help Show help about options\n\n" " -s, --no-sound Disable audio\n" " -j, --no-joystick Disable joystick/gamepad input\n" " -x, --no-xmas Disable Christmas mode\n\n" " -t, --data=DIR Set Tyrian data directory\n\n" " -n, --net=HOST[:PORT] Start a networked game\n" " --net-player-name=NAME Sets local player name in a networked game\n" " --net-player-number=NUMBER Sets local player number in a networked game\n" " (1 or 2)\n" " -p, --net-port=PORT Local port to bind (default is 1333)\n" " -d, --net-delay=FRAMES Set lag-compensation delay (default is 1)\n", argv[0]); exit(0); break; case 's': // Disables sound/music usage audio_disabled = true; break; case 'j': // Disables joystick detection ignore_joystick = true; break; case 'x': xmas = false; break; // set custom Tyrian data directory case 't': custom_data_dir = option.arg; break; case 'n': { isNetworkGame = true; intptr_t temp = (intptr_t)strchr(option.arg, ':'); if (temp) { temp -= (intptr_t)option.arg; int temp_port = atoi(&option.arg[temp + 1]); if (temp_port > 0 && temp_port < 49152) network_opponent_port = temp_port; else { fprintf(stderr, "%s: error: invalid network port number\n", argv[0]); exit(EXIT_FAILURE); } network_opponent_host = (char *)malloc(temp + 1); strnztcpy(network_opponent_host, option.arg, temp); } else { network_opponent_host = (char *)malloc(strlen(option.arg) + 1); strcpy(network_opponent_host, option.arg); } } break; case 256: // --net-player-name network_player_name = (char *)malloc(strlen(option.arg) + 1); strcpy(network_player_name, option.arg); break; case 257: // --net-player-number { int temp = atoi(option.arg); if (temp >= 1 && temp <= 2) thisPlayerNum = temp; else { fprintf(stderr, "%s: error: invalid network player number\n", argv[0]); exit(EXIT_FAILURE); } break; } case 'p': { int temp = atoi(option.arg); if (temp > 0 && temp < 49152) network_player_port = temp; else { fprintf(stderr, "%s: error: invalid network port number\n", argv[0]); exit(EXIT_FAILURE); } break; } case 'd': { int temp; if (sscanf(option.arg, "%d", &temp) == 1) network_delay = 1 + temp; else { fprintf(stderr, "%s: error: invalid network delay value\n", argv[0]); exit(EXIT_FAILURE); } break; } case 'X': xmas = true; break; case 'c': /* Constant play for testing purposes (C key activates invincibility) This might be useful for publishers to see everything - especially those who can't play it */ constantPlay = true; break; case 'k': constantDie = true; break; case 'r': record_demo = true; break; case 'l': // Gives you mucho bucks richMode = true; break; default: assert(false); break; } } // legacy parameter support for (int i = option.argn; i < argc; ++i) { for (uint j = 0; j < strlen(argv[i]); ++j) argv[i][j] = toupper((unsigned char)argv[i][j]); for (uint j = 0; j < COUNTOF(pars); ++j) { if (strcmp(argv[i], pars[j]) == 0) { switch (j) { case 0: richMode = true; break; case 1: record_demo = true; break; case 2: ignore_joystick = true; break; case 3: constantPlay = true; break; case 4: constantDie = true; break; case 5: audio_disabled = true; break; case 6: xmas = false; break; case 7: xmas = true; break; default: assert(false); break; } } } } }