All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			changed multiple open functions to accept hawk_errinfo_t* instead of hawk_errnum_t*
		
			
				
	
	
		
			476 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			476 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|     Copyright (c) 2006-2020 Chung, Hyung-Hwan. All rights reserved.
 | |
| 
 | |
|     Redistribution and use in source and binary forms, with or without
 | |
|     modification, are permitted provided that the following conditions
 | |
|     are met:
 | |
|     1. Redistributions of source code must retain the above copyright
 | |
|        notice, this list of conditions and the following disclaimer.
 | |
|     2. Redistributions in binary form must reproduce the above copyright
 | |
|        notice, this list of conditions and the following disclaimer in the
 | |
|        documentation and/or other materials provided with the distribution.
 | |
| 
 | |
|     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
 | |
|     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | |
|     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | |
|     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
|     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
|     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
|     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
|     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
|     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | |
|     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| 
 | |
| #ifndef _HAWK_CUT_H_
 | |
| #define _HAWK_CUT_H_
 | |
| 
 | |
| #include <hawk-cmn.h>
 | |
| #include <hawk-gem.h>
 | |
| #include <hawk-sio.h>
 | |
| 
 | |
| /** \file
 | |
|  * This file defines a text cutter utility.
 | |
|  *
 | |
|  * \todo HAWK_CUT_ORDEREDSEL - A selector 5,3,1 is ordered to 1,3,5
 | |
|  */
 | |
| 
 | |
| /** \struct hawk_cut_t
 | |
|  * The hawk_cut_t type defines a text cutter. The details are hidden as it is
 | |
|  * a large complex structure vulnerable to unintended changes.
 | |
|  */
 | |
| typedef struct hawk_cut_t hawk_cut_t;
 | |
| 
 | |
| #define HAWK_CUT_HDR \
 | |
| 	hawk_oow_t _instsize; \
 | |
| 	hawk_gem_t _gem
 | |
| 
 | |
| typedef struct hawk_cut_alt_t hawk_cut_alt_t;
 | |
| struct hawk_cut_alt_t
 | |
| {
 | |
| 	/* ensure that hawk_cut_alt_t matches the beginning part of hawk_cut_t */
 | |
| 	HAWK_CUT_HDR;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_option_t type defines various option codes for a text cutter.
 | |
|  * Options can be OR'ed with each other and be passed to a text cutter with
 | |
|  * the hawk_cut_setoption() function.
 | |
|  */
 | |
| enum hawk_cut_option_t
 | |
| {
 | |
| 	/** show delimited line only. if not set, undelimited lines are
 | |
| 	 *  shown in its entirety */
 | |
| 	HAWK_CUT_DELIMONLY    = (1 << 0),
 | |
| 
 | |
| 	/** treat any whitespaces as an input delimiter */
 | |
| 	HAWK_CUT_WHITESPACE   = (1 << 2),
 | |
| 
 | |
| 	/** fold adjacent delimiters */
 | |
| 	HAWK_CUT_FOLDDELIMS   = (1 << 3),
 | |
| 
 | |
| 	/** trim leading and trailing whitespaces off the input line */
 | |
| 	HAWK_CUT_TRIMSPACE    = (1 << 4),
 | |
| 
 | |
| 	/** normalize whitespaces in the input line */
 | |
| 	HAWK_CUT_NORMSPACE    = (1 << 5)
 | |
| };
 | |
| typedef enum hawk_cut_option_t hawk_cut_option_t;
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_io_cmd_t type defines I/O command codes. The code indicates
 | |
|  * the action to take in an I/O handler.
 | |
|  */
 | |
| enum hawk_cut_io_cmd_t
 | |
| {
 | |
| 	HAWK_CUT_IO_OPEN  = 0,
 | |
| 	HAWK_CUT_IO_CLOSE = 1,
 | |
| 	HAWK_CUT_IO_READ  = 2,
 | |
| 	HAWK_CUT_IO_WRITE = 3
 | |
| };
 | |
| typedef enum hawk_cut_io_cmd_t hawk_cut_io_cmd_t;
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_io_arg_t type defines a data structure required by
 | |
|  * an I/O handler.
 | |
|  */
 | |
| struct hawk_cut_io_arg_t
 | |
| {
 | |
| 	void* handle; /**< I/O handle */
 | |
| 	const hawk_ooch_t* path;   /**< file path. #HAWK_NULL for a console */
 | |
| };
 | |
| typedef struct hawk_cut_io_arg_t hawk_cut_io_arg_t;
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_io_impl_t type defines an I/O handler. hawk_cut_exec() calls
 | |
|  * I/O handlers to read from and write to a text stream.
 | |
|  */
 | |
| typedef hawk_ooi_t (*hawk_cut_io_impl_t) (
 | |
| 	hawk_cut_t*        cut,
 | |
| 	hawk_cut_io_cmd_t  cmd,
 | |
| 	hawk_cut_io_arg_t* arg,
 | |
| 	hawk_ooch_t*       data,
 | |
| 	hawk_oow_t         count
 | |
| );
 | |
| 
 | |
| /* ------------------------------------------------------------------------ */
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_iostd_type_t type defines types of standard
 | |
|  * I/O resources.
 | |
|  */
 | |
| enum hawk_cut_iostd_type_t
 | |
| {
 | |
| 	HAWK_CUT_IOSTD_NULL,  /**< null resource type */
 | |
| 	HAWK_CUT_IOSTD_FILE,  /**< file */
 | |
| 	HAWK_CUT_IOSTD_FILEB, /**< file */
 | |
| 	HAWK_CUT_IOSTD_FILEU, /**< file */
 | |
| 	HAWK_CUT_IOSTD_OOCS,  /**< string  */
 | |
| 	HAWK_CUT_IOSTD_BCS,
 | |
| 	HAWK_CUT_IOSTD_UCS,
 | |
| 	HAWK_CUT_IOSTD_SIO    /**< sio */
 | |
| };
 | |
| typedef enum hawk_cut_iostd_type_t hawk_cut_iostd_type_t;
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_iostd_t type defines a standard I/O resource.
 | |
|  */
 | |
| struct hawk_cut_iostd_t
 | |
| {
 | |
| 	/** resource type */
 | |
| 	hawk_cut_iostd_type_t type;
 | |
| 
 | |
| 	/** union describing the resource of the specified type */
 | |
| 	union
 | |
| 	{
 | |
| 		/** file path with character encoding */
 | |
| 		struct
 | |
| 		{
 | |
| 			/** file path to open. HAWK_NULL or '-' for stdin/stdout. */
 | |
| 			const hawk_ooch_t* path;
 | |
| 			/** a stream created with the file path is set with this
 | |
| 			 * cmgr if it is not HAWK_NULL. */
 | |
| 			hawk_cmgr_t* cmgr;
 | |
| 		} file;
 | |
| 
 | |
| 		struct
 | |
| 		{
 | |
| 			const hawk_bch_t* path;
 | |
| 			hawk_cmgr_t* cmgr;
 | |
| 		} fileb;
 | |
| 
 | |
| 		struct
 | |
| 		{
 | |
| 			const hawk_uch_t* path;
 | |
| 			hawk_cmgr_t* cmgr;
 | |
| 		} fileu;
 | |
| 
 | |
| 		/**
 | |
| 		 * input string or dynamically allocated output string
 | |
| 		 *
 | |
| 		 * For input, the ptr and the len field of str indicates the
 | |
| 		 * pointer and the length of a string to read. You must set
 | |
| 		 * these two fields before calling hawk_cut_execstd().
 | |
| 		 *
 | |
| 		 * For output, the ptr and the len field of str indicates the
 | |
| 		 * pointer and the length of produced output. The output
 | |
| 		 * string is dynamically allocated. You don't need to set these
 | |
| 		 * fields before calling hawk_cut_execstd() because they are
 | |
| 		 * set by hawk_cut_execstd() and valid while the relevant cut
 | |
| 		 * object is alive. You must free the memory chunk pointed to by
 | |
| 		 * the ptr field with hawk_cut_freemem() once you're done with it
 | |
| 		 * to avoid memory leaks.
 | |
| 		 */
 | |
| 		hawk_oocs_t        oocs;
 | |
| 		hawk_bcs_t         bcs;
 | |
| 		hawk_ucs_t         ucs;
 | |
| 
 | |
| 		/** pre-opened sio stream */
 | |
| 		hawk_sio_t*        sio;
 | |
| 	} u;
 | |
| };
 | |
| 
 | |
| typedef struct hawk_cut_iostd_t hawk_cut_iostd_t;
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_open() function creates a text cutter.
 | |
|  * \return A pointer to a text cutter on success, HAWK_NULL on failure
 | |
|  */
 | |
| 
 | |
| HAWK_EXPORT hawk_cut_t* hawk_cut_open (
 | |
| 	hawk_mmgr_t*   mmgr,   /**< memory manager */
 | |
| 	hawk_oow_t     xtnsize, /**< extension size in bytes */
 | |
| 	hawk_cmgr_t*   cmgr,
 | |
| 	hawk_errinf_t* errinf
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_close() function destroys a text cutter.
 | |
|  */
 | |
| HAWK_EXPORT void hawk_cut_close (
 | |
| 	hawk_cut_t* cut /**< text cutter */
 | |
| );
 | |
| 
 | |
| #if defined(HAWK_HAVE_INLINE)
 | |
| /**
 | |
|  * The hawk_cut_getxtn() function returns the pointer to the extension area
 | |
|  * placed behind the actual cut object.
 | |
|  */
 | |
| static HAWK_INLINE void* hawk_cut_getxtn (hawk_cut_t* cut) { return (void*)((hawk_uint8_t*)cut + ((hawk_cut_alt_t*)cut)->_instsize); }
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_getgem() function gets the pointer to the gem structure of the
 | |
|  * cut object.
 | |
|  */
 | |
| static HAWK_INLINE hawk_gem_t* hawk_cut_getgem (hawk_cut_t* cut) { return &((hawk_cut_alt_t*)cut)->_gem; }
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_getmmgr() function gets the memory manager ucut in
 | |
|  * hawk_cut_open().
 | |
|  */
 | |
| static HAWK_INLINE hawk_mmgr_t* hawk_cut_getmmgr (hawk_cut_t* cut) { return ((hawk_cut_alt_t*)cut)->_gem.mmgr; }
 | |
| static HAWK_INLINE hawk_cmgr_t* hawk_cut_getcmgr (hawk_cut_t* cut) { return ((hawk_cut_alt_t*)cut)->_gem.cmgr; }
 | |
| static HAWK_INLINE void hawk_cut_setcmgr (hawk_cut_t* cut, hawk_cmgr_t* cmgr) { ((hawk_cut_alt_t*)cut)->_gem.cmgr = cmgr; }
 | |
| #else
 | |
| #define hawk_cut_getxtn(cut) ((void*)((hawk_uint8_t*)cut + ((hawk_cut_alt_t*)cut)->_instsize))
 | |
| #define hawk_cut_getgem(cut) (&((hawk_cut_alt_t*)(cut))->_gem)
 | |
| #define hawk_cut_getmmgr(cut) (((hawk_cut_alt_t*)(cut))->_gem.mmgr)
 | |
| #define hawk_cut_getcmgr(cut) (((hawk_cut_alt_t*)(cut))->_gem.cmgr)
 | |
| #define hawk_cut_setcmgr(cut,_cmgr) (((hawk_cut_alt_t*)(cut))->_gem.cmgr = (_cmgr))
 | |
| #endif /* HAWK_HAVE_INLINE */
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_getoption() function retrieves the current options set in
 | |
|  * a text cutter.
 | |
|  * \return 0 or a number OR'ed of #hawk_cut_option_t values
 | |
|  */
 | |
| HAWK_EXPORT int hawk_cut_getoption (
 | |
| 	hawk_cut_t* cut /**< text cutter */
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_setoption() function sets the option code.
 | |
|  */
 | |
| HAWK_EXPORT void hawk_cut_setoption (
 | |
| 	hawk_cut_t* cut, /**< text cutter */
 | |
| 	int         opt  /**< 0 or a number OR'ed of #hawk_cut_option_t values */
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT hawk_errstr_t hawk_cut_geterrstr (
 | |
| 	hawk_cut_t* cut
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_geterrnum() function returns the number of the last error
 | |
|  * occurred.
 | |
|  * \return error number
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_geterror() function gets an error number, an error location,
 | |
|  * and an error message. The information is set to the memory area pointed
 | |
|  * to by each parameter.
 | |
|  */
 | |
| #if defined(HAWK_HAVE_INLINE)
 | |
| static HAWK_INLINE hawk_errnum_t hawk_cut_geterrnum (hawk_cut_t* cut) { return hawk_gem_geterrnum(hawk_cut_getgem(cut)); }
 | |
| static HAWK_INLINE const hawk_loc_t* hawk_cut_geterrloc (hawk_cut_t* cut) { return hawk_gem_geterrloc(hawk_cut_getgem(cut)); }
 | |
| static HAWK_INLINE const hawk_bch_t* hawk_cut_geterrbmsg (hawk_cut_t* cut) { return hawk_gem_geterrbmsg(hawk_cut_getgem(cut)); }
 | |
| static HAWK_INLINE const hawk_uch_t* hawk_cut_geterrumsg (hawk_cut_t* cut) { return hawk_gem_geterrumsg(hawk_cut_getgem(cut)); }
 | |
| static HAWK_INLINE void hawk_cut_geterrbinf (hawk_cut_t* cut, hawk_errbinf_t* errinf) { return hawk_gem_geterrbinf(hawk_cut_getgem(cut), errinf); }
 | |
| static HAWK_INLINE void hawk_cut_geterruinf (hawk_cut_t* cut, hawk_erruinf_t* errinf) { return hawk_gem_geterruinf(hawk_cut_getgem(cut), errinf); }
 | |
| static HAWK_INLINE void hawk_cut_geterror (hawk_cut_t* cut, hawk_errnum_t* errnum, const hawk_ooch_t** errmsg, hawk_loc_t* errloc) { return hawk_gem_geterror(hawk_cut_getgem(cut), errnum, errmsg, errloc); }
 | |
| #else
 | |
| #define hawk_cut_geterrnum(cut) hawk_gem_geterrnum(hawk_cut_getgem(cut))
 | |
| #define hawk_cut_geterrloc(cut) hawk_gem_geterrloc(hawk_cut_getgem(cut))
 | |
| #define hawk_cut_geterrbmsg(cut) hawk_gem_geterrbmsg(hawk_cut_getgem(cut))
 | |
| #define hawk_cut_geterrumsg(cut) hawk_gem_geterrumsg(hawk_cut_getgem(cut))
 | |
| #define hawk_cut_geterrbinf(cut, errinf) (hawk_gem_geterrbinf(hawk_cut_getgem(cut), errinf))
 | |
| #define hawk_cut_geterruinf(cut, errinf) (hawk_gem_geterruinf(hawk_cut_getgem(cut), errinf))
 | |
| #define hawk_cut_geterror(cut, errnum, errmsg, errloc) (hawk_gem_geterror(hawk_cut_getgem(cut), errnum, errmsg, errloc))
 | |
| #endif
 | |
| 
 | |
| #if defined(HAWK_OOCH_IS_BCH)
 | |
| #	define hawk_cut_geterrmsg hawk_cut_geterrbmsg
 | |
| #	define hawk_cut_geterrinf hawk_cut_geterrbinf
 | |
| #else
 | |
| #	define hawk_cut_geterrmsg hawk_cut_geterrumsg
 | |
| #	define hawk_cut_geterrinf hawk_cut_geterruinf
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_seterrnum() function sets the error information omitting
 | |
|  * error location. You must pass a non-NULL for \a errarg if the specified
 | |
|  * error number \a errnum requires one or more arguments to format an
 | |
|  * error message.
 | |
|  */
 | |
| #if defined(HAWK_HAVE_INLINE)
 | |
| static HAWK_INLINE void hawk_cut_seterrnum (hawk_cut_t* cut, const hawk_loc_t* errloc, hawk_errnum_t errnum) { hawk_gem_seterrnum (hawk_cut_getgem(cut), errloc, errnum); }
 | |
| static HAWK_INLINE void hawk_cut_seterrinf (hawk_cut_t* cut, const hawk_errinf_t* errinf) { hawk_gem_seterrinf (hawk_cut_getgem(cut), errinf); }
 | |
| static HAWK_INLINE void hawk_cut_seterror (hawk_cut_t* cut, const hawk_loc_t*  errloc, hawk_errnum_t errnum, const hawk_oocs_t* errarg) { hawk_gem_seterror(hawk_cut_getgem(cut), errloc, errnum, errarg); }
 | |
| static HAWK_INLINE const hawk_ooch_t* hawk_cut_backuperrmsg (hawk_cut_t* cut) { return hawk_gem_backuperrmsg(hawk_cut_getgem(cut)); }
 | |
| #else
 | |
| #define hawk_cut_seterrnum(cut, errloc, errnum) hawk_gem_seterrnum(hawk_cut_getgem(cut), errloc, errnum)
 | |
| #define hawk_cut_seterrinf(cut, errinf) hawk_gem_seterrinf(hawk_cut_getgem(cut), errinf)
 | |
| #define hawk_cut_seterror(cut, errloc, errnum, errarg) hawk_gem_seterror(hawk_cut_getgem(cut), errloc, errnum, errarg)
 | |
| #define hawk_cut_backuperrmsg(cut) hawk_gem_backuperrmsg(hawk_cut_getgem(cut))
 | |
| #endif
 | |
| 
 | |
| 
 | |
| HAWK_EXPORT void hawk_cut_seterrbfmt (
 | |
| 	hawk_cut_t*       cut,
 | |
| 	const hawk_loc_t* errloc,
 | |
| 	hawk_errnum_t     errnum,
 | |
| 	const hawk_bch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_cut_seterrufmt (
 | |
| 	hawk_cut_t*       cut,
 | |
| 	const hawk_loc_t* errloc,
 | |
| 	hawk_errnum_t     errnum,
 | |
| 	const hawk_uch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| 
 | |
| HAWK_EXPORT void hawk_cut_seterrbvfmt (
 | |
| 	hawk_cut_t*         cut,
 | |
| 	const hawk_loc_t*   errloc,
 | |
| 	hawk_errnum_t       errnum,
 | |
| 	const hawk_bch_t*   errfmt,
 | |
| 	va_list             ap
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_cut_seterruvfmt (
 | |
| 	hawk_cut_t*         cut,
 | |
| 	const hawk_loc_t*   errloc,
 | |
| 	hawk_errnum_t       errnum,
 | |
| 	const hawk_uch_t*   errfmt,
 | |
| 	va_list             ap
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_clear() function clears memory buffers internally allocated.
 | |
|  */
 | |
| HAWK_EXPORT void hawk_cut_clear (
 | |
| 	hawk_cut_t* cut /**< text cutter */
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_comp() function compiles a selector into an internal form.
 | |
|  * \return 0 on success, -1 on error
 | |
|  */
 | |
| HAWK_EXPORT int hawk_cut_comp (
 | |
| 	hawk_cut_t*        cut, /**< text cutter */
 | |
| 	hawk_cut_io_impl_t inf
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_exec() function executes the compiled commands.
 | |
|  * \return 0 on success, -1 on error
 | |
|  */
 | |
| HAWK_EXPORT int hawk_cut_exec (
 | |
| 	hawk_cut_t*         cut,  /**< text cutter */
 | |
| 	hawk_cut_io_impl_t  inf,  /**< input text stream */
 | |
| 	hawk_cut_io_impl_t  outf  /**< output text stream */
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_allocmem() function allocates a chunk of memory using
 | |
|  * the memory manager of \a cut.
 | |
|  */
 | |
| HAWK_EXPORT void* hawk_cut_allocmem (
 | |
| 	hawk_cut_t* cut,
 | |
| 	hawk_oow_t size
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_callocmem() function allocates a chunk of memory using
 | |
|  * the memory manager of \a cut and clears it to zeros.
 | |
|  */
 | |
| HAWK_EXPORT void* hawk_cut_callocmem (
 | |
| 	hawk_cut_t* cut,
 | |
| 	hawk_oow_t size
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_reallocmem() function reallocates a chunk of memory using
 | |
|  * the memory manager of \a cut.
 | |
|  */
 | |
| HAWK_EXPORT void* hawk_cut_reallocmem (
 | |
| 	hawk_cut_t* cut,
 | |
| 	void*      ptr,
 | |
| 	hawk_oow_t size
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_freemem() function frees a chunk of memory using
 | |
|  * the memory manager of \a cut.
 | |
|  */
 | |
| HAWK_EXPORT void hawk_cut_freemem (
 | |
| 	hawk_cut_t* cut,
 | |
| 	void*      ptr
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_openstd() function creates a text cutter with the default
 | |
|  * memory manager and initialized it for other hawk_cut_xxxxstd functions.
 | |
|  * \return pointer to a text cutter on success, #HAWK_NULL on failure.
 | |
|  */
 | |
| HAWK_EXPORT hawk_cut_t* hawk_cut_openstd (
 | |
| 	hawk_oow_t     xtnsize,  /**< extension size in bytes */
 | |
| 	hawk_errinf_t* errinf
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_openstdwithmmgr() function creates a text cutter with a
 | |
|  * user-defined memory manager. It is equivalent to hawk_cut_openstd(),
 | |
|  * except that you can specify your own memory manager.
 | |
|  * \return pointer to a text cutter on success, #HAWK_NULL on failure.
 | |
|  */
 | |
| HAWK_EXPORT hawk_cut_t* hawk_cut_openstdwithmmgr (
 | |
| 	hawk_mmgr_t*    mmgr,    /**< memory manager */
 | |
| 	hawk_oow_t      xtnsize,  /**< extension size in bytes */
 | |
| 	hawk_cmgr_t*    cmgr,
 | |
| 	hawk_errinf_t*  errinf
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_compstd() function compiles a selector from input streams.
 | |
|  */
 | |
| HAWK_EXPORT int hawk_cut_compstd (
 | |
| 	hawk_cut_t*      cut,
 | |
| 	hawk_cut_iostd_t in[],
 | |
| 	hawk_oow_t*      count
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * The hawk_cut_execstd() function executes the compiled script
 | |
|  * over an input file \a infile and an output file \a outfile.
 | |
|  * If \a infile is #HAWK_NULL, the standard console input is used.
 | |
|  * If \a outfile is #HAWK_NULL, the standard console output is used..
 | |
|  */
 | |
| HAWK_EXPORT int hawk_cut_execstd (
 | |
| 	hawk_cut_t*        cut,
 | |
| 	hawk_cut_iostd_t   in[],
 | |
| 	hawk_cut_iostd_t*  out
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_cut_execstdfile (
 | |
| 	hawk_cut_t*        cut,
 | |
| 	const hawk_ooch_t* infile,
 | |
| 	const hawk_ooch_t* outfile,
 | |
| 	hawk_cmgr_t*       cmgr
 | |
| );
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |