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