source: trunk/dll/codepage.c

Last change on this file was 1673, checked in by Gregg Young, 13 years ago

Update to Doxygen comment style Ticket 55. Also some minor code cleanup.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: codepage.c 1673 2012-12-30 18:51:01Z gyoung $
5
6 Select code page
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2006, 2010 Steven H.Levine
10
11 14 Jul 06 SHL Use Runtime_Error
12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
13 11 Jan 09 GKY Moved codepage names to a character array here from the string file.
14 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
15
16***********************************************************************/
17
18#include <stdlib.h>
19#include <string.h>
20
21#define INCL_DOS
22#define INCL_WIN
23#define INCL_LONGLONG // dircnrs.h
24
25#include "fm3dll.h"
26#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
27#include "notebook.h" // Data declaration(s)
28#include "mainwnd.h" // Data declaration(s)
29#include "fm3dlg.h"
30#include "fm3str.h"
31#include "strutil.h" // GetPString
32#include "errutil.h" // Runtime_Error
33#include "codepage.h"
34#include "misc.h" // PostMsg
35
36#pragma data_seg(DATA1)
37
38static PSZ pszSrcFile = __FILE__;
39static CHAR *CodePage[23] = {"437 USA",
40"850 Multilingual",
41"852 Latin 2",
42"857 Turkish",
43"860 Portuguese",
44"861 Iceland",
45"863 French-Canadian",
46"865 Nordic",
47"866 Russian OS/2",
48"878 Russian KOI8-R",
49"932 Japan",
50"934 Korea",
51"936 China",
52"938 Taiwan",
53"942 Japan SAA",
54"944 Korea SAA",
55"946 China SAA",
56"948 Taiwan SAA",
57"949 Korea KS",
58"950 Taiwan (Big 5)",
59"1004 DTP/Win",
60"1251 Russian Win",
61"1381 China GB"};
62
63MRESULT EXPENTRY PickCodePageDlgBox(HWND hwnd, ULONG msg, MPARAM mp1,
64 MPARAM mp2)
65{
66
67 SHORT sSelect;
68
69 switch (msg) {
70 case WM_INITDLG:
71 WinShowWindow(WinWindowFromID(hwnd, PICK_SAVEPOS), FALSE);
72 {
73 ULONG cp;
74 char *p;
75
76 cp = WinQueryCp(WinQueryWindowULong(hwnd, QWL_HMQ));
77 for (sSelect = 0; sSelect < 23; sSelect++) {
78 p = CodePage[sSelect];
79 WinSendDlgItemMsg(hwnd,
80 PICK_LISTBOX,
81 LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP(p));
82 if (atoi(p) == cp) {
83 WinSendDlgItemMsg(hwnd,
84 PICK_LISTBOX,
85 LM_SETTOPINDEX, MPFROM2SHORT(sSelect, 0), MPVOID);
86 WinSendDlgItemMsg(hwnd,
87 PICK_LISTBOX,
88 LM_SELECTITEM,
89 MPFROM2SHORT(sSelect, 0), MPFROMSHORT(TRUE));
90 }
91 }
92 }
93 WinSendDlgItemMsg(hwnd,
94 PICK_INPUT,
95 EM_SETTEXTLIMIT, MPFROM2SHORT(256, 0), MPVOID);
96 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_PICKCODEPAGETEXT));
97 PostMsg(hwnd, UM_STRETCH, MPVOID, MPVOID);
98 break;
99
100 case UM_STRETCH:
101 {
102 SWP swp, swpL, swpE;
103 LONG titl, szbx, szby;
104
105 WinQueryWindowPos(hwnd, &swp);
106 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)) &&
107 (swp.x != SHORT1FROMMP(mp1) || swp.cx != SHORT2FROMMP(mp1) ||
108 swp.y != SHORT1FROMMP(mp2) || swp.cy != SHORT2FROMMP(mp2))) {
109 szbx = SysVal(SV_CXSIZEBORDER);
110 szby = SysVal(SV_CYSIZEBORDER);
111 titl = SysVal(SV_CYTITLEBAR);
112 WinQueryWindowPos(WinWindowFromID(hwnd, PICK_LISTBOX), &swpL);
113 WinQueryWindowPos(WinWindowFromID(hwnd, PICK_INPUT), &swpE);
114 WinSetWindowPos(WinWindowFromID(hwnd, PICK_LISTBOX), HWND_TOP,
115 szbx,
116 swpL.y,
117 swp.cx - (szbx * 2L),
118 ((((swp.cy - swpL.y) - swpE.cy) - 8) - titl) -
119 (szby * 2L), SWP_MOVE | SWP_SIZE);
120 WinSetWindowPos(WinWindowFromID(hwnd, PICK_INPUT), HWND_TOP,
121 szbx + 2,
122 swpL.y + (((((swp.cy - swpL.y) - swpE.cy) - 8) -
123 titl) - (szby * 2L)) + 4,
124 0L, 0L, SWP_MOVE);
125 WinInvalidateRect(WinWindowFromID(hwnd, PICK_INPUT), NULL, FALSE);
126 }
127 }
128 return 0;
129
130 case WM_ADJUSTWINDOWPOS:
131 {
132 SWP swp;
133
134 WinQueryWindowPos(hwnd, &swp);
135 PostMsg(hwnd,
136 UM_STRETCH,
137 MPFROM2SHORT((SHORT) swp.x, (SHORT) swp.cx),
138 MPFROM2SHORT((SHORT) swp.y, (SHORT) swp.cy));
139 }
140 break;
141
142 case WM_CONTROL:
143 switch (SHORT1FROMMP(mp1)) {
144 case PICK_LISTBOX:
145 switch (SHORT2FROMMP(mp1)) {
146 case LN_SELECT:
147 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
148 PICK_LISTBOX,
149 LM_QUERYSELECTION,
150 MPFROMSHORT(LIT_FIRST), MPVOID);
151 if (sSelect >= 0)
152 WinSetDlgItemText(hwnd, PICK_INPUT, CodePage[sSelect]);
153 break;
154 case LN_ENTER:
155 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
156 break;
157 }
158 break;
159 }
160 return 0;
161
162 case WM_COMMAND:
163 switch (SHORT1FROMMP(mp1)) {
164 case DID_OK:
165 {
166 INT x;
167 CHAR s[257], *p;
168
169 *s = 0;
170 WinQueryDlgItemText(hwnd, PICK_INPUT, 257, s);
171 if (!*s)
172 Runtime_Error(pszSrcFile, __LINE__, "no input");
173 else {
174 for (x = 0; x < 23; x++) {
175 p = CodePage[x];
176 if (!stricmp(s, p)) {
177 WinDismissDlg(hwnd, atoi(p));
178 break;
179 }
180 }
181 }
182 }
183 break;
184
185 case IDM_HELP:
186 if (hwndHelp)
187 WinSendMsg(hwndHelp,
188 HM_DISPLAY_HELP,
189 MPFROM2SHORT(HELP_CODEPAGE, 0),
190 MPFROMSHORT(HM_RESOURCEID));
191 break;
192
193 case PICK_SAVEPOS:
194 break;
195
196 case DID_CANCEL:
197 WinDismissDlg(hwnd, 0);
198 break;
199 }
200 return 0;
201
202 case WM_CLOSE:
203 return 0;
204 }
205 return WinDefDlgProc(hwnd, msg, mp1, mp2);
206}
207
208INT PickCodepage(HWND hwnd)
209{
210
211 INT cp;
212
213 cp = (INT) WinDlgBox(HWND_DESKTOP,
214 hwnd,
215 PickCodePageDlgBox, FM3ModHandle, PICK_FRAME, MPVOID);
216 if (cp > 0) {
217
218 HMQ hmq;
219 ULONG cps[50], len, x;
220
221 if (cp == 1004) {
222 hmq = WinQueryWindowULong(hwnd, QWL_HMQ);
223 WinSetCp(hmq, cp);
224 }
225 else if (!DosQueryCp(sizeof(cps), cps, &len)) {
226 for (x = 0; x < len / sizeof(ULONG); x++) {
227 if (cps[x] == (ULONG) cp) {
228 hmq = WinQueryWindowULong(hwnd, QWL_HMQ);
229 WinSetCp(hmq, cp);
230 break;
231 }
232 }
233 }
234 DosSetProcessCp(cp);
235 }
236 else
237 cp = -1;
238 return cp;
239}
240
241#pragma alloc_text(FMCODEPAGE,PickCodePageDlgBox,PickCodepage)
Note: See TracBrowser for help on using the repository browser.