BBC BASIC for Windows
Programming >> BBC BASIC language >> Regional date format & fonts
http://bb4w.conforums.com/index.cgi?board=language&action=display&num=1345550348

Regional date format & fonts
Post by dynamic35 on Aug 21st, 2012, 11:59am

In Europe dates are in order: dd/mm/yy
In USA dates are mm/dd/yy. And in some EU countries there are two dots or small circle above a, o A O.
In some cases date order makes an important role since date like 02/12/2012 can be interpreted as 2nd of Dec 2012 (EU) or 12th of Feb 2012 (USA).

What is the method to clarify -as part of the bbc4w codes -the 'region' setting of windows computers, into which one wants to install bbc4w programs.
Ref
There are code written by Richard that tells to you for example locations of op sys "special files" or there is a code to find out name of the Win op sys that user employs.
I cannot find from helps advice, how to feed into a real time BBC4W program flow the relevant format of user's Windows region &date, ie the computer into into which I need to install an application , that is dependent on the order of the users' regional date format.
Also similar problem might be investications on desimal separator a user has -for example "," or "." .

Greetings
Dynamic35
Re: Regional date format & fonts
Post by dynamic35 on Aug 22nd, 2012, 05:47am

Code referenced in above story So, I would like also to find the date format of the PC . If you have that wisedom please modify my program down here
MODE 12
CLS
PRINT " PC type and special Microsoft folders"
PROCgetversion2
PRINT " OpSys="; D$; " (MS-id=";A%;B%;C%;")"

PRINT " Windows Directory =";FNwindowsdirectory
PRINT " System Directory=";FNsystemdirectory
PRINT " FolderId"
REM my XP sp3 22.08.12
id%=-1
REPEAT
id%=id%+1
spex$=FNspecialfolder(id%)
IF LENspex$ > 2 PRINT id%,TAB(14); spex$
UNTIL id% = 99
REM missing: a function to search date format (dd/mm/yy or mm/dd/yy) that is active now
END

REM 3 routines based on RR public samples
DEF FNwindowsdirectory
LOCAL T%
DIM T% LOCAL 260
SYS "GetWindowsDirectory", T%, 260
= $$T% + "\"

DEF FNsystemdirectory
LOCAL T%
DIM T% LOCAL 260
SYS "GetSystemDirectory", T%, 260
= $$T% + "\"

DEF PROCgetversion2
LOCAL osvi{}
DIM osvi{Size%, \ Size of structure
\ Major%, \ Major version number
\ Minor%, \ Minor Version number
\ Build%, \ Build number
\ Platform%, \ Platform ID
\ SP&(127) \ Service Pack string
\ }
osvi.Size% = 148
SYS "GetVersionEx", osvi{}
A% = osvi.Major%
B% = osvi.Minor%
C% = osvi.Platform%
D$="Unknown OpSystem"
IF A%=4 AND B%=0 AND C%=1 THEN D$="Windows 95"
IF A%=4 AND B%=10 AND C%=1 THEN D$= "Windows 98"
IF A%=4 AND B%=90 AND C%=1 THEN D$= "Windows Me"
IF A%=4 AND C%=2 THEN D$="Windows NT4"
IF A%=5 AND B%=1 AND C%=2 THEN D$="Windows XP"
IF A%=5 AND B%=0 AND C%=2 THEN D$="Windows 2000"
IF A%=6 AND B%=1 AND C%=2 THEN D$= "Windows 7"
IF A%=6 AND B%=0 AND C%=2 THEN D$= "Windows Vista"
ENDPROC


DEF FNspecialfolder(id%)
LOCAL ppidl%, folder%, malloc%
DIM folder% LOCAL 255
SYS "SHGetSpecialFolderLocation", @hwnd%, id%, ^ppidl%
SYS "SHGetPathFromIDList", ppidl%, folder%
SYS "SHGetMalloc", ^malloc%
SYS !(!malloc%+20), malloc%, ppidl%
= $$folder% + "\"

Re: Regional date format & fonts
Post by admin on Aug 22nd, 2012, 08:35am

on Aug 21st, 2012, 11:59am, dynamic35 wrote:
What is the method to clarify -as part of the bbc4w codes -the 'region' setting of windows computers, into which one wants to install bbc4w programs.

Use the GetLocaleInfo API:

Code:
      _LOCALE_SDECIMAL = &E
      _LOCALE_SLONGDATE = 32
      _LOCALE_USER_DEFAULT = &400
      
      DIM DateFormat{text&(80)}
      SYS "GetLocaleInfo", _LOCALE_USER_DEFAULT, _LOCALE_SLONGDATE, \
      \                    DateFormat{}, DIM(DateFormat{})
      PRINT "The user's date format is " DateFormat.text&()
      
      DIM DecimalSep{text&(4)}
      SYS "GetLocaleInfo", _LOCALE_USER_DEFAULT, _LOCALE_SDECIMAL, \
      \                    DecimalSep{}, DIM(DecimalSep{})
      PRINT "The user's decimal separator is " DecimalSep.text&() 

GetLocaleInfo will return all sorts of other region-dependent settings. Check MSDN for details.

Quote:
I cannot find from helps advice, how to feed into a real time BBC4W program flow the relevant format of user's Windows region &date

The GetDateFormat API by default formats the date according to the user's preferences:

Code:
      DATE_LONGDATE = 2
      _LOCALE_USER_DEFAULT = &400

      DIM Date{text&(80)}
      SYS "GetDateFormat", _LOCALE_USER_DEFAULT, DATE_LONGDATE, 0, 0, \
      \                    Date{}, DIM(Date{})
      PRINT Date.text&() 

You can alternatively specify DATE_SHORTDATE.

Richard.
Re: Regional date format & fonts
Post by dynamic35 on Aug 22nd, 2012, 10:41am

Excellent. Thank you very much , again
Dyna