VERSION 5.00
Begin VB.Form AwkForm 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "ASE.COM.AWK"
   ClientHeight    =   8100
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   12900
   LinkTopic       =   "AwkForm"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   8100
   ScaleWidth      =   12900
   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 
      Height          =   315
      ItemData        =   "AwkForm.frx":0000
      Left            =   240
      List            =   "AwkForm.frx":0007
      TabIndex        =   9
      Top             =   480
      Width           =   2295
   End
   Begin VB.TextBox ConsoleIn 
      BeginProperty Font 
         Name            =   "Courier New"
         Size            =   9
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   3735
      Left            =   2760
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   2
      Top             =   4320
      Width           =   5055
   End
   Begin VB.TextBox SourceIn 
      BeginProperty Font 
         Name            =   "Courier New"
         Size            =   9
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   3615
      Left            =   2760
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   0
      Top             =   360
      Width           =   5055
   End
   Begin VB.TextBox SourceOut 
      BeginProperty Font 
         Name            =   "Courier New"
         Size            =   9
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   3615
      Left            =   7920
      Locked          =   -1  'True
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   1
      Top             =   360
      Width           =   4935
   End
   Begin VB.CommandButton btnExecute 
      Caption         =   "Execute"
      Height          =   375
      Left            =   1440
      TabIndex        =   5
      Top             =   7680
      Width           =   1215
   End
   Begin VB.TextBox ConsoleOut 
      BeginProperty Font 
         Name            =   "Courier New"
         Size            =   9
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   3735
      Left            =   7920
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   3
      Top             =   4320
      Width           =   4935
   End
   Begin VB.Frame Frame1 
      Caption         =   "Arguments"
      Height          =   4335
      Left            =   120
      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
      Width           =   2535
   End
   Begin VB.Label Label4 
      Caption         =   "Console Out"
      Height          =   255
      Left            =   7920
      TabIndex        =   8
      Top             =   4080
      Width           =   3735
   End
   Begin VB.Label Label3 
      Caption         =   "Console In"
      Height          =   255
      Left            =   2760
      TabIndex        =   7
      Top             =   4080
      Width           =   3735
   End
   Begin VB.Label Label2 
      Caption         =   "Source Out"
      Height          =   255
      Left            =   7920
      TabIndex        =   6
      Top             =   120
      Width           =   3735
   End
   Begin VB.Label Label1 
      Caption         =   "Source In"
      Height          =   255
      Left            =   2760
      TabIndex        =   4
      Top             =   120
      Width           =   2415
   End
End
Attribute VB_Name = "AwkForm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Option Base 0
Dim source_first As Boolean
Public WithEvents Awk As ASECOM.Awk
Attribute Awk.VB_VarHelpID = -1

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
    
    ConsoleOut.Text = ""
    SourceOut.Text = ""
    
    Set Awk = New ASECOM.Awk
    
    'Awk.SetWord "BEGIN", "xxx"
    'Awk.SetWord "END", "yyy"
    'Awk.SetWord "length", "len"
    'Awk.UnsetWord "END"

    Awk.ExplicitVariable = True
    Awk.ImplicitVariable = True
    Awk.UseCrlf = True
    Awk.IdivOperator = True
    Awk.ShiftOperators = True
    
    Awk.MaxDepthForBlockParse = 20
    Awk.MaxDepthForBlockRun = 30
    Awk.MaxDepthForExprParse = 20
    Awk.MaxDepthForExprRun = 30
    'Awk.MaxDepthForRexBuild = 10
    'Awk.MaxDepthForRexMatch = 10
    
    Awk.UseLongLong = False
    Awk.Debug = True
    
    If Not Awk.AddFunction("sin", 1, 1) Then
        MsgBox "Cannot add builtin function - " + Awk.ErrorMessage
        Exit Sub
    End If
    If Not Awk.AddFunction("cos", 1, 1) Then
        MsgBox "Cannot add builtin function - " + Awk.ErrorMessage
        Exit Sub
    End If
    Call Awk.AddFunction("tan", 1, 1)
    Call Awk.AddFunction("sqrt", 1, 1)
    Call Awk.AddFunction("trim", 1, 1)
    'Call Awk.DeleteFunction("tan")
    
    If Not Awk.Parse() Then
        MsgBox "PARSE ERROR [" + Str(Awk.ErrorLine) + "]" + Awk.ErrorMessage
    Else
        Dim n As Boolean
        
        Awk.EntryPoint = Trim(EntryPoint.Text)
        
        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
        End If
    End If
    
    Set Awk = Nothing
    
End Sub

Function Awk_OpenSource(ByVal mode As ASECOM.AwkSourceMode) As Long
    Awk_OpenSource = 1
End Function

Function Awk_CloseSource(ByVal mode As ASECOM.AwkSourceMode) As Long
    Awk_CloseSource = 0
End Function

Function Awk_ReadSource(ByVal buf As ASECOM.Buffer) As Long
    If source_first Then
        buf.value = SourceIn.Text
        Awk_ReadSource = Len(buf.value)
        source_first = False
    Else
        Awk_ReadSource = 0
    End If
End Function

Function Awk_WriteSource(ByVal buf As ASECOM.Buffer) As Long
    Dim value As String
    Dim l As Integer
    
    value = buf.value
    l = Len(value)
    SourceOut.Text = SourceOut.Text + value
    Awk_WriteSource = Len(value)
End Function

Function Awk_OpenExtio(ByVal extio As ASECOM.AwkExtio) As Long
    Awk_OpenExtio = -1
    
    Select Case extio.Type
    Case ASECOM.AWK_EXTIO_CONSOLE
        If extio.mode = ASECOM.AWK_EXTIO_CONSOLE_READ Then
            extio.Handle = New AwkExtioConsole
            With extio.Handle
                .EOF = False
            End With
            Awk_OpenExtio = 1
        ElseIf extio.mode = ASECOM.AWK_EXTIO_CONSOLE_WRITE Then
            extio.Handle = New AwkExtioConsole
            With extio.Handle
                .EOF = False
            End With
            Awk_OpenExtio = 1
        End If
        
    Case ASECOM.AWK_EXTIO_FILE
        If extio.mode = ASECOM.AWK_EXTIO_FILE_READ Then
            extio.Handle = FreeFile
            On Error GoTo ErrorTrap
            Open extio.name For Input As #extio.Handle
            On Error GoTo 0
            Awk_OpenExtio = 1
        ElseIf extio.mode = ASECOM.AWK_EXTIO_FILE_WRITE Then
            extio.Handle = FreeFile
            On Error GoTo ErrorTrap
            Open extio.name For Output As #extio.Handle
            On Error GoTo 0
            Awk_OpenExtio = 1
        ElseIf extio.mode = ASECOM.AWK_EXTIO_FILE_APPEND Then
            extio.Handle = FreeFile
            On Error GoTo ErrorTrap
            Open extio.name For Append As #extio.Handle
            On Error GoTo 0
            Awk_OpenExtio = 1
        End If
        
    Case ASECOM.AWK_EXTIO_PIPE
        Awk_OpenExtio = -1
    Case ASECOM.AWK_EXTIO_COPROC
        Awk_OpenExtio = -1
    End Select
    
    Exit Function
    
ErrorTrap:
    Exit Function
End Function

Function Awk_CloseExtio(ByVal extio As ASECOM.AwkExtio) As Long
    Awk_CloseExtio = -1
    
    Select Case extio.Type
    Case ASECOM.AWK_EXTIO_CONSOLE
        If extio.mode = ASECOM.AWK_EXTIO_CONSOLE_READ Or _
           extio.mode = ASECOM.AWK_EXTIO_CONSOLE_WRITE Then
            extio.Handle = Nothing
            Awk_CloseExtio = 0
        End If
    Case ASECOM.AWK_EXTIO_FILE
        If extio.mode = ASECOM.AWK_EXTIO_FILE_READ Or _
           extio.mode = ASECOM.AWK_EXTIO_FILE_WRITE Or _
           extio.mode = ASECOM.AWK_EXTIO_FILE_APPEND Then
            Close #extio.Handle
            Awk_CloseExtio = 0
        End If
    Case ASECOM.AWK_EXTIO_PIPE
        Awk_CloseExtio = -1
    Case ASECOM.AWK_EXTIO_COPROC
        Awk_CloseExtio = -1
    End Select
    
End Function

Function Awk_ReadExtio(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Awk_ReadExtio = -1
    
    Select Case extio.Type
    Case ASECOM.AWK_EXTIO_CONSOLE
        If extio.mode = ASECOM.AWK_EXTIO_CONSOLE_READ Then
            Awk_ReadExtio = ReadExtioConsole(extio, buf)
        End If
        
    Case ASECOM.AWK_EXTIO_FILE
        If extio.mode = ASECOM.AWK_EXTIO_FILE_READ Then
            Awk_ReadExtio = ReadExtioFile(extio, buf)
        End If
        
    Case ASECOM.AWK_EXTIO_PIPE
        Awk_ReadExtio = -1
    Case ASECOM.AWK_EXTIO_COPROC
        Awk_ReadExtio = -1
    End Select
    
End Function

Function Awk_WriteExtio(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Awk_WriteExtio = -1
    
    Select Case extio.Type
    Case ASECOM.AWK_EXTIO_CONSOLE
        If extio.mode = ASECOM.AWK_EXTIO_CONSOLE_WRITE Then
            Awk_WriteExtio = WriteExtioConsole(extio, buf)
        End If
    Case ASECOM.AWK_EXTIO_FILE
        If extio.mode = ASECOM.AWK_EXTIO_FILE_WRITE Or _
           extio.mode = ASECOM.AWK_EXTIO_FILE_APPEND Then
            Awk_WriteExtio = WriteExtioFile(extio, buf)
        End If
    Case ASECOM.AWK_EXTIO_PIPE
        Awk_WriteExtio = -1
    Case ASECOM.AWK_EXTIO_COPROC
        Awk_WriteExtio = -1
    End Select
End Function

Function ReadExtioConsole(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Dim value As String

    If Not extio.Handle.EOF Then
        value = ConsoleIn.Text
        extio.Handle.EOF = True
        buf.value = value
        ReadExtioConsole = Len(value)
    Else
        ReadExtioConsole = 0
    End If
End Function

Function ReadExtioFile(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Dim value As String
    
    If EOF(extio.Handle) Then
        ReadExtioFile = 0
        Exit Function
    End If
    
    On Error GoTo ErrorTrap
    Line Input #extio.Handle, value
    On Error GoTo 0
    
    value = value + vbCrLf
    
    buf.value = value
    ReadExtioFile = Len(buf.value)
    Exit Function
    
ErrorTrap:
    ReadExtioFile = -1
    Exit Function
End Function
    
Function WriteExtioConsole(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Dim value As String
        
    value = buf.value
    ConsoleOut.Text = ConsoleOut.Text + value
    WriteExtioConsole = Len(value)
End Function

Function WriteExtioFile(ByVal extio As ASECOM.AwkExtio, ByVal buf As ASECOM.Buffer) As Long
    Dim value As String
    
    WriteExtioFile = -1
    
    value = buf.value
    On Error GoTo ErrorTrap
    Print #extio.Handle, value;
    On Error GoTo 0
    WriteExtioFile = Len(value)
    
    Exit Function
    
ErrorTrap:
    Exit Function
End Function

Function Awk_HandleBuiltinFunction(ByVal name As String, ByVal Args As Variant) As Variant

    If name = "sin" Then
        If IsNull(Args(0)) Then
            Awk_HandleBuiltinFunction = Sin(0)
        ElseIf IsNumeric(Args(0)) Then
            Awk_HandleBuiltinFunction = Sin(Args(0))
        Else
            Awk_HandleBuiltinFunction = Sin(Val(Args(0)))
        End If
    ElseIf name = "cos" Then
        If TypeName(Args(0)) = "Long" Or TypeName(Args(0)) = "Double" Then
            Awk_HandleBuiltinFunction = Cos(Args(0))
        ElseIf TypeName(Args(0)) = "String" Then
            Awk_HandleBuiltinFunction = Cos(Val(Args(0)))
        ElseIf TypeName(Args(0)) = "Null" Then
            Awk_HandleBuiltinFunction = Cos(0)
        End If
    ElseIf name = "tan" Then
        If TypeName(Args(0)) = "Long" Or TypeName(Args(0)) = "Double" Then
            Awk_HandleBuiltinFunction = Tan(Args(0))
        ElseIf TypeName(Args(0)) = "String" Then
            Awk_HandleBuiltinFunction = Tan(Val(Args(0)))
        ElseIf TypeName(Args(0)) = "Null" Then
            Awk_HandleBuiltinFunction = Tan(0)
        End If
    ElseIf name = "sqrt" Then
        If IsNull(Args(0)) Then
            Awk_HandleBuiltinFunction = Sqr(0)
        ElseIf IsNumeric(Args(0)) Then
            Awk_HandleBuiltinFunction = Sqr(Args(0))
        Else
            Awk_HandleBuiltinFunction = Sqr(Val(Args(0)))
        End If
    ElseIf name = "trim" Then
        Awk_HandleBuiltinFunction = Trim(Args(0))
    End If
    
    'Dim i As Integer
    'Dim xxx As String

    'MsgBox name
    
    'For i = LBound(args) To UBound(args)
    '    xxx = xxx & "," & args(i)
    'Next i
    
    'MsgBox xxx
End Function


Private Sub Form_Load()
    SourceIn.Text = ""
    SourceOut.Text = ""
    ConsoleIn.Text = ""
    ConsoleOut.Text = ""
End Sub