- minor improvements to tio and sio

- renamed extio to eio in awk
- renamed qse_awk_run_t to qse_awk_rtx_t
This commit is contained in:
2009-01-31 04:31:40 +00:00
parent 5c08cdefc3
commit 987e709021
27 changed files with 866 additions and 828 deletions

View File

@ -59,9 +59,9 @@ public:
/** Represents an internal awk value */
typedef qse_awk_val_t val_t;
/** Represents the external I/O context */
typedef qse_awk_extio_t extio_t;
typedef qse_awk_eio_t eio_t;
/** Represents the run-time context */
typedef qse_awk_run_t run_t;
typedef qse_awk_rtx_t run_t;
/** Represents the underlying interpreter */
typedef qse_awk_t awk_t;
@ -214,12 +214,12 @@ public:
};
/**
* Extio class
* EIO class
*/
class Extio
class EIO
{
protected:
Extio (extio_t* extio);
EIO (eio_t* eio);
public:
const char_t* getName() const;
@ -228,30 +228,30 @@ public:
operator Awk* () const;
operator awk_t* () const;
operator extio_t* () const;
operator eio_t* () const;
operator run_t* () const;
protected:
extio_t* extio;
eio_t* eio;
};
/**
* Pipe
*/
class Pipe: public Extio
class Pipe: public EIO
{
public:
friend class Awk;
enum Mode
{
READ = QSE_AWK_EXTIO_PIPE_READ,
WRITE = QSE_AWK_EXTIO_PIPE_WRITE,
RW = QSE_AWK_EXTIO_PIPE_RW
READ = QSE_AWK_EIO_PIPE_READ,
WRITE = QSE_AWK_EIO_PIPE_WRITE,
RW = QSE_AWK_EIO_PIPE_RW
};
protected:
Pipe (extio_t* extio);
Pipe (eio_t* eio);
public:
Mode getMode () const;
@ -260,20 +260,20 @@ public:
/**
* File
*/
class File: public Extio
class File: public EIO
{
public:
friend class Awk;
enum Mode
{
READ = QSE_AWK_EXTIO_FILE_READ,
WRITE = QSE_AWK_EXTIO_FILE_WRITE,
APPEND = QSE_AWK_EXTIO_FILE_APPEND
READ = QSE_AWK_EIO_FILE_READ,
WRITE = QSE_AWK_EIO_FILE_WRITE,
APPEND = QSE_AWK_EIO_FILE_APPEND
};
protected:
File (extio_t* extio);
File (eio_t* eio);
public:
Mode getMode () const;
@ -282,19 +282,19 @@ public:
/**
* Console
*/
class Console: public Extio
class Console: public EIO
{
public:
friend class Awk;
enum Mode
{
READ = QSE_AWK_EXTIO_CONSOLE_READ,
WRITE = QSE_AWK_EXTIO_CONSOLE_WRITE
READ = QSE_AWK_EIO_CONSOLE_READ,
WRITE = QSE_AWK_EIO_CONSOLE_WRITE
};
protected:
Console (extio_t* extio);
Console (eio_t* eio);
~Console ();
public:
@ -564,7 +564,7 @@ public:
OPT_BXOR = QSE_AWK_BXOR,
OPT_SHIFT = QSE_AWK_SHIFT,
OPT_IDIV = QSE_AWK_IDIV,
OPT_EXTIO = QSE_AWK_EXTIO,
OPT_EIO = QSE_AWK_EIO,
OPT_RWPIPE = QSE_AWK_RWPIPE,
/** Can terminate a statement with a new line */

View File

@ -33,10 +33,10 @@
******
*/
typedef struct qse_awk_t qse_awk_t;
typedef struct qse_awk_run_t qse_awk_run_t;
typedef struct qse_awk_t qse_awk_t;
typedef struct qse_awk_rtx_t qse_awk_rtx_t; /* (R)untime con(T)e(X)t */
typedef struct qse_awk_val_t qse_awk_val_t;
typedef struct qse_awk_extio_t qse_awk_extio_t;
typedef struct qse_awk_eio_t qse_awk_eio_t; /* External IO */
typedef struct qse_awk_prmfns_t qse_awk_prmfns_t;
typedef struct qse_awk_srcios_t qse_awk_srcios_t;
@ -52,9 +52,9 @@ typedef int (*qse_awk_sprintf_t) (
typedef qse_ssize_t (*qse_awk_io_t) (
int cmd, void* arg, qse_char_t* data, qse_size_t count);
struct qse_awk_extio_t
struct qse_awk_eio_t
{
qse_awk_run_t* run; /* [IN] */
qse_awk_rtx_t* run; /* [IN] */
int type; /* [IN] console, file, coproc, pipe */
int mode; /* [IN] read, write, etc */
qse_char_t* name; /* [IN] */
@ -78,7 +78,7 @@ struct qse_awk_extio_t
qse_bool_t eos;
} out;
qse_awk_extio_t* next;
qse_awk_eio_t* next;
};
struct qse_awk_prmfns_t
@ -109,19 +109,19 @@ struct qse_awk_runios_t
struct qse_awk_runcbs_t
{
int (*on_start) (
qse_awk_run_t* run, void* data);
qse_awk_rtx_t* run, void* data);
int (*on_enter) (
qse_awk_run_t* run, void* data);
qse_awk_rtx_t* run, void* data);
void (*on_statement) (
qse_awk_run_t* run, qse_size_t line, void* data);
qse_awk_rtx_t* run, qse_size_t line, void* data);
void (*on_exit) (
qse_awk_run_t* run, qse_awk_val_t* ret, void* data);
qse_awk_rtx_t* run, qse_awk_val_t* ret, void* data);
void (*on_end) (
qse_awk_run_t* run, int errnum, void* data);
qse_awk_rtx_t* run, int errnum, void* data);
void* data;
};
@ -174,9 +174,9 @@ enum qse_awk_option_t
QSE_AWK_IDIV = (1 << 5),
/* support getline and print */
QSE_AWK_EXTIO = (1 << 7),
QSE_AWK_EIO = (1 << 7),
/* support dual direction pipe. QSE_AWK_EXTIO must be on */
/* support dual direction pipe. QSE_AWK_EIO must be on */
QSE_AWK_RWPIPE = (1 << 8),
/* can terminate a statement with a new line */
@ -381,30 +381,30 @@ enum qse_awk_depth_t
QSE_AWK_DEPTH_REX_MATCH = (1 << 5)
};
/* extio types */
enum qse_awk_extio_type_t
/* eio types */
enum qse_awk_eio_type_t
{
/* extio types available */
QSE_AWK_EXTIO_PIPE,
QSE_AWK_EXTIO_FILE,
QSE_AWK_EXTIO_CONSOLE,
/* eio types available */
QSE_AWK_EIO_PIPE,
QSE_AWK_EIO_FILE,
QSE_AWK_EIO_CONSOLE,
/* reserved for internal use only */
QSE_AWK_EXTIO_NUM
QSE_AWK_EIO_NUM
};
enum qse_awk_extio_mode_t
enum qse_awk_eio_mode_t
{
QSE_AWK_EXTIO_PIPE_READ = 0,
QSE_AWK_EXTIO_PIPE_WRITE = 1,
QSE_AWK_EXTIO_PIPE_RW = 2,
QSE_AWK_EIO_PIPE_READ = 0,
QSE_AWK_EIO_PIPE_WRITE = 1,
QSE_AWK_EIO_PIPE_RW = 2,
QSE_AWK_EXTIO_FILE_READ = 0,
QSE_AWK_EXTIO_FILE_WRITE = 1,
QSE_AWK_EXTIO_FILE_APPEND = 2,
QSE_AWK_EIO_FILE_READ = 0,
QSE_AWK_EIO_FILE_WRITE = 1,
QSE_AWK_EIO_FILE_APPEND = 2,
QSE_AWK_EXTIO_CONSOLE_READ = 0,
QSE_AWK_EXTIO_CONSOLE_WRITE = 1
QSE_AWK_EIO_CONSOLE_READ = 0,
QSE_AWK_EIO_CONSOLE_WRITE = 1
};
enum qse_awk_global_id_t
@ -886,21 +886,21 @@ int qse_awk_run (
qse_awk_runios_t* runios, qse_awk_runcbs_t* runcbs,
const qse_cstr_t* runarg, void* data);
void qse_awk_stop (qse_awk_run_t* run);
void qse_awk_stop (qse_awk_rtx_t* run);
void qse_awk_stopall (qse_awk_t* awk);
qse_bool_t qse_awk_isstop (qse_awk_run_t* run);
qse_bool_t qse_awk_isstop (qse_awk_rtx_t* run);
/**
* Gets the number of arguments passed to qse_awk_run
*/
qse_size_t qse_awk_getnargs (qse_awk_run_t* run);
qse_size_t qse_awk_getnargs (qse_awk_rtx_t* run);
/**
* Gets an argument passed to qse_awk_run
*/
qse_awk_val_t* qse_awk_getarg (qse_awk_run_t* run, qse_size_t idx);
qse_awk_val_t* qse_awk_getarg (qse_awk_rtx_t* run, qse_size_t idx);
/****f* qse.awk/qse_awk_getglobal
* NAME
@ -917,7 +917,7 @@ qse_awk_val_t* qse_awk_getarg (qse_awk_run_t* run, qse_size_t idx);
* SYNOPSIS
*/
qse_awk_val_t* qse_awk_getglobal (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
int id
);
/******/
@ -929,7 +929,7 @@ qse_awk_val_t* qse_awk_getglobal (
* SYNOPSIS
*/
int qse_awk_setglobal (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
int id,
qse_awk_val_t* val
);
@ -948,14 +948,14 @@ int qse_awk_setglobal (
* once the return value is set.
*/
void qse_awk_setretval (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
qse_awk_val_t* val
);
int qse_awk_setfilename (
qse_awk_run_t* run, const qse_char_t* name, qse_size_t len);
qse_awk_rtx_t* run, const qse_char_t* name, qse_size_t len);
int qse_awk_setofilename (
qse_awk_run_t* run, const qse_char_t* name, qse_size_t len);
qse_awk_rtx_t* run, const qse_char_t* name, qse_size_t len);
/****f* qse.awk/qse_awk_getrunawk
@ -965,7 +965,7 @@ int qse_awk_setofilename (
* SYNOPSIS
*/
qse_awk_t* qse_awk_getrunawk (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
/******/
@ -976,7 +976,7 @@ qse_awk_t* qse_awk_getrunawk (
* SYNOPSIS
*/
qse_mmgr_t* qse_awk_getrunmmgr (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
/******/
@ -987,7 +987,7 @@ qse_mmgr_t* qse_awk_getrunmmgr (
* SYNOPSIS
*/
void* qse_awk_getrundata (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
/******/
@ -998,37 +998,37 @@ void* qse_awk_getrundata (
* SYNOPSIS
*/
qse_map_t* qse_awk_getrunnvmap (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
/******/
/* functions to manipulate the run-time error */
int qse_awk_getrunerrnum (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
qse_size_t qse_awk_getrunerrlin (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
const qse_char_t* qse_awk_getrunerrmsg (
qse_awk_run_t* run
qse_awk_rtx_t* run
);
void qse_awk_setrunerrnum (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
int errnum
);
void qse_awk_setrunerrmsg (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
int errnum,
qse_size_t errlin,
const qse_char_t* errmsg
);
void qse_awk_getrunerror (
qse_awk_run_t* run, int* errnum,
qse_awk_rtx_t* run, int* errnum,
qse_size_t* errlin, const qse_char_t** errmsg);
void qse_awk_setrunerror (
qse_awk_run_t* run, int errnum, qse_size_t errlin,
qse_awk_rtx_t* run, int errnum, qse_size_t errlin,
const qse_cstr_t* errarg, qse_size_t argcnt);
/* functions to manipulate intrinsic functions */
@ -1036,7 +1036,7 @@ void* qse_awk_addfunc (
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len,
int when_valid, qse_size_t min_args, qse_size_t max_args,
const qse_char_t* arg_spec,
int (*handler)(qse_awk_run_t*,const qse_char_t*,qse_size_t));
int (*handler)(qse_awk_rtx_t*,const qse_char_t*,qse_size_t));
int qse_awk_delfunc (
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len);
@ -1044,8 +1044,8 @@ int qse_awk_delfunc (
void qse_awk_clrbfn (qse_awk_t* awk);
/* record and field functions */
int qse_awk_clrrec (qse_awk_run_t* run, qse_bool_t skip_inrec_line);
int qse_awk_setrec (qse_awk_run_t* run, qse_size_t idx, const qse_char_t* str, qse_size_t len);
int qse_awk_clrrec (qse_awk_rtx_t* run, qse_bool_t skip_inrec_line);
int qse_awk_setrec (qse_awk_rtx_t* run, qse_size_t idx, const qse_char_t* str, qse_size_t len);
/****f* qse.awk/qse_awk_alloc
* NAME
@ -1116,43 +1116,43 @@ qse_size_t qse_awk_longtostr (
qse_char_t* buf, qse_size_t size);
/* value manipulation functions */
qse_awk_val_t* qse_awk_makeintval (qse_awk_run_t* run, qse_long_t v);
qse_awk_val_t* qse_awk_makerealval (qse_awk_run_t* run, qse_real_t v);
qse_awk_val_t* qse_awk_makeintval (qse_awk_rtx_t* run, qse_long_t v);
qse_awk_val_t* qse_awk_makerealval (qse_awk_rtx_t* run, qse_real_t v);
qse_awk_val_t* qse_awk_makestrval0 (
qse_awk_run_t* run, const qse_char_t* str);
qse_awk_rtx_t* run, const qse_char_t* str);
qse_awk_val_t* qse_awk_makestrval (
qse_awk_run_t* run, const qse_char_t* str, qse_size_t len);
qse_awk_rtx_t* run, const qse_char_t* str, qse_size_t len);
qse_awk_val_t* qse_awk_makestrval_nodup (
qse_awk_run_t* run, qse_char_t* str, qse_size_t len);
qse_awk_rtx_t* run, qse_char_t* str, qse_size_t len);
qse_awk_val_t* qse_awk_makestrval2 (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
const qse_char_t* str1, qse_size_t len1,
const qse_char_t* str2, qse_size_t len2);
qse_awk_val_t* qse_awk_makerexval (
qse_awk_run_t* run, const qse_char_t* buf, qse_size_t len, void* code);
qse_awk_val_t* qse_awk_makemapval (qse_awk_run_t* run);
qse_awk_rtx_t* run, const qse_char_t* buf, qse_size_t len, void* code);
qse_awk_val_t* qse_awk_makemapval (qse_awk_rtx_t* run);
qse_awk_val_t* qse_awk_makerefval (
qse_awk_run_t* run, int id, qse_awk_val_t** adr);
qse_awk_rtx_t* run, int id, qse_awk_val_t** adr);
qse_bool_t qse_awk_isstaticval (qse_awk_val_t* val);
void qse_awk_freeval (qse_awk_run_t* run, qse_awk_val_t* val, qse_bool_t cache);
void qse_awk_freeval (qse_awk_rtx_t* run, qse_awk_val_t* val, qse_bool_t cache);
void qse_awk_refupval (qse_awk_run_t* run, qse_awk_val_t* val);
void qse_awk_refdownval (qse_awk_run_t* run, qse_awk_val_t* val);
void qse_awk_refdownval_nofree (qse_awk_run_t* run, qse_awk_val_t* val);
void qse_awk_refupval (qse_awk_rtx_t* run, qse_awk_val_t* val);
void qse_awk_refdownval (qse_awk_rtx_t* run, qse_awk_val_t* val);
void qse_awk_refdownval_nofree (qse_awk_rtx_t* run, qse_awk_val_t* val);
void qse_awk_freevalchunk (qse_awk_run_t* run, qse_awk_val_chunk_t* chunk);
void qse_awk_freevalchunk (qse_awk_rtx_t* run, qse_awk_val_chunk_t* chunk);
qse_bool_t qse_awk_valtobool (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
qse_awk_val_t* val
);
qse_char_t* qse_awk_valtostr (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
qse_awk_val_t* val,
int opt,
qse_str_t* buf,
@ -1186,7 +1186,7 @@ qse_char_t* qse_awk_valtostr (
* SYNOPSIS
*/
int qse_awk_valtonum (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
qse_awk_val_t* v /* the value to convert to a number */,
qse_long_t* l /* a pointer to a long number */,
qse_real_t* r /* a pointer to a qse_real_t */
@ -1200,7 +1200,7 @@ int qse_awk_valtonum (
* SYNOPSIS
*/
int qse_awk_strtonum (
qse_awk_run_t* run,
qse_awk_rtx_t* run,
const qse_char_t* ptr,
qse_size_t len,
qse_long_t* l,

View File

@ -88,6 +88,9 @@ typedef struct qse_fio_lck_t qse_fio_lck_t;
struct qse_fio_t
{
/* note that qse_fio_t is instantiated statically
* in sio.c. make sure that you update the static instantiation
* when you change the structure of qse_fio_t */
QSE_DEFINE_STD_FIELDS (fio)
int errnum;
qse_fio_hnd_t handle;
@ -204,6 +207,12 @@ qse_ssize_t qse_fio_read (
/****f* qse.cmn.fio/qse_fio_write
* NAME
* qse_fio_write - write data
*
* DESCRIPTION
* If QSE_FIO_TEXT is used and the size parameter is (qse_size_t)-1,
* the function treats the data parameter as a pointer to a null-terminated
* string.
*
* SYNOPSIS
*/
qse_ssize_t qse_fio_write (

View File

@ -95,9 +95,8 @@ void qse_sio_purge (
qse_sio_t* sio
);
#if 0
qse_ssize_t qse_sio_getc (
qse_sio_t* sio,
qse_sio_t* sio,
qse_char_t* c
);
@ -107,10 +106,10 @@ qse_ssize_t qse_sio_gets (
qse_size_t size
);
qse_ssize_t qse_sio_getstr (
qse_sio_t* sio,
qse_str_t* buf
qse_ssize_t qse_sio_getsn (
qse_sio_t* sio,
qse_char_t* buf,
qse_size_t size
);
qse_ssize_t qse_sio_putc (
@ -122,24 +121,28 @@ qse_ssize_t qse_sio_puts (
qse_sio_t* sio,
const qse_char_t* str
);
#endif
qse_ssize_t qse_sio_read (
qse_sio_t* sio,
qse_char_t* buf,
qse_size_t size
);
qse_ssize_t qse_sio_write (
qse_ssize_t qse_sio_putsn (
qse_sio_t* sio,
const qse_char_t* str,
qse_size_t size
);
/****f* qse.cmn.sio/qse_sio_getpos
* NAME
* qse_sio_getpos - get the stream position
*
* WARNING
* The getpos() function may not return the desired postion because of
* buffering.
*
* SYNOPSIS
*/
int qse_sio_getpos (
qse_sio_t* sio,
qse_sio_pos_t* pos
);
/******/
int qse_sio_setpos (
qse_sio_t* sio,
@ -147,14 +150,6 @@ int qse_sio_setpos (
);
#if 0
qse_ssize_t qse_sio_putsn (qse_sio_t* sio, ...);
qse_ssize_t qse_sio_putsxn (qse_sio_t* sio, ...);
qse_ssize_t qse_sio_putsv (qse_sio_t* sio, qse_va_list ap);
qse_ssize_t qse_sio_putsxv (qse_sio_t* sio, qse_va_list ap);
/* WARNING:
* getpos may not return the desired postion because of the buffering
*/
int qse_sio_rewind (qse_sio_t* sio);
int qse_sio_movetoend (qse_sio_t* sio);
#endif

View File

@ -263,6 +263,12 @@ qse_ssize_t qse_tio_read (
/******/
/****f* qse.cmn.tio/qse_tio_write
* NAME
* qse_tio_write - write text
*
* DESCRIPTION
* If the size paramenter is (qse_size_t)-1, the function treats the data
* parameter as a pointer to a null-terminated string.
*
* SYNOPSIS
*/