1 /*=============================================================================
\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\r
12 / 1. Redistributions of source code must retain the above copyright
\r
13 / notice, this list of conditions and the following disclaimer.
\r
14 / 2. Redistributions in binary form must reproduce the above copyright
\r
15 / notice, this list of conditions and the following disclaimer in the
\r
16 / documentation and/or other materials provided with the distribution.
\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
\r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
\r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
\r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
\r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
\r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
\r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
\r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
\r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
28 /============================================================================*/
\r
31 #include <windows.h>
\r
35 #include <mbstring.h>
\r
37 #include <windowsx.h>
\r
38 #include <commctrl.h>
\r
40 #include <winsock.h>
\r
43 #include "resource.h"
\r
46 /*=====
\83v
\83\8d\83g
\83^
\83C
\83v =====*/
\r
48 static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New);
\r
49 static void AddOneFnameToMenu(char *Host, char *User, char *Remote, int Num);
\r
50 static void RemoveAllHistoryFromMenu(void);
\r
52 /*=====
\8aO
\95\94\8eQ
\8fÆ =====*/
\r
55 extern int FileHist;
\r
56 extern int PassToHist;
\r
58 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
60 static HISTORYDATA *HistoryBase = NULL;
\r
61 static int HistoryNum = 0;
\r
63 /*
\83q
\83X
\83g
\83\8a\82Ì
\83\81\83j
\83\85\81[
\8d\80\96Ú
\82ÌID */
\r
64 static int MenuHistId[HISTORY_MAX] = {
\r
65 MENU_HIST_1, MENU_HIST_2, MENU_HIST_3, MENU_HIST_4, MENU_HIST_5,
\r
66 MENU_HIST_6, MENU_HIST_7, MENU_HIST_8, MENU_HIST_9, MENU_HIST_10,
\r
67 MENU_HIST_11, MENU_HIST_12, MENU_HIST_13, MENU_HIST_14, MENU_HIST_15,
\r
68 MENU_HIST_16, MENU_HIST_17, MENU_HIST_18, MENU_HIST_19, MENU_HIST_20
\r
73 /*-----
\83z
\83X
\83g
\8fî
\95ñ
\82ð
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\82É
\92Ç
\89Á
\82·
\82é ----------------------------
\r
76 * HOSTDATA *Host :
\83z
\83X
\83g
\83f
\81[
\83^
\r
77 * int TrMode :
\93]
\91\97\83\82\81[
\83h
\r
81 *----------------------------------------------------------------------------*/
\r
83 void AddHostToHistory(HOSTDATA *Host, int TrMode)
\r
87 CopyHostToHistory(Host, &New);
\r
89 AddHistoryToHistory(&New);
\r
94 /*-----
\83q
\83X
\83g
\83\8a\82ð
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\82É
\92Ç
\89Á
\82·
\82é ------------------------------
\r
97 * HISTORYDATA *Hist :
\83q
\83X
\83g
\83\8a\83f
\81[
\83^
\r
101 *----------------------------------------------------------------------------*/
\r
103 void AddHistoryToHistory(HISTORYDATA *Hist)
\r
107 CheckHistoryNum(1);
\r
108 if(FileHist > HistoryNum)
\r
110 New = malloc(sizeof(HISTORYDATA));
\r
113 memcpy(New, Hist, sizeof(HISTORYDATA));
\r
114 New->Next = HistoryBase;
\r
123 /*-----
\83q
\83X
\83g
\83\8a\82Ì
\90\94\82ð
\95Ô
\82· ----------------------------------------------------
\r
129 * int
\83q
\83X
\83g
\83\8a\82Ì
\90\94\r
130 *----------------------------------------------------------------------------*/
\r
132 int AskHistoryNum(void)
\r
134 return(HistoryNum);
\r
138 /*-----
\83q
\83X
\83g
\83\8a\82Ì
\90\94\82ð
\83`
\83F
\83b
\83N
\82µ
\91½
\82·
\82¬
\82½
\82ç
\8dí
\8f\9c --------------------------------
\r
141 * int Space :
\8bó
\82¯
\82Ä
\82¨
\82
\8cÂ
\90\94 (0
\81`)
\r
145 *----------------------------------------------------------------------------*/
\r
147 void CheckHistoryNum(int Space)
\r
154 if(HistoryNum > FileHist-Space)
\r
156 /*
\8ec
\82·
\82×
\82«
\83q
\83X
\83g
\83\8a\82ð
\92T
\82· */
\r
159 for(i = 0; i < FileHist-Space; i++)
\r
165 /*
\82¢
\82ç
\82È
\82¢
\83q
\83X
\83g
\83\8a\82ð
\8fÁ
\82· */
\r
167 HistoryBase = NULL;
\r
183 /*-----
\83z
\83X
\83g
\8fî
\95ñ
\82ð
\83q
\83X
\83g
\83\8a\82É
\83Z
\83b
\83g ------------------------------------------
\r
186 * HOSTDATA *Host :
\83z
\83X
\83g
\83f
\81[
\83^
\r
187 * HISTORYDATA *New :
\83q
\83X
\83g
\83\8a\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
191 *----------------------------------------------------------------------------*/
\r
193 static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New)
\r
195 strcpy(New->HostAdrs, Host->HostAdrs);
\r
196 strcpy(New->UserName, Host->UserName);
\r
197 if(PassToHist == YES)
\r
198 strcpy(New->PassWord, Host->PassWord);
\r
200 strcpy(New->PassWord, "");
\r
201 strcpy(New->Account, Host->Account);
\r
202 strcpy(New->LocalInitDir, Host->LocalInitDir);
\r
203 strcpy(New->RemoteInitDir, Host->RemoteInitDir);
\r
204 strcpy(New->ChmodCmd, Host->ChmodCmd);
\r
205 strcpy(New->LsName, Host->LsName);
\r
206 strcpy(New->InitCmd, Host->InitCmd);
\r
207 New->Port = Host->Port;
\r
208 New->KanjiCode = Host->KanjiCode;
\r
209 New->KanaCnv = Host->KanaCnv;
\r
210 New->NameKanjiCode = Host->NameKanjiCode;
\r
211 New->NameKanaCnv = Host->NameKanaCnv;
\r
212 New->Pasv = Host->Pasv;
\r
213 New->FireWall = Host->FireWall;
\r
214 New->ListCmdOnly = Host->ListCmdOnly;
\r
215 New->UseNLST_R = Host->UseNLST_R;
\r
216 New->TimeZone = Host->TimeZone;
\r
217 New->HostType = Host->HostType;
\r
218 New->SyncMove = Host->SyncMove;
\r
219 New->NoFullPath = Host->NoFullPath;
\r
220 New->Sort = Host->Sort;
\r
221 New->Security = Host->Security;
\r
222 New->Dialup = Host->Dialup;
\r
223 New->DialupAlways = Host->DialupAlways;
\r
224 New->DialupNotify = Host->DialupNotify;
\r
225 strcpy(New->DialEntry, Host->DialEntry);
\r
230 /*-----
\83q
\83X
\83g
\83\8a\8fî
\95ñ
\82ð
\83z
\83X
\83g
\8fî
\95ñ
\82É
\83Z
\83b
\83g --------------------------------------
\r
233 * HISTORYDATA *Hist :
\83q
\83X
\83g
\83\8a\r
234 * HOSTDATA *Host :
\83z
\83X
\83g
\83f
\81[
\83^
\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
238 *----------------------------------------------------------------------------*/
\r
240 void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host)
\r
242 CopyDefaultHost(Host);
\r
244 strcpy(Host->HostAdrs, Hist->HostAdrs);
\r
245 strcpy(Host->UserName, Hist->UserName);
\r
246 if(PassToHist == YES)
\r
247 strcpy(Host->PassWord, Hist->PassWord);
\r
249 strcpy(Host->PassWord, "");
\r
250 strcpy(Host->Account, Hist->Account);
\r
251 strcpy(Host->LocalInitDir, Hist->LocalInitDir);
\r
252 strcpy(Host->RemoteInitDir, Hist->RemoteInitDir);
\r
253 strcpy(Host->ChmodCmd, Hist->ChmodCmd);
\r
254 strcpy(Host->LsName, Hist->LsName);
\r
255 strcpy(Host->InitCmd, Hist->InitCmd);
\r
256 Host->Port = Hist->Port;
\r
257 Host->KanjiCode = Hist->KanjiCode;
\r
258 Host->KanaCnv = Hist->KanaCnv;
\r
259 Host->NameKanjiCode = Hist->NameKanjiCode;
\r
260 Host->NameKanaCnv = Hist->NameKanaCnv;
\r
261 Host->Pasv = Hist->Pasv;
\r
262 Host->FireWall = Hist->FireWall;
\r
263 Host->ListCmdOnly = Hist->ListCmdOnly;
\r
264 Host->UseNLST_R = Hist->UseNLST_R;
\r
265 Host->TimeZone = Hist->TimeZone;
\r
266 Host->HostType = Hist->HostType;
\r
267 Host->SyncMove = Hist->SyncMove;
\r
268 Host->NoFullPath = Hist->NoFullPath;
\r
269 Host->Sort = Hist->Sort;
\r
270 Host->Security = Hist->Security;
\r
271 Host->Dialup = Hist->Dialup;
\r
272 Host->DialupAlways = Hist->DialupAlways;
\r
273 Host->DialupNotify = Hist->DialupNotify;
\r
274 strcpy(Host->DialEntry, Hist->DialEntry);
\r
279 /*-----
\83q
\83X
\83g
\83\8a\8fî
\95ñ
\82Ì
\8f\89\8aú
\92l
\82ð
\8eæ
\93¾ --------------------------------------------
\r
282 * HISTORYDATA *Set :
\83q
\83X
\83g
\83\8a\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
286 *----------------------------------------------------------------------------*/
\r
288 void CopyDefaultHistory(HISTORYDATA *Set)
\r
292 CopyDefaultHost(&Host);
\r
293 CopyHostToHistory(&Host, Set);
\r
298 /*-----
\91S
\83q
\83X
\83g
\83\8a\82ð
\83\81\83j
\83\85\81[
\82É
\83Z
\83b
\83g ------------------------------------------
\r
305 *----------------------------------------------------------------------------*/
\r
307 void SetAllHistoryToMenu(void)
\r
312 RemoveAllHistoryFromMenu();
\r
315 for(i = 0; i < HistoryNum; i++)
\r
317 AddOneFnameToMenu(Pos->HostAdrs, Pos->UserName, Pos->RemoteInitDir, i);
\r
324 /*-----
\83q
\83X
\83g
\83\8a\82ð
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á ----------------------------------------------
\r
327 * char *Host :
\83z
\83X
\83g
\96¼
\r
328 * char *User :
\83\86\81[
\83U
\96¼
\r
329 * char *Remote :
\83z
\83X
\83g
\82Ì
\83t
\83H
\83\8b\83_
\r
330 * int Num :
\94Ô
\8d\86\r
334 *----------------------------------------------------------------------------*/
\r
336 static void AddOneFnameToMenu(char *Host, char *User, char *Remote, int Num)
\r
339 char Tmp[HOST_ADRS_LEN+USER_NAME_LEN+INIT_DIR_LEN+7+1];
\r
341 hMenu = GetSubMenu(GetMenu(GetMainHwnd()), 0);
\r
344 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
\r
347 sprintf(Tmp, "&%d %s (%s) %s", Num+1, Host, User, Remote);
\r
349 sprintf(Tmp, "&0 %s (%s) %s", Host, User, Remote);
\r
351 sprintf(Tmp, "&* %s (%s) %s", Host, User, Remote);
\r
353 AppendMenu(hMenu, MF_STRING, MenuHistId[Num], Tmp);
\r
359 /*-----
\91S
\83q
\83X
\83g
\83\8a\82ð
\83\81\83j
\83\85\81[
\82©
\82ç
\8dí
\8f\9c ------------------------------------------
\r
366 *----------------------------------------------------------------------------*/
\r
368 static void RemoveAllHistoryFromMenu(void)
\r
374 hMenu = GetSubMenu(GetMenu(GetMainHwnd()), 0);
\r
375 Cnt = GetMenuItemCount(hMenu);
\r
376 for(i = DEF_FMENU_ITEMS; i < Cnt; i++)
\r
378 DeleteMenu(hMenu, DEF_FMENU_ITEMS, MF_BYPOSITION);
\r
384 /*-----
\8ew
\92è
\83\81\83j
\83\85\81[
\83R
\83}
\83\93\83h
\82É
\91Î
\89\9e\82·
\82é
\83q
\83X
\83g
\83\8a\82ð
\95Ô
\82· --------------------------
\r
387 * int MenuCmd :
\8eæ
\82è
\8fo
\82·
\83q
\83X
\83g
\83\8a\82É
\8a\84\82è
\93\96\82Ä
\82ç
\82ê
\82½
\83\81\83j
\83\85\81[
\83R
\83}
\83\93\83h (MENU_xxx)
\r
388 * HISTORYDATA *Buf :
\83q
\83X
\83g
\83\8a\83f
\81[
\83^
\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
391 * int
\83X
\83e
\81[
\83^
\83X
\r
393 *----------------------------------------------------------------------------*/
\r
395 int GetHistoryByCmd(int MenuCmd, HISTORYDATA *Buf)
\r
403 for(i = 0; i < HistoryNum; i++)
\r
405 if(MenuHistId[i] == MenuCmd)
\r
407 memcpy(Buf, Pos, sizeof(HISTORYDATA));
\r
416 /*-----
\8ew
\92è
\94Ô
\8d\86\82É
\91Î
\89\9e\82·
\82é
\83q
\83X
\83g
\83\8a\82ð
\95Ô
\82· --------------------------------------
\r
419 * int Num :
\94Ô
\8d\86(0
\81`)
\r
420 * HISTORYDATA *Buf :
\83q
\83X
\83g
\83\8a\83f
\81[
\83^
\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
423 * int
\83X
\83e
\81[
\83^
\83X
\r
425 *----------------------------------------------------------------------------*/
\r
427 int GetHistoryByNum(int Num, HISTORYDATA *Buf)
\r
429 return(GetHistoryByCmd(MenuHistId[Num], Buf));
\r