xref: /freebsd/contrib/dialog/samples/install/setup.c (revision a96ef4501919d7ac08e94e98dc34b0bdd744802b)
1f4f33ea0SBaptiste Daroussin /* Copyright (C) 1995 Florian La Roche */
2f4f33ea0SBaptiste Daroussin /* Who wants to help coding? I don't like doing this... */
3f4f33ea0SBaptiste Daroussin 
4f4f33ea0SBaptiste Daroussin /* You can just start setup as normal user and see how far it is coded
5*a96ef450SBaptiste Daroussin    right now. This will do a fake installation and won't actually change
6f4f33ea0SBaptiste Daroussin    any data on your computer. */
7f4f33ea0SBaptiste Daroussin 
8f4f33ea0SBaptiste Daroussin /* TODO: write a good package selection code
9f4f33ea0SBaptiste Daroussin          change functions to return better error code
10f4f33ea0SBaptiste Daroussin  */
11f4f33ea0SBaptiste Daroussin 
12f4f33ea0SBaptiste Daroussin /* Show an extra text-box with the contents of all external commands,
13f4f33ea0SBaptiste Daroussin    before they are executed. So you can abort the installation, if any
14f4f33ea0SBaptiste Daroussin    wrong commands are to be executed. (So don't format wrong partition.) */
15f4f33ea0SBaptiste Daroussin #define VERBOSE 1
16f4f33ea0SBaptiste Daroussin 
17f4f33ea0SBaptiste Daroussin /* If defined, don't actually execute any comands and don't actually modify
18f4f33ea0SBaptiste Daroussin    any files. So you can test any possible installation without doing any
19f4f33ea0SBaptiste Daroussin    damage to your computer.
20f4f33ea0SBaptiste Daroussin    The file FDISK.TEST is used instead of real "fdisk -l" output, so that
21f4f33ea0SBaptiste Daroussin    it can be started as normal user. */
22f4f33ea0SBaptiste Daroussin #define DEBUG_THIS 1
23f4f33ea0SBaptiste Daroussin 
24f4f33ea0SBaptiste Daroussin #include <dialog.h>
25f4f33ea0SBaptiste Daroussin 
26f4f33ea0SBaptiste Daroussin /* max length of a partition name like e.g. '/dev/hda1' */
27f4f33ea0SBaptiste Daroussin #define MAX_DEV_NAME 25
28f4f33ea0SBaptiste Daroussin 
29f4f33ea0SBaptiste Daroussin /* max number of possible Linux/Swap/MsDos partitions */
30f4f33ea0SBaptiste Daroussin #define MAX_PARTS 20
31f4f33ea0SBaptiste Daroussin 
32f4f33ea0SBaptiste Daroussin char *progname = NULL;
33f4f33ea0SBaptiste Daroussin 
34f4f33ea0SBaptiste Daroussin static void
error(const char * s)35f4f33ea0SBaptiste Daroussin error(const char *s)
36f4f33ea0SBaptiste Daroussin {
37f4f33ea0SBaptiste Daroussin     fprintf(stderr, "%s: %s\n", progname, s);
38f4f33ea0SBaptiste Daroussin     exit(1);
39f4f33ea0SBaptiste Daroussin }
40f4f33ea0SBaptiste Daroussin 
41f4f33ea0SBaptiste Daroussin static int
my_system(const char * s,...)42f4f33ea0SBaptiste Daroussin my_system(const char *s,...)
43f4f33ea0SBaptiste Daroussin {
44f4f33ea0SBaptiste Daroussin     int ret, i;
45f4f33ea0SBaptiste Daroussin     va_list ap;
46f4f33ea0SBaptiste Daroussin     char sh[200];
47f4f33ea0SBaptiste Daroussin 
48f4f33ea0SBaptiste Daroussin     va_start(ap, s);
49f4f33ea0SBaptiste Daroussin     vsprintf(sh, s, ap);
50f4f33ea0SBaptiste Daroussin     va_end(ap);
51f4f33ea0SBaptiste Daroussin 
52f4f33ea0SBaptiste Daroussin #ifdef	VERBOSE
53f4f33ea0SBaptiste Daroussin     i = dialog_msgbox("I will run the following command:", sh, 10, 65, 1);
54f4f33ea0SBaptiste Daroussin     dialog_clear();
55f4f33ea0SBaptiste Daroussin #ifdef DEBUG_THIS
56f4f33ea0SBaptiste Daroussin     return 0;
57f4f33ea0SBaptiste Daroussin #endif
58f4f33ea0SBaptiste Daroussin #endif
59f4f33ea0SBaptiste Daroussin     ret = system(sh);
60f4f33ea0SBaptiste Daroussin     if (!(ret >> 8))
61f4f33ea0SBaptiste Daroussin 	return 0;
62f4f33ea0SBaptiste Daroussin     i = dialog_msgbox("Error-Exit on the following command:",
63f4f33ea0SBaptiste Daroussin 		      sh, 12, 73, 1);
64f4f33ea0SBaptiste Daroussin     dialog_clear();
65f4f33ea0SBaptiste Daroussin     return 1;
66f4f33ea0SBaptiste Daroussin }
67f4f33ea0SBaptiste Daroussin 
68f4f33ea0SBaptiste Daroussin /* We support to install from DOS/Linux-partitions. */
69f4f33ea0SBaptiste Daroussin enum partition_type {
70f4f33ea0SBaptiste Daroussin     MsDos,
71f4f33ea0SBaptiste Daroussin     Linux,
72f4f33ea0SBaptiste Daroussin     Swap
73f4f33ea0SBaptiste Daroussin };
74f4f33ea0SBaptiste Daroussin 
75f4f33ea0SBaptiste Daroussin struct partition {
76f4f33ea0SBaptiste Daroussin     enum partition_type type;
77f4f33ea0SBaptiste Daroussin     char name[MAX_DEV_NAME];
78f4f33ea0SBaptiste Daroussin     int blocks;
79f4f33ea0SBaptiste Daroussin     int flag;
80f4f33ea0SBaptiste Daroussin } partitions[MAX_PARTS];
81f4f33ea0SBaptiste Daroussin int num_partition = 0;
82f4f33ea0SBaptiste Daroussin int num_linux = 0;
83f4f33ea0SBaptiste Daroussin int num_swap = 0;
84f4f33ea0SBaptiste Daroussin int num_msdos = 0;
85f4f33ea0SBaptiste Daroussin 
86f4f33ea0SBaptiste Daroussin static int
get_line(char * line,int size,FILE * f)87f4f33ea0SBaptiste Daroussin get_line(char *line, int size, FILE * f)
88f4f33ea0SBaptiste Daroussin {
89f4f33ea0SBaptiste Daroussin     char *ptr = line;
90f4f33ea0SBaptiste Daroussin     int c;
91f4f33ea0SBaptiste Daroussin 
92f4f33ea0SBaptiste Daroussin     if (feof(f))
93f4f33ea0SBaptiste Daroussin 	return -1;
94f4f33ea0SBaptiste Daroussin     while (size-- && ((c = getc(f)) != EOF) && (c != '\n'))
95f4f33ea0SBaptiste Daroussin 	*ptr++ = c;
96f4f33ea0SBaptiste Daroussin     *ptr++ = '\0';
97f4f33ea0SBaptiste Daroussin     return (int) (ptr - line);
98f4f33ea0SBaptiste Daroussin }
99f4f33ea0SBaptiste Daroussin 
100f4f33ea0SBaptiste Daroussin static void
read_partitions(void)101f4f33ea0SBaptiste Daroussin read_partitions(void)
102f4f33ea0SBaptiste Daroussin {
103f4f33ea0SBaptiste Daroussin     FILE *f;
104f4f33ea0SBaptiste Daroussin     char line[200];
105f4f33ea0SBaptiste Daroussin     int length;
106f4f33ea0SBaptiste Daroussin #ifndef DEBUG_THIS
107f4f33ea0SBaptiste Daroussin     int ret = system("fdisk -l 2>/dev/null 1>/tmp/fdisk.output");
108f4f33ea0SBaptiste Daroussin     if ((ret >> 8) != 0) {
109f4f33ea0SBaptiste Daroussin 	error("fdisk didn't run");
110f4f33ea0SBaptiste Daroussin     }
111f4f33ea0SBaptiste Daroussin     if ((f = fopen("/tmp/fdisk.output", "r")) == NULL)
112f4f33ea0SBaptiste Daroussin #else
113f4f33ea0SBaptiste Daroussin     if ((f = fopen("FDISK.TEST", "r")) == NULL)
114f4f33ea0SBaptiste Daroussin #endif
115f4f33ea0SBaptiste Daroussin 	error("cannot read fdisk output");
116f4f33ea0SBaptiste Daroussin 
117f4f33ea0SBaptiste Daroussin     while (num_partition <= MAX_PARTS
118f4f33ea0SBaptiste Daroussin 	   && (length = get_line(line, 200, f)) >= 0) {
119f4f33ea0SBaptiste Daroussin 	if (strncmp(line, "/dev/", 5) == 0) {
120f4f33ea0SBaptiste Daroussin 	    int n = 0;
121f4f33ea0SBaptiste Daroussin 	    char *s = line + 5;
122f4f33ea0SBaptiste Daroussin 	    char *t = partitions[num_partition].name;
123f4f33ea0SBaptiste Daroussin 	    strcpy(t, "/dev/");
124f4f33ea0SBaptiste Daroussin 	    t += 5;
125f4f33ea0SBaptiste Daroussin 	    while (n < MAX_DEV_NAME && *s != '\0'
126f4f33ea0SBaptiste Daroussin 		   && !isspace((unsigned char) *s)) {
127f4f33ea0SBaptiste Daroussin 		*t++ = *s++;
128f4f33ea0SBaptiste Daroussin 		n++;
129f4f33ea0SBaptiste Daroussin 	    }
130f4f33ea0SBaptiste Daroussin 	    *t = '\0';
131f4f33ea0SBaptiste Daroussin 	    /* Read the size of the partition. */
132f4f33ea0SBaptiste Daroussin 	    t = line + 37;
133f4f33ea0SBaptiste Daroussin 	    while (isspace((unsigned char) *t))
134f4f33ea0SBaptiste Daroussin 		t++;
135f4f33ea0SBaptiste Daroussin 	    partitions[num_partition].blocks = atoi(t);
136f4f33ea0SBaptiste Daroussin 	    if (strstr(line, "Linux native")) {
137f4f33ea0SBaptiste Daroussin 		partitions[num_partition].type = Linux;
138f4f33ea0SBaptiste Daroussin 		num_partition++;
139f4f33ea0SBaptiste Daroussin 		num_linux++;
140f4f33ea0SBaptiste Daroussin 	    } else if (strstr(line, "Linux swap")) {
141f4f33ea0SBaptiste Daroussin 		partitions[num_partition].type = Swap;
142f4f33ea0SBaptiste Daroussin 		num_partition++;
143f4f33ea0SBaptiste Daroussin 		num_swap++;
144f4f33ea0SBaptiste Daroussin 	    } else if (strstr(line, "DOS")) {
145f4f33ea0SBaptiste Daroussin 		partitions[num_partition].type = MsDos;
146f4f33ea0SBaptiste Daroussin 		num_partition++;
147f4f33ea0SBaptiste Daroussin 		num_msdos++;
148f4f33ea0SBaptiste Daroussin 	    }
149f4f33ea0SBaptiste Daroussin 	}
150f4f33ea0SBaptiste Daroussin     }
151f4f33ea0SBaptiste Daroussin     fclose(f);
152f4f33ea0SBaptiste Daroussin #ifndef DEBUG_THIS
153f4f33ea0SBaptiste Daroussin     unlink("/tmp/fdisk.output");
154f4f33ea0SBaptiste Daroussin #endif
155f4f33ea0SBaptiste Daroussin }
156f4f33ea0SBaptiste Daroussin 
157f4f33ea0SBaptiste Daroussin static int
select_partition(const char * title,const char * prompt,int y,int x)158f4f33ea0SBaptiste Daroussin select_partition(const char *title, const char *prompt, int y, int x)
159f4f33ea0SBaptiste Daroussin {
160f4f33ea0SBaptiste Daroussin     int i, num, ret;
161f4f33ea0SBaptiste Daroussin     char info[MAX_PARTS][40];
162f4f33ea0SBaptiste Daroussin     char *items[MAX_PARTS * 2];
163f4f33ea0SBaptiste Daroussin     int num_pa[MAX_PARTS];
164f4f33ea0SBaptiste Daroussin 
165f4f33ea0SBaptiste Daroussin     num = 0;
166f4f33ea0SBaptiste Daroussin     for (i = 0; i < num_partition; i++) {
167f4f33ea0SBaptiste Daroussin 	if (partitions[i].type == Linux) {
168f4f33ea0SBaptiste Daroussin 	    items[num * 2] = partitions[i].name;
169f4f33ea0SBaptiste Daroussin 	    sprintf(info[num], "Linux partition with %d blocks",
170f4f33ea0SBaptiste Daroussin 		    partitions[i].blocks);
171f4f33ea0SBaptiste Daroussin 	    items[num * 2 + 1] = info[num];
172f4f33ea0SBaptiste Daroussin 	    num_pa[num] = i;
173f4f33ea0SBaptiste Daroussin 	    num++;
174f4f33ea0SBaptiste Daroussin 	}
175f4f33ea0SBaptiste Daroussin     }
176f4f33ea0SBaptiste Daroussin     ret = dialog_menu(title, prompt, y + num, x, num, num, items);
177f4f33ea0SBaptiste Daroussin     dialog_clear();
178f4f33ea0SBaptiste Daroussin     if (ret >= 0)		/* item selected */
179f4f33ea0SBaptiste Daroussin 	ret = num_pa[ret];
180f4f33ea0SBaptiste Daroussin     return ret;
181f4f33ea0SBaptiste Daroussin }
182f4f33ea0SBaptiste Daroussin 
183f4f33ea0SBaptiste Daroussin static int
select_install_partition(void)184f4f33ea0SBaptiste Daroussin select_install_partition(void)
185f4f33ea0SBaptiste Daroussin {
186f4f33ea0SBaptiste Daroussin     return select_partition("Select Install Partition",
187f4f33ea0SBaptiste Daroussin 			    "\\nWhere do you want to install Linux?\\n", 9, 60);
188f4f33ea0SBaptiste Daroussin }
189f4f33ea0SBaptiste Daroussin 
190f4f33ea0SBaptiste Daroussin static int
select_source_partition(void)191f4f33ea0SBaptiste Daroussin select_source_partition(void)
192f4f33ea0SBaptiste Daroussin {
193f4f33ea0SBaptiste Daroussin     return select_partition("Select Source Partition",
194f4f33ea0SBaptiste Daroussin 			    "\\nOn which partition is the source?\\n", 9, 60);
195f4f33ea0SBaptiste Daroussin }
196f4f33ea0SBaptiste Daroussin 
197f4f33ea0SBaptiste Daroussin const char *null = ">/dev/null 2>/dev/null";
198f4f33ea0SBaptiste Daroussin const char *install_partition = NULL;
199f4f33ea0SBaptiste Daroussin 
200f4f33ea0SBaptiste Daroussin static void
extract_packages(const char * source_path)201f4f33ea0SBaptiste Daroussin extract_packages(const char *source_path)
202f4f33ea0SBaptiste Daroussin {
203f4f33ea0SBaptiste Daroussin #ifndef	DEBUG_THIS
204f4f33ea0SBaptiste Daroussin     FILE *f;
205f4f33ea0SBaptiste Daroussin #endif
206f4f33ea0SBaptiste Daroussin 
207f4f33ea0SBaptiste Daroussin     if (my_system("mkdir -p /install/var/installed/packages %s", null))
208f4f33ea0SBaptiste Daroussin 	return;
209f4f33ea0SBaptiste Daroussin     if (my_system("cd /install; for i in /source%s/*.tgz; do "
210f4f33ea0SBaptiste Daroussin 		  "tar xzplvvkf $i >> var/installed/packages/base "
211f4f33ea0SBaptiste Daroussin 		  "2>>var/installed/packages/ERROR; done", source_path))
212f4f33ea0SBaptiste Daroussin 	return;
213f4f33ea0SBaptiste Daroussin #ifndef	DEBUG_THIS
214f4f33ea0SBaptiste Daroussin     if ((f = fopen("/install/etc/fstab", "w")) == NULL) {
215f4f33ea0SBaptiste Daroussin 	/* i = */ dialog_msgbox("Error", "Cannot write /etc/fstab",
216f4f33ea0SBaptiste Daroussin 				12, 40, 1);
217f4f33ea0SBaptiste Daroussin 	return;
218f4f33ea0SBaptiste Daroussin     }
219f4f33ea0SBaptiste Daroussin     fprintf(f, "%s / ext2 defaults 1 1\n", install_partition);
220f4f33ea0SBaptiste Daroussin     fprintf(f, "none /proc proc defaults 0 2\n");
221f4f33ea0SBaptiste Daroussin     /* XXX write swap-partitions */
222f4f33ea0SBaptiste Daroussin     fclose(f);
223f4f33ea0SBaptiste Daroussin #endif
224f4f33ea0SBaptiste Daroussin }
225f4f33ea0SBaptiste Daroussin 
226f4f33ea0SBaptiste Daroussin static void
install_premounted(void)227f4f33ea0SBaptiste Daroussin install_premounted(void)
228f4f33ea0SBaptiste Daroussin {
229f4f33ea0SBaptiste Daroussin     extract_packages("");
230f4f33ea0SBaptiste Daroussin }
231f4f33ea0SBaptiste Daroussin 
232f4f33ea0SBaptiste Daroussin static void
install_harddisk(void)233f4f33ea0SBaptiste Daroussin install_harddisk(void)
234f4f33ea0SBaptiste Daroussin {
235f4f33ea0SBaptiste Daroussin     const char *name;
236f4f33ea0SBaptiste Daroussin     int part, ret;
237f4f33ea0SBaptiste Daroussin 
238f4f33ea0SBaptiste Daroussin     if ((part = select_source_partition()) <= -1)
239f4f33ea0SBaptiste Daroussin 	return;
240f4f33ea0SBaptiste Daroussin     name = partitions[part].name;
241f4f33ea0SBaptiste Daroussin 
242f4f33ea0SBaptiste Daroussin     if (my_system("mount -t ext2 %s /source %s", name, null))
243f4f33ea0SBaptiste Daroussin 	return;
244f4f33ea0SBaptiste Daroussin     ret = dialog_inputbox("Path in partition",
245f4f33ea0SBaptiste Daroussin 			  "Please enter the directory in which the "
246f4f33ea0SBaptiste Daroussin 			  "source files are.", 13, 50, "", FALSE);
247f4f33ea0SBaptiste Daroussin     dialog_clear();
248f4f33ea0SBaptiste Daroussin     if (ret != 0)
249f4f33ea0SBaptiste Daroussin 	return;
250f4f33ea0SBaptiste Daroussin     /* XXX strdup */
251f4f33ea0SBaptiste Daroussin     extract_packages(strdup(dialog_input_result));
252f4f33ea0SBaptiste Daroussin     if (my_system("umount /source %s", null))
253f4f33ea0SBaptiste Daroussin 	return;
254f4f33ea0SBaptiste Daroussin }
255f4f33ea0SBaptiste Daroussin 
256f4f33ea0SBaptiste Daroussin static void
install_nfs(void)257f4f33ea0SBaptiste Daroussin install_nfs(void)
258f4f33ea0SBaptiste Daroussin {
259f4f33ea0SBaptiste Daroussin     if (my_system("ifconfig eth0 134.96.81.36 netmask 255.255.255.224 "
260f4f33ea0SBaptiste Daroussin 		  "broadcast 134.96.81.63 %s", null))
261f4f33ea0SBaptiste Daroussin 	return;
262f4f33ea0SBaptiste Daroussin     if (my_system("route add -net 134.96.81.32 %s", null))
263f4f33ea0SBaptiste Daroussin 	return;
264f4f33ea0SBaptiste Daroussin     if (my_system("mount -t nfs 134.96.81.38:"
265f4f33ea0SBaptiste Daroussin 		  "/local/ftp/pub/linux/ELF.binary/tar /source %s", null))
266f4f33ea0SBaptiste Daroussin 	return;
267f4f33ea0SBaptiste Daroussin     extract_packages("/base");
268f4f33ea0SBaptiste Daroussin     if (my_system("umount /source %s", null))
269f4f33ea0SBaptiste Daroussin 	return;
270f4f33ea0SBaptiste Daroussin     if (my_system("ifconfig eth0 down %s", null))
271f4f33ea0SBaptiste Daroussin 	return;
272f4f33ea0SBaptiste Daroussin }
273f4f33ea0SBaptiste Daroussin 
274f4f33ea0SBaptiste Daroussin static void
main_install(void)275f4f33ea0SBaptiste Daroussin main_install(void)
276f4f33ea0SBaptiste Daroussin {
277f4f33ea0SBaptiste Daroussin     int part, ret;
278f4f33ea0SBaptiste Daroussin     const char *name;
279f4f33ea0SBaptiste Daroussin     char *items1[] =
280f4f33ea0SBaptiste Daroussin     {
281f4f33ea0SBaptiste Daroussin 	"1", "Harddisk Install",
282f4f33ea0SBaptiste Daroussin 	"2", "Network Install(NFS)",
283f4f33ea0SBaptiste Daroussin 	"3", "Premounted on /source"
284f4f33ea0SBaptiste Daroussin     };
285f4f33ea0SBaptiste Daroussin 
286f4f33ea0SBaptiste Daroussin     if (num_linux == 0) {
287f4f33ea0SBaptiste Daroussin 	/* XXX */
288f4f33ea0SBaptiste Daroussin 	return;
289f4f33ea0SBaptiste Daroussin     }
290f4f33ea0SBaptiste Daroussin     if ((part = select_install_partition()) <= -1)
291f4f33ea0SBaptiste Daroussin 	return;
292f4f33ea0SBaptiste Daroussin     install_partition = name = partitions[part].name;
293f4f33ea0SBaptiste Daroussin     if (my_system("mke2fs %s %s", name, null))
294f4f33ea0SBaptiste Daroussin 	return;
295f4f33ea0SBaptiste Daroussin     if (my_system("mount -t ext2 %s /install %s", name, null))
296f4f33ea0SBaptiste Daroussin 	return;
297f4f33ea0SBaptiste Daroussin     ret = dialog_menu("Choose install medium",
298f4f33ea0SBaptiste Daroussin 		      "\\nPlease say from where you want to install.\\n",
299f4f33ea0SBaptiste Daroussin 		      12, 62, 3, 3, items1);
300f4f33ea0SBaptiste Daroussin     dialog_clear();
301f4f33ea0SBaptiste Daroussin     switch (ret) {
302f4f33ea0SBaptiste Daroussin     case 0:
303f4f33ea0SBaptiste Daroussin 	install_harddisk();
304f4f33ea0SBaptiste Daroussin 	break;
305f4f33ea0SBaptiste Daroussin     case 1:
306f4f33ea0SBaptiste Daroussin 	install_nfs();
307f4f33ea0SBaptiste Daroussin 	break;
308f4f33ea0SBaptiste Daroussin     case 2:
309f4f33ea0SBaptiste Daroussin 	install_premounted();
310f4f33ea0SBaptiste Daroussin 	break;
311f4f33ea0SBaptiste Daroussin     case -2:			/* cancel */
312f4f33ea0SBaptiste Daroussin     case -1:
313f4f33ea0SBaptiste Daroussin 	break;			/* esc */
314f4f33ea0SBaptiste Daroussin     }
315f4f33ea0SBaptiste Daroussin     if (my_system("umount /install %s", null))
316f4f33ea0SBaptiste Daroussin 	return;
317f4f33ea0SBaptiste Daroussin }
318f4f33ea0SBaptiste Daroussin 
319f4f33ea0SBaptiste Daroussin int
main(int argc,char ** argv)320f4f33ea0SBaptiste Daroussin main(int argc, char **argv)
321f4f33ea0SBaptiste Daroussin {
322f4f33ea0SBaptiste Daroussin     int stop = 0;
323f4f33ea0SBaptiste Daroussin     int ret;
324f4f33ea0SBaptiste Daroussin     char *items1[] =
325f4f33ea0SBaptiste Daroussin     {
326f4f33ea0SBaptiste Daroussin 	"1", "Display a help text",
327f4f33ea0SBaptiste Daroussin 	"2", "Start an installation",
328f4f33ea0SBaptiste Daroussin 	"3", "Exit to the shell"
329f4f33ea0SBaptiste Daroussin     };
330f4f33ea0SBaptiste Daroussin 
331f4f33ea0SBaptiste Daroussin     progname = argv[0];
332f4f33ea0SBaptiste Daroussin 
333f4f33ea0SBaptiste Daroussin     read_partitions();
334f4f33ea0SBaptiste Daroussin     if (num_linux == 0) {
335f4f33ea0SBaptiste Daroussin 	printf("\n\nPlease start \"fdisk\" or \"cfdisk\" and create a"
336f4f33ea0SBaptiste Daroussin 	       "\nnative Linux-partition to install Linux on.\n\n");
337f4f33ea0SBaptiste Daroussin 	exit(1);
338f4f33ea0SBaptiste Daroussin     }
339f4f33ea0SBaptiste Daroussin 
340f4f33ea0SBaptiste Daroussin     init_dialog();
341f4f33ea0SBaptiste Daroussin 
342f4f33ea0SBaptiste Daroussin     while (!stop) {
343f4f33ea0SBaptiste Daroussin 	ret = dialog_menu("Linux Install Utility",
344f4f33ea0SBaptiste Daroussin 			  "\\nCopyright (C) 1995 Florian La Roche\\n"
345f4f33ea0SBaptiste Daroussin 			  "\\nPre-Alpha version, be careful, read the doc!!!"
346f4f33ea0SBaptiste Daroussin 			  "\\nemail: florian@jurix.jura.uni-sb.de, "
347f4f33ea0SBaptiste Daroussin 			  "flla@stud.uni-sb.de\\n",
348f4f33ea0SBaptiste Daroussin 			  15, 64, 3, 3, items1);
349f4f33ea0SBaptiste Daroussin 	dialog_clear();
350f4f33ea0SBaptiste Daroussin 	switch (ret) {
351f4f33ea0SBaptiste Daroussin 	case 0:
352f4f33ea0SBaptiste Daroussin 	    ret = dialog_textbox("Help Text",
353f4f33ea0SBaptiste Daroussin 				 "setup.help", 20, 70);
354f4f33ea0SBaptiste Daroussin 	    dialog_clear();
355f4f33ea0SBaptiste Daroussin 	    break;
356f4f33ea0SBaptiste Daroussin 	case 1:
357f4f33ea0SBaptiste Daroussin 	    main_install();
358f4f33ea0SBaptiste Daroussin 	    break;
359f4f33ea0SBaptiste Daroussin 	case 2:
360f4f33ea0SBaptiste Daroussin 	    stop = 1;
361f4f33ea0SBaptiste Daroussin 	    break;
362f4f33ea0SBaptiste Daroussin 	case -2:		/* cancel */
363f4f33ea0SBaptiste Daroussin 	case -1:
364f4f33ea0SBaptiste Daroussin 	    stop = 1;		/* esc */
365f4f33ea0SBaptiste Daroussin 	}
366f4f33ea0SBaptiste Daroussin     }
367f4f33ea0SBaptiste Daroussin     end_dialog();
368f4f33ea0SBaptiste Daroussin     printf("\nExecute \"reboot\" to restart your computer...\n");
369f4f33ea0SBaptiste Daroussin 
370f4f33ea0SBaptiste Daroussin     exit(0);
371f4f33ea0SBaptiste Daroussin }
372