128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <Hawk-Sed.hpp>
 | |
| #include <stdio.h>
 | |
| #include <stdarg.h>
 | |
| #include <locale.h>
 | |
| 
 | |
| static void print_error (const hawk_bch_t* fmt, ...)
 | |
| {
 | |
| 	va_list va;
 | |
| 	fprintf (stderr, "ERROR: ");
 | |
| 	va_start (va, fmt);
 | |
| 	vfprintf (stderr, fmt, va);
 | |
| 	va_end (va);
 | |
| }
 | |
| 
 | |
| static void print_error (HAWK::SedStd& sed)
 | |
| {
 | |
| 	hawk_errnum_t code = sed.getErrorNumber();
 | |
| 	hawk_loc_t loc = sed.getErrorLocation();
 | |
| 	print_error("code %d line %lu column %lu - %s\n", (int)code, (unsigned long int)loc.line, (unsigned long int)loc.colm, sed.getErrorMessageB());
 | |
| }
 | |
| 
 | |
| int execute_sed (int argc, hawk_bch_t* argv[])
 | |
| {
 | |
| 	if (argc <  2 || argc > 4)
 | |
| 	{
 | |
| 		print_error("USAGE: %s command-string [input-file [output-file]]\n", argv[0]);
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	HAWK::SedStd sed;
 | |
| 
 | |
| 	if (sed.open() <= -1)
 | |
| 	{
 | |
| 		print_error(sed);
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	HAWK::SedStd::StringStream sstream(argv[1]);
 | |
| 	if (sed.compile(sstream) <= -1)
 | |
| 	{
 | |
| 		print_error(sed);
 | |
| 		sed.close();
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	hawk_bch_t* infile = (argc >= 3)? argv[2]: HAWK_NULL;
 | |
| 	hawk_bch_t* outfile = (argc >= 4)? argv[3]: HAWK_NULL;
 | |
| 	HAWK::SedStd::FileStream ifstream (infile);
 | |
| 	HAWK::SedStd::FileStream ofstream (outfile);
 | |
| 
 | |
| 	if (sed.execute(ifstream, ofstream) <= -1)
 | |
| 	{
 | |
| 		print_error(sed);
 | |
| 		sed.close();
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| #if 0
 | |
| 	HAWK::SedStd::StringStream istream2 ("xxxxxxxxxCCCQQQQ ZZZZ hello");
 | |
| 	HAWK::SedStd::StringStream ostream2;
 | |
| 	if (sed.execute(istream2, ostream2) <= -1)
 | |
| 	{
 | |
| 		print_error(sed);
 | |
| 		sed.close();
 | |
| 		return -1;
 | |
| 	}
 | |
| 	hawk_oow_t len;
 | |
| 	const hawk_bch_t* tmp = ostream2.getOutputB(&len);
 | |
| 	printf ("[%.*s]\n", (int)len, tmp);
 | |
| 
 | |
| 	{
 | |
| 		HAWK::SedStd::StringStream sstream ("s|CCC|BBBBBBBBBBB|g");
 | |
| 		if (sed.compile(sstream) <= -1)
 | |
| 		{
 | |
| 			print_error(sed);
 | |
| 			sed.close();
 | |
| 			return -1;
 | |
| 		}
 | |
| 
 | |
| 		HAWK::SedStd::FileStream of("/dev/stdout");
 | |
| 		if (sed.execute(ostream2, of) <= -1)
 | |
| 		{
 | |
| 			print_error(sed);
 | |
| 			sed.close();
 | |
| 			return -1;
 | |
| 		}
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	sed.close();
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int main (int argc, hawk_bch_t* argv[])
 | |
| {
 | |
| 	int ret;
 | |
| 
 | |
| #if defined(_WIN32)
 | |
| 	char locale[100];
 | |
| 	UINT codepage;
 | |
| 	/* nothing special */
 | |
| #endif
 | |
| 
 | |
| #if defined(_WIN32)
 | |
| 	codepage = GetConsoleOutputCP();
 | |
| 	if (codepage == CP_UTF8)
 | |
| 	{
 | |
| 		/*SetConsoleOUtputCP (CP_UTF8);*/
 | |
| 		/*hawk_setdflcmgrbyid (HAWK_CMGR_UTF8);*/
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		/* .codepage */
 | |
| 		hawk_fmt_uintmax_to_bcstr (locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
 | |
| 		setlocale (LC_ALL, locale);
 | |
| 		/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
 | |
| 	}
 | |
| 
 | |
| #else
 | |
| 	setlocale (LC_ALL, "");
 | |
| 	/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
 | |
| #endif
 | |
| 
 | |
| 	ret = execute_sed(argc, argv);
 | |
| 
 | |
| 	return ret;
 | |
| }
 |