Develop and Download Open Source Software

Browse CVS Repository

Contents of /tombo/Tombo/Src/Message.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download) (as text)
Sat Sep 4 14:54:30 2004 UTC (19 years, 7 months ago) by hirami
Branch: MAIN
CVS Tags: B155, Tombo_2_0a3, Tombo_2_0a2, Tombo_2_0a1, Tombo_1_17_1, B153, B191, B192, B193, B194, B196, B197, B198, B199, B200, B201, B202, B203, B205, B206, B207, B208, SNAPSHOT_20040920, SNAPSHOT_20040925, B183, B181, B180, B187, B186, B184, B189, B188, B213, B212, B211, B217, B216, B215, B214, B219, B218, Tombo_2_0b2, Tombo_2_0b3, Tombo_2_0b1, Tombo_1_9, Tombo_2_0b4, B228, B229, B226, B227, B224, B225, B222, B223, B220, B221, B154, B172, B156, B157, B150, B151, B152, B173, B158, B159, B171, Tombo_1_10, Tombo_1_13, SNAPSHOT20051220, Tombo_1_12, B231, B230, B149, B148, Tombo_1_15, Tombo_1_14, Tombo_1_17, Tombo_1_16, Tombo_1_11, B177, B174, B175, B178, B179, B164, B169, B168, B165, SNAPSHOT_20041121, B166, B161, B160, B163, B162, HEAD
Branch point for: Tombo_1_17_1_branch
Changes since 1.2: +4 -0 lines
File MIME type: text/x-c++src
* External editor linking (HPC,Win32)

1 #include <windows.h>
2 #include <tchar.h>
3 #include "Tombo.h"
4 #include "Message.h"
5 #include "Uniconv.h"
6
7 #include "TString.h"
8
9 //////////////////////////////////////////////////
10 // prototype
11 //////////////////////////////////////////////////
12 static void ReplaceSpecialChar(LPTSTR pSrc);
13
14 #include "MsgRes/DefaultMsg.cpp"
15
16 ////////////////////////////////////////////////
17 /////////////////////////////////////////////////
18 // TomboMessage implimentation
19 /////////////////////////////////////////////////
20 ////////////////////////////////////////////////
21
22 //////////////////////////////////////////////////
23 // ctor & initializer
24 //////////////////////////////////////////////////
25
26 TomboMessage::TomboMessage() : pMsgBuf(NULL)
27 {
28 }
29
30 TomboMessage::~TomboMessage()
31 {
32 delete [] pMsgBuf;
33 }
34
35 BOOL TomboMessage::Init()
36 {
37 // load default message
38 for (DWORD i = 0; i < NUM_MESSAGES; i++) {
39 pMsg[i] = defaultMsg[i];
40 }
41
42 TCHAR buf[MAX_PATH * 2];
43 TCHAR buf2[MAX_PATH * 2];
44
45 GetModuleFileName(NULL, buf, MAX_PATH);
46 GetFilePath(buf2, buf);
47
48 _tcscat(buf2, TOMBO_MSG_DEF_FILE);
49
50 HANDLE h = CreateFile(buf2, GENERIC_READ, FILE_SHARE_READ,
51 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
52 if (h != INVALID_HANDLE_VALUE) {
53 LoadMsg(h);
54 }
55 CloseHandle(h);
56 return TRUE;
57 }
58
59 //////////////////////////////////////////////////
60 // Get data from file and convert to native code.
61 //////////////////////////////////////////////////
62 // In windows platform, code is for each MBCS codeset.
63 // In CE platform, code is UCS2.
64
65 LPTSTR TomboMessage::GetNatvieData(HANDLE hFile)
66 {
67 // read UTF-8 file
68 DWORD nBytes = GetFileSize(hFile, NULL);
69 char *pTmp = new char[nBytes + 1];
70 if (!ReadFile(hFile, (LPBYTE)pTmp, nBytes, &nBytes, NULL)) {
71 delete [] pTmp;
72 return NULL;
73 }
74 *(pTmp + nBytes) = '\0';
75
76 #if defined(PLATFORM_WIN32)
77 // convert to UCS2 data
78 LPWSTR pW = ConvUTF8ToUCS2(pTmp);
79 delete [] pTmp;
80
81 // convert to MBCS data
82 int nSize = WideCharToMultiByte(CP_ACP, 0, pW, -1, NULL, 0, NULL, NULL);
83 char *pData = new char[nSize + 1];
84 WideCharToMultiByte(CP_ACP, 0, pW, -1, pData, nSize, NULL, NULL);
85 delete [] pW;
86 #else
87 LPWSTR pData = ConvUTF8ToUCS2(pTmp);
88 delete[] pTmp;
89 #endif
90 return pData;
91 }
92
93 //////////////////////////////////////////////////
94 // Load message
95 //////////////////////////////////////////////////
96
97 BOOL TomboMessage::LoadMsg(HANDLE h)
98 {
99 LPTSTR p = pMsgBuf = GetNatvieData(h);
100 if (p == NULL) return FALSE;
101
102 DWORD i = 0;
103
104 pMsg[i++] = p;
105 while (*p) {
106 if (*p == TEXT('\r') && *(p+1) == TEXT('\n')) {
107 *p = *(p+1) = TEXT('\0');
108 p += 2;
109 if (i >= NUM_MESSAGES) break;
110 if (_tcslen(p) == 0) break;
111 pMsg[i++] = p;
112 }
113 #if defined(PLATFORM_WIN32)
114 p = CharNext(p);
115 #else
116 p++;
117 #endif
118 }
119
120 DWORD nValid = i;
121
122 for (i= 0; i < nValid; i++) {
123 ReplaceSpecialChar((LPTSTR)pMsg[i]);
124 }
125 return TRUE;
126 }
127
128 //////////////////////////////////////////////////
129 // Retrieve message
130 //////////////////////////////////////////////////
131
132 LPCTSTR TomboMessage::GetMsg(DWORD nMsgID)
133 {
134 if (nMsgID == 0 || nMsgID > NUM_MESSAGES) return NULL;
135 return pMsg[nMsgID - 1];
136 }
137
138 //////////////////////////////////////////////////
139 // Replace escape char to real char
140 //////////////////////////////////////////////////
141
142 static void ReplaceSpecialChar(LPTSTR pSrc)
143 {
144 LPTSTR p;
145 LPTSTR q;
146 p = q = pSrc;
147 while(*p) {
148 if (*p == TEXT('\\')) {
149 switch (*(p+1)) {
150 case TEXT('r'):
151 *q++ = TEXT('\r');
152 p+= 2;
153 break;
154 case TEXT('n'):
155 *q++ = TEXT('\n');
156 p+= 2;
157 break;
158 case TEXT('\\'):
159 *q++ = TEXT('\\');
160 p+= 2;
161 break;
162 case TEXT('t'):
163 *q++ = TEXT('\t');
164 p+= 2;
165 break;
166 case TEXT('0'):
167 *q++ = TEXT('\0');
168 p+= 2;
169 break;
170 default:
171 *q++ = *p++;
172 }
173 } else {
174 #if defined(PLATFORM_WIN32)
175 if (IsDBCSLeadByte(*p)) {
176 *q++ = *p++;
177 }
178 #endif
179 *q++ = *p++;
180 }
181 }
182 *q = TEXT('\0');
183 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26