]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/install+setup/setup/main.c
git-svn-id: http://svn.ipfire.org/svn/ipfire/IPFire/source@16 ea5c0bd1-69bd-2848...
[people/pmueller/ipfire-2.x.git] / src / install+setup / setup / main.c
1 /* SmoothWall setup program.
2 *
3 * This program is distributed under the terms of the GNU General Public
4 * Licence. See the file COPYING for details.
5 *
6 * (c) Lawrence Manning, 2001
7 * Contains main entry point, and misc functions.
8 *
9 * modified 16/11/2002 eoberlander - French language added
10 *
11 * $Id: main.c,v 1.4.2.7 2005/12/01 20:13:08 eoberlander Exp $
12 *
13 */
14
15 #include "setup.h"
16
17 FILE *flog = NULL;
18 char *mylog;
19
20 char **ctr = NULL;
21
22 int automode = 0;
23
24 extern char *bz_tr[];
25 extern char *cs_tr[];
26 extern char *da_tr[];
27 extern char *en_tr[];
28 extern char *es_tr[];
29 extern char *fi_tr[];
30 extern char *fr_tr[];
31 extern char *hu_tr[];
32 extern char *la_tr[];
33 extern char *nl_tr[];
34 extern char *de_tr[];
35 extern char *tr_tr[];
36 extern char *it_tr[];
37 extern char *el_tr[];
38 extern char *sk_tr[];
39 extern char *so_tr[];
40 extern char *sv_tr[];
41 extern char *no_tr[];
42 extern char *pl_tr[];
43 extern char *pt_tr[];
44 extern char *vi_tr[];
45
46 int main(int argc, char *argv[])
47 {
48 #ifdef LANG_EN_ONLY
49 char *shortlangnames[] = { "en", NULL };
50 char **langtrs[] = { en_tr, NULL };
51 #else
52 char *shortlangnames[] = { "bz", "cs", "da", "de", "en", "es", "fr", "el", "it", "la", "hu", "nl", "no", "pl", "pt", "sk", "so", "fi", "sv", "tr", "vi", NULL };
53 char **langtrs[] = { bz_tr, cs_tr, da_tr, de_tr, en_tr, es_tr, fr_tr, el_tr, it_tr, la_tr, hu_tr, nl_tr, no_tr, pl_tr, pt_tr, sk_tr, so_tr, fi_tr, sv_tr, tr_tr, vi_tr, NULL };
54 #endif
55 int choice;
56 char *sections[11]; /* need to fill this out AFTER knowning lang */
57 int rc;
58 struct keyvalue *kv;
59 char selectedshortlang[STRING_SIZE] = "en";
60 char title[STRING_SIZE];
61 int langcounter;
62 int autook = 0;
63
64 /* Log file/terminal stuff. */
65 if (argc >= 2)
66 mylog = argv[1];
67 else
68 mylog = strdup("/root/setup.log");
69
70 if (!(flog = fopen(mylog, "w+")))
71 {
72 printf("Couldn't open log terminal\n");
73 return 1;
74 }
75
76 if (argc >= 3)
77 automode = 1;
78
79 fprintf(flog, "Setup program started.\n");
80
81 kv = initkeyvalues();
82 if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
83 {
84 printf("%s is not properly installed.\n", NAME);
85 return 1;
86 }
87 findkey(kv, "LANGUAGE", selectedshortlang);
88
89 for (langcounter = 0; langtrs[langcounter]; langcounter++)
90 {
91 if (strcmp(selectedshortlang, shortlangnames[langcounter]) == 0)
92 {
93 ctr = langtrs[langcounter];
94 break;
95 }
96 }
97
98 if (!ctr)
99 {
100 /* zh,lt,ro,ru,th languages not available in setup, so use English */
101 for (choice = 0; shortlangnames[choice]; choice++)
102 {
103 if (strcmp(shortlangnames[choice], "en") == 0)
104 break;
105 }
106 if (!shortlangnames[choice])
107 goto EXIT;
108 ctr = langtrs[choice];
109 }
110
111 sections[0] = ctr[TR_KEYBOARD_MAPPING];
112 sections[1] = ctr[TR_TIMEZONE];
113 sections[2] = ctr[TR_HOSTNAME];
114 sections[3] = ctr[TR_DOMAINNAME];
115 sections[4] = ctr[TR_ISDN_CONFIGURATION];
116 sections[5] = ctr[TR_NETWORKING];
117 sections[6] = ctr[TR_ROOT_PASSWORD];
118 sections[7] = ctr[TR_ADMIN_PASSWORD];
119 sections[8] = NULL;
120
121 newtInit();
122 newtCls();
123 FILE *f_title;
124 if ((f_title = fopen ("/etc/issue", "r")))
125 {
126 fgets (title, STRING_SIZE, f_title);
127 if (title[strlen(title) - 1] == '\n')
128 title[strlen(title) - 1] = '\0';
129 fclose (f_title);
130 } else {
131 sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
132 }
133 newtDrawRootText(14, 0, title);
134 newtPushHelpLine(ctr[TR_HELPLINE]);
135
136 if (automode == 0)
137 {
138 choice = 0;
139 for (;;)
140 {
141 rc = newtWinMenu(ctr[TR_SECTION_MENU],
142 ctr[TR_SELECT_THE_ITEM], 50, 5, 5, 11,
143 sections, &choice, ctr[TR_OK], ctr[TR_QUIT], NULL);
144
145 if (rc == 2)
146 break;
147
148 switch (choice)
149 {
150 case 0:
151 handlekeymap();
152 break;
153
154 case 1:
155 handletimezone();
156 break;
157
158 case 2:
159 handlehostname();
160 break;
161
162 case 3:
163 handledomainname();
164 break;
165
166 case 4:
167 handleisdn();
168 break;
169
170 case 5:
171 handlenetworking();
172 break;
173
174 case 6:
175 handlerootpassword();
176 break;
177
178 case 7:
179 handleadminpassword();
180 break;
181
182 default:
183 break;
184 }
185 }
186 }
187 else
188 {
189 if (!(handlekeymap()))
190 goto EXIT;
191 if (!(handletimezone()))
192 goto EXIT;
193 if (!(handlehostname()))
194 goto EXIT;
195 if (!(handledomainname()))
196 goto EXIT;
197 if (!(handleisdn()))
198 goto EXIT;
199 if (!(handlenetworking()))
200 goto EXIT;
201 if (!(handledhcp()))
202 goto EXIT;
203 if (!(handlerootpassword()))
204 goto EXIT;
205 if (!(handleadminpassword()))
206 goto EXIT;
207
208 autook = 1;
209 }
210
211 EXIT:
212 if (automode != 0)
213 {
214 sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
215 if (autook)
216 newtWinMessage(title, ctr[TR_OK], ctr[TR_SETUP_FINISHED]);
217 else
218 newtWinMessage(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_SETUP_NOT_COMPLETE]);
219 }
220
221 fprintf(flog, "Setup program ended.\n");
222 fflush(flog);
223 fclose(flog);
224
225 newtFinished();
226
227 return 0;
228 }
229