added hawk_subst_for_uchars_to_ucstr(), hawk_subst_for_ucstr_to_ucstr() hawk_subst_for_bchars_to_bcstr(), hawk_subst_for_bcstr_to_bcstr()
This commit is contained in:
		@ -295,6 +295,41 @@ typedef int (*hawk_sort_comperx_t) (
 | 
				
			|||||||
	int*        cv
 | 
						int*        cv
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* =========================================================================
 | 
				
			||||||
 | 
					 * SUBSTITUTION
 | 
				
			||||||
 | 
					 * ========================================================================= */
 | 
				
			||||||
 | 
					#define HAWK_SUBST_NOBUF ((void*)1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The hawk_subst_ucs_t type defines a callback function for hawk_subst_for_uchars_to_ucstr()
 | 
				
			||||||
 | 
					 * and hawk_subst_for_ucstr_to_ucstr() to substitue a new value for an identifier \a ident.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					typedef hawk_uch_t* (*hawk_subst_for_ucs_t) (
 | 
				
			||||||
 | 
						hawk_uch_t*       buf, 
 | 
				
			||||||
 | 
						hawk_oow_t        bsz, 
 | 
				
			||||||
 | 
						const hawk_ucs_t* ident, 
 | 
				
			||||||
 | 
						void*             ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The hawk_subst_bcs_t type defines a callback function for hawk_subst_for_bchars_to_bcstr()
 | 
				
			||||||
 | 
					 * and hawk_subst_for_bcstr_to_bcstr() to substitue a new value for an identifier \a ident.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					typedef hawk_bch_t* (*hawk_subst_for_bcs_t) (
 | 
				
			||||||
 | 
						hawk_bch_t*       buf, 
 | 
				
			||||||
 | 
						hawk_oow_t        bsz, 
 | 
				
			||||||
 | 
						const hawk_bcs_t* ident, 
 | 
				
			||||||
 | 
						void*             ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(HAWK_OOCH_IS_UCH)
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oocs_t hawk_subst_for_ucs_t
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oocs_t hawk_subst_for_bcs_t
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__cplusplus)
 | 
					#if defined(__cplusplus)
 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -704,6 +739,40 @@ HAWK_EXPORT void hawk_unescape_bcstr (
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAWK_EXPORT hawk_oow_t hawk_subst_for_uchars_to_ucstr (
 | 
				
			||||||
 | 
						hawk_uch_t*           buf,
 | 
				
			||||||
 | 
						hawk_oow_t            bsz,
 | 
				
			||||||
 | 
						const hawk_uch_t*     fmt,
 | 
				
			||||||
 | 
						hawk_oow_t            fsz,
 | 
				
			||||||
 | 
						hawk_subst_for_ucs_t  subst,
 | 
				
			||||||
 | 
						void*                 ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAWK_EXPORT hawk_oow_t hawk_subst_for_ucstr_to_ucstr (
 | 
				
			||||||
 | 
						hawk_uch_t*           buf,
 | 
				
			||||||
 | 
						hawk_oow_t            bsz,
 | 
				
			||||||
 | 
						const hawk_uch_t*     fmt,
 | 
				
			||||||
 | 
						hawk_subst_for_ucs_t  subst,
 | 
				
			||||||
 | 
						void*                 ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAWK_EXPORT hawk_oow_t hawk_subst_for_bchars_to_bcstr (
 | 
				
			||||||
 | 
						hawk_bch_t*           buf,
 | 
				
			||||||
 | 
						hawk_oow_t            bsz,
 | 
				
			||||||
 | 
						const hawk_bch_t*     fmt,
 | 
				
			||||||
 | 
						hawk_oow_t            fsz,
 | 
				
			||||||
 | 
						hawk_subst_for_bcs_t  subst,
 | 
				
			||||||
 | 
						void*                 ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAWK_EXPORT hawk_oow_t hawk_subst_for_bcstr_to_bcstr (
 | 
				
			||||||
 | 
						hawk_bch_t*           buf,
 | 
				
			||||||
 | 
						hawk_oow_t            bsz,
 | 
				
			||||||
 | 
						const hawk_bch_t*     fmt,
 | 
				
			||||||
 | 
						hawk_subst_for_bcs_t  subst,
 | 
				
			||||||
 | 
						void*                 ctx
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(HAWK_OOCH_IS_UCH)
 | 
					#if defined(HAWK_OOCH_IS_UCH)
 | 
				
			||||||
#	define hawk_equal_oochars hawk_equal_uchars
 | 
					#	define hawk_equal_oochars hawk_equal_uchars
 | 
				
			||||||
#	define hawk_comp_oochars hawk_comp_uchars
 | 
					#	define hawk_comp_oochars hawk_comp_uchars
 | 
				
			||||||
@ -744,6 +813,8 @@ HAWK_EXPORT void hawk_unescape_bcstr (
 | 
				
			|||||||
#	define hawk_split_oocstr hawk_split_ucstr
 | 
					#	define hawk_split_oocstr hawk_split_ucstr
 | 
				
			||||||
#	define hawk_tokenize_oochars hawk_tokenize_uchars
 | 
					#	define hawk_tokenize_oochars hawk_tokenize_uchars
 | 
				
			||||||
#	define hawk_unescape_oocstr hawk_unescape_ucstr
 | 
					#	define hawk_unescape_oocstr hawk_unescape_ucstr
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oochars_to_oocstr hawk_subst_for_uchars_to_ucstr
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oocstr_to_oocstr hawk_subst_for_ucstr_to_ucstr (
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#	define hawk_equal_oochars hawk_equal_bchars
 | 
					#	define hawk_equal_oochars hawk_equal_bchars
 | 
				
			||||||
#	define hawk_comp_oochars hawk_comp_bchars
 | 
					#	define hawk_comp_oochars hawk_comp_bchars
 | 
				
			||||||
@ -784,6 +855,8 @@ HAWK_EXPORT void hawk_unescape_bcstr (
 | 
				
			|||||||
#	define hawk_split_oocstr hawk_split_bcstr
 | 
					#	define hawk_split_oocstr hawk_split_bcstr
 | 
				
			||||||
#	define hawk_tokenize_oochars hawk_tokenize_bchars
 | 
					#	define hawk_tokenize_oochars hawk_tokenize_bchars
 | 
				
			||||||
#	define hawk_unescape_oocstr hawk_unescape_bcstr
 | 
					#	define hawk_unescape_oocstr hawk_unescape_bcstr
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oochars_to_oocstr hawk_subst_for_bchars_to_bcstr
 | 
				
			||||||
 | 
					#	define hawk_subst_for_oocstr_to_oocstr hawk_subst_for_bcstr_to_bcstr (
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ------------------------------------------------------------------------- */
 | 
					/* ------------------------------------------------------------------------- */
 | 
				
			||||||
 | 
				
			|||||||
@ -2180,6 +2180,310 @@ void hawk_unescape_bcstr (hawk_bch_t* str)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* ------------------------------------------------------------------------ */
 | 
					/* ------------------------------------------------------------------------ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const hawk_uch_t* scan_dollar_for_subst_u (const hawk_uch_t* f, hawk_oow_t l, hawk_ucs_t* ident, hawk_ucs_t* dfl, int depth)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const hawk_uch_t* end = f + l;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						HAWK_ASSERT (l >= 2);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						f += 2; /* skip ${ */ 
 | 
				
			||||||
 | 
						if (ident) ident->ptr = f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (1)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (f >= end) return HAWK_NULL;
 | 
				
			||||||
 | 
							if (*f == '}' || *f == ':') break;
 | 
				
			||||||
 | 
							f++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (*f == ':')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (f >= end || *(f + 1) != '=') 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/* not := */
 | 
				
			||||||
 | 
								return HAWK_NULL; 
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (ident) ident->len = f - ident->ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							f += 2; /* skip := */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (dfl) dfl->ptr = f;
 | 
				
			||||||
 | 
							while (1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (f >= end) return HAWK_NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								else if (*f == '$' && *(f + 1) == '{')
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (depth >= 64) return HAWK_NULL; /* depth too deep */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									/* TODO: remove recursion */
 | 
				
			||||||
 | 
									f = scan_dollar_for_subst_u(f, end - f, HAWK_NULL, HAWK_NULL, depth + 1);
 | 
				
			||||||
 | 
									if (!f) return HAWK_NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (*f == '}') 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									/* ending bracket  */
 | 
				
			||||||
 | 
									if (dfl) dfl->len = f - dfl->ptr;
 | 
				
			||||||
 | 
									return f + 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else f++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (*f == '}') 
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (ident) ident->len = f - ident->ptr;
 | 
				
			||||||
 | 
							if (dfl) 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								dfl->ptr = HAWK_NULL;
 | 
				
			||||||
 | 
								dfl->len = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return f + 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* this part must not be reached */
 | 
				
			||||||
 | 
						return HAWK_NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static hawk_uch_t* exapnd_dollar_for_subst_u (hawk_uch_t* buf, hawk_oow_t bsz, const hawk_ucs_t* ident, const hawk_ucs_t* dfl, hawk_subst_for_ucs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hawk_uch_t* tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tmp = subst(buf, bsz, ident, ctx);
 | 
				
			||||||
 | 
						if (tmp == HAWK_NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/* substitution failed */
 | 
				
			||||||
 | 
							if (dfl->len > 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/* take the default value */
 | 
				
			||||||
 | 
								hawk_oow_t len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/* TODO: remove recursion */
 | 
				
			||||||
 | 
								len = hawk_subst_for_uchars_to_ucstr(buf, bsz, dfl->ptr, dfl->len, subst, ctx);
 | 
				
			||||||
 | 
								tmp = buf + len;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else tmp = buf;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return tmp;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hawk_oow_t hawk_subst_for_uchars_to_ucstr (hawk_uch_t* buf, hawk_oow_t bsz, const hawk_uch_t* fmt, hawk_oow_t fsz, hawk_subst_for_ucs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hawk_uch_t* b = buf;
 | 
				
			||||||
 | 
						hawk_uch_t* end = buf + bsz - 1;
 | 
				
			||||||
 | 
						const hawk_uch_t* f = fmt;
 | 
				
			||||||
 | 
						const hawk_uch_t* fend = fmt + fsz;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (buf != HAWK_SUBST_NOBUF && bsz <= 0) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (f < fend)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (*f == '$' && f < fend - 1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (*(f + 1) == '{')
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									const hawk_uch_t* tmp;
 | 
				
			||||||
 | 
									hawk_ucs_t ident, dfl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									tmp = scan_dollar_for_subst_u(f, fend - f, &ident, &dfl, 0);
 | 
				
			||||||
 | 
									if (!tmp || ident.len <= 0) goto normal;
 | 
				
			||||||
 | 
									f = tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (buf != HAWK_SUBST_NOBUF)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										b = exapnd_dollar_for_subst_u(b, end - b + 1, &ident, &dfl, subst, ctx);
 | 
				
			||||||
 | 
										if (b >= end) goto fini;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										/* the buffer points to HAWK_SUBST_NOBUF. */
 | 
				
			||||||
 | 
										tmp = exapnd_dollar_for_subst_u(buf, bsz, &ident, &dfl, subst, ctx);
 | 
				
			||||||
 | 
										/* increment b by the length of the expanded string */
 | 
				
			||||||
 | 
										b += (tmp - buf);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (*(f + 1) == '$') 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									/* $$ -> $. */
 | 
				
			||||||
 | 
									f++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						normal:
 | 
				
			||||||
 | 
							if (buf != HAWK_SUBST_NOBUF)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (b >= end) break;
 | 
				
			||||||
 | 
								*b = *f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							b++; f++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fini:
 | 
				
			||||||
 | 
						if (buf != HAWK_SUBST_NOBUF) *b = '\0';
 | 
				
			||||||
 | 
						return b - buf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hawk_oow_t hawk_subst_for_ucstr_to_ucstr (hawk_uch_t* buf, hawk_oow_t bsz, const hawk_uch_t* fmt, hawk_subst_for_ucs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return hawk_subst_for_uchars_to_ucstr(buf, bsz, fmt, hawk_count_ucstr(fmt), subst, ctx);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ------------------------------------------------------------------------ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const hawk_bch_t* scan_dollar_for_subst_b (const hawk_bch_t* f, hawk_oow_t l, hawk_bcs_t* ident, hawk_bcs_t* dfl, int depth)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const hawk_bch_t* end = f + l;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						HAWK_ASSERT (l >= 2);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						f += 2; /* skip ${ */ 
 | 
				
			||||||
 | 
						if (ident) ident->ptr = f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (1)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (f >= end) return HAWK_NULL;
 | 
				
			||||||
 | 
							if (*f == '}' || *f == ':') break;
 | 
				
			||||||
 | 
							f++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (*f == ':')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (f >= end || *(f + 1) != '=') 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/* not := */
 | 
				
			||||||
 | 
								return HAWK_NULL; 
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (ident) ident->len = f - ident->ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							f += 2; /* skip := */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (dfl) dfl->ptr = f;
 | 
				
			||||||
 | 
							while (1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (f >= end) return HAWK_NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								else if (*f == '$' && *(f + 1) == '{')
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (depth >= 64) return HAWK_NULL; /* depth too deep */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									/* TODO: remove recursion */
 | 
				
			||||||
 | 
									f = scan_dollar_for_subst_b(f, end - f, HAWK_NULL, HAWK_NULL, depth + 1);
 | 
				
			||||||
 | 
									if (!f) return HAWK_NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (*f == '}') 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									/* ending bracket  */
 | 
				
			||||||
 | 
									if (dfl) dfl->len = f - dfl->ptr;
 | 
				
			||||||
 | 
									return f + 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else f++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (*f == '}') 
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (ident) ident->len = f - ident->ptr;
 | 
				
			||||||
 | 
							if (dfl) 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								dfl->ptr = HAWK_NULL;
 | 
				
			||||||
 | 
								dfl->len = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return f + 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* this part must not be reached */
 | 
				
			||||||
 | 
						return HAWK_NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static hawk_bch_t* exapnd_dollar_for_subst_b (hawk_bch_t* buf, hawk_oow_t bsz, const hawk_bcs_t* ident, const hawk_bcs_t* dfl, hawk_subst_for_bcs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hawk_bch_t* tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tmp = subst(buf, bsz, ident, ctx);
 | 
				
			||||||
 | 
						if (tmp == HAWK_NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/* substitution failed */
 | 
				
			||||||
 | 
							if (dfl->len > 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								/* take the default value */
 | 
				
			||||||
 | 
								hawk_oow_t len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/* TODO: remove recursion */
 | 
				
			||||||
 | 
								len = hawk_subst_for_bchars_to_bcstr(buf, bsz, dfl->ptr, dfl->len, subst, ctx);
 | 
				
			||||||
 | 
								tmp = buf + len;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else tmp = buf;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return tmp;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hawk_oow_t hawk_subst_for_bchars_to_bcstr (hawk_bch_t* buf, hawk_oow_t bsz, const hawk_bch_t* fmt, hawk_oow_t fsz, hawk_subst_for_bcs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hawk_bch_t* b = buf;
 | 
				
			||||||
 | 
						hawk_bch_t* end = buf + bsz - 1;
 | 
				
			||||||
 | 
						const hawk_bch_t* f = fmt;
 | 
				
			||||||
 | 
						const hawk_bch_t* fend = fmt + fsz;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (buf != HAWK_SUBST_NOBUF && bsz <= 0) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (f < fend)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (*f == '$' && f < fend - 1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (*(f + 1) == '{')
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									const hawk_bch_t* tmp;
 | 
				
			||||||
 | 
									hawk_bcs_t ident, dfl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									tmp = scan_dollar_for_subst_b(f, fend - f, &ident, &dfl, 0);
 | 
				
			||||||
 | 
									if (!tmp || ident.len <= 0) goto normal;
 | 
				
			||||||
 | 
									f = tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (buf != HAWK_SUBST_NOBUF)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										b = exapnd_dollar_for_subst_b(b, end - b + 1, &ident, &dfl, subst, ctx);
 | 
				
			||||||
 | 
										if (b >= end) goto fini;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										/* the buffer points to HAWK_SUBST_NOBUF. */
 | 
				
			||||||
 | 
										tmp = exapnd_dollar_for_subst_b(buf, bsz, &ident, &dfl, subst, ctx);
 | 
				
			||||||
 | 
										/* increment b by the length of the expanded string */
 | 
				
			||||||
 | 
										b += (tmp - buf);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (*(f + 1) == '$') 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									/* $$ -> $. */
 | 
				
			||||||
 | 
									f++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						normal:
 | 
				
			||||||
 | 
							if (buf != HAWK_SUBST_NOBUF)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (b >= end) break;
 | 
				
			||||||
 | 
								*b = *f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							b++; f++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fini:
 | 
				
			||||||
 | 
						if (buf != HAWK_SUBST_NOBUF) *b = '\0';
 | 
				
			||||||
 | 
						return b - buf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hawk_oow_t hawk_subst_for_bcstr_to_bcstr (hawk_bch_t* buf, hawk_oow_t bsz, const hawk_bch_t* fmt, hawk_subst_for_bcs_t subst, void* ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return hawk_subst_for_bchars_to_bcstr(buf, bsz, fmt, hawk_count_bcstr(fmt), subst, ctx);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* ------------------------------------------------------------------------ */
 | 
				
			||||||
hawk_oow_t hawk_int_to_oocstr (hawk_int_t value, int radix, const hawk_ooch_t* prefix, hawk_ooch_t* buf, hawk_oow_t size)
 | 
					hawk_oow_t hawk_int_to_oocstr (hawk_int_t value, int radix, const hawk_ooch_t* prefix, hawk_ooch_t* buf, hawk_oow_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hawk_int_t t, rem;
 | 
						hawk_int_t t, rem;
 | 
				
			||||||
 | 
				
			|||||||
@ -16,8 +16,7 @@ check_SCRIPTS = h-001.hawk
 | 
				
			|||||||
##noinst_SCRIPTS = $(check_SCRIPTS)
 | 
					##noinst_SCRIPTS = $(check_SCRIPTS)
 | 
				
			||||||
EXTRA_DIST = $(check_SCRIPTS)
 | 
					EXTRA_DIST = $(check_SCRIPTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##bin_PROGRAMS = t-001 t-002 t-003 t-004
 | 
					check_PROGRAMS = t-001 t-002 t-003 t-004 t-005
 | 
				
			||||||
check_PROGRAMS = t-001 t-002 t-005
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
t_001_SOURCES = t-001.c t.h
 | 
					t_001_SOURCES = t-001.c t.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -25,13 +24,13 @@ t_002_SOURCES = t-002.c t.h
 | 
				
			|||||||
t_002_LDADD = -lhawk $(LDADD)
 | 
					t_002_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
t_002_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_002_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#t_003_SOURCES = t-003.c t.h
 | 
					t_003_SOURCES = t-003.c t.h
 | 
				
			||||||
#t_003_LDADD = -lhawk $(LDADD)
 | 
					t_003_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
#t_003_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_003_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
#
 | 
					
 | 
				
			||||||
#t_004_SOURCES = t-004.c t.h
 | 
					t_004_SOURCES = t-004.c t.h
 | 
				
			||||||
#t_004_LDADD = -lhawk $(LDADD)
 | 
					t_004_LDADD = -lhawk $(LDADD) $(LIBM)
 | 
				
			||||||
#t_004_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_004_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
 | 
					
 | 
				
			||||||
t_005_SOURCES = t-005.c t.h
 | 
					t_005_SOURCES = t-005.c t.h
 | 
				
			||||||
t_005_LDADD = -lhawk $(LDADD)
 | 
					t_005_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
 | 
				
			|||||||
@ -87,7 +87,8 @@ PRE_UNINSTALL = :
 | 
				
			|||||||
POST_UNINSTALL = :
 | 
					POST_UNINSTALL = :
 | 
				
			||||||
build_triplet = @build@
 | 
					build_triplet = @build@
 | 
				
			||||||
host_triplet = @host@
 | 
					host_triplet = @host@
 | 
				
			||||||
check_PROGRAMS = t-001$(EXEEXT) t-002$(EXEEXT) t-005$(EXEEXT)
 | 
					check_PROGRAMS = t-001$(EXEEXT) t-002$(EXEEXT) t-003$(EXEEXT) \
 | 
				
			||||||
 | 
						t-004$(EXEEXT) t-005$(EXEEXT)
 | 
				
			||||||
subdir = t
 | 
					subdir = t
 | 
				
			||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 | 
					ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 | 
				
			||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
 | 
					am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
 | 
				
			||||||
@ -118,6 +119,10 @@ am__v_lt_1 =
 | 
				
			|||||||
am_t_002_OBJECTS = t-002.$(OBJEXT)
 | 
					am_t_002_OBJECTS = t-002.$(OBJEXT)
 | 
				
			||||||
t_002_OBJECTS = $(am_t_002_OBJECTS)
 | 
					t_002_OBJECTS = $(am_t_002_OBJECTS)
 | 
				
			||||||
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 | 
					am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 | 
				
			||||||
 | 
					am_t_003_OBJECTS = t-003.$(OBJEXT)
 | 
				
			||||||
 | 
					t_003_OBJECTS = $(am_t_003_OBJECTS)
 | 
				
			||||||
 | 
					am_t_004_OBJECTS = t-004.$(OBJEXT)
 | 
				
			||||||
 | 
					t_004_OBJECTS = $(am_t_004_OBJECTS)
 | 
				
			||||||
am_t_005_OBJECTS = t-005.$(OBJEXT)
 | 
					am_t_005_OBJECTS = t-005.$(OBJEXT)
 | 
				
			||||||
t_005_OBJECTS = $(am_t_005_OBJECTS)
 | 
					t_005_OBJECTS = $(am_t_005_OBJECTS)
 | 
				
			||||||
AM_V_P = $(am__v_P_@AM_V@)
 | 
					AM_V_P = $(am__v_P_@AM_V@)
 | 
				
			||||||
@ -136,7 +141,7 @@ DEFAULT_INCLUDES =
 | 
				
			|||||||
depcomp = $(SHELL) $(top_srcdir)/ac/depcomp
 | 
					depcomp = $(SHELL) $(top_srcdir)/ac/depcomp
 | 
				
			||||||
am__maybe_remake_depfiles = depfiles
 | 
					am__maybe_remake_depfiles = depfiles
 | 
				
			||||||
am__depfiles_remade = ./$(DEPDIR)/t-001.Po ./$(DEPDIR)/t-002.Po \
 | 
					am__depfiles_remade = ./$(DEPDIR)/t-001.Po ./$(DEPDIR)/t-002.Po \
 | 
				
			||||||
	./$(DEPDIR)/t-005.Po
 | 
						./$(DEPDIR)/t-003.Po ./$(DEPDIR)/t-004.Po ./$(DEPDIR)/t-005.Po
 | 
				
			||||||
am__mv = mv -f
 | 
					am__mv = mv -f
 | 
				
			||||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 | 
					COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 | 
				
			||||||
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 | 
						$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 | 
				
			||||||
@ -156,8 +161,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 | 
				
			|||||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 | 
					am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 | 
				
			||||||
am__v_CCLD_0 = @echo "  CCLD    " $@;
 | 
					am__v_CCLD_0 = @echo "  CCLD    " $@;
 | 
				
			||||||
am__v_CCLD_1 = 
 | 
					am__v_CCLD_1 = 
 | 
				
			||||||
SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_005_SOURCES)
 | 
					SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_003_SOURCES) \
 | 
				
			||||||
DIST_SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_005_SOURCES)
 | 
						$(t_004_SOURCES) $(t_005_SOURCES)
 | 
				
			||||||
 | 
					DIST_SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_003_SOURCES) \
 | 
				
			||||||
 | 
						$(t_004_SOURCES) $(t_005_SOURCES)
 | 
				
			||||||
am__can_run_installinfo = \
 | 
					am__can_run_installinfo = \
 | 
				
			||||||
  case $$AM_UPDATE_INFO_DIR in \
 | 
					  case $$AM_UPDATE_INFO_DIR in \
 | 
				
			||||||
    n|no|NO) false;; \
 | 
					    n|no|NO) false;; \
 | 
				
			||||||
@ -564,14 +571,12 @@ t_001_SOURCES = t-001.c t.h
 | 
				
			|||||||
t_002_SOURCES = t-002.c t.h
 | 
					t_002_SOURCES = t-002.c t.h
 | 
				
			||||||
t_002_LDADD = -lhawk $(LDADD)
 | 
					t_002_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
t_002_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_002_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
 | 
					t_003_SOURCES = t-003.c t.h
 | 
				
			||||||
#t_003_SOURCES = t-003.c t.h
 | 
					t_003_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
#t_003_LDADD = -lhawk $(LDADD)
 | 
					t_003_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
#t_003_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_004_SOURCES = t-004.c t.h
 | 
				
			||||||
#
 | 
					t_004_LDADD = -lhawk $(LDADD) $(LIBM)
 | 
				
			||||||
#t_004_SOURCES = t-004.c t.h
 | 
					t_004_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
#t_004_LDADD = -lhawk $(LDADD)
 | 
					 | 
				
			||||||
#t_004_DEPENDENCIES = ../lib/libhawk.la
 | 
					 | 
				
			||||||
t_005_SOURCES = t-005.c t.h
 | 
					t_005_SOURCES = t-005.c t.h
 | 
				
			||||||
t_005_LDADD = -lhawk $(LDADD)
 | 
					t_005_LDADD = -lhawk $(LDADD)
 | 
				
			||||||
t_005_DEPENDENCIES = ../lib/libhawk.la
 | 
					t_005_DEPENDENCIES = ../lib/libhawk.la
 | 
				
			||||||
@ -630,6 +635,14 @@ t-002$(EXEEXT): $(t_002_OBJECTS) $(t_002_DEPENDENCIES) $(EXTRA_t_002_DEPENDENCIE
 | 
				
			|||||||
	@rm -f t-002$(EXEEXT)
 | 
						@rm -f t-002$(EXEEXT)
 | 
				
			||||||
	$(AM_V_CCLD)$(LINK) $(t_002_OBJECTS) $(t_002_LDADD) $(LIBS)
 | 
						$(AM_V_CCLD)$(LINK) $(t_002_OBJECTS) $(t_002_LDADD) $(LIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					t-003$(EXEEXT): $(t_003_OBJECTS) $(t_003_DEPENDENCIES) $(EXTRA_t_003_DEPENDENCIES) 
 | 
				
			||||||
 | 
						@rm -f t-003$(EXEEXT)
 | 
				
			||||||
 | 
						$(AM_V_CCLD)$(LINK) $(t_003_OBJECTS) $(t_003_LDADD) $(LIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					t-004$(EXEEXT): $(t_004_OBJECTS) $(t_004_DEPENDENCIES) $(EXTRA_t_004_DEPENDENCIES) 
 | 
				
			||||||
 | 
						@rm -f t-004$(EXEEXT)
 | 
				
			||||||
 | 
						$(AM_V_CCLD)$(LINK) $(t_004_OBJECTS) $(t_004_LDADD) $(LIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
t-005$(EXEEXT): $(t_005_OBJECTS) $(t_005_DEPENDENCIES) $(EXTRA_t_005_DEPENDENCIES) 
 | 
					t-005$(EXEEXT): $(t_005_OBJECTS) $(t_005_DEPENDENCIES) $(EXTRA_t_005_DEPENDENCIES) 
 | 
				
			||||||
	@rm -f t-005$(EXEEXT)
 | 
						@rm -f t-005$(EXEEXT)
 | 
				
			||||||
	$(AM_V_CCLD)$(LINK) $(t_005_OBJECTS) $(t_005_LDADD) $(LIBS)
 | 
						$(AM_V_CCLD)$(LINK) $(t_005_OBJECTS) $(t_005_LDADD) $(LIBS)
 | 
				
			||||||
@ -642,6 +655,8 @@ distclean-compile:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-001.Po@am__quote@ # am--include-marker
 | 
					@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-001.Po@am__quote@ # am--include-marker
 | 
				
			||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-002.Po@am__quote@ # am--include-marker
 | 
					@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-002.Po@am__quote@ # am--include-marker
 | 
				
			||||||
 | 
					@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-003.Po@am__quote@ # am--include-marker
 | 
				
			||||||
 | 
					@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-004.Po@am__quote@ # am--include-marker
 | 
				
			||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-005.Po@am__quote@ # am--include-marker
 | 
					@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-005.Po@am__quote@ # am--include-marker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(am__depfiles_remade):
 | 
					$(am__depfiles_remade):
 | 
				
			||||||
@ -887,6 +902,20 @@ t-002.log: t-002$(EXEEXT)
 | 
				
			|||||||
	--log-file $$b.log --trs-file $$b.trs \
 | 
						--log-file $$b.log --trs-file $$b.trs \
 | 
				
			||||||
	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 | 
						$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 | 
				
			||||||
	"$$tst" $(AM_TESTS_FD_REDIRECT)
 | 
						"$$tst" $(AM_TESTS_FD_REDIRECT)
 | 
				
			||||||
 | 
					t-003.log: t-003$(EXEEXT)
 | 
				
			||||||
 | 
						@p='t-003$(EXEEXT)'; \
 | 
				
			||||||
 | 
						b='t-003'; \
 | 
				
			||||||
 | 
						$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 | 
				
			||||||
 | 
						--log-file $$b.log --trs-file $$b.trs \
 | 
				
			||||||
 | 
						$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 | 
				
			||||||
 | 
						"$$tst" $(AM_TESTS_FD_REDIRECT)
 | 
				
			||||||
 | 
					t-004.log: t-004$(EXEEXT)
 | 
				
			||||||
 | 
						@p='t-004$(EXEEXT)'; \
 | 
				
			||||||
 | 
						b='t-004'; \
 | 
				
			||||||
 | 
						$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 | 
				
			||||||
 | 
						--log-file $$b.log --trs-file $$b.trs \
 | 
				
			||||||
 | 
						$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 | 
				
			||||||
 | 
						"$$tst" $(AM_TESTS_FD_REDIRECT)
 | 
				
			||||||
t-005.log: t-005$(EXEEXT)
 | 
					t-005.log: t-005$(EXEEXT)
 | 
				
			||||||
	@p='t-005$(EXEEXT)'; \
 | 
						@p='t-005$(EXEEXT)'; \
 | 
				
			||||||
	b='t-005'; \
 | 
						b='t-005'; \
 | 
				
			||||||
@ -989,6 +1018,8 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
 | 
				
			|||||||
distclean: distclean-am
 | 
					distclean: distclean-am
 | 
				
			||||||
		-rm -f ./$(DEPDIR)/t-001.Po
 | 
							-rm -f ./$(DEPDIR)/t-001.Po
 | 
				
			||||||
	-rm -f ./$(DEPDIR)/t-002.Po
 | 
						-rm -f ./$(DEPDIR)/t-002.Po
 | 
				
			||||||
 | 
						-rm -f ./$(DEPDIR)/t-003.Po
 | 
				
			||||||
 | 
						-rm -f ./$(DEPDIR)/t-004.Po
 | 
				
			||||||
	-rm -f ./$(DEPDIR)/t-005.Po
 | 
						-rm -f ./$(DEPDIR)/t-005.Po
 | 
				
			||||||
	-rm -f Makefile
 | 
						-rm -f Makefile
 | 
				
			||||||
distclean-am: clean-am distclean-compile distclean-generic \
 | 
					distclean-am: clean-am distclean-compile distclean-generic \
 | 
				
			||||||
@ -1037,6 +1068,8 @@ installcheck-am:
 | 
				
			|||||||
maintainer-clean: maintainer-clean-am
 | 
					maintainer-clean: maintainer-clean-am
 | 
				
			||||||
		-rm -f ./$(DEPDIR)/t-001.Po
 | 
							-rm -f ./$(DEPDIR)/t-001.Po
 | 
				
			||||||
	-rm -f ./$(DEPDIR)/t-002.Po
 | 
						-rm -f ./$(DEPDIR)/t-002.Po
 | 
				
			||||||
 | 
						-rm -f ./$(DEPDIR)/t-003.Po
 | 
				
			||||||
 | 
						-rm -f ./$(DEPDIR)/t-004.Po
 | 
				
			||||||
	-rm -f ./$(DEPDIR)/t-005.Po
 | 
						-rm -f ./$(DEPDIR)/t-005.Po
 | 
				
			||||||
	-rm -f Makefile
 | 
						-rm -f Makefile
 | 
				
			||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
 | 
					maintainer-clean-am: distclean-am maintainer-clean-generic
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					#include <hawk-fmt.h>
 | 
				
			||||||
#include <hawk-utl.h>
 | 
					#include <hawk-utl.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
@ -5,7 +6,7 @@
 | 
				
			|||||||
#include <locale.h>
 | 
					#include <locale.h>
 | 
				
			||||||
#include "t.h"
 | 
					#include "t.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int put_bcs (hawk_fmtout_t* fmtout, const hawk_bch_t* c, hawk_oow_t len)
 | 
					static int put_bchars (hawk_fmtout_t* fmtout, const hawk_bch_t* c, hawk_oow_t len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	while (len > 0)
 | 
						while (len > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -16,7 +17,7 @@ static int put_bcs (hawk_fmtout_t* fmtout, const hawk_bch_t* c, hawk_oow_t len)
 | 
				
			|||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int put_ucs (hawk_fmtout_t* fmtout, const hawk_uch_t* c, hawk_oow_t len)
 | 
					static int put_uchars (hawk_fmtout_t* fmtout, const hawk_uch_t* c, hawk_oow_t len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hawk_cmgr_t* cmgr = hawk_get_utf8_cmgr();
 | 
						hawk_cmgr_t* cmgr = hawk_get_utf8_cmgr();
 | 
				
			||||||
	hawk_bch_t bcs[HAWK_BCSIZE_MAX];
 | 
						hawk_bch_t bcs[HAWK_BCSIZE_MAX];
 | 
				
			||||||
@ -40,8 +41,8 @@ static hawk_ooi_t bfmt_out (const hawk_bch_t* fmt, ...)
 | 
				
			|||||||
	int n;
 | 
						int n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memset (&fmtout, 0, HAWK_SIZEOF(fmtout));
 | 
						memset (&fmtout, 0, HAWK_SIZEOF(fmtout));
 | 
				
			||||||
	fmtout.putbcs = put_bcs;
 | 
						fmtout.putbchars = put_bchars;
 | 
				
			||||||
	fmtout.putucs = put_ucs;
 | 
						fmtout.putuchars = put_uchars;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	va_start (ap, fmt);
 | 
						va_start (ap, fmt);
 | 
				
			||||||
	n = hawk_bfmt_outv (&fmtout, fmt, ap);
 | 
						n = hawk_bfmt_outv (&fmtout, fmt, ap);
 | 
				
			||||||
 | 
				
			|||||||
@ -7,26 +7,30 @@ int main ()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	hawk_t* hawk = HAWK_NULL;
 | 
						hawk_t* hawk = HAWK_NULL;
 | 
				
			||||||
	hawk_uch_t ufmt1[] = { '%', '0', '5', 'd', ' ', '%', '-', '9', 'h', 's', '\0' };
 | 
						hawk_uch_t ufmt1[] = { '%', '0', '5', 'd', ' ', '%', '-', '9', 'h', 's', '\0' };
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
	hawk_uch_t ufmt2[] = { '%', '0', '5', 'd', ' ', '%', '-', '9', 'h', 's', ' ', '%','O','\0' };
 | 
						hawk_uch_t ufmt2[] = { '%', '0', '5', 'd', ' ', '%', '-', '9', 'h', 's', ' ', '%','O','\0' };
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hawk = hawk_openstd(0, HAWK_NULL, HAWK_NULL);
 | 
						hawk = hawk_openstd(0, HAWK_NULL);
 | 
				
			||||||
	if (!hawk)
 | 
						if (!hawk)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		fprintf (stderr, "Unable to open hawk\n");
 | 
							fprintf (stderr, "Unable to open hawk\n");
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hawk_seterrbfmt (hawk, HAWK_EINVAL, "%d %ld %s %hs", 10, 20L, "hawk", "hawk");
 | 
						hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_EINVAL, "%d %ld %s %hs", 10, 20L, "hawk", "hawk");
 | 
				
			||||||
	T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "10 20 hawk hawk") == 0, "hawk seterrbfmt #1");
 | 
						T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "10 20 hawk hawk") == 0, "hawk seterrbfmt #1");
 | 
				
			||||||
	hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
						hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hawk_seterrufmt (hawk, HAWK_EINVAL, ufmt1, 9923, "hawk");
 | 
						hawk_seterrufmt (hawk, HAWK_NULL, HAWK_EINVAL, ufmt1, 9923, "hawk");
 | 
				
			||||||
	T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "09923 hawk      ") == 0, "hawk seterrufmt #1");
 | 
						T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "09923 hawk     ") == 0, "hawk seterrufmt #1");
 | 
				
			||||||
	hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
						hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hawk_seterrufmt (hawk, HAWK_EINVAL, ufmt2, 9923, "hawk", HAWK_SMPTR_TO_OOP(0x12345678));
 | 
					#if 0 
 | 
				
			||||||
 | 
						hawk_seterrufmt (hawk, HAWK_NULL, HAWK_EINVAL, ufmt2, 9923, "hawk", HAWK_SMPTR_TO_OOP(0x12345678));
 | 
				
			||||||
	T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "09923 hawk       #\\p12345678") == 0, "hawk seterrufmt #1");
 | 
						T_ASSERT1 (hawk_comp_oocstr_bcstr(hawk_geterrmsg(hawk), "09923 hawk       #\\p12345678") == 0, "hawk seterrufmt #1");
 | 
				
			||||||
	hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
						hawk_logbfmt (hawk, HAWK_LOG_STDERR, "[%js]\n", hawk_geterrmsg(hawk));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hawk_close (hawk);
 | 
						hawk_close (hawk);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -57,15 +57,57 @@ oops:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int test2 (void)
 | 
					static int test2 (void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	hawk_uch_t src[8] = {'a','b','c','d','e','f','g','h'};
 | 
						const hawk_uch_t src[8] = {'a','b','c','d','e','f','g','h'};
 | 
				
			||||||
 | 
						const hawk_uch_t sxx[6] = {'0','1','2', '\0'};
 | 
				
			||||||
	hawk_uch_t dst[6] = {'0','1','2','3','4','5'};
 | 
						hawk_uch_t dst[6] = {'0','1','2','3','4','5'};
 | 
				
			||||||
        hawk_oow_t q, i;
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
        q = hawk_copy_uchars_to_ucstr(dst, HAWK_COUNTOF(dst), src, 7);
 | 
						hawk_oow_t q, i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = hawk_copy_uchars_to_ucstr(dst, HAWK_COUNTOF(dst), src, 7);
 | 
				
			||||||
	T_ASSERT0 (q == HAWK_COUNTOF(dst) - 1);
 | 
						T_ASSERT0 (q == HAWK_COUNTOF(dst) - 1);
 | 
				
			||||||
	T_ASSERT0 (dst[HAWK_COUNTOF(dst) - 1] == '\0');
 | 
						T_ASSERT0 (dst[HAWK_COUNTOF(dst) - 1] == '\0');
 | 
				
			||||||
	for (i = 0; i < q; i++) T_ASSERT0 (dst[i] == src[i]);
 | 
						for (i = 0; i < q; i++) T_ASSERT0 (dst[i] == src[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = hawk_copy_ucstr_to_uchars(dst, HAWK_COUNTOF(dst), sxx);
 | 
				
			||||||
 | 
						T_ASSERT0 (q == 3);
 | 
				
			||||||
 | 
						T_ASSERT0 (dst[q] == src[q]);
 | 
				
			||||||
 | 
						for (i = 0; i < q; i++) T_ASSERT0 (dst[i] == sxx[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					oops:
 | 
				
			||||||
 | 
						return -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hawk_bch_t* subst (hawk_bch_t* buf, hawk_oow_t bsz, const hawk_bcs_t* ident, void* ctx)
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
						if (hawk_comp_bchars_bcstr(ident->ptr, ident->len, "USER") == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return buf + ((buf == HAWK_SUBST_NOBUF)? 3: hawk_copy_bcstr_to_bchars(buf, bsz, "sam"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (hawk_comp_bchars_bcstr(ident->ptr, ident->len, "GROUP") == 0)
 | 
				
			||||||
 | 
							return buf + ((buf == HAWK_SUBST_NOBUF)? 6: hawk_copy_bcstr_to_bchars(buf, bsz, "coders"));
 | 
				
			||||||
 | 
						return buf; 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int test3 (void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hawk_bch_t buf[25], * ptr;
 | 
				
			||||||
 | 
						hawk_oow_t n;
 | 
				
			||||||
 | 
						n = hawk_subst_for_bcstr_to_bcstr (buf, HAWK_COUNTOF(buf), "user=${USER},group=${GROUP}", subst, HAWK_NULL);
 | 
				
			||||||
 | 
						T_ASSERT0 (n == 21);
 | 
				
			||||||
 | 
						T_ASSERT0 (hawk_count_bcstr(buf) == 21);
 | 
				
			||||||
 | 
						T_ASSERT0 (hawk_comp_bcstr(buf, "user=sam,group=coders", 0) == 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n = hawk_subst_for_bcstr_to_bcstr(HAWK_SUBST_NOBUF, 0, "USERNAME=${USER},GROUPNAME=${GROUP}", subst, HAWK_NULL);
 | 
				
			||||||
 | 
						T_ASSERT0 (n == 29);
 | 
				
			||||||
 | 
						ptr = malloc(n + 1);
 | 
				
			||||||
 | 
						n = hawk_subst_for_bcstr_to_bcstr(ptr, n + 1, "USERNAME=${USER},GROUPNAME=${GROUP}", subst, HAWK_NULL);
 | 
				
			||||||
 | 
						T_ASSERT0 (n == 29);
 | 
				
			||||||
 | 
						T_ASSERT0 (hawk_count_bcstr(ptr) == 29);
 | 
				
			||||||
 | 
						T_ASSERT0 (hawk_comp_bcstr(ptr, "USERNAME=sam,GROUPNAME=coders", 0) == 0);
 | 
				
			||||||
 | 
						free (ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
oops:
 | 
					oops:
 | 
				
			||||||
@ -76,6 +118,7 @@ int main ()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	if (test1() <= -1) goto oops;
 | 
						if (test1() <= -1) goto oops;
 | 
				
			||||||
	if (test2() <= -1) goto oops;
 | 
						if (test2() <= -1) goto oops;
 | 
				
			||||||
 | 
						if (test3() <= -1) goto oops;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
oops:
 | 
					oops:
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user