static void saver_event( LWControl *sctl, LWControl *ectl ) { LWValue ival = { LWT_INTEGER }, sval = { LWT_STRING }; char filename[ 260 ]; int saver; GET_INT( sctl, saver ); GET_STR( ectl, filename, sizeof( filename )); filename_ext( saver, filename ); SET_STR( ectl, filename, sizeof( filename )); RENDER_CON( ectl ); }
int main(int argc, char* argv[]) { char *infile = argv[1]; char *outfile = filename_ext(infile); fprintf(stderr, "MIFER Shadow BIOS ROM Utility:\n"); fprintf(stderr, "input file = %s\n", infile); fprintf(stderr, "output file = %s\n", outfile); make_hex(infile, outfile); fprintf(stderr, "Conversion to DAT complete\n"); return(EXIT_SUCCESS); }
int get_user( UnwrapParams *uwp ) { static char *text[] = { "Draws polygons in the 2D coordinate system of the selected texture layer.", NULL }; static char *fgopt[] = { "Use Color", "Invert Background", "Brighten", "Darken", NULL }; static char *bgopt[] = { "Use Color", "Copy Image Map", NULL }; LWPanControlDesc desc; LWValue ival = { LWT_INTEGER }, sval = { LWT_STRING }, ivecval = { LWT_VINT }; LWPanelID panel; LWControl *ctl[ 10 ], *bdr[ 2 ]; Node *root; int i, x, y, w, ph, ok; root = make_list( panf->globalFun ); if ( !root ) return 0; if( !( panel = PAN_CREATE( panf, "Unwrap" ))) { free_tree( root, 1 ); return 0; } if ( !uwp->filename[ 0 ] ) { strcpy( uwp->filename, "unwrapped" ); filename_ext( uwp->saver, uwp->filename ); uwp->bgcolor[ 0 ] = uwp->bgcolor[ 1 ] = uwp->bgcolor[ 2 ] = 255; } TEXT_CTL( panf, panel, "", text ); ctl[ 0 ] = TREE_CTL( panf, panel, "Texture Layer", 200, 200, tree_info, tree_count, tree_child ); ph = PAN_GETH( panf, panel ); ph -= CON_X( ctl[ 0 ] ); ph -= CON_H( ctl[ 0 ] ); ctl[ 1 ] = SAVE_CTL( panf, panel, "Save As", 40 ); ctl[ 2 ] = CUSTPOPUP_CTL( panf, panel, "", 150, sname, scount ); ctl[ 3 ] = INT_CTL( panf, panel, "Width" ); ctl[ 4 ] = INT_CTL( panf, panel, "Height" ); ctl[ 5 ] = BUTTON_CTL( panf, panel, "From Image Map" ); ctl[ 6 ] = WPOPUP_CTL( panf, panel, "Edges", fgopt, 150 ); ctl[ 7 ] = MINIRGB_CTL( panf, panel, "" ); ctl[ 8 ] = WPOPUP_CTL( panf, panel, "Background", bgopt, 150 ); ctl[ 9 ] = MINIRGB_CTL( panf, panel, "" ); w = CON_W( ctl[ 1 ] ); w -= CON_LW( ctl[ 1 ] ); bdr[ 0 ] = BORDER_CTL( panf, panel, "", w, 2 ); bdr[ 1 ] = BORDER_CTL( panf, panel, "", w, 2 ); x = CON_X( ctl[ 0 ] ); x += CON_W( ctl[ 0 ] ); x += CON_LW( ctl[ 8 ] ) + 8; y = CON_Y( ctl[ 0 ] ); w = CON_LW( ctl[ 1 ] ); MOVE_CON( ctl[ 1 ], x - w, y ); w = CON_LW( ctl[ 2 ] ); y += CON_HOTH( ctl[ 1 ] ) + 4; MOVE_CON( ctl[ 2 ], x - w, y ); y += CON_HOTH( ctl[ 2 ] ) + 6; MOVE_CON( bdr[ 0 ], x, y ); w = CON_LW( ctl[ 3 ] ); y += 6; MOVE_CON( ctl[ 3 ], x - w, y ); w = CON_X( ctl[ 3 ] ); w += CON_W( ctl[ 3 ] ); MOVE_CON( ctl[ 5 ], w + 16, y ); w = CON_LW( ctl[ 4 ] ); y += CON_HOTH( ctl[ 3 ] ) + 4; MOVE_CON( ctl[ 4 ], x - w, y ); y += CON_HOTH( ctl[ 2 ] ) + 6; MOVE_CON( bdr[ 1 ], x, y ); y += 6; for ( i = 6; i <= 9; i++ ) { w = CON_LW( ctl[ i ] ); MOVE_CON( ctl[ i ], x - w, y ); y += CON_HOTH( ctl[ i ] ) + 4; } y = CON_Y( ctl[ 9 ] ); y += CON_H( ctl[ 9 ] ); PAN_SETH( panf, panel, y + ph ); SET_STR( ctl[ 1 ], uwp->filename, sizeof( uwp->filename )); SET_INT( ctl[ 2 ], uwp->saver ); SET_INT( ctl[ 3 ], uwp->width ); SET_INT( ctl[ 4 ], uwp->height ); SET_INT( ctl[ 6 ], uwp->fgoptions ); SET_INT( ctl[ 8 ], uwp->bgoptions ); SETV_IVEC( ctl[ 7 ], uwp->fgcolor ); SETV_IVEC( ctl[ 9 ], uwp->bgcolor ); CON_SETEVENT( ctl[ 0 ], tree_event, root ); CON_SETEVENT( ctl[ 2 ], saver_event, ctl[ 1 ] ); CON_SETEVENT( ctl[ 5 ], sizebtn_event, ctl ); ok = panf->open( panel, PANF_BLOCKING | PANF_CANCEL ); if ( ok ) { GET_STR( ctl[ 1 ], uwp->filename, sizeof( uwp->filename )); GET_INT( ctl[ 2 ], uwp->saver ); GET_INT( ctl[ 3 ], uwp->width ); GET_INT( ctl[ 4 ], uwp->height ); GET_INT( ctl[ 6 ], uwp->fgoptions ); GET_INT( ctl[ 8 ], uwp->bgoptions ); GETV_IVEC( ctl[ 7 ], uwp->fgcolor ); GETV_IVEC( ctl[ 9 ], uwp->bgcolor ); ctl[ 0 ]->get( ctl[ 0 ], CTL_VALUE, &ival ); if ( !getsel_tree( uwp, ( Node * ) ival.ptr.ptr )) { msgf->error( "No texture layer selected", NULL ); ok = 0; } } PAN_KILL( panf, panel ); free_tree( root, 1 ); return ok; }
int main(const int argc, const char **argv) { int width = -1; int height = -1; float start = 0.0; float end = 1.0; char *output_file = NULL; char *styles_string = NULL; nordlicht_strategy strategy; int free_output_file = 0; int quiet = 0; int help = 0; int version = 0; const struct poptOption optionsTable[] = { {"width", 'w', POPT_ARG_INT, &width, 0, "set the barcode's width; by default it's \"height*10\", or 1920 pixels, if both are undefined", NULL}, {"height", 'h', POPT_ARG_INT, &height, 0, "set the barcode's height; by default it's \"width/10\"", NULL}, {"output", 'o', POPT_ARG_STRING, &output_file, 0, "set output filename, the default is VIDEOFILE.png; when you specify an *.bgra file, you'll get a raw 32-bit BGRA file that is updated as the barcode is generated", "FILENAME"}, {"style", 's', POPT_ARG_STRING, &styles_string, 0, "default is 'horizontal', see \"Styles\" section below. You can specify more than one style, separated by '+', to get multiple tracks", "STYLE"}, {"start", '\0', POPT_ARG_FLOAT, &start, 0, "specify where to start the barcode (ratio between 0 and 1)", NULL}, {"end", '\0', POPT_ARG_FLOAT, &end, 0, "specify where to end the barcode (ratio between 0 and 1)", NULL}, {"quiet", 'q', 0, &quiet, 0, "don't show progress indicator", NULL}, {"help", '\0', 0, &help, 0, "display this help and exit", NULL}, {"version", '\0', 0, &version, 0, "output version information and exit", NULL}, POPT_TABLEEND }; const poptContext popt = poptGetContext(NULL, argc, argv, optionsTable, 0); poptSetOtherOptionHelp(popt, "[OPTION]... VIDEOFILE\n\nOptions:"); if (argc == 1) { print_help(popt, 1); } int option; // The next line leaks 2 bytes, blame popt! while ((option = poptGetNextOpt(popt)) >= 0) { } if (option < -1) { fprintf(stderr, "nordlicht: %s: %s\n", poptBadOption(popt, POPT_BADOPTION_NOALIAS), poptStrerror(option)); return 1; } if (version) { printf("nordlicht %s\n\nWritten by Sebastian Morr and contributors.\n", NORDLICHT_VERSION); return 0; } if (help) { print_help(popt, 0); } const char *filename = (char*)poptGetArg(popt); if (filename == NULL) { print_error("Please specify an input file."); exit(1); } if (poptGetArg(popt) != NULL) { print_error("Please specify only one input file."); exit(1); } if (output_file == NULL) { size_t len = snprintf(NULL, 0, "%s.nordlicht.png", filename) + 1; output_file = (char *) malloc(len); snprintf(output_file, len, "%s.nordlicht.png", filename); free_output_file = 1; } if (width == -1 && height != -1) { width = height*10; } if (height == -1 && width != -1) { height = width/10; if (height < 1) { height = 1; } } if (height == -1 && width == -1) { width = 1920; height = 192; } if (styles_string == NULL) { styles_string = "horizontal"; } // count the occurrences of "+" in the styles_string const char *s = styles_string; int num_tracks; for (num_tracks=0; s[num_tracks]; s[num_tracks]=='+' ? num_tracks++ : *s++); num_tracks++; nordlicht_style *styles; styles = (nordlicht_style *) malloc(num_tracks * sizeof(nordlicht_style)); const char *style_string; num_tracks = 0; while ((style_string = strsep(&styles_string, "+"))) { int i; for (i = 0; style_table[i].name; i++) { if (strcmp(style_string, style_table[i].name) == 0) { styles[num_tracks] = style_table[i].style; break; } } if (!style_table[i].name) { print_error("Unknown style '%s'. Use '--help' to display available styles.", style_string); exit(1); } num_tracks++; } const char *ext = filename_ext(output_file); if (strcmp(ext, "bgra") == 0) { strategy = NORDLICHT_STRATEGY_LIVE; } else if (strcmp(ext, "png") == 0) { strategy = NORDLICHT_STRATEGY_FAST; } else { strategy = NORDLICHT_STRATEGY_FAST; fprintf(stderr, "nordlicht: Unsupported file extension '%s', will write a PNG.\n", ext); } // Interesting stuff begins here! nordlicht *n = nordlicht_init(filename, width, height); unsigned char *data = NULL; if (n == NULL) { print_error(nordlicht_error()); exit(1); } nordlicht_set_start(n, start); nordlicht_set_end(n, end); nordlicht_set_styles(n, styles, num_tracks); nordlicht_set_strategy(n, strategy); if (nordlicht_error() != NULL) { print_error(nordlicht_error()); exit(1); } if (strategy == NORDLICHT_STRATEGY_LIVE) { int fd = open(output_file, O_CREAT | O_TRUNC | O_RDWR, 0666); if (fd == -1) { print_error("Could not open '%s'.", output_file); exit(1); } if (ftruncate(fd, nordlicht_buffer_size(n)) == -1) { print_error("Could not truncate '%s'.", output_file); exit(1); } data = (unsigned char *) mmap(NULL, nordlicht_buffer_size(n), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (data == (void *) -1) { print_error("Could not mmap %d bytes.", nordlicht_buffer_size(n)); exit(1); } nordlicht_set_buffer(n, data); close(fd); } else { // Try to write the empty buffer to fail early if this does not work if (nordlicht_write(n, output_file) != 0) { print_error(nordlicht_error()); exit(1); } } int phase = -1; while(!nordlicht_done(n)) { if (nordlicht_generate_step(n) == 0) { if (! quiet) { float progress = nordlicht_progress(n); if (progress == 0) { if (phase == -1) { phase = 0; printf("nordlicht: Building keyframe index... "); fflush(stdout); } } else { if (phase == 0) { phase = 1; printf("done.\n"); } printf("\rnordlicht: %02.0f%%", progress*100); fflush(stdout); } } } else { print_error(nordlicht_error()); exit(1); } } if (strategy != NORDLICHT_STRATEGY_LIVE) { if (nordlicht_write(n, output_file) != 0) { print_error(nordlicht_error()); exit(1); } } free(styles); if (strategy == NORDLICHT_STRATEGY_LIVE) { munmap(data, nordlicht_buffer_size(n)); } nordlicht_free(n); if (! quiet) { printf(" -> '%s'\n", output_file); } if (free_output_file) { free(output_file); } poptFreeContext(popt); return 0; }