hawk/samples/sed21.cpp

129 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;
}