389 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			389 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | ||
| 
 | ||
| using System.Collections.Generic;
 | ||
| 
 | ||
| using System.ComponentModel;
 | ||
| 
 | ||
| using System.Data;
 | ||
| 
 | ||
| using System.Drawing;
 | ||
| 
 | ||
| using System.Text;
 | ||
| 
 | ||
| using System.Windows.Forms;
 | ||
| 
 | ||
| using System.IO;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| namespace ase.net
 | ||
| 
 | ||
| {
 | ||
| 
 | ||
| 	public partial class AwkForm : Form
 | ||
| 
 | ||
| 	{
 | ||
| 
 | ||
| 		protected System.Threading.Thread thr = null;
 | ||
| 
 | ||
| 		protected Awk awk = null;
 | ||
| 
 | ||
| 			
 | ||
| 
 | ||
| 		public AwkForm()
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			InitializeComponent();
 | ||
| 
 | ||
| 			StartingRunHandlers += StartingRun;
 | ||
| 
 | ||
| 			EndingRunHandlers += EndingRun;
 | ||
| 
 | ||
| 			ShowMessageHandlers += ShowMessage;
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		public delegate void StartingRunHandler();
 | ||
| 
 | ||
| 		public delegate void EndingRunHandler();
 | ||
| 
 | ||
| 		public delegate void ShowMessageHandler(string msg, string cap);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		public event StartingRunHandler StartingRunHandlers;
 | ||
| 
 | ||
| 		public event EndingRunHandler EndingRunHandlers;
 | ||
| 
 | ||
| 		public event ShowMessageHandler ShowMessageHandlers;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		private void StartingRun()
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			tbxSourceOutput.Text = "";
 | ||
| 
 | ||
| 			tbxConsoleOutput.Text = "";
 | ||
| 
 | ||
| 			btnRun.Text = "Stop";
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		private void EndingRun()
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			btnRun.Text = "Run";
 | ||
| 
 | ||
| 			awk = null;
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		private void ShowMessage(string msg, string cap)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			MessageBox.Show(msg, cap, MessageBoxButtons.OK, MessageBoxIcon.Error);
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		public void OnAwkRunStart(ASE.Net.Awk awk)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			System.Windows.Forms.MessageBox.Show ("OnAwkRunStart");
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 		public void OnAwkRunEnd(ASE.Net.Awk awk)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			/*if (awk.ErrorMessage.Length > 0)
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				System.Windows.Forms.MessageBox.Show("Ended with error: " + awk.ErrorMessage);
 | ||
| 
 | ||
| 			}
 | ||
| 
 | ||
| 			else
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				System.Windows.Forms.MessageBox.Show("Ended Successfully");
 | ||
| 
 | ||
| 			}*/
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		public void OnAwkReturn (ASE.Net.Awk awk)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			System.Windows.Forms.MessageBox.Show("OnAwkReturn");
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 		public void OnAwkStatement (ASE.Net.Awk awk)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			System.Windows.Forms.MessageBox.Show("OnAwkStatement");
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 		
 | ||
| 
 | ||
| 		private void btnRun_Click(object sender, EventArgs e)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			if (awk == null)
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				thr = new System.Threading.Thread(
 | ||
| 
 | ||
| 					new System.Threading.ParameterizedThreadStart(AwkService));
 | ||
| 
 | ||
| 				thr.Start(new object[] { this, cbxEntryPoint.Text });
 | ||
| 
 | ||
| 			}
 | ||
| 
 | ||
| 			else
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				awk.Stop();
 | ||
| 
 | ||
| 			}
 | ||
| 
 | ||
| 	
 | ||
| 
 | ||
| 			//AwkService(new object[] { null, cbxEntryPoint.Text });
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		private void AwkService (object arg)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			object[] argarr = (object[])arg;
 | ||
| 
 | ||
| 			System.ComponentModel.ISynchronizeInvoke si = (System.ComponentModel.ISynchronizeInvoke)argarr[0];
 | ||
| 
 | ||
| 			string entryPoint = (string)argarr[1];
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 			//using (Awk awk = new Awk())
 | ||
| 
 | ||
| 			//for (int x = 0; x < 100000; x++)
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				awk = new Awk(si);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 				if (si != null && si.InvokeRequired)
 | ||
| 
 | ||
| 					si.Invoke(StartingRunHandlers, null);
 | ||
| 
 | ||
| 				else StartingRun();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 				//awk.SetWord("BEGIN", "시작");
 | ||
| 
 | ||
| 				//awk.SetErrorString(ASE.Net.Awk.ERROR.LBRACE, "'%.*s' 자리에 왼쪽 괄호가 필요합니다");
 | ||
| 
 | ||
| 				//awk.SetMaxDepth(ASE.Net.Awk.DEPTH.BLOCK_RUN, 20);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 				//awk.OnRunStart += OnAwkRunStart;
 | ||
| 
 | ||
| 				//awk.OnRunEnd += OnAwkRunEnd;
 | ||
| 
 | ||
| 				//awk.OnRunReturn += OnAwkReturn;
 | ||
| 
 | ||
| 				//awk.OnRunStatement += OnAwkStatement;
 | ||
| 
 | ||
| 				
 | ||
| 
 | ||
| 				if (chkStripSpaces.Checked)
 | ||
| 
 | ||
| 				{
 | ||
| 
 | ||
| 					awk.Option = awk.Option | ASE.Net.Awk.OPTION.STRIPSPACES;
 | ||
| 
 | ||
| 				}
 | ||
| 
 | ||
| 				else
 | ||
| 
 | ||
| 				{
 | ||
| 
 | ||
| 					awk.Option = awk.Option & ~ASE.Net.Awk.OPTION.STRIPSPACES;
 | ||
| 
 | ||
| 				}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 				if (!awk.Parse(tbxSourceInput, tbxSourceOutput))
 | ||
| 
 | ||
| 				{
 | ||
| 
 | ||
| 					string msg;
 | ||
| 
 | ||
| 					
 | ||
| 
 | ||
| 					if (awk.ErrorLine == 0) msg = awk.ErrorMessage;
 | ||
| 
 | ||
| 					else msg = awk.ErrorMessage + " at line " + awk.ErrorLine;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 					if (si != null && si.InvokeRequired)
 | ||
| 
 | ||
| 						si.Invoke(ShowMessageHandlers, new object[] {msg, "Parse Error"});
 | ||
| 
 | ||
| 					else ShowMessage(msg, "Parse Error");
 | ||
| 
 | ||
| 				}
 | ||
| 
 | ||
| 				else
 | ||
| 
 | ||
| 				{
 | ||
| 
 | ||
| 					if (chkPassArgumentsToEntryPoint.Checked)
 | ||
| 
 | ||
| 						awk.Option = awk.Option | ASE.Net.Awk.OPTION.ARGSTOMAIN;
 | ||
| 
 | ||
| 					else
 | ||
| 
 | ||
| 						awk.Option = awk.Option & ~ASE.Net.Awk.OPTION.ARGSTOMAIN;
 | ||
| 
 | ||
| 					
 | ||
| 
 | ||
| 					int nargs = lbxArguments.Items.Count;
 | ||
| 
 | ||
| 					string[] args = null;
 | ||
| 
 | ||
| 					if (nargs > 0)
 | ||
| 
 | ||
| 					{
 | ||
| 
 | ||
| 						args = new string[nargs];
 | ||
| 
 | ||
| 						for (int i = 0; i < nargs; i++)
 | ||
| 
 | ||
| 							args[i] = lbxArguments.Items[i].ToString();
 | ||
| 
 | ||
| 					}
 | ||
| 
 | ||
| 					
 | ||
| 
 | ||
| 					bool n = awk.Run(tbxConsoleInput, tbxConsoleOutput, entryPoint, args);
 | ||
| 
 | ||
| 					if (!n)
 | ||
| 
 | ||
| 					{
 | ||
| 
 | ||
| 						string msg;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 						if (awk.ErrorLine == 0) msg = awk.ErrorMessage;
 | ||
| 
 | ||
| 						else msg = awk.ErrorMessage + " at line " + awk.ErrorLine;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 						if (si != null && si.InvokeRequired)
 | ||
| 
 | ||
| 							si.Invoke(ShowMessageHandlers, new object[] {msg, "Run Error"});
 | ||
| 
 | ||
| 						else ShowMessage(msg, "Run Error");
 | ||
| 
 | ||
| 					}
 | ||
| 
 | ||
| 				}
 | ||
| 
 | ||
| 				
 | ||
| 
 | ||
| 				awk.Close();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 				if (si != null && si.InvokeRequired)
 | ||
| 
 | ||
| 					si.Invoke(EndingRunHandlers, null);
 | ||
| 
 | ||
| 				else EndingRun();
 | ||
| 
 | ||
| 				//awk.Dispose(); 		
 | ||
| 
 | ||
| 			}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 			//System.GC.Collect();
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 	
 | ||
| 
 | ||
| 		private void btnAddArgument_Click(object sender, EventArgs e)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			if (tbxArgument.Text.Length > 0)
 | ||
| 
 | ||
| 			{
 | ||
| 
 | ||
| 				lbxArguments.Items.Add(tbxArgument.Text);
 | ||
| 
 | ||
| 				tbxArgument.Text = "";
 | ||
| 
 | ||
| 				tbxArgument.Focus();
 | ||
| 
 | ||
| 			}
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 		private void btnClearAllArguments_Click(object sender, EventArgs e)
 | ||
| 
 | ||
| 		{
 | ||
| 
 | ||
| 			lbxArguments.Items.Clear();
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 	}
 | ||
| 
 | ||
| }
 | ||
| 
 |