'===========================================================================
' Subject: DATE AND TIME DISPLAY              Date: 02-09-98 (15:55)       
'  Author: Dave Navarro, Jr.                  Code: PBDLL                  
'  Origin: dave@powerbasic.com              Packet: PBDLL.ABC
'===========================================================================
'==============================================================================
'
'  Date and Time Display
'  Copyright (c) 1997 by PowerBASIC, Inc.
'
'  Uses the Windows API to retrieve the current local date and time and
'  display them using the preferred formats specified by the user and
'  country settings.
'
'  Requires MKCON.EXE utility to make it a console application.
'
'==============================================================================

$DIM ALL
$COMPILE EXE

'==============================================================================

%NULL                  = 0
%STD_OUTPUT_HANDLE     = -11&
%LOCALE_SLONGDATE      = &H20        '  long date format string
%LOCALE_STIMEFORMAT    = &H1003      '  time format string
%LOCALE_USER_DEFAULT   = &H0000
%DATE_SHORTDATE        = &H1         '  use short date picture
%DATE_LONGDATE         = &H2         '  use long date picture
%TIME_NOSECONDS        = &H2&        '  do not use seconds

TYPE SYSTEMTIME
  wYear AS INTEGER
  wMonth AS INTEGER
  wDayOfWeek AS INTEGER
  wDay AS INTEGER
  wHour AS INTEGER
  wMinute AS INTEGER
  wSecond AS INTEGER
  wMilliseconds AS INTEGER
END TYPE

DECLARE FUNCTION GetStdHandle LIB "KERNEL32.DLL" ALIAS "GetStdHandle" (BYVAL nStdHandle AS LONG) AS LONG
DECLARE FUNCTION WriteFile LIB "KERNEL32.DLL" ALIAS "WriteFile" (BYVAL hFile AS LONG, lpBuffer AS ANY, BYVAL nNumberOfBytesToWrite AS LONG, lpNumberOfBytesWritten AS LONG, lpOverlapped AS LONG) AS LONG
DECLARE SUB GetLocalTime LIB "KERNEL32.DLL" ALIAS "GetLocalTime" (lpSystemTime AS SYSTEMTIME)
DECLARE FUNCTION GetDateFormat LIB "KERNEL32.DLL" ALIAS "GetDateFormatA" (BYVAL Locale AS LONG, BYVAL dwFlags AS LONG, lpDate AS SYSTEMTIME, lpFormat AS ASCIIZ, lpDateStr AS ASCIIZ, BYVAL cchDate AS LONG) AS LONG
DECLARE FUNCTION GetTimeFormat LIB "KERNEL32.DLL" ALIAS "GetTimeFormatA" (BYVAL Locale AS LONG, BYVAL dwFlags AS LONG, lpTime AS SYSTEMTIME, lpFormat AS ASCIIZ, lpTimeStr AS ASCIIZ, BYVAL cchTime AS LONG) AS LONG

'==============================================================================

GLOBAL hOutput AS LONG

'==============================================================================

SUB StdOut(BYVAL x AS STRING)

  LOCAL Buffer  AS LONG
  LOCAL Written AS LONG

  Buffer = STRPTR(x)
  WriteFile hOutput, BYVAL Buffer, LEN(x), Written, BYVAL %NULL

END SUB

SUB StdOutLn(BYVAL x AS STRING)
  StdOut x & CHR$(13,10)
END SUB

'==============================================================================

FUNCTION WinMain (BYVAL CurInst&, _
                  BYVAL PrvInst&, _
                  CmdLine AS ASCIIZ PTR, _
                  BYVAL CmdShow&) EXPORT AS LONG

  LOCAL st AS SYSTEMTIME
  LOCAL d  AS ASCIIZ * 64
  LOCAL t  AS ASCIIZ * 64
  LOCAL s  AS ASCIIZ * 64

  hOutput = GetStdHandle(%STD_OUTPUT_HANDLE)

  GetLocalTime st

  GetDateFormat %LOCALE_USER_DEFAULT, %DATE_LONGDATE, st, BYVAL %NULL, d, 64
  GetDateFormat %LOCALE_USER_DEFAULT, %DATE_SHORTDATE, st, BYVAL %NULL, s, 64
  GetTimeFormat %LOCALE_USER_DEFAULT, %TIME_NOSECONDS, st, BYVAL %NULL, t, 64

  StdOutLn t & ", " & d & " (" & s & ")"

END FUNCTION
