起動時初期設定ファイルを %APPDATA%/teraterm5/ にコピー
- %APPDATA%/teraterm5/TERATERM.INI が存在しないとき
- ttermpro.exe が存在するフォルダの設定ファイルを
- %APPDATA%/teraterm5/ へコピー
- 次の3ファイル
@@ -109,6 +109,33 @@ | ||
109 | 109 | memcpy(&pm->ts, ts, sizeof(TTTSet)); |
110 | 110 | } |
111 | 111 | |
112 | +static void CopyFiles(const wchar_t *file_list[], const wchar_t *src_dir, const wchar_t *dest_dir) | |
113 | +{ | |
114 | + for (;;) { | |
115 | + const wchar_t *filename = *file_list; | |
116 | + file_list++; | |
117 | + if (filename == NULL) { | |
118 | + break; | |
119 | + } | |
120 | + | |
121 | + wchar_t *dest = NULL; | |
122 | + awcscats(&dest, dest_dir, L"\\", filename, NULL); | |
123 | + | |
124 | + size_t len = wcslen(dest); | |
125 | + if (dest[len - 1] == '\\') { | |
126 | + // フォルダ作成 | |
127 | + CreateDirectoryW(dest, NULL); | |
128 | + } | |
129 | + else { | |
130 | + wchar_t *src = NULL; | |
131 | + awcscats(&src, src_dir, L"\\", filename, NULL); | |
132 | + CopyFileW(src, dest, TRUE); // TRUE = do not copy if exists | |
133 | + free(src); | |
134 | + } | |
135 | + free(dest); | |
136 | + } | |
137 | +} | |
138 | + | |
112 | 139 | BOOL WINAPI StartTeraTerm(PTTSet ts) |
113 | 140 | { |
114 | 141 | if (FirstInstance) { |
@@ -140,49 +167,41 @@ | ||
140 | 167 | CreateDirectoryW(ts->HomeDirW, NULL); |
141 | 168 | SetCurrentDirectoryW(ts->HomeDirW); // TODO 必要?? |
142 | 169 | |
143 | -#if 1 | |
144 | - { | |
145 | - // TERATERM.INI のフルパス | |
146 | - wchar_t *setup = NULL; | |
147 | - awcscats(&setup, ts->HomeDirW, L"\\TERATERM.INI", NULL); | |
170 | + // TERATERM.INI のフルパス | |
171 | + ts->SetupFNameW = NULL; | |
172 | + awcscats(&ts->SetupFNameW, ts->HomeDirW, L"\\TERATERM.INI", NULL); | |
173 | + WideCharToACP_t(ts->SetupFNameW, ts->SetupFName, _countof(ts->SetupFName)); | |
148 | 174 | |
149 | - // ファイルある? | |
150 | - if (GetFileAttributesW(setup) == INVALID_FILE_ATTRIBUTES) { | |
151 | - // exeフォルダからコピーする | |
152 | - wchar_t *src_ini = NULL; | |
153 | - awcscats(&src_ini, ts->ExeDirW, L"\\TERATERM.INI", NULL); | |
154 | - CopyFileW(src_ini, setup, TRUE); | |
155 | - free(src_ini); | |
156 | - } | |
175 | + // KEYBOARD.CNF のフルパス | |
176 | + ts->KeyCnfFNW = NULL; | |
177 | + awcscats(&ts->KeyCnfFNW, ts->HomeDirW, L"\\KEYBOARD.CNF", NULL); | |
178 | + WideCharToACP_t(ts->KeyCnfFNW, ts->KeyCnfFN, _countof(ts->KeyCnfFN)); | |
157 | 179 | |
158 | - ts->SetupFNameW = setup; | |
159 | - } | |
160 | -#else | |
161 | - ts->SetupFNameW = GetDefaultSetupFNameW(ts->HomeDirW); | |
180 | + // TERATERM.INI が存在する? | |
181 | + if (GetFileAttributesW(ts->SetupFNameW) == INVALID_FILE_ATTRIBUTES) { | |
182 | + // 存在しない場合、設定ファイルを個人フォルダへコピーする | |
183 | + // TODO 設定ファイルの unicode, ansi変換 | |
184 | + static const wchar_t *filelist[] = { | |
185 | + L"TERATERM.INI", | |
186 | + L"KEYBOARD.CNF", | |
187 | + L"cygterm.cfg", | |
188 | +#if 0 | |
189 | + L"theme\\", | |
190 | + L"theme\\Advanced.sample", | |
191 | + L"theme\\ImageFile.INI", | |
192 | + L"theme\\scale\\", | |
193 | + L"theme\\scale\\23.jpg", | |
194 | + L"theme\\scale\\43.jpg", | |
195 | + L"theme\\Scale.INI", | |
196 | + L"theme\\tile\\", | |
197 | + L"theme\\tile\\03.jpg", | |
198 | + L"theme\\tile\\44.jpg", | |
199 | + L"theme\\Tile.INI", | |
162 | 200 | #endif |
163 | - WideCharToACP_t(ts->SetupFNameW, ts->SetupFName, _countof(ts->SetupFName)); | |
164 | - | |
165 | -#if 1 | |
166 | - { | |
167 | - // KEYBOARD.CNF のフルパス | |
168 | - wchar_t *keycnf = NULL; | |
169 | - awcscats(&keycnf, ts->HomeDirW, L"\\KEYBOARD.CNF", NULL); | |
170 | - | |
171 | - // ファイルある? | |
172 | - if (GetFileAttributesW(keycnf) == INVALID_FILE_ATTRIBUTES) { | |
173 | - // exeフォルダからコピーする | |
174 | - wchar_t *src_ini = NULL; | |
175 | - awcscats(&src_ini, ts->ExeDirW, L"\\KEYBOARD.CNF", NULL); | |
176 | - CopyFileW(src_ini, keycnf, TRUE); | |
177 | - free(src_ini); | |
178 | - } | |
179 | - | |
180 | - ts->KeyCnfFNW = keycnf; | |
201 | + NULL, | |
202 | + }; | |
203 | + CopyFiles(filelist, ts->ExeDirW, ts->HomeDirW); | |
181 | 204 | } |
182 | -#else | |
183 | - ts->KeyCnfFNW = GetDefaultFNameW(ts->HomeDirW, L"KEYBOARD.CNF"); | |
184 | -#endif | |
185 | - WideCharToACP_t(ts->KeyCnfFNW, ts->KeyCnfFN, _countof(ts->KeyCnfFN)); | |
186 | 205 | |
187 | 206 | if (FirstInstance) { |
188 | 207 | FirstInstance = FALSE; |