[plt-scheme] Anyone competent in VB? MzCom & Excel question.
I'm interacting with MzCom from MS Excel via Visual Basic. While I can
write some VB I'm not really competent. Non the less, most things seem
to be working. The code I've included below can also be found in the
spreadsheet:
http://pong.telerama.com/~mcguire/PLT/MzCom.xls
The one problem I'm having is that I don't seem to be able to catch
SchemeError events. Being able to would really help in debugging. I
think this is the right way to do it but the code below is never
invoked.
Private Sub MzCom_SchemeError(s As String)
MsgBox ("Scheme Error: " + s)
End Sub
I noticed that Andre Van Meulebrouck, in his test program (found on this
page: http://www.cs.utah.edu/plt/develop/ ) never does anything with the
SchemeError event so I don't know if it is even working. Nor am I
competent enough in VB to know how to tell.
My version is Excel 2002 as part of Office 10.
P.S. Is there some less ugly way to write the "slashify" function below?
Dim initted As Boolean
Dim MzCom As New MzObj
Public Sub MzComREPL()
Dim sin, sout As String
initialize
On Error GoTo 20
sin = "'ready"
10 sout = MzCom.Eval(sin)
sin = InputBox(sout)
If Not sin = "" Then GoTo 10
Exit Sub
20 MsgBox ("repl: " & Err.Number & vbCrLf & Err.Description)
initted = False
' Err.Clear
End Sub
Private Sub initialize()
On Error GoTo 10
If initted = False Then
MsgBox ("initting")
' HAVE MzCom load some functions here
MzCom.Eval ("(current-directory " +
Quote(slashify(ThisWorkbook.Path)) + ")")
initted = True
End If
Exit Sub
10 MsgBox ("init: " & Err.Number & vbCrLf & Err.Description)
End Sub
Private Sub MzCom_SchemeError(s As String)
MsgBox ("Scheme Error: " + s)
End Sub
Private Function Quote(s As String) As String
Quote = Chr$(34) + s + Chr$(34)
End Function
Private Function slashify(s As String) As String
Dim sl As Integer
sl = Len(s)
If sl = 0 Then
slashify = ""
Else
If "\" = Left$(s, 1) Then
slashify = "\\" + slashify(Right$(s, sl - 1))
Else
slashify = Left$(s, 1) + slashify(Right$(s, sl - 1))
End If
End If
End Function