fixed Hawk and HawkStd for byte reading

This commit is contained in:
hyung-hwan 2020-01-17 06:25:51 +00:00
parent 102a773bed
commit 851d485499
4 changed files with 129 additions and 28 deletions

View File

@ -2384,11 +2384,16 @@ hawk_ooi_t Hawk::pipeHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_arg_
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->pipe_handler->open(pipe); return awk->pipe_handler->open(pipe);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->pipe_handler->close(pipe); return awk->pipe_handler->close(pipe);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->pipe_handler->read(pipe, (hawk_ooch_t*)data, count); return awk->pipe_handler->read(pipe, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->pipe_handler->readBytes(pipe, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->pipe_handler->write(pipe, (const hawk_ooch_t*)data, count); return awk->pipe_handler->write(pipe, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
@ -2408,13 +2413,19 @@ hawk_ooi_t Hawk::pipeHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_arg_
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->openPipe(pipe); return awk->openPipe(pipe);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->closePipe(pipe); return awk->closePipe(pipe);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->readPipe(pipe, (hawk_ooch_t*)data, count); return awk->readPipe(pipe, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->readPipeBytes(pipe, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->writePipe(pipe, (const hawk_ooch_t*)data, count); return awk->writePipe(pipe, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
return awk->writePipeBytes(pipe, (const hawk_bch_t*)data, count); return awk->writePipeBytes(pipe, (const hawk_bch_t*)data, count);
@ -2450,11 +2461,16 @@ hawk_ooi_t Hawk::fileHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_arg_
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->file_handler->open(file); return awk->file_handler->open(file);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->file_handler->close(file); return awk->file_handler->close(file);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->file_handler->read(file, (hawk_ooch_t*)data, count); return awk->file_handler->read(file, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->file_handler->readBytes(file, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->file_handler->write(file, (const hawk_ooch_t*)data, count); return awk->file_handler->write(file, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
@ -2474,13 +2490,19 @@ hawk_ooi_t Hawk::fileHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_arg_
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->openFile(file); return awk->openFile(file);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->closeFile(file); return awk->closeFile(file);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->readFile(file, (hawk_ooch_t*)data, count); return awk->readFile(file, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->readFileBytes(file, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->writeFile(file, (const hawk_ooch_t*)data, count); return awk->writeFile(file, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
return awk->writeFileBytes(file, (const hawk_bch_t*)data, count); return awk->writeFileBytes(file, (const hawk_bch_t*)data, count);
@ -2516,11 +2538,15 @@ hawk_ooi_t Hawk::consoleHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_a
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->console_handler->open(console); return awk->console_handler->open(console);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->console_handler->close(console); return awk->console_handler->close(console);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->console_handler->read(console, (hawk_ooch_t*)data, count); return awk->console_handler->read(console, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->console_handler->readBytes(console, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->console_handler->write(console, (const hawk_ooch_t*)data, count); return awk->console_handler->write(console, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
@ -2528,6 +2554,7 @@ hawk_ooi_t Hawk::consoleHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_a
case HAWK_RIO_CMD_FLUSH: case HAWK_RIO_CMD_FLUSH:
return awk->console_handler->flush(console); return awk->console_handler->flush(console);
case HAWK_RIO_CMD_NEXT: case HAWK_RIO_CMD_NEXT:
return awk->console_handler->next(console); return awk->console_handler->next(console);
@ -2542,18 +2569,25 @@ hawk_ooi_t Hawk::consoleHandler (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio_a
{ {
case HAWK_RIO_CMD_OPEN: case HAWK_RIO_CMD_OPEN:
return awk->openConsole(console); return awk->openConsole(console);
case HAWK_RIO_CMD_CLOSE: case HAWK_RIO_CMD_CLOSE:
return awk->closeConsole(console); return awk->closeConsole(console);
case HAWK_RIO_CMD_READ: case HAWK_RIO_CMD_READ:
return awk->readConsole(console, (hawk_ooch_t*)data, count); return awk->readConsole(console, (hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_READ_BYTES:
return awk->readConsoleBytes(console, (hawk_bch_t*)data, count);
case HAWK_RIO_CMD_WRITE: case HAWK_RIO_CMD_WRITE:
return awk->writeConsole(console, (const hawk_ooch_t*)data, count); return awk->writeConsole(console, (const hawk_ooch_t*)data, count);
case HAWK_RIO_CMD_WRITE_BYTES: case HAWK_RIO_CMD_WRITE_BYTES:
return awk->writeConsoleBytes(console, (const hawk_bch_t*)data, count); return awk->writeConsoleBytes(console, (const hawk_bch_t*)data, count);
case HAWK_RIO_CMD_FLUSH: case HAWK_RIO_CMD_FLUSH:
return awk->flushConsole(console); return awk->flushConsole(console);
case HAWK_RIO_CMD_NEXT: case HAWK_RIO_CMD_NEXT:
return awk->nextConsole(console); return awk->nextConsole(console);
@ -2587,6 +2621,12 @@ hawk_ooi_t Hawk::readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len)
return -1; return -1;
} }
hawk_ooi_t Hawk::readPipeBytes (Pipe& io, hawk_bch_t* buf, hawk_oow_t len)
{
((Run*)io)->setError (HAWK_ENOIMPL);
return -1;
}
hawk_ooi_t Hawk::writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len) hawk_ooi_t Hawk::writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len)
{ {
((Run*)io)->setError (HAWK_ENOIMPL); ((Run*)io)->setError (HAWK_ENOIMPL);
@ -2623,6 +2663,12 @@ hawk_ooi_t Hawk::readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len)
return -1; return -1;
} }
hawk_ooi_t Hawk::readFileBytes (File& io, hawk_bch_t* buf, hawk_oow_t len)
{
((Run*)io)->setError (HAWK_ENOIMPL);
return -1;
}
hawk_ooi_t Hawk::writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len) hawk_ooi_t Hawk::writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len)
{ {
((Run*)io)->setError (HAWK_ENOIMPL); ((Run*)io)->setError (HAWK_ENOIMPL);
@ -2659,6 +2705,12 @@ hawk_ooi_t Hawk::readConsole (Console& io, hawk_ooch_t* buf, hawk_oow_t len)
return -1; return -1;
} }
hawk_ooi_t Hawk::readConsoleBytes (Console& io, hawk_bch_t* buf, hawk_oow_t len)
{
((Run*)io)->setError (HAWK_ENOIMPL);
return -1;
}
hawk_ooi_t Hawk::writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len) hawk_ooi_t Hawk::writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len)
{ {
((Run*)io)->setError (HAWK_ENOIMPL); ((Run*)io)->setError (HAWK_ENOIMPL);

View File

@ -683,6 +683,7 @@ public:
virtual int open (Pipe& io) = 0; virtual int open (Pipe& io) = 0;
virtual int close (Pipe& io) = 0; virtual int close (Pipe& io) = 0;
virtual hawk_ooi_t read (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t read (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t readBytes (Pipe& io, hawk_bch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t write (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t write (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t writeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t writeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len) = 0;
virtual int flush (Pipe& io) = 0; virtual int flush (Pipe& io) = 0;
@ -728,6 +729,7 @@ public:
virtual int open (File& io) = 0; virtual int open (File& io) = 0;
virtual int close (File& io) = 0; virtual int close (File& io) = 0;
virtual hawk_ooi_t read (File& io, hawk_ooch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t read (File& io, hawk_ooch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t readBytes (File& io, hawk_bch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t write (File& io, const hawk_ooch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t write (File& io, const hawk_ooch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t writeBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t writeBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len) = 0;
virtual int flush (File& io) = 0; virtual int flush (File& io) = 0;
@ -786,6 +788,8 @@ public:
/// return 0 to indicate EOF and -1 for failure. /// return 0 to indicate EOF and -1 for failure.
virtual hawk_ooi_t read (Console& io, hawk_ooch_t* buf, hawk_oow_t len) = 0; virtual hawk_ooi_t read (Console& io, hawk_ooch_t* buf, hawk_oow_t len) = 0;
virtual hawk_ooi_t readBytes (Console& io, hawk_bch_t* buf, hawk_oow_t len) = 0;
/// The write() function is called when the console /// The write() function is called when the console
/// is written for output. It can write upto \a len characters /// is written for output. It can write upto \a len characters
/// available in the buffer \a buf and return the number of /// available in the buffer \a buf and return the number of
@ -1671,6 +1675,7 @@ protected:
virtual int closePipe (Pipe& io); virtual int closePipe (Pipe& io);
virtual hawk_ooi_t readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t readPipeBytes (Pipe& io, hawk_bch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writePipeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writePipeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len);
virtual int flushPipe (Pipe& io); virtual int flushPipe (Pipe& io);
@ -1685,6 +1690,7 @@ protected:
virtual int openFile (File& io); virtual int openFile (File& io);
virtual int closeFile (File& io); virtual int closeFile (File& io);
virtual hawk_ooi_t readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t readFileBytes (File& io, hawk_bch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writeFileBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writeFileBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len);
virtual int flushFile (File& io); virtual int flushFile (File& io);
@ -1699,6 +1705,7 @@ protected:
virtual int openConsole (Console& io); virtual int openConsole (Console& io);
virtual int closeConsole (Console& io); virtual int closeConsole (Console& io);
virtual hawk_ooi_t readConsole (Console& io, hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t readConsole (Console& io, hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t readConsoleBytes (Console& io, hawk_bch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len);
virtual hawk_ooi_t writeConsoleBytes (Console& io, const hawk_bch_t* buf, hawk_oow_t len); virtual hawk_ooi_t writeConsoleBytes (Console& io, const hawk_bch_t* buf, hawk_oow_t len);
virtual int flushConsole (Console& io); virtual int flushConsole (Console& io);

View File

@ -689,6 +689,17 @@ hawk_ooi_t HawkStd::readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len)
#endif #endif
} }
hawk_ooi_t HawkStd::readPipeBytes (Pipe& io, hawk_bch_t* buf, hawk_oow_t len)
{
#if defined(ENABLE_NWIO)
return (io.getUflags() > 0)?
hawk_nwio_readbytes((hawk_nwio_t*)io.getHandle(), buf, len):
hawk_pio_readbytes((hawk_pio_t*)io.getHandle(), HAWK_PIO_OUT, buf, len);
#else
return hawk_pio_readbytes((hawk_pio_t*)io.getHandle(), HAWK_PIO_OUT, buf, len);
#endif
}
hawk_ooi_t HawkStd::writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len) hawk_ooi_t HawkStd::writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len)
{ {
#if defined(ENABLE_NWIO) #if defined(ENABLE_NWIO)
@ -763,6 +774,11 @@ hawk_ooi_t HawkStd::readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len)
return hawk_sio_getoochars((hawk_sio_t*)io.getHandle(), buf, len); return hawk_sio_getoochars((hawk_sio_t*)io.getHandle(), buf, len);
} }
hawk_ooi_t HawkStd::readFileBytes (File& io, hawk_bch_t* buf, hawk_oow_t len)
{
return hawk_sio_getbchars((hawk_sio_t*)io.getHandle(), buf, len);
}
hawk_ooi_t HawkStd::writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len) hawk_ooi_t HawkStd::writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len)
{ {
return hawk_sio_putoochars((hawk_sio_t*)io.getHandle(), buf, len); return hawk_sio_putoochars((hawk_sio_t*)io.getHandle(), buf, len);
@ -773,7 +789,6 @@ hawk_ooi_t HawkStd::writeFileBytes (File& io, const hawk_bch_t* buf, hawk_oow_t
return hawk_sio_putbchars((hawk_sio_t*)io.getHandle(), buf, len); return hawk_sio_putbchars((hawk_sio_t*)io.getHandle(), buf, len);
} }
int HawkStd::flushFile (File& io) int HawkStd::flushFile (File& io)
{ {
return hawk_sio_flush((hawk_sio_t*)io.getHandle()); return hawk_sio_flush((hawk_sio_t*)io.getHandle());
@ -1090,6 +1105,30 @@ hawk_ooi_t HawkStd::readConsole (Console& io, hawk_ooch_t* data, hawk_oow_t size
return nn; return nn;
} }
hawk_ooi_t HawkStd::readConsoleBytes (Console& io, hawk_bch_t* data, hawk_oow_t size)
{
hawk_ooi_t nn;
while ((nn = hawk_sio_getbchars((hawk_sio_t*)io.getHandle(), data, size)) == 0)
{
int n;
hawk_sio_t* sio = (hawk_sio_t*)io.getHandle();
n = open_console_in(io);
if (n == -1) return -1;
if (n == 0)
{
/* no more input console */
return 0;
}
if (sio) hawk_sio_close (sio);
}
return nn;
}
hawk_ooi_t HawkStd::writeConsole (Console& io, const hawk_ooch_t* data, hawk_oow_t size) hawk_ooi_t HawkStd::writeConsole (Console& io, const hawk_ooch_t* data, hawk_oow_t size)
{ {
return hawk_sio_putoochars((hawk_sio_t*)io.getHandle(), data, size); return hawk_sio_putoochars((hawk_sio_t*)io.getHandle(), data, size);

View File

@ -173,6 +173,7 @@ protected:
int openPipe (Pipe& io); int openPipe (Pipe& io);
int closePipe (Pipe& io); int closePipe (Pipe& io);
hawk_ooi_t readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t readPipe (Pipe& io, hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t readPipeBytes (Pipe& io, hawk_bch_t* buf, hawk_oow_t len);
hawk_ooi_t writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t writePipe (Pipe& io, const hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t writePipeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len); hawk_ooi_t writePipeBytes (Pipe& io, const hawk_bch_t* buf, hawk_oow_t len);
int flushPipe (Pipe& io); int flushPipe (Pipe& io);
@ -181,6 +182,7 @@ protected:
int openFile (File& io); int openFile (File& io);
int closeFile (File& io); int closeFile (File& io);
hawk_ooi_t readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t readFile (File& io, hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t readFileBytes (File& io, hawk_bch_t* buf, hawk_oow_t len);
hawk_ooi_t writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t writeFile (File& io, const hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t writeFileBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len); hawk_ooi_t writeFileBytes (File& io, const hawk_bch_t* buf, hawk_oow_t len);
int flushFile (File& io); int flushFile (File& io);
@ -189,6 +191,7 @@ protected:
int openConsole (Console& io); int openConsole (Console& io);
int closeConsole (Console& io); int closeConsole (Console& io);
hawk_ooi_t readConsole (Console& io, hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t readConsole (Console& io, hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t readConsoleBytes (Console& io, hawk_bch_t* buf, hawk_oow_t len);
hawk_ooi_t writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len); hawk_ooi_t writeConsole (Console& io, const hawk_ooch_t* buf, hawk_oow_t len);
hawk_ooi_t writeConsoleBytes (Console& io, const hawk_bch_t* buf, hawk_oow_t len); hawk_ooi_t writeConsoleBytes (Console& io, const hawk_bch_t* buf, hawk_oow_t len);
int flushConsole (Console& io); int flushConsole (Console& io);