Public Sub Form_Load()

Call SelectMode_Click ' Set DOT mode

End Sub

Private Sub Form_MouseDown(Button%, Shift%, Xpos As Single, Ypos As Single)

' Determine which LED the mouse is over

xValue& = Int((Xpos - 120) / 240): yValue& = Int((Ypos - 1440) / 240)

If (xValue& > -1) And (xValue& < 40) And InDotMode Then

    Select Case yValue ' Toggle the LED if clicked while in DOT mode

    Case 0: LED0(xValue&).Visible = Not LED0(xValue).Visible

    Case 1: LED1(xValue&).Visible = Not LED1(xValue).Visible

    Case 2: LED2(xValue&).Visible = Not LED2(xValue).Visible

    Case 3: LED3(xValue&).Visible = Not LED3(xValue).Visible

    Case 4: LED4(xValue&).Visible = Not LED4(xValue).Visible

    Case 5: LED5(xValue&).Visible = Not LED5(xValue).Visible

    Case 6: LED6(xValue&).Visible = Not LED6(xValue).Visible

    End Select

    End If

End Sub

Private Sub SelectMode_Click()

' Toggle the select mode

If SelectMode.Left = 4200 Then

    SelectMode.Left = 4560: EntryText.Visible = False ' Dot mode

    Dot.ForeColor = RGB(255, 255, 255): Text.ForeColor = RGB(42, 42, 42) ' Grey

'    Call SetConfiguration(0)

    Else: SelectMode.Left = 4200: EntryText.Visible = True ' Text mode

    Dot.ForeColor = RGB(42, 42, 42): Text.ForeColor = RGB(255, 255, 255) ' White

'    Call SetConfiguration(1)

    End If

End Sub

Private Function InDotMode() As Boolean

InDotMode = (SelectMode.Left = 4560)

End Function

Private Sub UpdateIO_Click()

' Update the real IO device

Dim Buffer(39) As Byte

For i& = 0 To 39

    If InDotMode Then ' Fill the buffer with the DOT pattern

    Buffer(i&) = (LED0(i&).Visible And 1) + (LED1(i&).Visible And 2) + (LED2(i&).Visible And 4) + (LED3(i&).Visible And 8) + _

                 (LED4(i&).Visible And 16) + (LED5(i&).Visible And 32) + (LED6(i&).Visible And 64)

    Else ' In Text Mode.  Fill the buffer with text

    If i& < Len(EntryText.Text) Then

        Buffer(i&) = Asc(Mid(EntryText.Text, i& + 1, 1))

        Else: Buffer(i&) = 0: End If

    End If ' In DotMode

Next i&

Call WriteUSBdevice(AddressFor(Buffer(0)), 40)

If Not InDotMode Then ' Retrieve the DOT pattern from the I/O device

Call ReadUSBdevice(AddressFor(Buffer(0)), 40)

    For i& = 0 To 39

        LED6(i&).Visible = Buffer(i&) And 1: LED5(i&).Visible = Buffer(i&) And 2: LED4(i&).Visible = Buffer(i&) And 4

        LED3(i&).Visible = Buffer(i&) And 8: LED2(i&).Visible = Buffer(i&) And 16: LED1(i&).Visible = Buffer(i&) And 32

        LED0(i&).Visible = Buffer(i&) And 64

        Next i&

    End If

End Sub