*** empty log message ***

This commit is contained in:
hyung-hwan 2007-04-21 12:40:44 +00:00
parent dac7c6d222
commit c9d7ebfd1c
6 changed files with 248 additions and 77 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.348 2007-04-15 15:26:57 bacon Exp $ * $Id: run.c,v 1.349 2007-04-21 12:40:44 bacon Exp $
* *
* {License} * {License}
*/ */
@ -1177,8 +1177,7 @@ static int run_main (
return -1; return -1;
} }
if (runarg == ASE_NULL) nrunargs = 0; if (__build_runarg (run, runarg, &nrunargs) == -1)
else if (__build_runarg (run, runarg, &nrunargs) == -1)
{ {
/* it can simply restore the top of the stack this way /* it can simply restore the top of the stack this way
* because the values pused onto the stack so far are * because the values pused onto the stack so far are
@ -1212,7 +1211,7 @@ static int run_main (
if (!(run->awk->option & ASE_AWK_ARGSTOMAIN)) if (!(run->awk->option & ASE_AWK_ARGSTOMAIN))
{ {
/* if the option is not set, the arguments /* if the option is not set, the arguments
* arenot passed to the main function as * are not passed to the main function as
* parameters */ * parameters */
nrunargs = 0; nrunargs = 0;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.cpp,v 1.34 2007-04-15 15:26:57 bacon Exp $ * $Id: Awk.cpp,v 1.35 2007-04-21 12:40:44 bacon Exp $
* *
* {License} * {License}
*/ */
@ -748,9 +748,11 @@ static ase_ssize_t __process_extio (
return -1; return -1;
} }
HRESULT CAwk::Run (VARIANT_BOOL* ret) HRESULT CAwk::Run (VARIANT argarray, VARIANT_BOOL* ret)
{ {
const ase_char_t* entry = NULL; const ase_char_t* entry = NULL;
ase_awk_runarg_t* runarg;
long nrunargs;
if (handle == NULL) if (handle == NULL)
{ {
@ -772,7 +774,79 @@ HRESULT CAwk::Run (VARIANT_BOOL* ret)
if (entry_point != NULL && if (entry_point != NULL &&
SysStringLen(entry_point) > 0) entry = entry_point; SysStringLen(entry_point) > 0) entry = entry_point;
if (ase_awk_run (handle, entry, &runios, NULL, NULL, this) == -1) if (argarray.vt == VT_EMPTY || argarray.vt == VT_NULL)
{
/* no run-time argument specified */
runarg = NULL;
}
else if (argarray.vt == (VT_ARRAY|VT_BSTR))
{
SAFEARRAY* sa = argarray.parray;
UINT dim = SafeArrayGetDim (sa);
if (dim != 1)
{
/* arguments should not be multi-dimensional */
errnum = ASE_AWK_EINTERN;
errlin = 0;
_tcscpy (errmsg, _T("multi-dimensional run-time argument array not allowed"));
*ret = VARIANT_FALSE;
return S_OK;
}
long lbound, ubound;
SafeArrayGetLBound (sa, 1, &lbound);
SafeArrayGetUBound (sa, 1, &ubound);
nrunargs = ubound - lbound + 1;
runarg = (ase_awk_runarg_t*) malloc (sizeof(*runarg) * (nrunargs+1));
if (runarg == NULL)
{
errnum = ASE_AWK_ENOMEM;
errlin = 0;
ase_strxcpy (
errmsg, ASE_COUNTOF(errmsg),
ase_awk_geterrstr(NULL, errnum));
*ret = VARIANT_FALSE;
return S_OK;
}
for (long i = lbound, j = 0; i <= ubound; i++, j++)
{
BSTR bstr;
HRESULT hr = SafeArrayGetElement (sa, &i, (void**)&bstr);
if (FAILED(hr))
{
errnum = ASE_AWK_EINTERN;
errlin = 0;
_tcscpy (errmsg, _T("cannot get run-time argument array element"));
for (long i = 0; i < j; i++) SysFreeString (runarg[i].ptr);
free (runarg);
*ret = VARIANT_FALSE;
return S_OK;
}
runarg[j].ptr = bstr;
runarg[j].len = SysStringLen (bstr);
}
runarg[j].ptr = NULL;
runarg[j].len = 0;
}
else
{
errnum = ASE_AWK_EINTERN;
errlin = 0;
_tcscpy (errmsg, _T("invalid arguments"));
*ret = VARIANT_FALSE;
return S_OK;
}
if (ase_awk_run (handle, entry, &runios, NULL, runarg, this) == -1)
{ {
const ase_char_t* msg; const ase_char_t* msg;
@ -780,11 +854,25 @@ HRESULT CAwk::Run (VARIANT_BOOL* ret)
ase_strxcpy (errmsg, ASE_COUNTOF(errmsg), msg); ase_strxcpy (errmsg, ASE_COUNTOF(errmsg), msg);
DBGOUT (_T("cannot run the program")); DBGOUT (_T("cannot run the program"));
if (runarg != NULL)
{
for (long j = 0; j < nrunargs; j++) SysFreeString (runarg[j].ptr);
free (runarg);
}
*ret = VARIANT_FALSE; *ret = VARIANT_FALSE;
return S_OK; return S_OK;
} }
else DBGOUT (_T("run the program successfully")); else DBGOUT (_T("run the program successfully"));
if (runarg != NULL)
{
for (long j = 0; j < nrunargs; j++) SysFreeString (runarg[j].ptr);
free (runarg);
}
*ret = VARIANT_TRUE; *ret = VARIANT_TRUE;
return S_OK; return S_OK;
} }
@ -1103,14 +1191,14 @@ STDMETHODIMP CAwk::put_UseCrlf(VARIANT_BOOL newVal)
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::get_ArgsToMain(VARIANT_BOOL *pVal) STDMETHODIMP CAwk::get_ArgumentsToEntryPoint(VARIANT_BOOL *pVal)
{ {
if (handle != NULL) option = ase_awk_getoption (handle); if (handle != NULL) option = ase_awk_getoption (handle);
*pVal = (option & ASE_AWK_ARGSTOMAIN) == 1; *pVal = (option & ASE_AWK_ARGSTOMAIN) == 1;
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::put_ArgsToMain(VARIANT_BOOL newVal) STDMETHODIMP CAwk::put_ArgumentsToEntryPoint(VARIANT_BOOL newVal)
{ {
if (newVal) option = option | ASE_AWK_ARGSTOMAIN; if (newVal) option = option | ASE_AWK_ARGSTOMAIN;
else option = option & ~ASE_AWK_ARGSTOMAIN; else option = option & ~ASE_AWK_ARGSTOMAIN;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.h,v 1.21 2007-04-15 15:26:58 bacon Exp $ * $Id: Awk.h,v 1.22 2007-04-21 12:40:44 bacon Exp $
* *
* {License} * {License}
*/ */
@ -124,8 +124,8 @@ public:
STDMETHOD(put_MaxDepthForBlockRun)(/*[in]*/ int newVal); STDMETHOD(put_MaxDepthForBlockRun)(/*[in]*/ int newVal);
STDMETHOD(get_MaxDepthForBlockParse)(/*[out, retval]*/ int *pVal); STDMETHOD(get_MaxDepthForBlockParse)(/*[out, retval]*/ int *pVal);
STDMETHOD(put_MaxDepthForBlockParse)(/*[in]*/ int newVal); STDMETHOD(put_MaxDepthForBlockParse)(/*[in]*/ int newVal);
STDMETHOD(get_ArgsToMain)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_ArgumentsToEntryPoint)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_ArgsToMain)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_ArgumentsToEntryPoint)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_UseCrlf)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_UseCrlf)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_UseCrlf)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_UseCrlf)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_Nextofile)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_Nextofile)(/*[out, retval]*/ VARIANT_BOOL *pVal);
@ -156,6 +156,7 @@ public:
STDMETHOD(get_ErrorLine)(/*[out, retval]*/ int *pVal); STDMETHOD(get_ErrorLine)(/*[out, retval]*/ int *pVal);
STDMETHOD(get_ErrorCode)(/*[out, retval]*/ int *pVal); STDMETHOD(get_ErrorCode)(/*[out, retval]*/ int *pVal);
HRESULT __stdcall DeleteFunction ( HRESULT __stdcall DeleteFunction (
/*[in]*/ BSTR name, /*[out, retval]*/ VARIANT_BOOL* ret); /*[in]*/ BSTR name, /*[out, retval]*/ VARIANT_BOOL* ret);
HRESULT __stdcall AddFunction ( HRESULT __stdcall AddFunction (
@ -163,7 +164,8 @@ public:
/*[in]*/ int maxArgs, /*[out, retval]*/ VARIANT_BOOL* ret); /*[in]*/ int maxArgs, /*[out, retval]*/ VARIANT_BOOL* ret);
HRESULT __stdcall Parse (/*[out, retval]*/ VARIANT_BOOL* ret); HRESULT __stdcall Parse (/*[out, retval]*/ VARIANT_BOOL* ret);
HRESULT __stdcall Run (/*[out, retval]*/ VARIANT_BOOL* ret); HRESULT __stdcall Run (
/*[in]*/ VARIANT argarray, /*[out, retval]*/ VARIANT_BOOL* ret);
}; };
#endif #endif

View File

@ -1,5 +1,5 @@
/* /*
* $Id: asecom.idl,v 1.5 2007-04-15 15:26:58 bacon Exp $ * $Id: asecom.idl,v 1.6 2007-04-21 12:40:44 bacon Exp $
*/ */
import "oaidl.idl"; import "oaidl.idl";
@ -19,7 +19,7 @@ interface IAwk : IDispatch
HRESULT Parse([out,retval] VARIANT_BOOL* ret); HRESULT Parse([out,retval] VARIANT_BOOL* ret);
[id(2), helpstring("method Run")] [id(2), helpstring("method Run")]
HRESULT Run([out,retval] VARIANT_BOOL* ret); HRESULT Run([in] VARIANT argarray, [out,retval] VARIANT_BOOL* ret);
[id(3), helpstring("method AddFunction")] [id(3), helpstring("method AddFunction")]
HRESULT AddFunction([in] BSTR name, [in] int minArgs, [in] int maxArgs, [out,retval] VARIANT_BOOL* ret); HRESULT AddFunction([in] BSTR name, [in] int minArgs, [in] int maxArgs, [out,retval] VARIANT_BOOL* ret);
@ -101,10 +101,10 @@ interface IAwk : IDispatch
[propput, id(20), helpstring("property UseCrlf")] [propput, id(20), helpstring("property UseCrlf")]
HRESULT UseCrlf([in] VARIANT_BOOL newVal); HRESULT UseCrlf([in] VARIANT_BOOL newVal);
[propget, id(21), helpstring("property ArgsToMain")] [propget, id(21), helpstring("property ArgumentsToEntryPoint")]
HRESULT ArgsToMain([out,retval] VARIANT_BOOL *pVal); HRESULT ArgumentsToEntryPoint([out,retval] VARIANT_BOOL *pVal);
[propput, id(21), helpstring("property ArgsToMain")] [propput, id(21), helpstring("property ArgumentsToEntryPoint")]
HRESULT ArgsToMain([in] VARIANT_BOOL newVal); HRESULT ArgumentsToEntryPoint([in] VARIANT_BOOL newVal);
[propget, id(22), helpstring("property MaxDepthForBlockParse")] [propget, id(22), helpstring("property MaxDepthForBlockParse")]
HRESULT MaxDepthForBlockParse([out,retval] int *pVal); HRESULT MaxDepthForBlockParse([out,retval] int *pVal);

View File

@ -1,22 +1,53 @@
VERSION 5.00 VERSION 5.00
Begin VB.Form AwkForm Begin VB.Form AwkForm
Caption = "ASE.COM.AWK" Caption = "ASE.COM.AWK"
ClientHeight = 7635 ClientHeight = 8100
ClientLeft = 60 ClientLeft = 60
ClientTop = 345 ClientTop = 345
ClientWidth = 10335 ClientWidth = 12900
LinkTopic = "AwkForm" LinkTopic = "AwkForm"
ScaleHeight = 7635 MaxButton = 0 'False
ScaleWidth = 10335 ScaleHeight = 8100
ScaleWidth = 12900
StartUpPosition = 3 'Windows Default StartUpPosition = 3 'Windows Default
Begin VB.CommandButton btnClearAll
Caption = "Clear All"
Height = 375
Left = 240
TabIndex = 14
Top = 4560
Width = 2295
End
Begin VB.CommandButton btnAddArgument
Caption = "Add"
Height = 375
Left = 1920
TabIndex = 12
Top = 4080
Width = 615
End
Begin VB.TextBox txtArgument
Height = 375
Left = 240
TabIndex = 11
Top = 4080
Width = 1575
End
Begin VB.ListBox lstArguments
Height = 2595
Left = 240
TabIndex = 10
Top = 1320
Width = 2295
End
Begin VB.ComboBox EntryPoint Begin VB.ComboBox EntryPoint
Height = 315 Height = 315
ItemData = "AwkForm.frx":0000 ItemData = "AwkForm.frx":0000
Left = 1080 Left = 240
List = "AwkForm.frx":0007 List = "AwkForm.frx":0007
TabIndex = 9 TabIndex = 9
Top = 120 Top = 480
Width = 3495 Width = 2295
End End
Begin VB.TextBox ConsoleIn Begin VB.TextBox ConsoleIn
BeginProperty Font BeginProperty Font
@ -28,12 +59,12 @@ Begin VB.Form AwkForm
Italic = 0 'False Italic = 0 'False
Strikethrough = 0 'False Strikethrough = 0 'False
EndProperty EndProperty
Height = 2895 Height = 3735
Left = 120 Left = 2760
MultiLine = -1 'True MultiLine = -1 'True
ScrollBars = 3 'Both ScrollBars = 3 'Both
TabIndex = 2 TabIndex = 2
Top = 3960 Top = 4320
Width = 5055 Width = 5055
End End
Begin VB.TextBox SourceIn Begin VB.TextBox SourceIn
@ -46,12 +77,12 @@ Begin VB.Form AwkForm
Italic = 0 'False Italic = 0 'False
Strikethrough = 0 'False Strikethrough = 0 'False
EndProperty EndProperty
Height = 2775 Height = 3615
Left = 120 Left = 2760
MultiLine = -1 'True MultiLine = -1 'True
ScrollBars = 3 'Both ScrollBars = 3 'Both
TabIndex = 0 TabIndex = 0
Top = 840 Top = 360
Width = 5055 Width = 5055
End End
Begin VB.TextBox SourceOut Begin VB.TextBox SourceOut
@ -64,21 +95,21 @@ Begin VB.Form AwkForm
Italic = 0 'False Italic = 0 'False
Strikethrough = 0 'False Strikethrough = 0 'False
EndProperty EndProperty
Height = 2775 Height = 3615
Left = 5280 Left = 7920
Locked = -1 'True Locked = -1 'True
MultiLine = -1 'True MultiLine = -1 'True
ScrollBars = 3 'Both ScrollBars = 3 'Both
TabIndex = 1 TabIndex = 1
Top = 840 Top = 360
Width = 4935 Width = 4935
End End
Begin VB.CommandButton Execute Begin VB.CommandButton btnExecute
Caption = "Execute" Caption = "Execute"
Height = 375 Height = 375
Left = 9000 Left = 1440
TabIndex = 5 TabIndex = 5
Top = 7080 Top = 7680
Width = 1215 Width = 1215
End End
Begin VB.TextBox ConsoleOut Begin VB.TextBox ConsoleOut
@ -91,52 +122,68 @@ Begin VB.Form AwkForm
Italic = 0 'False Italic = 0 'False
Strikethrough = 0 'False Strikethrough = 0 'False
EndProperty EndProperty
Height = 2895 Height = 3735
Left = 5280 Left = 7920
MultiLine = -1 'True MultiLine = -1 'True
ScrollBars = 3 'Both ScrollBars = 3 'Both
TabIndex = 3 TabIndex = 3
Top = 3960 Top = 4320
Width = 4935 Width = 4935
End End
Begin VB.Label Label5 Begin VB.Frame Frame1
Caption = "Entry Point:" Caption = "Arguments"
Height = 255 Height = 4335
Left = 120 Left = 120
TabIndex = 10 TabIndex = 13
Top = 1080
Width = 2535
Begin VB.CheckBox chkPassToEntryPoint
Caption = "Pass To Entry Point"
Height = 255
Left = 360
TabIndex = 16
Top = 3960
Width = 1815
End
End
Begin VB.Frame Frame2
Caption = "Entry Point"
Height = 855
Left = 120
TabIndex = 15
Top = 120 Top = 120
Width = 1455 Width = 2535
End End
Begin VB.Label Label4 Begin VB.Label Label4
Caption = "Console Out" Caption = "Console Out"
Height = 255 Height = 255
Left = 5280 Left = 7920
TabIndex = 8 TabIndex = 8
Top = 3720 Top = 4080
Width = 3735 Width = 3735
End End
Begin VB.Label Label3 Begin VB.Label Label3
Caption = "Console In" Caption = "Console In"
Height = 255 Height = 255
Left = 120 Left = 2760
TabIndex = 7 TabIndex = 7
Top = 3720 Top = 4080
Width = 3735 Width = 3735
End End
Begin VB.Label Label2 Begin VB.Label Label2
Caption = "Source Out" Caption = "Source Out"
Height = 255 Height = 255
Left = 5280 Left = 7920
TabIndex = 6 TabIndex = 6
Top = 600 Top = 120
Width = 3735 Width = 3735
End End
Begin VB.Label Label1 Begin VB.Label Label1
Caption = "Source In" Caption = "Source In"
Height = 255 Height = 255
Left = 120 Left = 2760
TabIndex = 4 TabIndex = 4
Top = 600 Top = 120
Width = 2415 Width = 2415
End End
End End
@ -146,11 +193,27 @@ Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False Attribute VB_Exposed = False
Option Explicit Option Explicit
Option Base 0
Dim source_first As Boolean Dim source_first As Boolean
Public WithEvents Awk As ASELib.Awk Public WithEvents Awk As ASELib.Awk
Attribute Awk.VB_VarHelpID = -1 Attribute Awk.VB_VarHelpID = -1
Private Sub Execute_Click() Private Sub btnAddArgument_Click()
Dim arg As String
arg = txtArgument.Text
If Len(arg) > 0 Then
lstArguments.AddItem (arg)
txtArgument.Text = ""
txtArgument.SetFocus
End If
End Sub
Private Sub btnClearAll_Click()
lstArguments.Clear
End Sub
Private Sub btnExecute_Click()
source_first = True source_first = True
@ -191,8 +254,26 @@ Private Sub Execute_Click()
If Not Awk.Parse() Then If Not Awk.Parse() Then
MsgBox "PARSE ERROR [" + Str(Awk.ErrorLine) + "]" + Awk.ErrorMessage MsgBox "PARSE ERROR [" + Str(Awk.ErrorLine) + "]" + Awk.ErrorMessage
Else Else
Dim n As Boolean
Awk.EntryPoint = Trim(EntryPoint.Text) Awk.EntryPoint = Trim(EntryPoint.Text)
If Not Awk.Run() Then
If lstArguments.ListCount = 0 Then
n = Awk.Run(Null)
Else
ReDim Args(lstArguments.ListCount - 1) As String
Dim i As Integer
Awk.ArgumentsToEntryPoint = chkPassToEntryPoint.value
For i = 0 To lstArguments.ListCount - 1
Args(i) = lstArguments.List(i)
Next i
n = Awk.Run(Args)
End If
If Not n Then
MsgBox "RUN ERROR [" + Str(Awk.ErrorLine) + "]" + Awk.ErrorMessage MsgBox "RUN ERROR [" + Str(Awk.ErrorLine) + "]" + Awk.ErrorMessage
End If End If
End If End If
@ -409,42 +490,42 @@ ErrorTrap:
Exit Function Exit Function
End Function End Function
Function Awk_HandleBuiltinFunction(ByVal name As String, ByVal args As Variant) As Variant Function Awk_HandleBuiltinFunction(ByVal name As String, ByVal Args As Variant) As Variant
If name = "sin" Then If name = "sin" Then
If IsNull(args(0)) Then If IsNull(Args(0)) Then
Awk_HandleBuiltinFunction = Sin(0) Awk_HandleBuiltinFunction = Sin(0)
ElseIf IsNumeric(args(0)) Then ElseIf IsNumeric(Args(0)) Then
Awk_HandleBuiltinFunction = Sin(args(0)) Awk_HandleBuiltinFunction = Sin(Args(0))
Else Else
Awk_HandleBuiltinFunction = Sin(Val(args(0))) Awk_HandleBuiltinFunction = Sin(Val(Args(0)))
End If End If
ElseIf name = "cos" Then ElseIf name = "cos" Then
If TypeName(args(0)) = "Long" Or TypeName(args(0)) = "Double" Then If TypeName(Args(0)) = "Long" Or TypeName(Args(0)) = "Double" Then
Awk_HandleBuiltinFunction = Cos(args(0)) Awk_HandleBuiltinFunction = Cos(Args(0))
ElseIf TypeName(args(0)) = "String" Then ElseIf TypeName(Args(0)) = "String" Then
Awk_HandleBuiltinFunction = Cos(Val(args(0))) Awk_HandleBuiltinFunction = Cos(Val(Args(0)))
ElseIf TypeName(args(0)) = "Null" Then ElseIf TypeName(Args(0)) = "Null" Then
Awk_HandleBuiltinFunction = Cos(0) Awk_HandleBuiltinFunction = Cos(0)
End If End If
ElseIf name = "tan" Then ElseIf name = "tan" Then
If TypeName(args(0)) = "Long" Or TypeName(args(0)) = "Double" Then If TypeName(Args(0)) = "Long" Or TypeName(Args(0)) = "Double" Then
Awk_HandleBuiltinFunction = Tan(args(0)) Awk_HandleBuiltinFunction = Tan(Args(0))
ElseIf TypeName(args(0)) = "String" Then ElseIf TypeName(Args(0)) = "String" Then
Awk_HandleBuiltinFunction = Tan(Val(args(0))) Awk_HandleBuiltinFunction = Tan(Val(Args(0)))
ElseIf TypeName(args(0)) = "Null" Then ElseIf TypeName(Args(0)) = "Null" Then
Awk_HandleBuiltinFunction = Tan(0) Awk_HandleBuiltinFunction = Tan(0)
End If End If
ElseIf name = "sqrt" Then ElseIf name = "sqrt" Then
If IsNull(args(0)) Then If IsNull(Args(0)) Then
Awk_HandleBuiltinFunction = Sqr(0) Awk_HandleBuiltinFunction = Sqr(0)
ElseIf IsNumeric(args(0)) Then ElseIf IsNumeric(Args(0)) Then
Awk_HandleBuiltinFunction = Sqr(args(0)) Awk_HandleBuiltinFunction = Sqr(Args(0))
Else Else
Awk_HandleBuiltinFunction = Sqr(Val(args(0))) Awk_HandleBuiltinFunction = Sqr(Val(Args(0)))
End If End If
ElseIf name = "trim" Then ElseIf name = "trim" Then
Awk_HandleBuiltinFunction = Trim(args(0)) Awk_HandleBuiltinFunction = Trim(Args(0))
End If End If
'Dim i As Integer 'Dim i As Integer
@ -459,6 +540,7 @@ Function Awk_HandleBuiltinFunction(ByVal name As String, ByVal args As Variant)
'MsgBox xxx 'MsgBox xxx
End Function End Function
Private Sub Form_Load() Private Sub Form_Load()
SourceIn.Text = "" SourceIn.Text = ""
SourceOut.Text = "" SourceOut.Text = ""

View File

@ -1,2 +1,2 @@
AwkForm = 13, 12, 735, 661, C, 22, 22, 753, 640, C AwkForm = 13, 12, 735, 661, , 22, 22, 753, 640, C
AwkExtioConsole = 0, 0, 547, 460, C AwkExtioConsole = 0, 0, 547, 460, C