diff --git a/examples/utf-8/стекло/ext-utf8-c.cir b/examples/utf-8/стекло/ext-utf8-c.cir
new file mode 100644
index 000000000..5f6248666
--- /dev/null
+++ b/examples/utf-8/стекло/ext-utf8-c.cir
@@ -0,0 +1,53 @@
+* test de titré
+.control
+set hcopydevtype = postscript
+set hcopypscolor=25
+set hcopypstxcolor=21
+set hcopyscale=1
+*set color2=rgb:F/0/0
+
+setcs hcopyfont=Arial
+set hcopyfontsize=18
+
+
+let x = vector(5)
+let y = exp(x)
+setcs wfont=Arial
+set wfont_size=18
+setcs xfont='Noto Sans'
+*set xfont_size=18
+
+set gridwidth=4
+set xbrushwidth=1
+set color0=white
+set color2=brown
+plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré'
+set color0=black
+plot y vs x xlabel '我能吞下玻璃而不伤身体' ylabel 'Я могу есть стекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج و هذا لا يؤلمني.'
+* With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8"
+*gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ '
+set color0=yellow
+set color1=black
+set color2=blue
+set gridwidth=1
+set xbrushwidth=4
+plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré 私はガラスを食べられます。それは私を傷つけません' loglog
+*plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog
+set color0=black
+set color2=pink
+unset color1
+plot y vs x xlabel '래도 아프지 않아요' ylabel '私はガラスを食べられます' title ' أنا قادر على أكل الزجاج و هذا لا يؤلمني.'
+
+* With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8"
+*gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ '
+
+*hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~'
+*shell Start /B plot_5.ps
+*shell gv plot_5.ps &
+
+echo 나는 유리를 먹을 수 있어요. 그래도 아프지 않아요
+echo 私はガラスを食べられます。それは私を傷つけません
+echo 我能吞下玻璃而不伤身体
+
+*quit
+.endc
diff --git a/src/frontend/wdisp/windisp.c b/src/frontend/wdisp/windisp.c
index dacb22b9c..98fa313c7 100644
--- a/src/frontend/wdisp/windisp.c
+++ b/src/frontend/wdisp/windisp.c
@@ -103,6 +103,9 @@ static bool isblackold = TRUE;
static int linewidth = 0; /* linewidth of grid and plot */
static int gridlinewidth = 0; /* linewidth of grid */
+extern void wincolor_init(COLORREF *ColorTable, int noc);
+extern void wincolor_redo(COLORREF *ColorTable, int noc);
+
/******************************************************************************
WIN_Init() makes connection to graphics. We have to determine
@@ -117,7 +120,6 @@ WIN_Init() does not yet open a window, this happens only in WIN_NewViewport()
******************************************************************************/
int WIN_Init(void)
{
- char colorstring[BSIZE_SP];
char facename[32];
#ifdef EXT_ASC
@@ -132,75 +134,11 @@ int WIN_Init(void)
dispdev->numlinestyles = 5; /* see implications in WinPrint! */
dispdev->numcolors = NumWinColors;
- /* always, user may have set color0 to white */
- /* get background color information from spinit, only "white"
- is recognized as a suitable option! */
- if (cp_getvar("color0", CP_STRING, colorstring, sizeof(colorstring))) {
- if (cieq(colorstring, "white")) isblack = FALSE;
- else isblack = TRUE;
- }
-
- /* get linewidth information from spinit */
- if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) {
- linewidth = 0;
- }
- if (linewidth < 0) {
- linewidth = 0;
- }
-
- /* get linewidth for grid from spinit */
- if (!cp_getvar("gridwidth", CP_NUM, &gridlinewidth, 0))
- gridlinewidth = linewidth;
- if (gridlinewidth < 0)
- gridlinewidth = 0;
-
/* only for the first time: */
if (!IsRegistered) {
- isblackold = isblack;
+ wincolor_init(ColorTable, NumWinColors);
- /* Initialize colors */
- if (isblack) {
- ColorTable[0] = RGB( 0, 0, 0); /* black = background */
- ColorTable[1] = RGB(255, 255, 255); /* white = text and grid */
- }
- else {
- ColorTable[0] = RGB(255, 255, 255); /* white = background */
- ColorTable[1] = RGB( 0, 0, 0); /* black = text and grid */
- }
-
- ColorTable[2] = RGB( 0, 255, 0); /* green = first line */
- ColorTable[3] = RGB(255, 0, 0); /* red */
- ColorTable[4] = RGB( 0, 0, 255); /* blue */
- ColorTable[5] = RGB(255, 255, 0); /* yellow */
- ColorTable[6] = RGB(255, 0, 255); /* violett */
- ColorTable[7] = RGB( 0, 255, 255); /* azur */
- ColorTable[8] = RGB(255, 128, 0); /* orange */
- ColorTable[9] = RGB(128, 64, 0); /* brown */
- ColorTable[10] = RGB(128, 0, 255); /* light violett */
- ColorTable[11] = RGB(255, 128, 128); /* pink */
-
- /* 2. color bank (with different line style */
- if (isblack) {
- ColorTable[12] = RGB(255, 255, 255); /* white */
- }
- else {
- ColorTable[12] = RGB( 0, 0, 0); /* black */
- }
-
- ColorTable[13] = RGB( 0, 255, 0); /* green */
- ColorTable[14] = RGB(255, 0, 0); /* red */
- ColorTable[15] = RGB( 0, 0, 255); /* blue */
- ColorTable[16] = RGB(255, 255, 0); /* yellow */
- ColorTable[17] = RGB(255, 0, 255); /* violett */
- ColorTable[18] = RGB( 0, 255, 255); /* azur */
- ColorTable[19] = RGB(255, 128, 0); /* orange */
- ColorTable[20] = RGB(128, 64, 0); /* brown */
- ColorTable[21] = RGB(128, 0, 255); /* light violett */
- ColorTable[22] = RGB(255, 128, 128); /* pink */
-
- /* Ansii fixed font */
-// PlotFont = GetStockFont(ANSI_FIXED_FONT);
#ifdef EXT_ASC
/* register window class */
TheWndClass.lpszClassName = WindowName;
@@ -241,28 +179,11 @@ int WIN_Init(void)
TheWndClassW.cbWndExtra = sizeof(GRAPH *);
if (!RegisterClassW(&TheWndClassW)) return 1;
#endif
-
+ IsRegistered = 1;
}
- /* not first time */
- else if (isblackold != isblack) {
- if (isblack) {
- ColorTable[0] = RGB( 0, 0, 0); /* black = background */
- ColorTable[1] = RGB(255, 255, 255); /* white = text and grid */
- }
- else {
- ColorTable[0] = RGB(255, 255, 255); /* white = background */
- ColorTable[1] = RGB( 0, 0, 0); /* black = text and grid */
- }
- if (isblack) {
- ColorTable[12] = RGB(255, 255, 255); /* white */
- }
- else {
- ColorTable[12] = RGB( 0, 0, 0); /* black */
- }
+ else
+ wincolor_redo(ColorTable, NumWinColors);
- isblackold = isblack;
- }
- IsRegistered = 1;
#ifdef EXT_ASC
// lf.lfHeight = 18;
lf.lfWidth = 0;
@@ -756,15 +677,15 @@ int WIN_NewViewport(GRAPH *graph)
if (!window)
return 1;
- /* change the background color of all windows (both new and already plotted)
- by assessing the registered window class */
- if (isblack) {
- SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(BLACK_BRUSH));
- }
- else {
- SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(WHITE_BRUSH));
- }
+ SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(DC_BRUSH));
+
+ /* get the DC */
+ dc = GetDC(window);
+ wd->hDC = dc;
+ /* set the background color */
+ SelectObject(dc, GetStockObject(DC_BRUSH));
+ SetDCBrushColor(dc, ColorTable[0]);
wd->wnd = window;
SetWindowLongPtr(window, 0, (LONG_PTR)graph);
@@ -775,9 +696,8 @@ int WIN_NewViewport(GRAPH *graph)
/* get the mask */
GetClientRect(window, &(wd->Area));
- /* get the DC */
- dc = GetDC(window);
- wd->hDC = dc;
+
+
/* set the Color Index */
wd->ColorIndex = 0;
diff --git a/visualc/vngspice.vcxproj b/visualc/vngspice.vcxproj
index ba0762697..737d57b29 100644
--- a/visualc/vngspice.vcxproj
+++ b/visualc/vngspice.vcxproj
@@ -922,6 +922,7 @@
+
@@ -939,6 +940,7 @@
+
@@ -1531,6 +1533,7 @@
+