52 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .title Embedding AWK
 | |
| 
 | |
| To embed the awk interpreter to an application, the developer should provide the following routines.
 | |
| 
 | |
|  * System functions including memory management
 | |
|  * Source code I/O functions
 | |
|  * I/O functions to interface with the console, files, and pipes.
 | |
| 
 | |
| ase_awk_open creates an awk object and requires a pointer to a structure holding system functions. The structure is described in ase_awk_prmfns_t.
 | |
| 
 | |
| {{{
 | |
| struct ase_awk_prmfns_t
 | |
| {
 | |
| 	/* memory */
 | |
| 	void* (*malloc) (ase_size_t n, void* custom_data);
 | |
| 	void* (*realloc) (void* ptr, ase_size_t n, void* custom_data);
 | |
| 	void  (*free) (void* ptr, void* custom_data);
 | |
| 
 | |
| 	/* thread lock */
 | |
| 	ase_awk_lk_t lock;
 | |
| 	ase_awk_lk_t unlock;
 | |
| 
 | |
| 	/* character class */
 | |
| 	ase_bool_t (*is_upper)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_lower)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_alpha)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_digit)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_xdigit) (ase_cint_t c);
 | |
| 	ase_bool_t (*is_alnum)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_space)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_print)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_graph)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_cntrl)  (ase_cint_t c);
 | |
| 	ase_bool_t (*is_punct)  (ase_cint_t c);
 | |
| 	ase_cint_t (*to_upper)  (ase_cint_t c);
 | |
| 	ase_cint_t (*to_lower)  (ase_cint_t c);
 | |
| 
 | |
| 	/* utilities */
 | |
| 	void* (*memcpy) (void* dst, const void* src, ase_size_t n);
 | |
| 	void* (*memset) (void* dst, int val, ase_size_t n);
 | |
| 	ase_real_t (*pow) (ase_real_t x, ase_real_t y);
 | |
| 
 | |
| 	int (*sprintf) (ase_char_t* buf, ase_size_t size, const ase_char_t* fmt, ...);
 | |
| 	void (*aprintf) (const ase_char_t* fmt, ...); /* assertion */
 | |
| 	void (*dprintf) (const ase_char_t* fmt, ...); /* debug */
 | |
| 	void (*abort) (void);
 | |
| 
 | |
| 	void* custom_data;
 | |
| };
 | |
| }}}
 | |
| 
 |