diff options
| -rw-r--r-- | icepll/icepll.cc | 48 | 
1 files changed, 34 insertions, 14 deletions
| diff --git a/icepll/icepll.cc b/icepll/icepll.cc index 192eee6..f9ebecf 100644 --- a/icepll/icepll.cc +++ b/icepll/icepll.cc @@ -53,15 +53,16 @@ void help(const char *cmd)  	printf("\n");  	printf("    -f <filename>\n");  	printf("        Save PLL configuration as Verilog to file\n"); +	printf("        If <filename> is - then the Verilog is written to stdout.\n");  	printf("\n");  	printf("    -m\n"); -	printf("        Save PLL configuration as Verilog module (use with -f)\n"); +	printf("        Save PLL configuration as Verilog module (May use with -f)\n");  	printf("\n");  	printf("    -n <module name>\n");  	printf("        Specify different Verilog module name than the default 'pll'\n");  	printf("\n");  	printf("    -q\n"); -	printf("        Do not print PLL configuration to stdout\n"); +	printf("        Do not print information about the PLL configuration to stdout\n");  	printf("\n");  	exit(1);  } @@ -83,8 +84,9 @@ int main(int argc, char **argv)  	double f_pllin = 12;  	double f_pllout = 60;  	bool simple_feedback = true; -	char* filename = NULL; -	char* module_name = NULL; +	const char* filename = NULL; +	bool file_stdout = false; +	const char* module_name = NULL;  	bool save_as_module = false;  	bool quiet = false; @@ -122,9 +124,18 @@ int main(int argc, char **argv)  	if (optind != argc)  		help(argv[0]); -	// error: shall save as module, but no filename was given +	// Shall save as module, but no filename was given. +	// Write to stdout.  	if (save_as_module && filename == NULL) -		help(argv[0]); +		filename = "-"; + +	// If filename is "-", then use stdout as output stream. +	// That implies quiet mode. +	if (filename != NULL && strcmp(filename, "-") == 0) +	{ +		file_stdout = true; +		quiet = true; +	}  	bool found_something = false;  	double best_fout = 0; @@ -238,17 +249,26 @@ int main(int argc, char **argv)  		printf("\n");  	} -	// save PLL configuration as file -	if (filename != NULL) +	// save PLL configuration as file/stdout. +	if (filename != NULL || file_stdout)  	{ -		// open file for writing  		FILE *f; -		f = fopen(filename, "w"); -		if (f == NULL) + +		if (file_stdout)  		{ -			fprintf(stderr, "Error: Failed to open output file '%s': %s\n", -				filename, strerror(errno)); -			exit(1); +			// use stdout as output stream. +			f = stdout; +		} +		else +		{ +			// open file for writing +			f = fopen(filename, "w"); +			if (f == NULL) +			{ +				fprintf(stderr, "Error: Failed to open output file '%s': %s\n", +					filename, strerror(errno)); +				exit(1); +			}  		}  		if (save_as_module) | 
