Mercurial > mplayer.hg
annotate gui/cfg.c @ 33259:04dc3e55cd90
Increase the maximum value of the DVB timeout to 240 seconds.
Some devices may need more time for the initial tune (e.g. firmware loading).
Let the user specify higher timeout value if there is need to.
The default remains 30 seconds.
author | iive |
---|---|
date | Sun, 01 May 2011 18:07:59 +0000 |
parents | 8fc02babf810 |
children | 284fc94290b9 |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
19 #include <stdlib.h> | |
20 #include <stdio.h> | |
21 #include <string.h> | |
22 | |
33179 | 23 #include "cfg.h" |
24 #include "interface.h" | |
25 | |
23077 | 26 #include "config.h" |
27 #include "help_mp.h" | |
30653
3d23e24c5c60
Declare externally used variables from vd.c as extern in vd.h.
diego
parents:
30633
diff
changeset
|
28 #include "libmpcodecs/vd.h" |
23077 | 29 #include "libvo/video_out.h" |
31385
f2aebe1309b2
Declare stop_xscreensaver extern in x11_common.h instead of all over the code.
diego
parents:
30901
diff
changeset
|
30 #include "libvo/x11_common.h" |
33179 | 31 #include "m_config.h" |
32 #include "m_option.h" | |
33 #include "mixer.h" | |
34 #include "mp_msg.h" | |
35 #include "mpcommon.h" | |
36 #include "mplayer.h" | |
37 #include "parser-cfg.h" | |
38 #include "path.h" | |
32981 | 39 #include "sub/font_load.h" |
33179 | 40 #include "sub/sub.h" |
23077 | 41 |
33220 | 42 int gtkCacheOn; |
33180 | 43 int gtkCacheSize = 2048; |
44 | |
33220 | 45 int gtkVfPP; |
23077 | 46 |
33180 | 47 #ifdef CONFIG_DXR3 |
33249 | 48 int gtkVfLAVC; |
33180 | 49 char *gtkDXR3Device; |
50 #endif | |
51 | |
33220 | 52 int gtkAutoSyncOn; |
53 int gtkAutoSync; | |
23077 | 54 |
33220 | 55 int gtkAONorm; |
56 int gtkAOSurround; | |
57 int gtkAOExtraStereo; | |
33221 | 58 float gtkAOExtraStereoMul = 1.0f; |
33180 | 59 |
27390
9d95dc936e66
Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents:
27387
diff
changeset
|
60 #ifdef CONFIG_ALSA |
33179 | 61 char *gtkAOALSAMixer; |
62 char *gtkAOALSAMixerChannel; | |
63 char *gtkAOALSADevice; | |
23077 | 64 #endif |
33180 | 65 |
66 #ifdef CONFIG_OSS_AUDIO | |
67 char *gtkAOOSSMixer; | |
68 char *gtkAOOSSMixerChannel; | |
69 char *gtkAOOSSDevice; | |
23077 | 70 #endif |
33180 | 71 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
72 #ifdef CONFIG_ESD |
33179 | 73 char *gtkAOESDDevice; |
23077 | 74 #endif |
75 | |
33180 | 76 #ifdef CONFIG_SDL |
77 char *gtkAOSDLDriver; | |
78 #endif | |
23077 | 79 |
33220 | 80 int gtkEnableAudioEqualizer; |
23077 | 81 |
33220 | 82 int gtkSubDumpMPSub; |
83 int gtkSubDumpSrt; | |
23077 | 84 |
33180 | 85 #ifdef CONFIG_ASS |
86 gtkASS_t gtkASS; | |
87 #endif | |
88 | |
33220 | 89 int gtkEnablePlayBar = 1; |
90 int gtkLoadFullscreen; | |
33179 | 91 int gtkShowVideoWindow = 1; |
23077 | 92 |
33179 | 93 int gui_save_pos = 1; |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
94 int gui_main_pos_x = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
95 int gui_main_pos_y = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
96 int gui_sub_pos_x = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
97 int gui_sub_pos_y = -3; |
23077 | 98 |
33179 | 99 static m_config_t *gui_conf; |
23077 | 100 |
33179 | 101 static const m_option_t gui_opts[] = { |
33242 | 102 { "cache", >kCacheOn, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
103 { "cache_size", >kCacheSize, CONF_TYPE_INT, CONF_RANGE, 32, 1048576, NULL }, | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
104 |
33242 | 105 { "vf_pp", >kVfPP, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33223 | 106 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27359
diff
changeset
|
107 #ifdef CONFIG_DXR3 |
33249 | 108 { "vf_lavc", >kVfLAVC, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33242 | 109 { "vo_dxr3_device", >kDXR3Device, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
23077 | 110 #endif |
111 | |
33242 | 112 { "autosync", >kAutoSyncOn, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
113 { "autosync_size", >kAutoSync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL }, | |
23077 | 114 |
33242 | 115 { "ao_volnorm", >kAONorm, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
116 { "ao_surround", >kAOSurround, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
117 { "ao_extra_stereo", >kAOExtraStereo, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
118 { "ao_extra_stereo_coefficient", >kAOExtraStereoMul, CONF_TYPE_FLOAT, CONF_RANGE, -10, 10, NULL }, | |
33223 | 119 |
27390
9d95dc936e66
Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents:
27387
diff
changeset
|
120 #ifdef CONFIG_ALSA |
33242 | 121 { "ao_alsa_mixer", >kAOALSAMixer, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
122 { "ao_alsa_mixer_channel", >kAOALSAMixerChannel, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
123 { "ao_alsa_device", >kAOALSADevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
23077 | 124 #endif |
33223 | 125 |
126 #ifdef CONFIG_OSS_AUDIO | |
33242 | 127 { "ao_oss_mixer", >kAOOSSMixer, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
128 { "ao_oss_mixer_channel", >kAOOSSMixerChannel, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
129 { "ao_oss_device", >kAOOSSDevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
23077 | 130 #endif |
33223 | 131 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
132 #ifdef CONFIG_ESD |
33242 | 133 { "ao_esd_device", >kAOESDDevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
23077 | 134 #endif |
135 | |
33223 | 136 #ifdef CONFIG_SDL |
33242 | 137 { "ao_sdl_subdriver", >kAOSDLDriver, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
23077 | 138 #endif |
139 | |
33242 | 140 { "enable_audio_equ", >kEnableAudioEqualizer, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
23077 | 141 |
33242 | 142 { "equ_channel_1", >kEquChannel1, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
143 { "equ_channel_2", >kEquChannel2, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
144 { "equ_channel_3", >kEquChannel3, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
145 { "equ_channel_4", >kEquChannel4, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
146 { "equ_channel_5", >kEquChannel5, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
147 { "equ_channel_6", >kEquChannel6, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
148 |
33223 | 149 #define audio_equ_row(i, j) \ |
33242 | 150 { "equ_band_" # i # j, >kEquChannels[i][j], CONF_TYPE_FLOAT, CONF_RANGE, -15.0, 15.0, NULL }, |
33179 | 151 audio_equ_row(0, 0) audio_equ_row(0, 1) audio_equ_row(0, 2) audio_equ_row(0, 3) audio_equ_row(0, 4) audio_equ_row(0, 5) audio_equ_row(0, 6) audio_equ_row(0, 7) audio_equ_row(0, 8) audio_equ_row(0, 9) |
152 audio_equ_row(1, 0) audio_equ_row(1, 1) audio_equ_row(1, 2) audio_equ_row(1, 3) audio_equ_row(1, 4) audio_equ_row(1, 5) audio_equ_row(1, 6) audio_equ_row(1, 7) audio_equ_row(1, 8) audio_equ_row(1, 9) | |
153 audio_equ_row(2, 0) audio_equ_row(2, 1) audio_equ_row(2, 2) audio_equ_row(2, 3) audio_equ_row(2, 4) audio_equ_row(2, 5) audio_equ_row(2, 6) audio_equ_row(2, 7) audio_equ_row(2, 8) audio_equ_row(2, 9) | |
154 audio_equ_row(3, 0) audio_equ_row(3, 1) audio_equ_row(3, 2) audio_equ_row(3, 3) audio_equ_row(3, 4) audio_equ_row(3, 5) audio_equ_row(3, 6) audio_equ_row(3, 7) audio_equ_row(3, 8) audio_equ_row(3, 9) | |
155 audio_equ_row(4, 0) audio_equ_row(4, 1) audio_equ_row(4, 2) audio_equ_row(4, 3) audio_equ_row(4, 4) audio_equ_row(4, 5) audio_equ_row(4, 6) audio_equ_row(4, 7) audio_equ_row(4, 8) audio_equ_row(4, 9) | |
156 audio_equ_row(5, 0) audio_equ_row(5, 1) audio_equ_row(5, 2) audio_equ_row(5, 3) audio_equ_row(5, 4) audio_equ_row(5, 5) audio_equ_row(5, 6) audio_equ_row(5, 7) audio_equ_row(5, 8) audio_equ_row(5, 9) | |
23077 | 157 #undef audio_equ_row |
158 | |
33223 | 159 { "playbar", >kEnablePlayBar, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
160 { "load_fullscreen", >kLoadFullscreen, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
161 { "show_videowin", >kShowVideoWindow, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
162 | |
163 { "gui_save_pos", &gui_save_pos, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
164 { "gui_main_pos_x", &gui_main_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
165 { "gui_main_pos_y", &gui_main_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
166 { "gui_video_out_pos_x", &gui_sub_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
167 { "gui_video_out_pos_y", &gui_sub_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
168 | |
169 // NOTE TO MYSELF: Do we really need all/any non-gtkOptions, i.e. override mplayer options? | |
170 | |
171 { "gui_skin", &skinName, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
172 | |
173 { "stopxscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
174 | |
175 { "cdrom_device", &cdrom_device, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
176 { "dvd_device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
177 | |
178 { "osd_level", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL }, | |
179 | |
180 { "vo_driver", &video_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
181 { "v_vfm", &video_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
182 | |
183 { "vf_autoq", &auto_quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL }, | |
184 { "vo_direct_render", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
185 { "vo_doublebuffering", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
186 { "vo_panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL }, | |
187 | |
188 { "v_flip", &flip, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL }, | |
189 { "v_framedrop", &frame_dropping, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL }, | |
190 { "v_idx", &index_mode, CONF_TYPE_INT, CONF_RANGE, -1, 2, NULL }, | |
191 { "v_ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
192 | |
193 { "ao_driver", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
194 { "a_afm", &audio_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
195 | |
196 { "softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
197 | |
198 { "sub_auto_load", &sub_auto, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
199 #ifdef CONFIG_ICONV | |
200 { "sub_cp", &sub_cp, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
201 #endif | |
202 { "sub_overlap", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL }, | |
203 { "sub_pos", &sub_pos, CONF_TYPE_INT, CONF_RANGE, 0, 200, NULL }, | |
204 { "sub_unicode", &sub_unicode, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
205 | |
206 { "font_factor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0, NULL }, | |
207 { "font_name", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
208 | |
209 #ifdef CONFIG_FREETYPE | |
210 { "font_encoding", &subtitle_font_encoding, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
211 { "font_text_scale", &text_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL }, | |
212 { "font_osd_scale", &osd_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL }, | |
213 { "font_blur", &subtitle_font_radius, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL }, | |
214 { "font_outline", &subtitle_font_thickness, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL }, | |
215 { "font_autoscale", &subtitle_autoscale, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL }, | |
216 #endif | |
217 | |
218 #ifdef CONFIG_ASS | |
219 { "ass_enabled", &ass_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
220 { "ass_use_margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
221 { "ass_top_margin", &ass_top_margin, CONF_TYPE_INT, CONF_RANGE, 0, 512, NULL }, | |
222 { "ass_bottom_margin", &ass_bottom_margin, CONF_TYPE_INT, CONF_RANGE, 0, 512, NULL }, | |
223 #endif | |
224 | |
33179 | 225 { NULL, NULL, 0, 0, 0, 0, NULL } |
23077 | 226 }; |
227 | |
33179 | 228 static char *gfgets(char *str, int size, FILE *f) |
23077 | 229 { |
33179 | 230 char *s, c; |
231 | |
232 s = fgets(str, size, f); | |
233 | |
234 if (s) { | |
235 c = s[strlen(s) - 1]; | |
236 | |
237 if (c == '\n' || c == '\r') | |
238 s[strlen(s) - 1] = 0; | |
239 | |
240 c = s[strlen(s) - 1]; | |
241 | |
242 if (c == '\n' || c == '\r') | |
243 s[strlen(s) - 1] = 0; | |
244 } | |
245 | |
246 return s; | |
23077 | 247 } |
248 | |
33179 | 249 int cfg_read(void) |
23077 | 250 { |
33179 | 251 char *cfg; |
252 FILE *f; | |
253 | |
254 // configuration | |
255 | |
256 cfg = get_path("gui.conf"); | |
257 | |
258 mp_msg(MSGT_GPLAYER, MSGL_V, "[cfg] reading config file: %s\n", cfg); | |
259 | |
260 gui_conf = m_config_new(); | |
261 m_config_register_options(gui_conf, gui_opts); | |
262 | |
263 if (!disable_gui_conf && (m_config_parse_config_file(gui_conf, cfg) < 0)) { | |
264 mp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_ConfigFileError); | |
265 // exit(1); | |
266 } | |
267 | |
268 free(cfg); | |
23077 | 269 |
33179 | 270 // playlist |
271 | |
272 cfg = get_path("gui.pl"); | |
273 f = fopen(cfg, "rt"); | |
274 | |
275 if (f) { | |
276 while (!feof(f)) { | |
277 char tmp[512]; | |
278 plItem *item; | |
23077 | 279 |
33179 | 280 if (gfgets(tmp, 512, f) == NULL) |
281 continue; | |
282 | |
283 item = calloc(1, sizeof(plItem)); | |
284 item->path = strdup(tmp); | |
285 gfgets(tmp, 512, f); | |
286 item->name = strdup(tmp); | |
287 gtkSet(gtkAddPlItem, 0, (void *)item); | |
288 } | |
289 | |
290 fclose(f); | |
23077 | 291 } |
33179 | 292 |
293 free(cfg); | |
294 | |
295 // URL list | |
296 | |
297 cfg = get_path("gui.url"); | |
298 f = fopen(cfg, "rt"); | |
23077 | 299 |
33179 | 300 if (f) { |
301 while (!feof(f)) { | |
302 char tmp[512]; | |
303 URLItem *item; | |
304 | |
305 if (gfgets(tmp, 512, f) == NULL) | |
306 continue; | |
307 | |
308 item = calloc(1, sizeof(URLItem)); | |
309 item->url = strdup(tmp); | |
310 gtkSet(gtkAddURLItem, 0, (void *)item); | |
311 } | |
312 | |
313 fclose(f); | |
23077 | 314 } |
33179 | 315 |
316 free(cfg); | |
317 | |
318 // directory history | |
319 | |
320 cfg = get_path("gui.history"); | |
321 f = fopen(cfg, "rt+"); | |
322 | |
323 if (f) { | |
324 int i = 0; | |
23077 | 325 |
33179 | 326 while (!feof(f)) { |
327 char tmp[512]; | |
328 | |
329 if (gfgets(tmp, 512, f) == NULL) | |
330 continue; | |
331 | |
332 fsHistory[i++] = gstrdup(tmp); | |
333 } | |
334 | |
335 fclose(f); | |
23077 | 336 } |
337 | |
33179 | 338 free(cfg); |
339 | |
340 return 0; | |
23077 | 341 } |
342 | |
33179 | 343 int cfg_write(void) |
23077 | 344 { |
33179 | 345 char *cfg; |
346 FILE *f; | |
347 int i; | |
348 | |
349 // configuration | |
350 | |
351 cfg = get_path("gui.conf"); | |
352 f = fopen(cfg, "wt+"); | |
353 | |
354 if (f) { | |
355 for (i = 0; gui_opts[i].name; i++) { | |
356 char *v = m_option_print(&gui_opts[i], gui_opts[i].p); | |
357 | |
358 if (v == (char *)-1) { | |
359 mp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_UnableToSaveOption, gui_opts[i].name); | |
360 v = NULL; | |
361 } | |
23077 | 362 |
33179 | 363 if (v) { |
364 fprintf(f, "%s = \"%s\"\n", gui_opts[i].name, v); | |
365 free(v); | |
366 } | |
367 } | |
368 | |
369 fclose(f); | |
23077 | 370 } |
33179 | 371 |
372 free(cfg); | |
373 | |
374 // playlist | |
375 | |
376 cfg = get_path("gui.pl"); | |
377 f = fopen(cfg, "wt+"); | |
378 | |
379 if (f) { | |
380 plCurrent = plList; | |
381 | |
382 while (plCurrent) { | |
383 if (plCurrent->path && plCurrent->name) { | |
384 fprintf(f, "%s\n", plCurrent->path); | |
385 fprintf(f, "%s\n", plCurrent->name); | |
386 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
387 |
33179 | 388 plCurrent = plCurrent->next; |
389 } | |
390 | |
391 fclose(f); | |
23077 | 392 } |
33179 | 393 |
394 free(cfg); | |
395 | |
396 // URL list | |
397 | |
398 cfg = get_path("gui.url"); | |
399 f = fopen(cfg, "wt+"); | |
400 | |
401 if (f) { | |
402 while (URLList) { | |
403 if (URLList->url) | |
404 fprintf(f, "%s\n", URLList->url); | |
405 | |
406 URLList = URLList->next; | |
407 } | |
23077 | 408 |
33179 | 409 fclose(f); |
23077 | 410 } |
33179 | 411 |
412 free(cfg); | |
413 | |
414 // directory history | |
415 | |
416 cfg = get_path("gui.history"); | |
417 f = fopen(cfg, "wt+"); | |
418 | |
419 if (f) { | |
420 int i = 0; | |
23077 | 421 |
33179 | 422 // while (fsHistory[i] != NULL) |
423 for (i = 0; i < 5; i++) | |
424 if (fsHistory[i]) | |
425 fprintf(f, "%s\n", fsHistory[i]); | |
23077 | 426 |
33179 | 427 fclose(f); |
428 } | |
429 | |
430 free(cfg); | |
431 | |
432 return 0; | |
23077 | 433 } |