Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-28 Thread John Chapman via Digitalmars-d-learn

On Sunday, 27 January 2019 at 16:23:42 UTC, FrankLike wrote:

On Sunday, 27 January 2019 at 10:44:04 UTC, John Chapman wrote:

On Sunday, 27 January 2019 at 06:14:15 UTC, FrankLike wrote:
On Saturday, 26 January 2019 at 09:33:33 UTC, John Chapman 
wrote:




What has that code got to do with setting the console's 
font? So you need to add more code to accomplish that.


You don't need to set the font to achieve the goal, why not?


This should work:

const(char)[] toCodePage(const(char)[] s, uint codePage = 0) {
  import core.sys.windows.winnls, std.utf;

  foreach (char c; s) {
if (c >= 0x80) {
  auto temp = s.toUTF16z();
  char[] result;
  if ((result.length = WideCharToMultiByte(codePage, 0, 
temp, -1, null, 0, null, null)) != 0)
WideCharToMultiByte(codePage, 0, temp, -1, result.ptr, 
cast(int)result.length, null, null);

  return result;
}
  }
  return s;
}

void main() {
  import core.sys.windows.wincon, std.stdio;

  SetConsoleOutputCP(936); // Simplified Chinese codepage
  writeln("字符".toCodePage(936));
}

Yes.

extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
///
it's simple than yours,and don't need convert every string,why 
not work after D2.0.78.1?


I've no idea, sorry. A quick scan of D's changelogs between those 
versions doesn't reveal anything relevant. But I wonder how your 
code ever worked - on Windows, calling setlocale with "china" 
returns null, which means it's not a valid locale, so did nothing.


This does the right thing:

  extern(C) int _cwprintf(const(wchar)*, ...);

  void main() {
SetConsoleOutputCP(936);
_cwprintf("字符\n");
  }


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-27 Thread FrankLike via Digitalmars-d-learn

On Sunday, 27 January 2019 at 10:44:04 UTC, John Chapman wrote:

On Sunday, 27 January 2019 at 06:14:15 UTC, FrankLike wrote:
On Saturday, 26 January 2019 at 09:33:33 UTC, John Chapman 
wrote:




What has that code got to do with setting the console's font? 
So you need to add more code to accomplish that.


You don't need to set the font to achieve the goal, why not?


This should work:

const(char)[] toCodePage(const(char)[] s, uint codePage = 0) {
  import core.sys.windows.winnls, std.utf;

  foreach (char c; s) {
if (c >= 0x80) {
  auto temp = s.toUTF16z();
  char[] result;
  if ((result.length = WideCharToMultiByte(codePage, 0, 
temp, -1, null, 0, null, null)) != 0)
WideCharToMultiByte(codePage, 0, temp, -1, result.ptr, 
cast(int)result.length, null, null);

  return result;
}
  }
  return s;
}

void main() {
  import core.sys.windows.wincon, std.stdio;

  SetConsoleOutputCP(936); // Simplified Chinese codepage
  writeln("字符".toCodePage(936));
}

Yes.

extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
///
it's simple than yours,and don't need convert every string,why 
not work after D2.0.78.1?




Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-27 Thread John Chapman via Digitalmars-d-learn

On Sunday, 27 January 2019 at 06:14:15 UTC, FrankLike wrote:
On Saturday, 26 January 2019 at 09:33:33 UTC, John Chapman 
wrote:


What has that code got to do with setting the console's font? 
So you need to add more code to accomplish that.


You don't need to set the font to achieve the goal, why not?


This should work:

const(char)[] toCodePage(const(char)[] s, uint codePage = 0) {
  import core.sys.windows.winnls, std.utf;

  foreach (char c; s) {
if (c >= 0x80) {
  auto temp = s.toUTF16z();
  char[] result;
  if ((result.length = WideCharToMultiByte(codePage, 0, temp, 
-1, null, 0, null, null)) != 0)
WideCharToMultiByte(codePage, 0, temp, -1, result.ptr, 
cast(int)result.length, null, null);

  return result;
}
  }
  return s;
}

void main() {
  import core.sys.windows.wincon, std.stdio;

  SetConsoleOutputCP(936); // Simplified Chinese codepage
  writeln("字符".toCodePage(936));
}


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-26 Thread FrankLike via Digitalmars-d-learn

On Saturday, 26 January 2019 at 09:33:33 UTC, John Chapman wrote:

What has that code got to do with setting the console's font? 
So you need to add more code to accomplish that.


You don't need to set the font to achieve the goal, why not?


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-26 Thread John Chapman via Digitalmars-d-learn

On Saturday, 26 January 2019 at 06:03:25 UTC, FrankLike wrote:

On Friday, 25 January 2019 at 15:05:50 UTC, John Chapman wrote:

On Friday, 25 January 2019 at 14:23:15 UTC, FrankLike wrote:
I need to set the font by the code now, because I need to do 
the installer, can't let this installer set the properties on 
each computer?


SetCurrentConsoleFontEx perhaps?

https://docs.microsoft.com/en-us/windows/console/setcurrentconsolefontex


That's so much code than next code.

///
extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
///
But After D2.078.1,it's not work.
Why?
Thank you.


What has that code got to do with setting the console's font? So 
you need to add more code to accomplish that.


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-25 Thread FrankLike via Digitalmars-d-learn

On Friday, 25 January 2019 at 16:14:56 UTC, Kagamin wrote:
also 
http://blogs.microsoft.co.il/pavely/2009/07/23/changing-console-fonts/


That's so much code than next code!

/
extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
/
After D2.078.1,it's not work.
why?
thank you.


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-25 Thread FrankLike via Digitalmars-d-learn

On Friday, 25 January 2019 at 15:05:50 UTC, John Chapman wrote:

On Friday, 25 January 2019 at 14:23:15 UTC, FrankLike wrote:
I need to set the font by the code now, because I need to do 
the installer, can't let this installer set the properties on 
each computer?


SetCurrentConsoleFontEx perhaps?

https://docs.microsoft.com/en-us/windows/console/setcurrentconsolefontex


That's so much code than next code.

///
extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
///
But After D2.078.1,it's not work.
Why?
Thank you.


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-25 Thread Kagamin via Digitalmars-d-learn
also 
http://blogs.microsoft.co.il/pavely/2009/07/23/changing-console-fonts/


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-25 Thread John Chapman via Digitalmars-d-learn

On Friday, 25 January 2019 at 14:23:15 UTC, FrankLike wrote:
I need to set the font by the code now, because I need to do 
the installer, can't let this installer set the properties on 
each computer?


SetCurrentConsoleFontEx perhaps?

https://docs.microsoft.com/en-us/windows/console/setcurrentconsolefontex



Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-25 Thread FrankLike via Digitalmars-d-learn

On Friday, 25 January 2019 at 08:41:23 UTC, Kagamin wrote:
Create a shortcut to cmd.exe and edit its properties. The 
console window itself has a system menu for this too.


I known that.
I need to set the font by the code now, because I need to do the 
installer, can't let this installer set the properties on each 
computer?


Thank you.


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-24 Thread FrankLike via Digitalmars-d-learn

On Thursday, 24 January 2019 at 12:19:44 UTC, Kagamin wrote:

Try workarounds here:
https://issues.dlang.org/show_bug.cgi?id=1448
https://issues.dlang.org/show_bug.cgi?id=2742


How do I set the font? Please.


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-24 Thread FrankLike via Digitalmars-d-learn

On Thursday, 24 January 2019 at 12:19:44 UTC, Kagamin wrote:

Try workarounds here:
https://issues.dlang.org/show_bug.cgi?id=1448
https://issues.dlang.org/show_bug.cgi?id=2742


Ok,thank you.

import std.stdio;
import core.sys.windows.windows;
import std.process:executeShell;
extern(Windows) bool SetConsoleOutputCP(uint);

void main()
{
SetConsoleOutputCP(65001);
writeln("字符");
executeShell("pause");
}



Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-24 Thread Kagamin via Digitalmars-d-learn

Try workarounds here:
https://issues.dlang.org/show_bug.cgi?id=1448
https://issues.dlang.org/show_bug.cgi?id=2742


Re: What is the alternative to the setlocale function of c in D? Thank you.

2019-01-24 Thread FrankLike via Digitalmars-d-learn

On Thursday, 24 January 2019 at 07:48:44 UTC, FrankLike wrote:

Hi,everyone,

for example:

import std.stdio;
import std.process:executeShell;

extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}

void main()
{
writeln("字符");
executeShell("pause");
}
///code end/

In D2.078.1 It can display Chinese characters correctly!
But After D2.080 , but it can't be used now.
Who can help me?
Thank you.




What is the alternative to the setlocale function of c in D? Thank you.

2019-01-23 Thread FrankLike via Digitalmars-d-learn

Hi,everyone,

for example:

import std.stdio;
import std.process:executeShell;

extern(C) int setlocale(int,char*);

static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}

void main()
{
writeln("字符");
executeShell("pause");
}
///code end/
In D2.078.1 It works very ok.
But After D2.080 ,It not works.
Who can help me?
Thank you.