Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub RecoveryHandler(ByVal h As Handle_uCalc)
      Dim uc As New uCalc(h)
      Console.WriteLine($"Handler: Caught '{uc.Error.Message}'")
      '// Attempt to recover by resuming execution.
      uc.Error.Response = ErrorHandlerResponse.Resume
      Console.WriteLine("Handler: Resuming execution...")
   End Sub
   Public Sub RiskyOperation(ByVal cb As uCalc.Callback)
      Dim input = cb.ArgStr(1)
      If input = "bad" Then
         cb.Error.Raise("A recoverable error occurred.")
         '// After the error handler resumes, this return value will be used.
         
      Else
         cb.ReturnStr("Normal_OK")
      End If
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      uc.Error.AddHandler(AddressOf RecoveryHandler)
      uc.DefineFunction("DoWork(s As String) As String", AddressOf RiskyOperation)
      
      Console.WriteLine("Result: " + uc.EvalStr("DoWork('good')"))
      Console.WriteLine("---")
      Console.WriteLine("Result: " + uc.EvalStr("DoWork('bad')"))
   End Sub
End Module