bigint mdaReadData_impl(TargetType* data, const bigint size, FILE* inputFile) { if (is_same<TargetType, SourceType>::value) { return jfread(data, sizeof(SourceType), size, inputFile); } else { std::vector<SourceType> tmp(size); const bigint ret = jfread(&tmp[0], sizeof(SourceType), size, inputFile); std::copy(tmp.begin(), tmp.end(), data); return ret; } }
void load_config(char * path) { int i; char *p; //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in load_config: %s",path); jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); if(!fd) { init_config(); return; } memset(&setting, 0, sizeof(setting)); jfread(env_game_thread, fd, &setting, sizeof(setting)); jfclose(env_game_thread, fd); tmpsetting = setting; memcpy(m_pal16[PAL_CUSTOM_LOCAL],setting.custom_palette, sizeof(short)*4*3); check_config(); set_gb_type(); set_speed(setting.speed); }
void load_config_glob(char * path) { int i; char *p; //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in load_config_glob: %s",path); jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); if(!fd) { init_config_glob(); return; } memset(&setting2, 0, sizeof(setting2)); jfread(env_game_thread, fd, &setting2, sizeof(setting2)); jfclose(env_game_thread, fd); memcpy(m_pal16[PAL_CUSTOM_GLOBAL],setting2.custom_palette, sizeof(short)*4*3); check_config_glob(); }
int load_sram(char * path) { jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); /*if(!fd){ strcat(SavePath, ".gz"); fd = gzopen(SavePath, "rb"); }*/ if(!fd) { return 0; } int ramsize = jfread(env_game_thread, fd, sram_space, 16*0x2000+4); jfclose(env_game_thread, fd); if(ramsize & 4) { renderer_set_timer_state(*(int*)(sram_space+ramsize-4)); } return ramsize; }
bigint mda_read_header(struct MDAIO_HEADER* HH, FILE* input_file) { bigint num_read = 0; bigint i; size_t totsize; bool uses64bitdims = false; //initialize HH->data_type = 0; HH->num_bytes_per_entry = 0; HH->num_dims = 0; for (i = 0; i < MDAIO_MAX_DIMS; i++) HH->dims[i] = 1; HH->header_size = 0; if (!input_file) return 0; //data type num_read = jfread(&HH->data_type, 4, 1, input_file); if (num_read < 1) { printf("mda_read_header: Problem reading input file **.\n"); return 0; } if ((HH->data_type < -7) || (HH->data_type >= 0)) { printf("mda_read_header: Problem with data type: %d.\n", HH->data_type); return 0; } //number of bytes per entry num_read = jfread(&HH->num_bytes_per_entry, 4, 1, input_file); if (num_read < 1) return 0; if ((HH->num_bytes_per_entry <= 0) || (HH->num_bytes_per_entry > 8)) return 0; if (HH->num_bytes_per_entry != mda_get_num_bytes_per_entry(HH->data_type)) { qWarning() << "In mda_read_header: num_bytes_per_entry does not agree with data_type. Setting proper value." << HH->num_bytes_per_entry << HH->data_type << mda_get_num_bytes_per_entry(HH->data_type); HH->num_bytes_per_entry = mda_get_num_bytes_per_entry(HH->data_type); } //number of dimensions num_read = jfread(&HH->num_dims, 4, 1, input_file); if (num_read < 1) return 0; if ((HH->num_dims == 0) || (HH->num_dims > MDAIO_MAX_DIMS)) return 0; if (HH->num_dims < 0) { uses64bitdims = true; HH->num_dims = -HH->num_dims; } //the dimensions totsize = 1; if (uses64bitdims) { for (i = 0; i < HH->num_dims; ++i) { uint64_t dim0; num_read = jfread(&dim0, sizeof(dim0), 1, input_file); if (num_read < 1) return 0; HH->dims[i] = dim0; totsize *= HH->dims[i]; } } else { for (i = 0; i < HH->num_dims; i++) { int32_t dim0; num_read = jfread(&dim0, sizeof(dim0), 1, input_file); if (num_read < 1) return 0; if (dim0 < 0) { printf("mda_read_header: Dimension %ld less than 0: %d\n", i + 1, dim0); } HH->dims[i] = dim0; totsize *= HH->dims[i]; } } if (totsize > MDAIO_MAX_SIZE) { printf("mda_read_header: Problem with total size: %ld\n", totsize); return 0; } HH->header_size = 3 * sizeof(int32_t) + HH->num_dims * (uses64bitdims ? sizeof(uint64_t) : sizeof(int32_t)); //we're done! return 1; }
int main (int argc, char **argv) { FILE *fp, *fp2; // file pointers char *block; // padding file int size, newsize; // size of file and temp size struct stat status; // finding file size enum Coding_Technique tech; // coding technique (parameter) int k, m, w, packetsize; // parameters int buffersize; // paramter int i; // loop control variables int blocksize; // size of k+m files int total; int extra; /* Jerasure Arguments */ char **data; char **coding; int *matrix; int *bitmatrix; int **schedule; /* Creation of file name variables */ char temp[5]; char *s1, *s2, *extension; char *fname; int md; char *curdir; /* Timing variables */ struct timing t1, t2, t3, t4; double tsec; double totalsec; struct timing start; /* Find buffersize */ int up, down; signal(SIGQUIT, ctrl_bs_handler); /* Start timing */ timing_set(&t1); totalsec = 0.0; matrix = NULL; bitmatrix = NULL; schedule = NULL; /* Error check Arguments*/ if (argc != 8) { fprintf(stderr, "usage: inputfile k m coding_technique w packetsize buffersize\n"); fprintf(stderr, "\nChoose one of the following coding techniques: \nreed_sol_van, \nreed_sol_r6_op, \ncauchy_orig, \ncauchy_good, \nliberation, \nblaum_roth, \nliber8tion"); fprintf(stderr, "\n\nPacketsize is ignored for the reed_sol's"); fprintf(stderr, "\nBuffersize of 0 means the buffersize is chosen automatically.\n"); fprintf(stderr, "\nIf you just want to test speed, use an inputfile of \"-number\" where number is the size of the fake file you want to test.\n\n"); exit(0); } /* Conversion of parameters and error checking */ if (sscanf(argv[2], "%d", &k) == 0 || k <= 0) { fprintf(stderr, "Invalid value for k\n"); exit(0); } if (sscanf(argv[3], "%d", &m) == 0 || m < 0) { fprintf(stderr, "Invalid value for m\n"); exit(0); } if (sscanf(argv[5],"%d", &w) == 0 || w <= 0) { fprintf(stderr, "Invalid value for w.\n"); exit(0); } if (argc == 6) { packetsize = 0; } else { if (sscanf(argv[6], "%d", &packetsize) == 0 || packetsize < 0) { fprintf(stderr, "Invalid value for packetsize.\n"); exit(0); } } if (argc != 8) { buffersize = 0; } else { if (sscanf(argv[7], "%d", &buffersize) == 0 || buffersize < 0) { fprintf(stderr, "Invalid value for buffersize\n"); exit(0); } } /* Determine proper buffersize by finding the closest valid buffersize to the input value */ if (buffersize != 0) { if (packetsize != 0 && buffersize%(sizeof(long)*w*k*packetsize) != 0) { up = buffersize; down = buffersize; while (up%(sizeof(long)*w*k*packetsize) != 0 && (down%(sizeof(long)*w*k*packetsize) != 0)) { up++; if (down == 0) { down--; } } if (up%(sizeof(long)*w*k*packetsize) == 0) { buffersize = up; } else { if (down != 0) { buffersize = down; } } } else if (packetsize == 0 && buffersize%(sizeof(long)*w*k) != 0) { up = buffersize; down = buffersize; while (up%(sizeof(long)*w*k) != 0 && down%(sizeof(long)*w*k) != 0) { up++; down--; } if (up%(sizeof(long)*w*k) == 0) { buffersize = up; } else { buffersize = down; } } } /* Setting of coding technique and error checking */ if (strcmp(argv[4], "no_coding") == 0) { tech = No_Coding; } else if (strcmp(argv[4], "reed_sol_van") == 0) { tech = Reed_Sol_Van; if (w != 8 && w != 16 && w != 32) { fprintf(stderr, "w must be one of {8, 16, 32}\n"); exit(0); } } else if (strcmp(argv[4], "reed_sol_r6_op") == 0) { if (m != 2) { fprintf(stderr, "m must be equal to 2\n"); exit(0); } if (w != 8 && w != 16 && w != 32) { fprintf(stderr, "w must be one of {8, 16, 32}\n"); exit(0); } tech = Reed_Sol_R6_Op; } else if (strcmp(argv[4], "cauchy_orig") == 0) { tech = Cauchy_Orig; if (packetsize == 0) { fprintf(stderr, "Must include packetsize.\n"); exit(0); } } else if (strcmp(argv[4], "cauchy_good") == 0) { tech = Cauchy_Good; if (packetsize == 0) { fprintf(stderr, "Must include packetsize.\n"); exit(0); } } else if (strcmp(argv[4], "liberation") == 0) { if (k > w) { fprintf(stderr, "k must be less than or equal to w\n"); exit(0); } if (w <= 2 || !(w%2) || !is_prime(w)) { fprintf(stderr, "w must be greater than two and w must be prime\n"); exit(0); } if (packetsize == 0) { fprintf(stderr, "Must include packetsize.\n"); exit(0); } if ((packetsize%(sizeof(long))) != 0) { fprintf(stderr, "packetsize must be a multiple of sizeof(long)\n"); exit(0); } tech = Liberation; } else if (strcmp(argv[4], "blaum_roth") == 0) { if (k > w) { fprintf(stderr, "k must be less than or equal to w\n"); exit(0); } if (w <= 2 || !((w+1)%2) || !is_prime(w+1)) { fprintf(stderr, "w must be greater than two and w+1 must be prime\n"); exit(0); } if (packetsize == 0) { fprintf(stderr, "Must include packetsize.\n"); exit(0); } if ((packetsize%(sizeof(long))) != 0) { fprintf(stderr, "packetsize must be a multiple of sizeof(long)\n"); exit(0); } tech = Blaum_Roth; } else if (strcmp(argv[4], "liber8tion") == 0) { if (packetsize == 0) { fprintf(stderr, "Must include packetsize\n"); exit(0); } if (w != 8) { fprintf(stderr, "w must equal 8\n"); exit(0); } if (m != 2) { fprintf(stderr, "m must equal 2\n"); exit(0); } if (k > w) { fprintf(stderr, "k must be less than or equal to w\n"); exit(0); } tech = Liber8tion; } else { fprintf(stderr, "Not a valid coding technique. Choose one of the following: reed_sol_van, reed_sol_r6_op, cauchy_orig, cauchy_good, liberation, blaum_roth, liber8tion, no_coding\n"); exit(0); } /* Set global variable method for signal handler */ method = tech; /* Get current working directory for construction of file names */ curdir = (char*)malloc(sizeof(char)*1000); if (! getcwd(curdir, 1000)) { curdir[0] = 0; } if (argv[1][0] != '-') { /* Open file and error check */ fp = fopen(argv[1], "rb"); if (fp == NULL) { fprintf(stderr, "Unable to open file.\n"); exit(0); } /* Create Coding directory */ i = mkdir("Coding", S_IRWXU); if (i == -1 && errno != EEXIST) { fprintf(stderr, "Unable to create Coding directory.\n"); exit(0); } /* Determine original size of file */ stat(argv[1], &status); size = status.st_size; } else { if (sscanf(argv[1]+1, "%d", &size) != 1 || size <= 0) { fprintf(stderr, "Files starting with '-' should be sizes for randomly created input\n"); exit(1); } fp = NULL; MOA_Seed(time(0)); } newsize = size; /* Find new size by determining next closest multiple */ if (packetsize != 0) { if (size%(k*w*packetsize*sizeof(long)) != 0) { while (newsize%(k*w*packetsize*sizeof(long)) != 0) newsize++; } } else { if (size%(k*w*sizeof(long)) != 0) { while (newsize%(k*w*sizeof(long)) != 0) newsize++; } } if (buffersize != 0) { while (newsize%buffersize != 0) { newsize++; } } /* Determine size of k+m files */ blocksize = newsize/k; /* Allow for buffersize and determine number of read-ins */ if (size > buffersize && buffersize != 0) { if (newsize%buffersize != 0) { readins = newsize/buffersize; } else { readins = newsize/buffersize; } block = (char *)malloc(sizeof(char)*buffersize); blocksize = buffersize/k; } else { readins = 1; buffersize = size; block = (char *)malloc(sizeof(char)*newsize); } /* Break inputfile name into the filename and extension */ s1 = (char*)malloc(sizeof(char)*(strlen(argv[1])+20)); s2 = strrchr(argv[1], '/'); if (s2 != NULL) { s2++; strcpy(s1, s2); } else { strcpy(s1, argv[1]); } s2 = strchr(s1, '.'); if (s2 != NULL) { extension = strdup(s2); *s2 = '\0'; } else { extension = strdup(""); } /* Allocate for full file name */ fname = (char*)malloc(sizeof(char)*(strlen(argv[1])+strlen(curdir)+20)); sprintf(temp, "%d", k); md = strlen(temp); /* Allocate data and coding */ data = (char **)malloc(sizeof(char*)*k); coding = (char **)malloc(sizeof(char*)*m); for (i = 0; i < m; i++) { coding[i] = (char *)malloc(sizeof(char)*blocksize); if (coding[i] == NULL) { perror("malloc"); exit(1); } } /* Create coding matrix or bitmatrix and schedule */ timing_set(&t3); switch(tech) { case No_Coding: break; case Reed_Sol_Van: matrix = reed_sol_vandermonde_coding_matrix(k, m, w); break; case Reed_Sol_R6_Op: break; case Cauchy_Orig: matrix = cauchy_original_coding_matrix(k, m, w); bitmatrix = jerasure_matrix_to_bitmatrix(k, m, w, matrix); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); break; case Cauchy_Good: matrix = cauchy_good_general_coding_matrix(k, m, w); bitmatrix = jerasure_matrix_to_bitmatrix(k, m, w, matrix); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); break; case Liberation: bitmatrix = liberation_coding_bitmatrix(k, w); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); break; case Blaum_Roth: bitmatrix = blaum_roth_coding_bitmatrix(k, w); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); break; case Liber8tion: bitmatrix = liber8tion_coding_bitmatrix(k); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); break; case RDP: case EVENODD: assert(0); } timing_set(&start); timing_set(&t4); totalsec += timing_delta(&t3, &t4); /* Read in data until finished */ n = 1; total = 0; while (n <= readins) { /* Check if padding is needed, if so, add appropriate number of zeros */ if (total < size && total+buffersize <= size) { total += jfread(block, sizeof(char), buffersize, fp); } else if (total < size && total+buffersize > size) { extra = jfread(block, sizeof(char), buffersize, fp); for (i = extra; i < buffersize; i++) { block[i] = '0'; } } else if (total == size) { for (i = 0; i < buffersize; i++) { block[i] = '0'; } } /* Set pointers to point to file data */ for (i = 0; i < k; i++) { data[i] = block+(i*blocksize); } timing_set(&t3); /* Encode according to coding method */ switch(tech) { case No_Coding: break; case Reed_Sol_Van: jerasure_matrix_encode(k, m, w, matrix, data, coding, blocksize); break; case Reed_Sol_R6_Op: reed_sol_r6_encode(k, w, data, coding, blocksize); break; case Cauchy_Orig: jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); break; case Cauchy_Good: jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); break; case Liberation: jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); break; case Blaum_Roth: jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); break; case Liber8tion: jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); break; case RDP: case EVENODD: assert(0); } timing_set(&t4); /* Write data and encoded data to k+m files */ for (i = 1; i <= k; i++) { if (fp == NULL) { bzero(data[i-1], blocksize); } else { sprintf(fname, "%s/Coding/%s_k%0*d%s", curdir, s1, md, i, extension); if (n == 1) { fp2 = fopen(fname, "wb"); } else { fp2 = fopen(fname, "ab"); } fwrite(data[i-1], sizeof(char), blocksize, fp2); fclose(fp2); } } for (i = 1; i <= m; i++) { if (fp == NULL) { bzero(data[i-1], blocksize); } else { sprintf(fname, "%s/Coding/%s_m%0*d%s", curdir, s1, md, i, extension); if (n == 1) { fp2 = fopen(fname, "wb"); } else { fp2 = fopen(fname, "ab"); } fwrite(coding[i-1], sizeof(char), blocksize, fp2); fclose(fp2); } } n++; /* Calculate encoding time */ totalsec += timing_delta(&t3, &t4); } /* Create metadata file */ if (fp != NULL) { sprintf(fname, "%s/Coding/%s_meta.txt", curdir, s1); fp2 = fopen(fname, "wb"); fprintf(fp2, "%s\n", argv[1]); fprintf(fp2, "%d\n", size); fprintf(fp2, "%d %d %d %d %d\n", k, m, w, packetsize, buffersize); fprintf(fp2, "%s\n", argv[4]); fprintf(fp2, "%d\n", tech); fprintf(fp2, "%d\n", readins); fclose(fp2); } /* Free allocated memory */ free(s1); free(fname); free(block); free(curdir); /* Calculate rate in MB/sec and print */ timing_set(&t2); tsec = timing_delta(&t1, &t2); printf("Encoding (MB/sec): %0.10f\n", (((double) size)/1024.0/1024.0)/totalsec); printf("En_Total (MB/sec): %0.10f\n", (((double) size)/1024.0/1024.0)/tsec); return 0; }
int main (int argc, char **argv) { FILE *fp, *fp2; // file pointers char *memblock; // reading in file char *block; // padding file int size, newsize; // size of file and temp size struct stat status; // finding file size enum Coding_Technique tech; // coding technique (parameter) int k, m, w, packetsize; // parameters int buffersize; // paramter int i, j; // loop control variables int blocksize; // size of k+m files int total; int extra; /* Jerasure Arguments */ char **data; char **coding; int *matrix; int *bitmatrix; int **schedule; int *erasure; int *erased; /* Creation of file name variables */ char temp[5]; char *s1, *s2; char *fname; int md; char *curdir; /* Timing variables */ struct timeval t1, t2, t3, t4; struct timezone tz; double tsec; double totalsec; struct timeval start, stop; /* Find buffersize */ int up, down; /* Modifications */ int _size, sizeCorrect = 0, numFiles = 0, codingFactor, testValue; /* Start timing */ gettimeofday(&t1, &tz); totalsec = 0.0; matrix = NULL; bitmatrix = NULL; schedule = NULL; printf("\nFilename: %s\n", argv[1]); printf("Coding Technique: cauchy_good\n"); printf("Input desired size of file segments (in MB): "); scanf("%d", &_size); printf("Input codingFactor: "); scanf("%d", &codingFactor); // printf("Input packetsize: "); // scanf("%d", &packetsize); // printf("Input buffersize: "); // scanf("%d", &buffersize); w = 16; packetsize = 32; buffersize = 50000; //_size = _size * 1024 * 1024; /* Set global variable method for signal handler */ tech = Cauchy_Good; method = tech; /* Get current working directory for construction of file names */ curdir = (char*)malloc(sizeof(char)*1000); getcwd(curdir, 1000); if (argv[1][0] != '-') { /* Open file and error check */ fp = fopen(argv[1], "rb"); if (fp == NULL) { fprintf(stderr, "Unable to open file.\n"); exit(0); } /* Create Coding directory */ i = mkdir("Coding", S_IRWXU); if (i == -1 && errno != EEXIST) { fprintf(stderr, "Unable to create Coding directory.\n"); exit(0); } /* Determine original size of file */ stat(argv[1], &status); size = status.st_size; } else { if (sscanf(argv[1]+1, "%d", &size) != 1 || size <= 0) { fprintf(stderr, "Files starting with '-' should be sizes for randomly created input\n"); exit(1); } fp = NULL; srand48(time(0)); } k = size/_size; m = (codingFactor-1) * k; /* Determine proper buffersize by finding the closest valid buffersize to the input value */ if (buffersize != 0) { if (packetsize != 0 && buffersize%(sizeof(int)*w*k*packetsize) != 0) { up = buffersize; down = buffersize; while (up%(sizeof(int)*w*k*packetsize) != 0 && (down%(sizeof(int)*w*k*packetsize) != 0)) { up++; if (down == 0) { down--; } } if (up%(sizeof(int)*w*k*packetsize) == 0) { buffersize = up; } else { if (down != 0) { buffersize = down; } } } else if (packetsize == 0 && buffersize%(sizeof(int)*w*k) != 0) { up = buffersize; down = buffersize; while (up%(sizeof(int)*w*k) != 0 && down%(sizeof(int)*w*k) != 0) { testValue = up%(sizeof(int)*w*k); printf("up%% = %d\n", testValue); up++; down--; } if (up%(sizeof(int)*w*k) == 0) { buffersize = up; } else { buffersize = down; } } } newsize = size; /* Find new size by determining next closest multiple */ if (packetsize != 0) { if (size%(k*w*packetsize*sizeof(int)) != 0) { while (newsize%(k*w*packetsize*sizeof(int)) != 0) newsize++; } } else { if (size%(k*w*sizeof(int)) != 0) { while (newsize%(k*w*sizeof(int)) != 0) newsize++; } } if (buffersize != 0) { while (newsize%buffersize != 0) { newsize++; } } /* Determine size of k+m files */ blocksize = newsize/k; printf("\n"); printf("Size of file segments: %d \tbytes\n", blocksize); printf("Size of buffer: %d \tbytes\n", buffersize); printf("Size of file: %d \tbytes\n", size); printf("Size of word: %d \t\tbytes\n\n", w); printf("Number of data files: %d\n", k); printf("Number of coding files: %d\n", m); /* Allow for buffersize and determine number of read-ins */ if (size > buffersize && buffersize != 0) { if (newsize%buffersize != 0) { readins = newsize/buffersize; } else { readins = newsize/buffersize; } block = (char *)malloc(sizeof(char)*buffersize); blocksize = buffersize/k; } else { readins = 1; buffersize = size; block = (char *)malloc(sizeof(char)*newsize); } /* Break inputfile name into the filename and extension */ s1 = (char*)malloc(sizeof(char)*(strlen(argv[1])+10)); s2 = strrchr(argv[1], '/'); if (s2 != NULL) { s2++; strcpy(s1, s2); } else { strcpy(s1, argv[1]); } s2 = strchr(s1, '.'); if (s2 != NULL) { *s2 = '\0'; } fname = strchr(argv[1], '.'); s2 = (char*)malloc(sizeof(char)*(strlen(argv[1])+5)); if (fname != NULL) { strcpy(s2, fname); } /* Allocate for full file name */ fname = (char*)malloc(sizeof(char)*(strlen(argv[1])+strlen(curdir)+10)); sprintf(temp, "%d", k+m); md = strlen(temp); /* Allocate data and coding */ data = (char **)malloc(sizeof(char*)*k); coding = (char **)malloc(sizeof(char*)*m); for (i = 0; i < m; i++) { coding[i] = (char *)malloc(sizeof(char)*blocksize); } /* Create coding matrix or bitmatrix and schedule */ gettimeofday(&t3, &tz); matrix = cauchy_good_general_coding_matrix(k, m, w); bitmatrix = jerasure_matrix_to_bitmatrix(k, m, w, matrix); schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix); gettimeofday(&start, &tz); gettimeofday(&t4, &tz); tsec = 0.0; tsec += t4.tv_usec; tsec -= t3.tv_usec; tsec /= 1000000.0; tsec += t4.tv_sec; tsec -= t3.tv_sec; totalsec += tsec; /* Read in data until finished */ n = 1; total = 0; printf("\nABOUT TO ENCODE SCHEDULE\n"); while (n <= readins) { /* Check if padding is needed, if so, add appropriate number of zeros */ if (total < size && total+buffersize <= size) { total += jfread(block, sizeof(char), buffersize, fp); } else if (total < size && total+buffersize > size) { extra = jfread(block, sizeof(char), buffersize, fp); for (i = extra; i < buffersize; i++) { block[i] = '0'; } } else if (total == size) { for (i = 0; i < buffersize; i++) { block[i] = '0'; } } /* Set pointers to point to file data */ for (i = 0; i < k; i++) { data[i] = block+(i*blocksize); } gettimeofday(&t3, &tz); jerasure_schedule_encode(k, m, w, schedule, data, coding, blocksize, packetsize); gettimeofday(&t4, &tz); /* Write data and encoded data to k+m files */ for (i = 1; i <= k; i++) { if (fp == NULL) { bzero(data[i-1], blocksize); } else { sprintf(fname, "%s/Coding/%s_%0*d%s", curdir, s1, md, i-1, s2); if (n == 1) { fp2 = fopen(fname, "wb"); } else { fp2 = fopen(fname, "ab"); } fwrite(data[i-1], sizeof(char), blocksize, fp2); fclose(fp2); } } for (i; i <= k+m; i++) { if (fp == NULL) { bzero(data[i-1-k], blocksize); } else { sprintf(fname, "%s/Coding/%s_%0*d%s", curdir, s1, md, i-1, s2); if (n == 1) { fp2 = fopen(fname, "wb"); } else { fp2 = fopen(fname, "ab"); } fwrite(coding[i-1-k], sizeof(char), blocksize, fp2); fclose(fp2); } } n++; /* Calculate encoding time */ tsec = 0.0; tsec += t4.tv_usec; tsec -= t3.tv_usec; tsec /= 1000000.0; tsec += t4.tv_sec; tsec -= t3.tv_sec; totalsec += tsec; } /* Create metadata file */ if (fp != NULL) { sprintf(fname, "%s/Coding/%s_meta.txt", curdir, s1); fp2 = fopen(fname, "wb"); fprintf(fp2, "%s\n", argv[1]); fprintf(fp2, "%d\n", size); fprintf(fp2, "%d %d %d %d %d\n", k, m, w, packetsize, buffersize); fprintf(fp2, "%s\n", argv[4]); fprintf(fp2, "%d\n", tech); fprintf(fp2, "%d\n", readins); fclose(fp2); } /* Free allocated memory */ free(s2); free(s1); free(fname); free(block); free(curdir); /* Calculate rate in MB/sec and print */ gettimeofday(&t2, &tz); tsec = 0.0; tsec += t2.tv_usec; tsec -= t1.tv_usec; tsec /= 1000000.0; tsec += t2.tv_sec; tsec -= t1.tv_sec; printf("Encoding (MB/sec): %0.10f\n", (size/1024/1024)/totalsec); printf("En_Total (MB/sec): %0.10f\n", (size/1024/1024)/tsec); }
// load rom image by ruka long load_rom(char *szRomPath) { char name[MAX_NAME], *p, tmp[PATH_MAX]; long lReadSize=0; p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); char* exts[3]= {".gb",".gbc",".sgb"}; jfile fd = jfopen(env_game_thread, szRomPath, JF_MODE_READ, exts, 3); if(fd) { int size = jfsize(env_game_thread, fd); lReadSize = jfread(env_game_thread, fd, rom_image, size); jfclose(env_game_thread, fd); } //lReadSize = jfile_read(env_game_thread, szRomPath, exts,3,(void **) &rom_image); /*ROM_INFO stRomInfo; int nRet; int nExtId = getExtId(szRomPath); switch(nExtId) { case EXT_GB:{ // "gb" "gbc" "sgb" p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); FILE * fd = fopen(szRomPath, "r"); lReadSize = fread(rom_image, 1, MAX_ROM_SIZE, fd); fclose(fd); break }case EXT_GZ:{ // "gz" gzFile fd = gzopen(szRomPath, "r"); if (!gzGetOrigName(szRomPath, name, fd)){ gzclose(fd); return 0; }else if (getExtId(name)!=EXT_GB){ gzclose(fd); return 0; } lReadSize = gzread(fd, rom_image, MAX_ROM_SIZE); gzclose(fd); break; }case EXT_ZIP: // "zip" if (path_inzip[0]){ if (getExtId(path_inzip)!=EXT_GB) return 0; p = strrchr(path_inzip, '/'); if (!p) p = path_inzip; else p++; strcpy(name, p); }else{ p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); } stRomInfo.p_rom_image = rom_image; stRomInfo.rom_size = 0; memset(stRomInfo.szFileName, 0x00, sizeof(stRomInfo.szFileName)); // Unzipコールバックセット Unzip_setCallback(funcUnzipCallback); // Unzip展開する nRet = Unzip_execExtract(szRomPath, (unsigned long)&stRomInfo); if (nRet != UZEXR_OK) { // 読み込み失敗! - このコードでは、UZEXR_CANCELもここに来て // しまうがコールバックでキャンセルしてないので無視 lReadSize = 0; pgFillvram(RGBA_8(255,0,0)); pgPrintf(0,0,0xFFFF, "Unzip fatal error."); pgScreenFlip(); } lReadSize = stRomInfo.rom_size; break; default: return 0; }*/ if(lReadSize){ strcpy(RomName, name); p = strrchr(RomName, '.'); if(p) *p = 0; } return lReadSize; }