diff --git a/hcl/lib/hcl.h b/hcl/lib/hcl.h index 5de3098..dbde917 100644 --- a/hcl/lib/hcl.h +++ b/hcl/lib/hcl.h @@ -1497,6 +1497,7 @@ HCL_EXPORT hcl_oop_t hcl_read ( hcl_t* hcl ); + HCL_EXPORT int hcl_print ( hcl_t* hcl, hcl_oop_t obj @@ -1513,6 +1514,21 @@ HCL_EXPORT int hcl_decode ( hcl_ooi_t end ); + +/* if you should read charcters from the input stream before hcl_read(), + * you can call hcl_readchar() */ +HCL_EXPORT hcl_iolxc_t* hcl_readchar ( + hcl_t* hcl +); + +/* If you use hcl_readchar() to read the input stream, you may use + * hcl_unreadchar() to put back characters read for hcl_readchar() + * to return before reading the stream again. */ +HCL_EXPORT int hcl_unreadchar ( + hcl_t* hcl, + const hcl_iolxc_t* c +); + /* ========================================================================= * SYNTAX ERROR HANDLING * ========================================================================= */ diff --git a/hcl/lib/read.c b/hcl/lib/read.c index 893ef8f..0c47865 100644 --- a/hcl/lib/read.c +++ b/hcl/lib/read.c @@ -2402,3 +2402,22 @@ void hcl_detachio (hcl_t* hcl) } } } + +hcl_iolxc_t* hcl_readchar (hcl_t* hcl) +{ + int n = get_char(hcl); + if (n <= -1) return HCL_NULL; + return &hcl->c->lxc; +} + +int hcl_unreadchar (hcl_t* hcl, const hcl_iolxc_t* c) +{ + if (hcl->c->nungots >= HCL_COUNTOF(hcl->c->ungot)) + { + hcl_seterrnum (hcl, HCL_EBUFFULL); + return -1; + } + + unget_char (hcl, c); + return 0; +}