qse/ase/test/net/AwkForm.cs

389 lines
9.7 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}