mods to allow main.c to pass in the opened file
diff --git a/src/flac/encode.c b/src/flac/encode.c
index a11f632..e46d8b5 100644
--- a/src/flac/encode.c
+++ b/src/flac/encode.c
@@ -64,7 +64,7 @@
 
 typedef struct {
 	FILE *fout;
-	const char *outfile;
+	const char *outfilename;
 	FLAC__Encoder *encoder;
 	bool verify;
 	bool verbose;
@@ -108,10 +108,9 @@
 static bool write_big_endian_uint16(FILE *f, uint16 val);
 static bool write_big_endian_uint64(FILE *f, uint64 val);
 
-int encode_wav(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points)
+int encode_wav(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points)
 {
 	encoder_wrapper_struct encoder_wrapper;
-	FILE *fin;
 	bool is_unsigned_samples;
 	unsigned channels, bps, sample_rate, data_bytes;
 	size_t bytes_per_wide_sample, bytes_read;
@@ -123,26 +122,17 @@
 	encoder_wrapper.verbose = verbose;
 	encoder_wrapper.bytes_written = 0;
 	encoder_wrapper.samples_written = 0;
-	encoder_wrapper.outfile = outfile;
+	encoder_wrapper.outfilename = outfilename;
 	encoder_wrapper.seek_table.points = 0;
 	encoder_wrapper.first_seek_point_to_check = 0;
 
-	if(0 == strcmp(infile, "-")) {
-		fin = stdin;
-	}
-	else {
-		if(0 == (fin = fopen(infile, "rb"))) {
-			fprintf(stderr, "ERROR: can't open input file %s\n", infile);
-			return false;
-		}
-	}
-	if(0 == strcmp(outfile, "-")) {
+	if(0 == strcmp(outfilename, "-")) {
 		encoder_wrapper.fout = stdout;
 	}
 	else {
-		if(0 == (encoder_wrapper.fout = fopen(outfile, "wb"))) {
-			fprintf(stderr, "ERROR: can't open output file %s\n", outfile);
-			fclose(fin);
+		if(0 == (encoder_wrapper.fout = fopen(outfilename, "wb"))) {
+			fprintf(stderr, "ERROR: can't open output file %s\n", outfilename);
+			fclose(infile);
 			return false;
 		}
 	}
@@ -153,19 +143,19 @@
 	/*
 	 * check the RIFF chunk
 	 */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x46464952) { /* "RIFF" */
 		fprintf(stderr, "ERROR: no RIFF header\n");
 		goto wav_abort_;
 	}
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 
 	/*
 	 * now process the WAVE chunk
 	 */
-	if(!read_little_endian_uint32(fin, &xx, true))
+	if(!read_little_endian_uint32(infile, &xx, true))
 		goto wav_end_;
 	if(xx != 0x45564157) { /* "WAVE" */
 		fprintf(stderr, "ERROR: no WAVE header\n");
@@ -173,28 +163,28 @@
 	}
 
 	/* do the format sub-chunk */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x20746d66) { /* "fmt " */
 		fprintf(stderr, "ERROR: no format sub-chunk\n");
 		goto wav_abort_;
 	}
 	/* fmt chunk size */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 16) {
 		fprintf(stderr, "ERROR: unsupported chunk\n");
 		goto wav_abort_;
 	}
 	/* compression code */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x != 1) {
 		fprintf(stderr, "ERROR: unsupported compression type %u\n", (unsigned)x);
 		goto wav_abort_;
 	}
 	/* number of channels */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x == 0 || x > FLAC__MAX_CHANNELS) {
 		fprintf(stderr, "ERROR: unsupported number channels %u\n", (unsigned)x);
@@ -202,7 +192,7 @@
 	}
 	channels = x;
 	/* sample rate */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx == 0 || xx > FLAC__MAX_SAMPLE_RATE) {
 		fprintf(stderr, "ERROR: unsupported sample rate %u\n", (unsigned)xx);
@@ -210,13 +200,13 @@
 	}
 	sample_rate = xx;
 	/* avg bytes per second (ignored) */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	/* block align (ignored) */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	/* bits per sample */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x != 8 && x != 16) {
 		fprintf(stderr, "ERROR: unsupported bits per sample %u\n", (unsigned)x);
@@ -226,23 +216,23 @@
 	is_unsigned_samples = (x == 8);
 
 	/* do the data sub-chunk */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x61746164) { /* "data" */
 		fprintf(stderr, "ERROR: no data sub-chunk\n");
 		goto wav_abort_;
 	}
 	/* data size */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	data_bytes = xx;
 
 	bytes_per_wide_sample = channels * (bps >> 3);
 
 	if(skip > 0) {
-		if(fin != stdin) {
-			if(-1 == fseek(fin, bytes_per_wide_sample * (unsigned)skip, SEEK_CUR)) {
-				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+		if(infile != stdin) {
+			if(-1 == fseek(infile, bytes_per_wide_sample * (unsigned)skip, SEEK_CUR)) {
+				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 				goto wav_abort_;
 			}
 		}
@@ -251,8 +241,8 @@
 			unsigned need;
 			for(left = (int64)skip; left > 0; left -= CHUNK_OF_SAMPLES) {
 				need = min(left, CHUNK_OF_SAMPLES);
-				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, fin) < need) {
-					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, infile) < need) {
+					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 					goto wav_abort_;
 				}
 			}
@@ -268,20 +258,20 @@
 	encoder_wrapper.verify_fifo.into_frames = true;
 
 	while(data_bytes > 0) {
-		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, fin);
+		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, infile);
 		if(bytes_read == 0) {
-			if(ferror(fin)) {
-				fprintf(stderr, "ERROR reading from %s\n", infile);
+			if(ferror(infile)) {
+				fprintf(stderr, "ERROR reading from %s\n", infilename);
 				goto wav_abort_;
 			}
-			else if(feof(fin))
+			else if(feof(infile))
 				break;
 		}
 		else {
 			if(bytes_read > data_bytes)
 				bytes_read = data_bytes; /* chop off anything after the end of the data chunk */
 			if(bytes_read % bytes_per_wide_sample != 0) {
-				fprintf(stderr, "ERROR, got partial sample from input file %s\n", infile);
+				fprintf(stderr, "ERROR, got partial sample from input file %s\n", infilename);
 				goto wav_abort_;
 			}
 			else {
@@ -312,14 +302,15 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
+	if(infile != stdin)
+		fclose(infile);
 	return 0;
 wav_abort_:
 	if(encoder_wrapper.verbose && encoder_wrapper.total_samples_to_encode > 0)
@@ -333,22 +324,22 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
-	unlink(outfile);
+	if(infile != stdin)
+		fclose(infile);
+	unlink(outfilename);
 	return 1;
 }
 
-int encode_raw(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate)
+int encode_raw(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate)
 {
 	encoder_wrapper_struct encoder_wrapper;
-	FILE *fin;
 	size_t bytes_read;
 	const size_t bytes_per_wide_sample = channels * (bps >> 3);
 
@@ -357,26 +348,17 @@
 	encoder_wrapper.verbose = verbose;
 	encoder_wrapper.bytes_written = 0;
 	encoder_wrapper.samples_written = 0;
-	encoder_wrapper.outfile = outfile;
+	encoder_wrapper.outfilename = outfilename;
 	encoder_wrapper.seek_table.points = 0;
 	encoder_wrapper.first_seek_point_to_check = 0;
 
-	if(0 == strcmp(infile, "-")) {
-		fin = stdin;
-	}
-	else {
-		if(0 == (fin = fopen(infile, "rb"))) {
-			fprintf(stderr, "ERROR: can't open input file %s\n", infile);
-			return false;
-		}
-	}
-	if(0 == strcmp(outfile, "-")) {
+	if(0 == strcmp(outfilename, "-")) {
 		encoder_wrapper.fout = stdout;
 	}
 	else {
-		if(0 == (encoder_wrapper.fout = fopen(outfile, "wb"))) {
-			fprintf(stderr, "ERROR: can't open output file %s\n", outfile);
-			fclose(fin);
+		if(0 == (encoder_wrapper.fout = fopen(outfilename, "wb"))) {
+			fprintf(stderr, "ERROR: can't open output file %s\n", outfilename);
+			fclose(infile);
 			return false;
 		}
 	}
@@ -385,13 +367,13 @@
 		goto raw_abort_;
 
 	/* get the file length */
-	if(0 != fseek(fin, 0, SEEK_END)) {
+	if(0 != fseek(infile, 0, SEEK_END)) {
 		encoder_wrapper.total_samples_to_encode = encoder_wrapper.unencoded_size = 0;
 	}
 	else {
 		long filesize;
-		fflush(fin);
-		if(-1 == (filesize = ftell(fin))) {
+		fflush(infile);
+		if(-1 == (filesize = ftell(infile))) {
 			encoder_wrapper.total_samples_to_encode = encoder_wrapper.unencoded_size = 0;
 		}
 		else {
@@ -401,9 +383,9 @@
 	}
 
 	if(skip > 0) {
-		if(fin != stdin) {
-			if(-1 == fseek(fin, bytes_per_wide_sample * (unsigned)skip, SEEK_SET)) {
-				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+		if(infile != stdin) {
+			if(-1 == fseek(infile, bytes_per_wide_sample * (unsigned)skip, SEEK_SET)) {
+				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 				goto raw_abort_;
 			}
 		}
@@ -412,15 +394,15 @@
 			unsigned need;
 			for(left = (int64)skip; left > 0; left -= CHUNK_OF_SAMPLES) {
 				need = min(left, CHUNK_OF_SAMPLES);
-				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, fin) < need) {
-					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, infile) < need) {
+					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 					goto raw_abort_;
 				}
 			}
 		}
 	}
 	else {
-		fseek(fin, 0, SEEK_SET);
+		fseek(infile, 0, SEEK_SET);
 	}
 
 	if(!init_encoder(lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, blocksize, qlp_coeff_precision, channels, bps, sample_rate, padding, requested_seek_points, num_requested_seek_points, &encoder_wrapper))
@@ -428,16 +410,16 @@
 
 	encoder_wrapper.verify_fifo.into_frames = true;
 
-	while(!feof(fin)) {
-		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, fin);
+	while(!feof(infile)) {
+		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, infile);
 		if(bytes_read == 0) {
-			if(ferror(fin)) {
-				fprintf(stderr, "ERROR reading from %s\n", infile);
+			if(ferror(infile)) {
+				fprintf(stderr, "ERROR reading from %s\n", infilename);
 				goto raw_abort_;
 			}
 		}
 		else if(bytes_read % bytes_per_wide_sample != 0) {
-			fprintf(stderr, "ERROR, got partial sample from input file %s\n", infile);
+			fprintf(stderr, "ERROR, got partial sample from input file %s\n", infilename);
 			goto raw_abort_;
 		}
 		else {
@@ -465,14 +447,15 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
+	if(infile != stdin)
+		fclose(infile);
 	return 0;
 raw_abort_:
 	if(encoder_wrapper.verbose && encoder_wrapper.total_samples_to_encode > 0)
@@ -486,15 +469,16 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
-	unlink(outfile);
+	if(infile != stdin)
+		fclose(infile);
+	unlink(outfilename);
 	return 1;
 }
 
@@ -854,7 +838,7 @@
 		return;
 
 	fclose(encoder_wrapper->fout);
-	if(0 == (f = fopen(encoder_wrapper->outfile, "r+b")))
+	if(0 == (f = fopen(encoder_wrapper->outfilename, "r+b")))
 		return;
 
 	/* all this is based on intimate knowledge of the stream header
diff --git a/src/flac/encode.h b/src/flac/encode.h
index 3b581ce..db4366d 100644
--- a/src/flac/encode.h
+++ b/src/flac/encode.h
@@ -21,7 +21,7 @@
 
 #include "FLAC/ordinals.h"
 
-int encode_wav(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
-int encode_raw(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
+int encode_wav(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
+int encode_raw(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
 
 #endif