UBW Liberty Basic Code Snippits
This page contains a number of PC application software routines I've
written that may be usefull to anybody who programs for the UBW
from Liberty Basic. These are not complete programs, but are
you could put in your programs to make things easier.
Bit Flip and Test Bit:
These are things that would be really nice to have included
the language itself, but I've been using these functions instead and
they appear to work just fine. Each one takes a data byte and a bit
number as input. The BitFlip routine inverts the bit at position
within 'byte' and returns the new value of 'byte'. TstBit
a 1 or 0 based upon the value of the bit at location 'bit' in byte
'byte'. Note that for both 'bit' is zero indexed (i.e. goes from 0
for a byte).
' Flip the bit 'Bit' in byte 'Byte' and return the new byte.
Finding Available COM ports:
function BitFlip(Byte, Bit)
if TstBit(Byte, Bit) = 1 then
BitFlip = (Byte AND (255 XOR (2^Bit)))
BitFlip = (Byte OR (2^Bit))
' Test bit "Bit" in variable "Byte" and return it's value (1 or 0)
function TstBit(Byte, Bit)
TstBit = 0
if ((Byte AND (2^Bit)) > 0) then
TstBit = 1
This is a set of routines and some main code that will populate a
down list with all of the currently available COM ports on a PC.
' This code section goes at the very top of your LB program
Global kMaxCOMPorts ' Maximum number (COMxx) and largest number _of_ ports to store
kMaxCOMPorts = 40
DIM CombComPort$(kMaxCOMPorts) ' Holds strings for COM port numbers (COM1, COM2, etc.)
' This code section goes in your GUI definition - before you open the window that contains the pull down list.
' The pull down list (Combo Box) is called CombComPort, and the array that fills it is called CombComPort$
combobox #main.CombComPort, CombComPort$(), [CombComPortDoubleClick], 75, 372, 100, 100
' This code section goes in the code that you use to intialize the stuff in the window.
' It does the work of populating the drop down list if all available COM ports
' Populate the drop down list of available COM ports
' This code section is what gets called when the user pulls down the combot box and selects one of the items
' Perform action for the combobox named 'CombComPort'
' You should probably do other things here like close any other open ports, etc.
print #main.CombComPort, "contents? ComPort$"
open ComPort$;":9600,8,N,1,RS,DS0,CS0" for random as #commHandle
' This section of code is the real meat of this example. This subroutine and function do the hard
' work of figuring out which com ports are available.
' This subroutine will populate the drop-down list called #main.CombComPort
' with all of the currently available COM ports. You can change #main.CombComPort
' to whatever you use in your program.
' First clear out #main.CombComPort
for Port = 0 to kMaxCOMPorts
CombComPort$(Port) = ""
CurrentComboIndex = 0
' We're going to loop from 1 to MaxCOMPorts and see if each port is available
for TestPort = 1 to kMaxCOMPorts
if IsCOMPortAvailable(TestPort) = 1 then
' Add this port into #main.CombComPort
CombComPort$(CurrentComboIndex) = "COM" + str$(TestPort)
CurrentComboIndex = CurrentComboIndex + 1
' Now reload the combbox to get the new array values
print #main.CombComPort, "reload"
' Helper function for [GetCOMPorts]
' Returns 0 if the Port is not available on this system (either already opened or doesn't
' exist) and 1 if the port is available.
struct lpSecurityAttributes, _
nLength as long, _
lpSecurityDescriptor as long, _
bInheritHandle as long
lpFileName$ = "\\.\COM" + str$(Port)
dwDesiredAccess = 0
dwShareMode = 1 + 2
dwCreationDisposition = 3
dwFlagsAndAttributes = 128
hTemplateFile = 0
calldll #kernel32, "CreateFileA", _
lpFileName$ as ptr, _
dwDesiredAccess as long, _
dwShareMode as long, _
lpSecurityAttributes as struct, _
dwCreationDisposition as long, _
dwFlagsAndAttributes as long, _
hTemplateFile as long, _
retcode as long
hObject = retcode
' Test the return code to see if the port is available and free
if retcode = -1 then
IsCOMPortAvailable = 0
' If we were able to open it, then close it and return TRUE
calldll #kernel32, "CloseHandle", _
hObject as long, _
retcode as long
IsCOMPortAvailable = 1
Questions? E-mail me at