1 |
/* Tera Term |
/* Tera Term |
2 |
Copyright(C) 1994-1998 T. Teranishi |
Copyright(C) 1994-1998 T. Teranishi |
3 |
All rights reserved. */ |
All rights reserved. */ |
4 |
|
|
5 |
/* TTMACRO.EXE, dialog boxes */ |
/* TTMACRO.EXE, dialog boxes */ |
6 |
|
|
7 |
#include "stdafx.h" |
#include "stdafx.h" |
8 |
#include "teraterm.h" |
#include "teraterm.h" |
9 |
#include <direct.h> |
#include <direct.h> |
10 |
#include "ttm_res.h" |
#include "ttm_res.h" |
11 |
#include "tttypes.h" |
#include "tttypes.h" |
12 |
#include "ttlib.h" |
#include "ttlib.h" |
13 |
#include <commdlg.h> |
#include <commdlg.h> |
14 |
#include "errdlg.h" |
#include "errdlg.h" |
15 |
#include "inpdlg.h" |
#include "inpdlg.h" |
16 |
#include "msgdlg.h" |
#include "msgdlg.h" |
17 |
#include "statdlg.h" |
#include "statdlg.h" |
18 |
#include "ttmlib.h" |
#include "ttmlib.h" |
19 |
|
|
20 |
#define MaxStrLen 256 |
#define MaxStrLen 256 |
21 |
|
|
22 |
extern "C" { |
extern "C" { |
23 |
char HomeDir[MAXPATHLEN]; |
char HomeDir[MAXPATHLEN]; |
24 |
char FileName[MAXPATHLEN]; |
char FileName[MAXPATHLEN]; |
25 |
char TopicName[11]; |
char TopicName[11]; |
26 |
char ShortName[MAXPATHLEN]; |
char ShortName[MAXPATHLEN]; |
27 |
char Param2[MAXPATHLEN]; |
char Param2[MAXPATHLEN]; |
28 |
char Param3[MAXPATHLEN]; |
char Param3[MAXPATHLEN]; |
29 |
char Param4[MAXPATHLEN]; |
char Param4[MAXPATHLEN]; |
30 |
char Param5[MAXPATHLEN]; |
char Param5[MAXPATHLEN]; |
31 |
char Param6[MAXPATHLEN]; |
char Param6[MAXPATHLEN]; |
32 |
char Param7[MAXPATHLEN]; |
char Param7[MAXPATHLEN]; |
33 |
char Param8[MAXPATHLEN]; |
char Param8[MAXPATHLEN]; |
34 |
char Param9[MAXPATHLEN]; |
char Param9[MAXPATHLEN]; |
35 |
BOOL SleepFlag; |
BOOL SleepFlag; |
36 |
} |
} |
37 |
|
|
38 |
static int DlgPosX = -1000; |
static int DlgPosX = -1000; |
39 |
static int DlgPosY = 0; |
static int DlgPosY = 0; |
40 |
|
|
41 |
static PStatDlg StatDlg = NULL; |
static PStatDlg StatDlg = NULL; |
42 |
|
|
43 |
extern "C" { |
extern "C" { |
44 |
BOOL NextParam(PCHAR Param, int *i, PCHAR Buff, int BuffSize) |
BOOL NextParam(PCHAR Param, int *i, PCHAR Buff, int BuffSize) |
45 |
{ |
{ |
46 |
int j; |
int j; |
47 |
char c, q; |
char c, q; |
48 |
BOOL Quoted; |
BOOL Quoted; |
49 |
|
|
50 |
if ( *i >= (int)strlen(Param)) { |
if ( *i >= (int)strlen(Param)) { |
51 |
return FALSE; |
return FALSE; |
52 |
} |
} |
53 |
j = 0; |
j = 0; |
54 |
|
|
55 |
while (Param[*i]==' ') { |
while (Param[*i]==' ') { |
56 |
(*i)++; |
(*i)++; |
57 |
} |
} |
58 |
|
|
59 |
c = Param[*i]; |
c = Param[*i]; |
60 |
Quoted = ((c=='"') || (c=='\'')); |
Quoted = ((c=='"') || (c=='\'')); |
61 |
q = 0; |
q = 0; |
62 |
if (Quoted) { |
if (Quoted) { |
63 |
q = c; |
q = c; |
64 |
(*i)++; |
(*i)++; |
65 |
c = Param[*i]; |
c = Param[*i]; |
66 |
} |
} |
67 |
(*i)++; |
(*i)++; |
68 |
while ((c!=0) && (c!=q) && (Quoted || (c!=' ')) && |
while ((c!=0) && (c!=q) && (Quoted || (c!=' ')) && |
69 |
(Quoted || (c!=';')) && (j<BuffSize-1)) { |
(Quoted || (c!=';')) && (j<BuffSize-1)) { |
70 |
Buff[j] = c; |
Buff[j] = c; |
71 |
j++; |
j++; |
72 |
c = Param[*i]; |
c = Param[*i]; |
73 |
(*i)++; |
(*i)++; |
74 |
} |
} |
75 |
if (! Quoted && (c==';')) { |
if (! Quoted && (c==';')) { |
76 |
(*i)--; |
(*i)--; |
77 |
} |
} |
78 |
|
|
79 |
Buff[j] = 0; |
Buff[j] = 0; |
80 |
return (strlen(Buff)>0); |
return (strlen(Buff)>0); |
81 |
} |
} |
82 |
} |
} |
83 |
|
|
84 |
extern "C" { |
extern "C" { |
85 |
void ParseParam(PBOOL IOption, PBOOL VOption) |
void ParseParam(PBOOL IOption, PBOOL VOption) |
86 |
{ |
{ |
87 |
int i, j, k; |
int i, j, k; |
88 |
char *Param; |
char *Param; |
89 |
char Temp[MAXPATHLEN]; |
char Temp[MAXPATHLEN]; |
90 |
|
|
91 |
// Get home directory |
// Get home directory |
92 |
GetModuleFileName(AfxGetInstanceHandle(),FileName,sizeof(FileName)); |
GetModuleFileName(AfxGetInstanceHandle(),FileName,sizeof(FileName)); |
93 |
ExtractDirName(FileName,HomeDir); |
ExtractDirName(FileName,HomeDir); |
94 |
_chdir(HomeDir); |
_chdir(HomeDir); |
95 |
|
|
96 |
// Get command line parameters |
// Get command line parameters |
97 |
FileName[0] = 0; |
FileName[0] = 0; |
98 |
TopicName[0] = 0; |
TopicName[0] = 0; |
99 |
Param2[0] = 0; |
Param2[0] = 0; |
100 |
Param3[0] = 0; |
Param3[0] = 0; |
101 |
Param4[0] = 0; |
Param4[0] = 0; |
102 |
Param5[0] = 0; |
Param5[0] = 0; |
103 |
Param6[0] = 0; |
Param6[0] = 0; |
104 |
Param7[0] = 0; |
Param7[0] = 0; |
105 |
Param8[0] = 0; |
Param8[0] = 0; |
106 |
Param9[0] = 0; |
Param9[0] = 0; |
107 |
SleepFlag = FALSE; |
SleepFlag = FALSE; |
108 |
*IOption = FALSE; |
*IOption = FALSE; |
109 |
*VOption = FALSE; |
*VOption = FALSE; |
110 |
// 256バイト以上のコマンドラインパラメータ指定があると、BOF(Buffer Over Flow)で |
// 256バイト以上のコマンドラインパラメータ指定があると、BOF(Buffer Over Flow)で |
111 |
// 落ちるバグを修正。(2007.5.25 yutaka) |
// 落ちるバグを修正。(2007.5.25 yutaka) |
112 |
Param = GetCommandLine(); |
Param = GetCommandLine(); |
113 |
i = 0; |
i = 0; |
114 |
// the first term shuld be executable filename of TTMACRO |
// the first term shuld be executable filename of TTMACRO |
115 |
NextParam(Param, &i, Temp, sizeof(Temp)); |
NextParam(Param, &i, Temp, sizeof(Temp)); |
116 |
j = 0; |
j = 0; |
117 |
|
|
118 |
while (NextParam(Param, &i, Temp, sizeof(Temp))) { |
while (NextParam(Param, &i, Temp, sizeof(Temp))) { |
119 |
if (_strnicmp(Temp,"/D=",3)==0) { // DDE option |
if (_strnicmp(Temp,"/D=",3)==0) { // DDE option |
120 |
strncpy_s(TopicName, sizeof(TopicName), &Temp[3], _TRUNCATE); // BOF対策 |
strncpy_s(TopicName, sizeof(TopicName), &Temp[3], _TRUNCATE); // BOF対策 |
121 |
} |
} |
122 |
else if (_strnicmp(Temp,"/I",2)==0) { |
else if (_strnicmp(Temp,"/I",2)==0) { |
123 |
*IOption = TRUE; |
*IOption = TRUE; |
124 |
} |
} |
125 |
else if (_strnicmp(Temp,"/S",2)==0) { |
else if (_strnicmp(Temp,"/S",2)==0) { |
126 |
SleepFlag = TRUE; |
SleepFlag = TRUE; |
127 |
} |
} |
128 |
else if (_strnicmp(Temp,"/V",2)==0) { |
else if (_strnicmp(Temp,"/V",2)==0) { |
129 |
*VOption = TRUE; |
*VOption = TRUE; |
130 |
} |
} |
131 |
else { |
else { |
132 |
j++; |
j++; |
133 |
if (j==1) { |
if (j==1) { |
134 |
strncpy_s(FileName, sizeof(FileName),Temp, _TRUNCATE); |
strncpy_s(FileName, sizeof(FileName),Temp, _TRUNCATE); |
135 |
} |
} |
136 |
else if (j==2) { |
else if (j==2) { |
137 |
strncpy_s(Param2, sizeof(Param2),Temp, _TRUNCATE); |
strncpy_s(Param2, sizeof(Param2),Temp, _TRUNCATE); |
138 |
} |
} |
139 |
else if (j==3) { |
else if (j==3) { |
140 |
strncpy_s(Param3, sizeof(Param3),Temp, _TRUNCATE); |
strncpy_s(Param3, sizeof(Param3),Temp, _TRUNCATE); |
141 |
} |
} |
142 |
else if (j==4) { |
else if (j==4) { |
143 |
strncpy_s(Param4, sizeof(Param4),Temp, _TRUNCATE); |
strncpy_s(Param4, sizeof(Param4),Temp, _TRUNCATE); |
144 |
} |
} |
145 |
else if (j==5) { |
else if (j==5) { |
146 |
strncpy_s(Param5, sizeof(Param5),Temp, _TRUNCATE); |
strncpy_s(Param5, sizeof(Param5),Temp, _TRUNCATE); |
147 |
} |
} |
148 |
else if (j==6) { |
else if (j==6) { |
149 |
strncpy_s(Param6, sizeof(Param6),Temp, _TRUNCATE); |
strncpy_s(Param6, sizeof(Param6),Temp, _TRUNCATE); |
150 |
} |
} |
151 |
else if (j==7) { |
else if (j==7) { |
152 |
strncpy_s(Param7, sizeof(Param7),Temp, _TRUNCATE); |
strncpy_s(Param7, sizeof(Param7),Temp, _TRUNCATE); |
153 |
} |
} |
154 |
else if (j==8) { |
else if (j==8) { |
155 |
strncpy_s(Param8, sizeof(Param8),Temp, _TRUNCATE); |
strncpy_s(Param8, sizeof(Param8),Temp, _TRUNCATE); |
156 |
} |
} |
157 |
else if (j==9) { |
else if (j==9) { |
158 |
strncpy_s(Param9, sizeof(Param9),Temp, _TRUNCATE); |
strncpy_s(Param9, sizeof(Param9),Temp, _TRUNCATE); |
159 |
} |
} |
160 |
} |
} |
161 |
} |
} |
162 |
|
|
163 |
if (FileName[0]=='*') { |
if (FileName[0]=='*') { |
164 |
FileName[0] = 0; |
FileName[0] = 0; |
165 |
} |
} |
166 |
else if (FileName[0]!=0) { |
else if (FileName[0]!=0) { |
167 |
if (GetFileNamePos(FileName,&j,&k)) { |
if (GetFileNamePos(FileName,&j,&k)) { |
168 |
FitFileName(&FileName[k],sizeof(FileName)-k,".TTL"); |
FitFileName(&FileName[k],sizeof(FileName)-k,".TTL"); |
169 |
strncpy_s(ShortName, sizeof(ShortName),&FileName[k], _TRUNCATE); |
strncpy_s(ShortName, sizeof(ShortName),&FileName[k], _TRUNCATE); |
170 |
if (j==0) { |
if (j==0) { |
171 |
strncpy_s(FileName, sizeof(FileName),HomeDir, _TRUNCATE); |
strncpy_s(FileName, sizeof(FileName),HomeDir, _TRUNCATE); |
172 |
AppendSlash(FileName,sizeof(FileName)); |
AppendSlash(FileName,sizeof(FileName)); |
173 |
strncat_s(FileName,sizeof(FileName),ShortName,_TRUNCATE); |
strncat_s(FileName,sizeof(FileName),ShortName,_TRUNCATE); |
174 |
} |
} |
175 |
} |
} |
176 |
else { |
else { |
177 |
FileName[0] = 0; |
FileName[0] = 0; |
178 |
} |
} |
179 |
} |
} |
180 |
} |
} |
181 |
} |
} |
182 |
|
|
183 |
extern "C" { |
extern "C" { |
184 |
BOOL GetFileName(HWND HWin) |
BOOL GetFileName(HWND HWin) |
185 |
{ |
{ |
186 |
char FNFilter[31]; |
char FNFilter[31]; |
187 |
OPENFILENAME FNameRec; |
OPENFILENAME FNameRec; |
188 |
char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; |
char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; |
189 |
|
|
190 |
if (FileName[0]!=0) { |
if (FileName[0]!=0) { |
191 |
return FALSE; |
return FALSE; |
192 |
} |
} |
193 |
|
|
194 |
memset(FNFilter, 0, sizeof(FNFilter)); |
memset(FNFilter, 0, sizeof(FNFilter)); |
195 |
memset(&FNameRec, 0, sizeof(OPENFILENAME)); |
memset(&FNameRec, 0, sizeof(OPENFILENAME)); |
196 |
get_lang_msg("FILEDLG_OPEN_MACRO_FILTER", uimsg, sizeof(uimsg), "Macro files (*.ttl)\\0*.ttl\\0\\0", UILanguageFile); |
get_lang_msg("FILEDLG_OPEN_MACRO_FILTER", uimsg, sizeof(uimsg), "Macro files (*.ttl)\\0*.ttl\\0\\0", UILanguageFile); |
197 |
memcpy(FNFilter, uimsg, sizeof(FNFilter)); |
memcpy(FNFilter, uimsg, sizeof(FNFilter)); |
198 |
|
|
199 |
// sizeof(OPENFILENAME) では Windows98/NT で終了してしまうため (2006.8.14 maya) |
// sizeof(OPENFILENAME) では Windows98/NT で終了してしまうため (2006.8.14 maya) |
200 |
FNameRec.lStructSize = get_OPENFILENAME_SIZE(); |
FNameRec.lStructSize = get_OPENFILENAME_SIZE(); |
201 |
FNameRec.hwndOwner = HWin; |
FNameRec.hwndOwner = HWin; |
202 |
FNameRec.lpstrFilter = FNFilter; |
FNameRec.lpstrFilter = FNFilter; |
203 |
FNameRec.nFilterIndex = 1; |
FNameRec.nFilterIndex = 1; |
204 |
FNameRec.lpstrFile = FileName; |
FNameRec.lpstrFile = FileName; |
205 |
FNameRec.nMaxFile = sizeof(FileName); |
FNameRec.nMaxFile = sizeof(FileName); |
206 |
// 以前読み込んだ .ttl ファイルのパスを記憶できるように、初期ディレクトリを固定にしない。 |
// 以前読み込んだ .ttl ファイルのパスを記憶できるように、初期ディレクトリを固定にしない。 |
207 |
// (2008.4.7 yutaka) |
// (2008.4.7 yutaka) |
208 |
#if 0 |
#if 0 |
209 |
FNameRec.lpstrInitialDir = HomeDir; |
FNameRec.lpstrInitialDir = HomeDir; |
210 |
#endif |
#endif |
211 |
FNameRec.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
FNameRec.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
212 |
FNameRec.lpstrDefExt = "TTL"; |
FNameRec.lpstrDefExt = "TTL"; |
213 |
get_lang_msg("FILEDLG_OPEN_MACRO_TITLE", uimsg2, sizeof(uimsg2), "MACRO: Open macro", UILanguageFile); |
get_lang_msg("FILEDLG_OPEN_MACRO_TITLE", uimsg2, sizeof(uimsg2), "MACRO: Open macro", UILanguageFile); |
214 |
FNameRec.lpstrTitle = uimsg2; |
FNameRec.lpstrTitle = uimsg2; |
215 |
if (GetOpenFileName(&FNameRec)) { |
if (GetOpenFileName(&FNameRec)) { |
216 |
strncpy_s(ShortName, sizeof(ShortName), &(FileName[FNameRec.nFileOffset]), _TRUNCATE); |
strncpy_s(ShortName, sizeof(ShortName), &(FileName[FNameRec.nFileOffset]), _TRUNCATE); |
217 |
} |
} |
218 |
else { |
else { |
219 |
FileName[0] = 0; |
FileName[0] = 0; |
220 |
} |
} |
221 |
|
|
222 |
if (FileName[0]==0) { |
if (FileName[0]==0) { |
223 |
ShortName[0] = 0; |
ShortName[0] = 0; |
224 |
return FALSE; |
return FALSE; |
225 |
} |
} |
226 |
else { |
else { |
227 |
return TRUE; |
return TRUE; |
228 |
} |
} |
229 |
} |
} |
230 |
} |
} |
231 |
|
|
232 |
extern "C" { |
extern "C" { |
233 |
void SetDlgPos(int x, int y) |
void SetDlgPos(int x, int y) |
234 |
{ |
{ |
235 |
DlgPosX = x; |
DlgPosX = x; |
236 |
DlgPosY = y; |
DlgPosY = y; |
237 |
if (StatDlg!=NULL) { // update status box position |
if (StatDlg!=NULL) { // update status box position |
238 |
StatDlg->Update(NULL,NULL,TRUE,DlgPosX,DlgPosY); |
StatDlg->Update(NULL,NULL,TRUE,DlgPosX,DlgPosY); |
239 |
} |
} |
240 |
} |
} |
241 |
} |
} |
242 |
|
|
243 |
extern "C" { |
extern "C" { |
244 |
void OpenInpDlg(PCHAR Buff, PCHAR Text, PCHAR Caption, |
void OpenInpDlg(PCHAR Buff, PCHAR Text, PCHAR Caption, |
245 |
PCHAR Default, BOOL Paswd, BOOL SPECIAL) |
PCHAR Default, BOOL Paswd, BOOL SPECIAL) |
246 |
{ |
{ |
247 |
CInpDlg InpDlg(Buff,Text,Caption,Default,Paswd,SPECIAL,DlgPosX,DlgPosY); |
CInpDlg InpDlg(Buff,Text,Caption,Default,Paswd,SPECIAL,DlgPosX,DlgPosY); |
248 |
InpDlg.DoModal(); |
InpDlg.DoModal(); |
249 |
} |
} |
250 |
} |
} |
251 |
|
|
252 |
extern "C" { |
extern "C" { |
253 |
int OpenErrDlg(PCHAR Msg, PCHAR Line) |
int OpenErrDlg(PCHAR Msg, PCHAR Line) |
254 |
{ |
{ |
255 |
CErrDlg ErrDlg(Msg,Line,DlgPosX,DlgPosY); |
CErrDlg ErrDlg(Msg,Line,DlgPosX,DlgPosY); |
256 |
return ErrDlg.DoModal(); |
return ErrDlg.DoModal(); |
257 |
} |
} |
258 |
} |
} |
259 |
|
|
260 |
extern "C" { |
extern "C" { |
261 |
int OpenMsgDlg(PCHAR Text, PCHAR Caption, BOOL YesNo, BOOL SPECIAL) |
int OpenMsgDlg(PCHAR Text, PCHAR Caption, BOOL YesNo, BOOL SPECIAL) |
262 |
{ |
{ |
263 |
CMsgDlg MsgDlg(Text,Caption,YesNo,SPECIAL,DlgPosX,DlgPosY); |
CMsgDlg MsgDlg(Text,Caption,YesNo,SPECIAL,DlgPosX,DlgPosY); |
264 |
return MsgDlg.DoModal(); |
return MsgDlg.DoModal(); |
265 |
} |
} |
266 |
} |
} |
267 |
|
|
268 |
extern "C" { |
extern "C" { |
269 |
void OpenStatDlg(PCHAR Text, PCHAR Caption, BOOL SPECIAL) |
void OpenStatDlg(PCHAR Text, PCHAR Caption, BOOL SPECIAL) |
270 |
{ |
{ |
271 |
if (StatDlg==NULL) { |
if (StatDlg==NULL) { |
272 |
StatDlg = new CStatDlg(); |
StatDlg = new CStatDlg(); |
273 |
StatDlg->Create(Text,Caption,SPECIAL,DlgPosX,DlgPosY); |
StatDlg->Create(Text,Caption,SPECIAL,DlgPosX,DlgPosY); |
274 |
} |
} |
275 |
else {// if status box already exists, |
else {// if status box already exists, |
276 |
// update text and caption only. |
// update text and caption only. |
277 |
StatDlg->Update(Text,Caption,SPECIAL,32767,0); |
StatDlg->Update(Text,Caption,SPECIAL,32767,0); |
278 |
} |
} |
279 |
} |
} |
280 |
} |
} |
281 |
|
|
282 |
extern "C" { |
extern "C" { |
283 |
void CloseStatDlg() |
void CloseStatDlg() |
284 |
{ |
{ |
285 |
if (StatDlg==NULL) { |
if (StatDlg==NULL) { |
286 |
return; |
return; |
287 |
} |
} |
288 |
StatDlg->DestroyWindow(); |
StatDlg->DestroyWindow(); |
289 |
StatDlg = NULL; |
StatDlg = NULL; |
290 |
} |
} |
291 |
} |
} |