*******************************************
* Compilar: hbmk2 demo.prg -lhbct
*******************************************

function Main()
  SetMode(25,80)

  cDataHora:= GetDataTimeNtp( "200.160.7.186")
 
/*****************************************
* Outros IP:
* 200.160.7.186
* 200.186.125.195
* 200.20.186.76
* 201.49.148.135
* 200.160.7.193
* 200.160.0.8
* 200.189.40.8
* 200.192.232.8
* 204.123.2.72
* 31.28.161.71
*****************************************/

  ? "Data: ",Left(cDataHora,10)
  ? "Hora: ",Right(cDataHora,8)

return nil

******************************************
function GetDataTimeNtp( cSeverNtp )
Local cRet, cDateTime:= Alltrim(GETNTPDATE( cSeverNtp ))
cRet:=SUBS(cDateTime,9,2)+"/"+StrZero(CtoMonth(SUBS(cDateTime,5,3)),2)+"/"+Alltrim(Right(cDateTime,5))+;
      SUBS(cDateTime,11,9)
Return (cRet)


*****************************************
#pragma BEGINDUMP

#include <hbapi.h>
#include <winsock.h>
#include <time.h>

#define MAXLEN 1024

HB_FUNC( GETNTPDATE )
{
   char * hostname = ( char * ) hb_parc( 1 );
   unsigned char msg[ 48 ] = { 010, 0, 0, 0, 0, 0, 0, 0, 0 };   // the packet we send
   unsigned long buf[ MAXLEN ]; // the buffer we get back
   struct sockaddr_in server_addr;
   int  s;  // socket
   WSADATA wsa;
   struct timeval timeout;
   fd_set fds;
   time_t tmit;
             
   WSAStartup( 0x101, &wsa );    

   s = socket( PF_INET, SOCK_DGRAM, getprotobyname( "udp" )->p_proto );

   memset( &server_addr, 0, sizeof( server_addr ) );
   server_addr.sin_family = AF_INET;
   server_addr.sin_addr.s_addr = inet_addr( hostname );
   server_addr.sin_port = htons( 123 ); // ntp port
       
   sendto( s, msg, sizeof( msg ), 0, ( struct sockaddr * ) &server_addr, sizeof( server_addr ) );
       
   FD_ZERO( &fds );
   FD_SET( s, &fds );
   timeout.tv_sec = 10;
   timeout.tv_usec = 0;
         
   if( select( 0, &fds, NULL, NULL, &timeout ) )
   {      
      recv( s, ( void * ) buf, sizeof( buf ), 0 );

      tmit = ntohl( buf[ 10 ] );
      tmit-= 2208988800U;
   }  
   else
      MessageBox( 0, "can't read from NTP server", "ok", 0 );      
       
   WSACleanup();

   hb_retc( ctime( &tmit ) );  
}

#pragma ENDDUMP