[Back to DATETIME SWAG index]  [Back to Main SWAG index]  [Original]

(*
> Function SYS_DATE : STR8; { Format System Date as YY/MM/DD }

       No doubt, your Function will work.  But don't you think that nowadays
Programmers, even if they live in the United States, should Write software
which is a little bit more open-minded?  The date Format "YY/MM/DD" is commonly
used in your country, but in the country where I live "DD-MM-YY" is standard,
and in other countries there are other date and time Formats in use.

       Dates expressed in your country Format appear somewhat strange and
bizarre outside the US.  I wonder why most American Programmers don't care
about the country support alReady built-in into Dos.  Is this arrogance or does
this indicate a somewhat narrow-minded American way of thinking?

       Use the following Unit to determine the current country settings Valid
on the Computer your Program is operating on:
*)

Unit country;

Interface

Type
  str4 = String[4];

Function countryCode      : Byte;
Function currencySymbol   : str4;
Function dateFormat       : Word;
Function dateSeparator    : Char;
Function DecimalSeparator : Char;
Function timeSeparator    : Char;


Implementation
Uses
  Dos;

Type
  countryInfoRecord = Record
    dateFormat     : Word;
    currency       : Array[1..5] of Char;
    thouSep,
    DecSep,
    dateSep,
    timeSep        : Array[1..2] of Char;
    currencyFormat,
    significantDec,
    timeFormat     : Byte;
    CaseMapAddress : LongInt;
    dataListSep    : Array[1..2] of Char;
    reserved       : Array[1..5] of Word
  end;

Var
  countryRecord : countryInfoRecord;
  reg           : Registers;


Procedure getCountryInfo; { generic Dos call used by all Functions }

begin

  reg.AH := $38;
  reg.AL := 0;
  reg.DS := seg(countryRecord);
  reg.DX := ofs(countryRecord);
  msDos(reg)

end; { getCountryInfo }


Function countryCode : Byte; { returns country code as set in Config.Sys }

begin

  countryCode := reg.AL

end; { countryCode }

Function currencySymbol : str4; { returns currency symbol }
Var
  temp : str4;
  i    : Byte;

begin

  With countryRecord do
  begin
    temp := '';
    i := 0;
    Repeat
      Inc(i);
      if currency[i] <> #0 then temp := temp + currency
    Until (i = 5) or (currency[i] = #0)
  end;
  currencySymbol := temp

end; { currencySymbol }


Function dateFormat : Word;
{ 0 : USA    standard mm/dd/yy }
{ 1 : Europe standard dd-mm-yy }
{ 2 : Japan  standard yy/mm/dd }
begin

  dateFormat := countryRecord.dateFormat

end; { dateFormat }


Function dateSeparator : Char; { date separator Character }

begin

  dateSeparator := countryRecord.dateSep[1]

end; { dateSeparator }


Function DecimalSeparator : Char; { Decimal separator Character }

begin

  DecimalSeparator := countryRecord.DecSep[1]

end; { DecimalSeparator }


Function timeSeparator : Char; { time separator Character }

begin

  timeSeparator := countryRecord.timeSep[1]

end; { timeSeparator }

begin

  getCountryInfo

end. { Unit country }

[Back to DATETIME SWAG index]  [Back to Main SWAG index]  [Original]