| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | #include <xp/awk/awk.h>
 | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __STAND_ALONE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static xp_ssize_t process_source (int cmd, void* arg, xp_char_t* data, xp_size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	wchar_t c; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (cmd) { | 
					
						
							|  |  |  | 	case XP_AWK_IO_OPEN: | 
					
						
							|  |  |  | 	case XP_AWK_IO_CLOSE: | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case XP_AWK_IO_DATA: | 
					
						
							|  |  |  | 		if (size < 0) return -1; | 
					
						
							|  |  |  | 		c = fgetwc (stdin); | 
					
						
							|  |  |  | 		if (c == XP_CHAR_EOF) return 0; | 
					
						
							|  |  |  | 		*data = c; | 
					
						
							|  |  |  | 		return 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | #include <xp/bas/stdio.h>
 | 
					
						
							|  |  |  | #include <xp/bas/sio.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static xp_ssize_t process_source (int cmd, void* arg, xp_char_t* data, xp_size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	xp_ssize_t n; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (cmd) { | 
					
						
							|  |  |  | 	case XP_AWK_IO_OPEN: | 
					
						
							|  |  |  | 	case XP_AWK_IO_CLOSE: | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case XP_AWK_IO_DATA: | 
					
						
							|  |  |  | 		if (size < 0) return -1; | 
					
						
							|  |  |  | 		n = xp_sio_getc (xp_sio_in, data); | 
					
						
							|  |  |  | 		if (n == 0) return 0; | 
					
						
							|  |  |  | 		if (n != 1) return -1; | 
					
						
							|  |  |  | 		return n; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-30 17:50:38 +00:00
										 |  |  | #ifdef __linux
 | 
					
						
							|  |  |  | #include <mcheck.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | int xp_main (int argc, xp_char_t* argv[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	xp_awk_t awk; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-30 17:50:38 +00:00
										 |  |  | #ifdef __linux
 | 
					
						
							|  |  |  | 	mtrace (); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | #if 0
 | 
					
						
							|  |  |  | 	if (argc != 2) { | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 		xp_printf (XP_TEXT("Usage: %s file\n"), argv[0]); | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (xp_awk_open(&awk) == XP_NULL) { | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 		xp_printf (XP_TEXT("Error: cannot open awk\n")); | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-09 16:03:56 +00:00
										 |  |  | 	if (xp_awk_attsrc(&awk, process_source, XP_NULL) == -1) { | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 		xp_awk_close (&awk); | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 		xp_printf (XP_TEXT("error: cannot attach source\n")); | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-02-05 16:00:33 +00:00
										 |  |  | awk.opt.parse = XP_AWK_EXPLICIT | XP_AWK_UNIQUE | XP_AWK_SHADING | XP_AWK_IMPLICIT; | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 	if (xp_awk_parse(&awk) == -1) { | 
					
						
							| 
									
										
										
										
											2006-01-31 16:57:45 +00:00
										 |  |  | 		xp_printf ( | 
					
						
							|  |  |  | 			XP_TEXT("error: cannot parse program - [%d] %s\n"),  | 
					
						
							|  |  |  | 			xp_awk_geterrnum(&awk), xp_awk_geterrstr(&awk)); | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 		xp_awk_close (&awk); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	xp_awk_close (&awk); | 
					
						
							| 
									
										
										
										
											2006-01-30 17:50:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __linux
 | 
					
						
							|  |  |  | 	muntrace (); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-11-14 15:23:54 +00:00
										 |  |  | 	return 0; | 
					
						
							|  |  |  | } |