FOR n% = 1 TO 20
handle% = OPENUP (... "COM"+STR$(n%) ......)
IF handle% <> 0 THEN
: Port exists *and* is free for use
CLOSE handle%
ELSE
: Port exists but is in use, *or* port does not exist
ENDIF
NEXT
DIM TempBuffer% 255
Key$ = "HARDWARE\DEVICEMAP\SERIALCOMM"
SYS "RegOpenKeyEx", &80000002, Key$, 0, &20001, ^K% TO R%
IF R% = 0 THEN
L% = 255 : SYS "RegQueryValueEx", K%, "String", 0, ^T%, TempBuffer%, ^L% TO R%
IF R% = 0 TempBuffer%?(L%-1) = 13 : String$ = $TempBuffer%
L% = 4 : SYS "RegQueryValueEx", K%, "Integer", 0, ^T%, ^V%, ^L% TO R%
IF R% = 0 Integer% = V%
SYS "RegCloseKey", K%
ENDIF
PRINT "String$=" + String$
FOR p% = 1 TO 255
port% = OPENIN("COM" + STR$(p%) + ": 115200,N,8,1")
SYS "GetLastError" TO winerr%
CASE winerr% OF
WHEN 0:
PRINT "COM" + STR$(p%) + " Free"
CLOSE# port%
WHEN 1:
PRINT "COM" + STR$(p%) + " In Use"
ENDCASE
NEXT