Recovered from cvs revision 2007-05-14 02:55:00
This commit is contained in:
146
ase/awk/Awk.cpp
146
ase/awk/Awk.cpp
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.cpp,v 1.23 2007/05/12 17:05:07 bacon Exp $
|
||||
* $Id: Awk.cpp,v 1.27 2007/05/13 14:57:43 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/Awk.hpp>
|
||||
@ -29,50 +29,82 @@ namespace ASE
|
||||
this->handle = handle;
|
||||
}
|
||||
|
||||
Awk::Extio::Extio (const char_t* name): name(name), handle(ASE_NULL)
|
||||
Awk::Extio::Extio (ase_awk_extio_t* extio): extio (extio)
|
||||
{
|
||||
}
|
||||
|
||||
const Awk::char_t* Awk::Extio::getName () const
|
||||
{
|
||||
return this->name;
|
||||
return extio->name;
|
||||
}
|
||||
|
||||
const void* Awk::Extio::getHandle () const
|
||||
{
|
||||
return this->handle;
|
||||
return extio->handle;
|
||||
}
|
||||
|
||||
void Awk::Extio::setHandle (void* handle)
|
||||
{
|
||||
this->handle = handle;
|
||||
extio->handle = handle;
|
||||
}
|
||||
|
||||
Awk::Pipe::Pipe (char_t* name, Mode mode): Extio(name), mode(mode)
|
||||
ase_awk_run_t* Awk::Extio::getRun () const
|
||||
{
|
||||
return extio->run;
|
||||
}
|
||||
|
||||
ase_awk_t* Awk::Extio::getAwk () const
|
||||
{
|
||||
return ase_awk_getrunawk(extio->run);
|
||||
}
|
||||
|
||||
Awk::Pipe::Pipe (ase_awk_extio_t* extio): Extio(extio)
|
||||
{
|
||||
}
|
||||
|
||||
Awk::File::File (char_t* name, Mode mode): Extio(name), mode(mode)
|
||||
Awk::File::File (ase_awk_extio_t* extio): Extio(extio)
|
||||
{
|
||||
}
|
||||
|
||||
Awk::Console::Console (char_t* name, Mode mode): Extio(name), mode(mode)
|
||||
Awk::Console::Console (ase_awk_extio_t* extio): Extio(extio), filename(ASE_NULL)
|
||||
{
|
||||
}
|
||||
|
||||
Awk::Console::~Console ()
|
||||
{
|
||||
if (filename != ASE_NULL)
|
||||
{
|
||||
ase_awk_free (ase_awk_getrunawk(extio->run), filename);
|
||||
}
|
||||
}
|
||||
|
||||
int Awk::Console::setFileName (const char_t* name)
|
||||
{
|
||||
if (extio->mode == READ)
|
||||
{
|
||||
return ase_awk_setfilename (
|
||||
extio->run, name, ase_strlen(name));
|
||||
}
|
||||
else
|
||||
{
|
||||
return ase_awk_setofilename (
|
||||
extio->run, name, ase_strlen(name));
|
||||
}
|
||||
}
|
||||
|
||||
Awk::Pipe::Mode Awk::Pipe::getMode () const
|
||||
{
|
||||
return this->mode;
|
||||
return (Mode)extio->mode;
|
||||
}
|
||||
|
||||
Awk::File::Mode Awk::File::getMode () const
|
||||
{
|
||||
return this->mode;
|
||||
return (Mode)extio->mode;
|
||||
}
|
||||
|
||||
Awk::Console::Mode Awk::Console::getMode () const
|
||||
{
|
||||
return this->mode;
|
||||
return (Mode)extio->mode;
|
||||
}
|
||||
|
||||
Awk::Argument::Argument (): run (ASE_NULL), val (ASE_NULL)
|
||||
@ -308,11 +340,13 @@ namespace ASE
|
||||
return ase_awk_parse (awk, &srcios);
|
||||
}
|
||||
|
||||
int Awk::run (const char_t* main, const char_t** args)
|
||||
int Awk::run (const char_t* main, const char_t** args, size_t nargs)
|
||||
{
|
||||
ASE_ASSERT (awk != ASE_NULL);
|
||||
|
||||
size_t i;
|
||||
ase_awk_runios_t runios;
|
||||
ase_awk_runarg_t* runarg = ASE_NULL;
|
||||
|
||||
runios.pipe = pipeHandler;
|
||||
runios.coproc = ASE_NULL;
|
||||
@ -320,8 +354,53 @@ namespace ASE
|
||||
runios.console = consoleHandler;
|
||||
runios.custom_data = this;
|
||||
|
||||
return ase_awk_run (
|
||||
awk, main, &runios, ASE_NULL, ASE_NULL, this);
|
||||
if (nargs > 0)
|
||||
{
|
||||
runarg = (ase_awk_runarg_t*) ase_awk_malloc (
|
||||
awk, ASE_SIZEOF(ase_awk_runarg_t)*(nargs+1));
|
||||
|
||||
if (runarg == ASE_NULL)
|
||||
{
|
||||
// TODO: SET ERROR INFO
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < nargs; i++)
|
||||
{
|
||||
runarg[i].len = ase_strlen (args[i]);
|
||||
runarg[i].ptr = ase_awk_strxdup (awk, args[i], runarg[i].len);
|
||||
if (runarg[i].ptr == ASE_NULL)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
for (i-- ; i > 0; i--)
|
||||
{
|
||||
ase_awk_free (awk, runarg[i].ptr);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: SET ERROR INFO
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
runarg[i].ptr = ASE_NULL;
|
||||
runarg[i].len = 0;
|
||||
}
|
||||
|
||||
int n = ase_awk_run (
|
||||
awk, main, &runios, ASE_NULL, runarg, this);
|
||||
|
||||
if (runarg != ASE_NULL)
|
||||
{
|
||||
for (i--; i > 0; i--)
|
||||
{
|
||||
ase_awk_free (awk, runarg[i].ptr);
|
||||
}
|
||||
ase_awk_free (awk, runarg);
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
int Awk::open ()
|
||||
@ -549,32 +628,23 @@ namespace ASE
|
||||
|
||||
ASE_ASSERT ((epa->type & 0xFF) == ASE_AWK_EXTIO_PIPE);
|
||||
|
||||
Pipe pipe (epa->name, (Pipe::Mode)epa->mode);
|
||||
ssize_t n;
|
||||
Pipe pipe (epa);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case ASE_AWK_IO_OPEN:
|
||||
n = awk->openPipe (pipe);
|
||||
if (n >= 0) epa->handle = (void*)pipe.getHandle();
|
||||
return n;
|
||||
|
||||
return awk->openPipe (pipe);
|
||||
case ASE_AWK_IO_CLOSE:
|
||||
pipe.setHandle (epa->handle);
|
||||
return awk->closePipe (pipe);
|
||||
|
||||
case ASE_AWK_IO_READ:
|
||||
pipe.setHandle (epa->handle);
|
||||
return awk->readPipe (pipe, data, count);
|
||||
case ASE_AWK_IO_WRITE:
|
||||
pipe.setHandle (epa->handle);
|
||||
return awk->writePipe (pipe, data, count);
|
||||
|
||||
case ASE_AWK_IO_FLUSH:
|
||||
pipe.setHandle (epa->handle);
|
||||
return awk->flushPipe (pipe);
|
||||
case ASE_AWK_IO_NEXT:
|
||||
pipe.setHandle (epa->handle);
|
||||
return awk->nextPipe (pipe);
|
||||
}
|
||||
|
||||
@ -589,32 +659,23 @@ namespace ASE
|
||||
|
||||
ASE_ASSERT ((epa->type & 0xFF) == ASE_AWK_EXTIO_FILE);
|
||||
|
||||
File file (epa->name, (File::Mode)epa->mode);
|
||||
ssize_t n;
|
||||
File file (epa);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case ASE_AWK_IO_OPEN:
|
||||
n = awk->openFile (file);
|
||||
if (n >= 0) epa->handle = (void*)file.getHandle();
|
||||
return n;
|
||||
|
||||
return awk->openFile (file);
|
||||
case ASE_AWK_IO_CLOSE:
|
||||
file.setHandle (epa->handle);
|
||||
return awk->closeFile (file);
|
||||
|
||||
case ASE_AWK_IO_READ:
|
||||
file.setHandle (epa->handle);
|
||||
return awk->readFile (file, data, count);
|
||||
case ASE_AWK_IO_WRITE:
|
||||
file.setHandle (epa->handle);
|
||||
return awk->writeFile (file, data, count);
|
||||
|
||||
case ASE_AWK_IO_FLUSH:
|
||||
file.setHandle (epa->handle);
|
||||
return awk->flushFile (file);
|
||||
case ASE_AWK_IO_NEXT:
|
||||
file.setHandle (epa->handle);
|
||||
return awk->nextFile (file);
|
||||
}
|
||||
|
||||
@ -629,32 +690,23 @@ namespace ASE
|
||||
|
||||
ASE_ASSERT ((epa->type & 0xFF) == ASE_AWK_EXTIO_CONSOLE);
|
||||
|
||||
Console console (epa->name, (Console::Mode)epa->mode);
|
||||
ssize_t n;
|
||||
Console console (epa);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case ASE_AWK_IO_OPEN:
|
||||
n = awk->openConsole (console);
|
||||
if (n >= 0) epa->handle = (void*)console.getHandle();
|
||||
return n;
|
||||
|
||||
return awk->openConsole (console);
|
||||
case ASE_AWK_IO_CLOSE:
|
||||
console.setHandle (epa->handle);
|
||||
return awk->closeConsole (console);
|
||||
|
||||
case ASE_AWK_IO_READ:
|
||||
console.setHandle (epa->handle);
|
||||
return awk->readConsole (console, data, count);
|
||||
case ASE_AWK_IO_WRITE:
|
||||
console.setHandle (epa->handle);
|
||||
return awk->writeConsole (console, data, count);
|
||||
|
||||
case ASE_AWK_IO_FLUSH:
|
||||
console.setHandle (epa->handle);
|
||||
return awk->flushConsole (console);
|
||||
case ASE_AWK_IO_NEXT:
|
||||
console.setHandle (epa->handle);
|
||||
return awk->nextConsole (console);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.hpp,v 1.22 2007/05/12 03:53:32 bacon Exp $
|
||||
* $Id: Awk.hpp,v 1.25 2007/05/13 14:43:58 bacon Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_AWK_HPP_
|
||||
@ -46,15 +46,17 @@ namespace ASE
|
||||
class Extio
|
||||
{
|
||||
public:
|
||||
Extio (const char_t* name);
|
||||
Extio (ase_awk_extio_t* extio);
|
||||
|
||||
const char_t* getName() const;
|
||||
const void* getHandle () const;
|
||||
void setHandle (void* handle);
|
||||
|
||||
private:
|
||||
const char_t* name;
|
||||
void* handle;
|
||||
ase_awk_run_t* getRun () const;
|
||||
ase_awk_t* getAwk () const;
|
||||
|
||||
protected:
|
||||
ase_awk_extio_t* extio;
|
||||
};
|
||||
|
||||
class Pipe: public Extio
|
||||
@ -66,12 +68,8 @@ namespace ASE
|
||||
WRITE = ASE_AWK_EXTIO_PIPE_WRITE
|
||||
};
|
||||
|
||||
Pipe (char_t* name, Mode mode);
|
||||
|
||||
Pipe (ase_awk_extio_t* extio);
|
||||
Mode getMode () const;
|
||||
|
||||
private:
|
||||
Mode mode;
|
||||
};
|
||||
|
||||
class File: public Extio
|
||||
@ -84,12 +82,8 @@ namespace ASE
|
||||
APPEND = ASE_AWK_EXTIO_FILE_APPEND
|
||||
};
|
||||
|
||||
File (char_t* name, Mode mode);
|
||||
|
||||
File (ase_awk_extio_t* extio);
|
||||
Mode getMode () const;
|
||||
|
||||
private:
|
||||
Mode mode;
|
||||
};
|
||||
|
||||
class Console: public Extio
|
||||
@ -101,12 +95,14 @@ namespace ASE
|
||||
WRITE = ASE_AWK_EXTIO_CONSOLE_WRITE
|
||||
};
|
||||
|
||||
Console (char_t* name, Mode mode);
|
||||
Console (ase_awk_extio_t* extio);
|
||||
~Console ();
|
||||
|
||||
Mode getMode () const;
|
||||
int setFileName (const char_t* name);
|
||||
|
||||
private:
|
||||
Mode mode;
|
||||
char_t* filename;
|
||||
};
|
||||
|
||||
class Argument
|
||||
@ -190,7 +186,7 @@ namespace ASE
|
||||
|
||||
virtual int parse ();
|
||||
virtual int run (const char_t* main = ASE_NULL,
|
||||
const char_t** args = ASE_NULL);
|
||||
const char_t** args = ASE_NULL, size_t nargs = 0);
|
||||
|
||||
typedef int (Awk::*FunctionHandler) (
|
||||
Return* ret, const Argument* args, size_t nargs);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: StdAwk.cpp,v 1.11 2007/05/11 17:21:01 bacon Exp $
|
||||
* $Id: StdAwk.cpp,v 1.12 2007/05/13 10:49:32 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/StdAwk.hpp>
|
||||
@ -39,8 +39,8 @@ namespace ASE
|
||||
ASE_AWK_BLOCKLESS |
|
||||
ASE_AWK_STRBASEONE |
|
||||
ASE_AWK_STRIPSPACES |
|
||||
ASE_AWK_NEXTOFILE /*|
|
||||
ASE_AWK_ARGSTOMAIN*/;
|
||||
ASE_AWK_NEXTOFILE |
|
||||
ASE_AWK_ARGSTOMAIN;
|
||||
ase_awk_setoption (awk, opt);
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ RSC=rc.exe
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "../release/lib"
|
||||
# PROP Intermediate_Dir "release"
|
||||
# PROP Intermediate_Dir "release/cpp"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
MTL=midl.exe
|
||||
@ -66,7 +66,7 @@ LIB32=link.exe -lib
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "../debug/lib"
|
||||
# PROP Intermediate_Dir "debug"
|
||||
# PROP Intermediate_Dir "debug/cpp"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
MTL=midl.exe
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.c,v 1.4 2007/05/05 16:32:46 bacon Exp $
|
||||
* $Id: parse.c,v 1.5 2007/05/13 14:43:58 bacon Exp $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -3650,12 +3650,12 @@ static ase_awk_nde_t* parse_nextfile (ase_awk_t* awk, ase_size_t line, int out)
|
||||
{
|
||||
ase_awk_nde_nextfile_t* nde;
|
||||
|
||||
if (awk->parse.id.block == PARSE_BEGIN_BLOCK)
|
||||
if (!out && awk->parse.id.block == PARSE_BEGIN_BLOCK)
|
||||
{
|
||||
SETERRLIN (awk, ASE_AWK_ENEXTFBEG, line);
|
||||
return ASE_NULL;
|
||||
}
|
||||
if (awk->parse.id.block == PARSE_END_BLOCK)
|
||||
if (!out && awk->parse.id.block == PARSE_END_BLOCK)
|
||||
{
|
||||
SETERRLIN (awk, ASE_AWK_ENEXTFEND, line);
|
||||
return ASE_NULL;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.c,v 1.4 2007/05/05 16:32:46 bacon Exp $
|
||||
* $Id: run.c,v 1.5 2007/05/13 14:43:58 bacon Exp $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -2235,6 +2235,8 @@ static int __run_nextoutfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde)
|
||||
{
|
||||
int n;
|
||||
|
||||
/* nextofile can be called from BEGIN and END block unlike nextfile */
|
||||
|
||||
n = ase_awk_nextextio_write (run, ASE_AWK_OUT_CONSOLE, ASE_T(""));
|
||||
if (n == -1)
|
||||
{
|
||||
@ -2245,8 +2247,9 @@ static int __run_nextoutfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde)
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
/* TODO: should it terminate the program
|
||||
* when there is no more output console? */
|
||||
/* should it terminate the program there is no more
|
||||
* output console? no. there will just be no more console
|
||||
* output */
|
||||
/*run->exit_level = EXIT_GLOBAL;*/
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: tree.c,v 1.3 2007/04/30 05:47:33 bacon Exp $
|
||||
* $Id: tree.c,v 1.4 2007/05/13 14:43:58 bacon Exp $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -817,7 +817,10 @@ static int print_statements (ase_awk_t* awk, ase_awk_nde_t* tree, int depth)
|
||||
case ASE_AWK_NDE_NEXTFILE:
|
||||
{
|
||||
PRINT_TABS (awk, depth);
|
||||
PUT_SRCSTR (awk, ASE_T("nextfile;"));
|
||||
if (((ase_awk_nde_nextfile_t*)p)->out)
|
||||
PUT_SRCSTR (awk, ASE_T("nextofile;"));
|
||||
else
|
||||
PUT_SRCSTR (awk, ASE_T("nextfile;"));
|
||||
PUT_NEWLINE (awk);
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user