/* * Xboard - level command * Arguments are three numbers, or four numbers with a colon between * the two in the middle: * * level 40 5 0 * * or * * level 20 1:40 2 */ static void cmd_level(void) { unsigned mps, base, inc; char *base_str; char *base_token; char *lasts; long long base_minutes; long long base_seconds; mps = get_uint(0, 1024); base_str = get_str_arg(); inc = get_uint(0, 1024); base_token = xstrtok_r(base_str, ":", &lasts); base_minutes = get_num_arg(base_token); if (base_minutes < 0 || base_minutes > 8192) param_error(); if ((base_token = xstrtok_r(NULL, ":", &lasts)) != NULL) base_seconds = get_num_arg(base_token); else base_seconds = 0; if (base_minutes < 0 || base_minutes > 59) param_error(); if (xstrtok_r(NULL, ":", &lasts) != NULL) param_error(); base = ((unsigned)base_minutes) * 60 + (unsigned)base_seconds; set_moves_left_in_time(mps); set_computer_clock(base * 100); set_time_inc(inc * 100); }
static int get_int(int min, int max) { long long n; n = get_num_arg(get_str_arg()); if (n < (long long)min) { (void) fprintf(stderr, "Number too low: %lld\n", n); param_error(); } if (n > (long long)max) { (void) fprintf(stderr, "Number too high: %lld\n", n); param_error(); } return (int)n; }
static unsigned get_uint(unsigned min, unsigned max) { long long n; n = get_num_arg(get_str_arg()); if (n < (long long)min) { (void) fprintf(stderr, "Number too low: %lld\n", n); param_error(); } if (n > (long long)max) { (void) fprintf(stderr, "Number too high: %lld\n", n); param_error(); } return (unsigned)n; }
int main(int argc, char **argv) { bf_t *bf_desc_font; bf_t *bf; char *bdf_filename = NULL; int is_verbose = 0; char *map_str ="*"; char *desc_font_str = ""; unsigned y; argv++; /* if ( *argv == NULL ) { help(); exit(1); } */ for(;;) { if ( *argv == NULL ) break; if ( is_arg(&argv, 'h') != 0 ) { help(); exit(1); } else if ( is_arg(&argv, 'v') != 0 ) { is_verbose = 1; } else if ( is_arg(&argv, 'a') != 0 ) { font_picture_extra_info = 1; } else if ( is_arg(&argv, 't') != 0 ) { font_picture_test_string = 1; } else if ( is_arg(&argv, 'r') != 0 ) { runtime_test = 1; } else if ( get_num_arg(&argv, 'b', &build_bbx_mode) != 0 ) { } else if ( get_num_arg(&argv, 'f', &font_format) != 0 ) { } else if ( get_num_arg(&argv, 'l', &left_margin) != 0 ) { } else if ( get_str_arg(&argv, 'd', &desc_font_str) != 0 ) { } else if ( get_str_arg(&argv, 'o', &c_filename) != 0 ) { } else if ( get_str_arg(&argv, 'n', &target_fontname) != 0 ) { } else if ( get_str_arg(&argv, 'm', &map_str) != 0 ) { } else { bdf_filename = *argv; argv++; } } if ( bdf_filename == NULL ) { help(); exit(1); } bf_desc_font = NULL; if ( desc_font_str[0] != '\0' ) { bf_desc_font = bf_OpenFromFile(desc_font_str, 0, BDF_BBX_MODE_MINIMAL, "*", 0); /* assume format 0 for description */ if ( bf_desc_font == NULL ) { exit(1); } } if ( font_format == 1 ) { build_bbx_mode = BDF_BBX_MODE_M8; /* issue the following log message later, when there is a valid bf object */ /* bf_Log(bf, "Font mode 1: BBX mode set to 3"); */ } bf = bf_OpenFromFile(bdf_filename, is_verbose, build_bbx_mode, map_str, font_format); if ( bf == NULL ) { exit(1); } if ( font_format == 1 ) { /* now generate the log message */ bf_Log(bf, "Note: For font format 1 BBX mode has been set to 3"); } if ( bf_desc_font != NULL ) { tga_init(1024, 600); y = tga_draw_font(0, bdf_filename, bf_desc_font, bf); if ( runtime_test != 0 ) { long i; clock_t c = clock(); fd_t fd; fd_init(&fd); fd_set_font(&fd, bf->target_data); for( i = 0; i < 10000; i++ ) fd_draw_string(&fd, left_margin, y, "Woven silk pyjamas exchanged for blue quartz."); bf_Log(bf, "Runtime test: %.2lf sec", (double)(clock()-c)/(double)CLOCKS_PER_SEC); } tga_save("bdf.tga"); } if ( c_filename != NULL ) { /* write the encoded data in bf->target_data */ if ( font_format == 0 ) { bf_WriteUCGCByFilename(bf, c_filename, target_fontname, " "); } else { bf_WriteU8G2CByFilename(bf, c_filename, target_fontname, " "); } } bf_Close(bf); return 0; }