Attribute VB_Name = "Module1"
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Const HWND_TOPMOST = -1

Public nid As NOTIFYICONDATA

Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 64
End Type

Public Declare Function DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte
Public Declare Function DlPortReadPortUshort Lib "dlportio.dll" (ByVal Port As Long) As Integer
Public Declare Function DlPortReadPortUlong Lib "dlportio.dll" (ByVal Port As Long) As Long

Public Declare Sub DlPortReadPortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)

Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte)
Public Declare Sub DlPortWritePortUshort Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Integer)
Public Declare Sub DlPortWritePortUlong Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Long)

Public Declare Sub DlPortWritePortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)

Public Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Public Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
Public char(10, 4) As String
Public size As Integer
Public Port As Long
Public Dataport As Long
Public controlport As Long
Public frequency As Currency

Public Sub initialize()
lcdwrite &H38
lcdwrite &H6
lcdwrite &HC
lcdwrite &H1
End Sub

Public Sub setcursor(row As Integer, col As Integer)
Select Case row
  Case 1
    lcdwrite &H80 + col - 1
  Case 2
    lcdwrite &HC0 + col - 1
  Case 3
    lcdwrite &H94 + col - 1
  Case 4
    lcdwrite &HD4 + col - 1
End Select
End Sub

Public Sub displaytext(row As Integer, col As Integer, this As String)
setcursor row, col
For i = 0 To Len(this) - 1
  displaychar Mid(this, i + 1, 1)
Next i
End Sub

Public Sub lcdwrite(this As Long)
DlPortWritePortUchar Dataport, this
DlPortWritePortUchar controlport, &H2
DlPortWritePortUchar controlport, &H3
QueryPerformanceCounter count0
Do
    QueryPerformanceCounter count1
    
    howlong = CDbl((count1 - count0) / frequency)
Loop Until howlong > 0.0008
End Sub

Public Sub lcdwritedata(this As Long)
DlPortWritePortUchar controlport, &H6
DlPortWritePortUchar Dataport, this
DlPortWritePortUchar controlport, &H7
QueryPerformanceCounter count0
Do
    QueryPerformanceCounter count1
    howlong = CDbl((count1 - count0) / frequency)
Loop Until howlong > 0.0001
End Sub

Public Sub displaychar(char As String)
lcdwritedata Asc(char)
End Sub
