` Printed Icetips Article

Icetips Article



Clarion Environment (IDE etc.): Checking for winsock version
2004-01-16 -- Jim Kane
 
Newsgroups: softvelocity.clarion.third_party

On second thought it's not that long so I'll just post it.
calldllcl is my call by address class from clarion mag.
if anyone finds a bug in this please call it to my attention - this has not
been throughly tested yet.

Jim Kane


   program
_abcdllmode_ equate(0)
_abclinkmode_ equate(1)

  map
    checkwsock(),byte
  end

  include('calldllcl.inc')

  code
  case checkwsock()
  of 0
    Message('Winsock 2.0 is installed.')
  of 5
    Message('winsock 2.0 is NOT installed.')
  else
    Message('Error determining if winsock2 installed.')
  end

checkwsock    procedure()

calldllcl       calldllcltype
eProcfailcode   equate(99)
res             byte(0)
wsadatatype group,type
wversion        ushort
whighversion    ushort
szDescription   cstring(256)
szSystemstatus  cstring(128)
iMaxsockets     ushort
iMaxUdpdg       ushort
lpvendorinfo    long
pad1            long
pad2            long
  end

wsadatastr &string
wsadata    &wsadatatype
I          long,auto
cstr       &cstring

bytegroup group,over(Wsadata.whighversion)
hibyte    byte
lobyte    byte
  end

  code
  !create the data on the heap so it is 8 byte aligned
  wsadatastr&=new string(size(wsadatatype))
  if wsadatastr&=null then return 3.

  !null it - prob not needed
  loop i=1 to size(wsadatatype)
    wsadatastr[i]='<0>'
  end
  wsadata&=(address(wsadatastr))

  !load the dll
  if calldllcl.init('ws2_32.dll')  then
    res=5
    do procret
  end
  calldllcl.SetProcFailCode(eProcfailcode)

  case calldllcl.call('WSAStartup',2,address(wsadatastr))
  of eProcfailcode
     res=3  !dll loaded but problems (unexplained calling it.)
  of 0
    !got a result
    message('version='& bytegroup.hibyte & '.' & bytegroup.lobyte,'version')
    if bytegroup.hibyte>=2 then
!      message('its 2')
      res=0
    else
!      message('not 2')
      res=5
    end
  else
    !some winsock error
    res=3
  end
  calldllcl.call('WSACleanup')
  do procret

procret routine
  dispose(wsadatastr)
  calldllcl.kill()
  return res



Printed April 28, 2024, 7:11 am
This article has been viewed/printed 35123 times.
Google search has resulted in 291 hits on this article since January 25, 2004.