summaryrefslogtreecommitdiff
path: root/Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 10:17:20 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 10:17:20 +0000
commit271d5c18b3f17c605d78fc469361c2413bd5e1e8 (patch)
tree7a86505144675c94f9b31e0aa044ded15e61c46a /Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c
parente8b20fd294c403053ac130d3f576c19b4c578b8b (diff)
new build system
git-svn-id: svn://tug.org/texlive/trunk@12460 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c')
-rw-r--r--Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c371
1 files changed, 0 insertions, 371 deletions
diff --git a/Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c b/Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c
deleted file mode 100644
index ae569813e86..00000000000
--- a/Build/source/utils/dialog/dialog-1.1-20080819/samples/install/setup.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/* Copyright (C) 1995 Florian La Roche */
-/* Who wants to help coding? I don't like doing this... */
-
-/* You can just start setup as normal user and see how far it is coded
- right now. This will do a fake installation and won't actually chnage
- any data on your computer. */
-
-/* TODO: write a good package selection code
- change functions to return better error code
- */
-
-/* Show an extra text-box with the contents of all external commands,
- before they are executed. So you can abort the installation, if any
- wrong commands are to be executed. (So don't format wrong partition.) */
-#define VERBOSE 1
-
-/* If defined, don't actually execute any comands and don't actually modify
- any files. So you can test any possible installation without doing any
- damage to your computer.
- The file FDISK.TEST is used instead of real "fdisk -l" output, so that
- it can be started as normal user. */
-#define DEBUG_THIS 1
-
-#include <dialog.h>
-
-/* max length of a partition name like e.g. '/dev/hda1' */
-#define MAX_DEV_NAME 25
-
-/* max number of possible Linux/Swap/MsDos partitions */
-#define MAX_PARTS 20
-
-char *progname = NULL;
-
-static void
-error(const char *s)
-{
- fprintf(stderr, "%s: %s\n", progname, s);
- exit(1);
-}
-
-static int
-my_system(const char *s,...)
-{
- int ret, i;
- va_list ap;
- char sh[200];
-
- va_start(ap, s);
- vsprintf(sh, s, ap);
- va_end(ap);
-
-#ifdef VERBOSE
- i = dialog_msgbox("I will run the following command:", sh, 10, 65, 1);
- dialog_clear();
-#ifdef DEBUG_THIS
- return 0;
-#endif
-#endif
- ret = system(sh);
- if (!(ret >> 8))
- return 0;
- i = dialog_msgbox("Error-Exit on the following command:",
- sh, 12, 73, 1);
- dialog_clear();
- return 1;
-}
-
-/* We support to install from DOS/Linux-partitions. */
-enum partition_type {
- MsDos,
- Linux,
- Swap
-};
-
-struct partition {
- enum partition_type type;
- char name[MAX_DEV_NAME];
- int blocks;
- int flag;
-} partitions[MAX_PARTS];
-int num_partition = 0;
-int num_linux = 0;
-int num_swap = 0;
-int num_msdos = 0;
-
-static int
-get_line(char *line, int size, FILE * f)
-{
- char *ptr = line;
- int c;
-
- if (feof(f))
- return -1;
- while (size-- && ((c = getc(f)) != EOF) && (c != '\n'))
- *ptr++ = c;
- *ptr++ = '\0';
- return (int) (ptr - line);
-}
-
-static void
-read_partitions(void)
-{
- FILE *f;
- char line[200];
- int length;
-#ifndef DEBUG_THIS
- int ret = system("fdisk -l 2>/dev/null 1>/tmp/fdisk.output");
- if ((ret >> 8) != 0) {
- error("fdisk didn't run");
- }
- if ((f = fopen("/tmp/fdisk.output", "r")) == NULL)
-#else
- if ((f = fopen("FDISK.TEST", "r")) == NULL)
-#endif
- error("cannot read fdisk output");
-
- while (num_partition <= MAX_PARTS
- && (length = get_line(line, 200, f)) >= 0) {
- if (strncmp(line, "/dev/", 5) == 0) {
- int n = 0;
- char *s = line + 5;
- char *t = partitions[num_partition].name;
- strcpy(t, "/dev/");
- t += 5;
- while (n < MAX_DEV_NAME && *s != '\0'
- && !isspace((unsigned char) *s)) {
- *t++ = *s++;
- n++;
- }
- *t = '\0';
- /* Read the size of the partition. */
- t = line + 37;
- while (isspace((unsigned char) *t))
- t++;
- partitions[num_partition].blocks = atoi(t);
- if (strstr(line, "Linux native")) {
- partitions[num_partition].type = Linux;
- num_partition++;
- num_linux++;
- } else if (strstr(line, "Linux swap")) {
- partitions[num_partition].type = Swap;
- num_partition++;
- num_swap++;
- } else if (strstr(line, "DOS")) {
- partitions[num_partition].type = MsDos;
- num_partition++;
- num_msdos++;
- }
- }
- }
- fclose(f);
-#ifndef DEBUG_THIS
- unlink("/tmp/fdisk.output");
-#endif
-}
-
-static int
-select_partition(const char *title, const char *prompt, int y, int x)
-{
- int i, num, ret;
- char info[MAX_PARTS][40];
- char *items[MAX_PARTS * 2];
- int num_pa[MAX_PARTS];
-
- num = 0;
- for (i = 0; i < num_partition; i++) {
- if (partitions[i].type == Linux) {
- items[num * 2] = partitions[i].name;
- sprintf(info[num], "Linux partition with %d blocks",
- partitions[i].blocks);
- items[num * 2 + 1] = info[num];
- num_pa[num] = i;
- num++;
- }
- }
- ret = dialog_menu(title, prompt, y + num, x, num, num, items);
- dialog_clear();
- if (ret >= 0) /* item selected */
- ret = num_pa[ret];
- return ret;
-}
-
-static int
-select_install_partition(void)
-{
- return select_partition("Select Install Partition",
- "\\nWhere do you want to install Linux?\\n", 9, 60);
-}
-
-static int
-select_source_partition(void)
-{
- return select_partition("Select Source Partition",
- "\\nOn which partition is the source?\\n", 9, 60);
-}
-
-const char *null = ">/dev/null 2>/dev/null";
-const char *install_partition = NULL;
-
-static void
-extract_packages(const char *source_path)
-{
-#ifndef DEBUG_THIS
- FILE *f;
-#endif
-
- if (my_system("mkdir -p /install/var/installed/packages %s", null))
- return;
- if (my_system("cd /install; for i in /source%s/*.tgz; do "
- "tar xzplvvkf $i >> var/installed/packages/base "
- "2>>var/installed/packages/ERROR; done", source_path))
- return;
-#ifndef DEBUG_THIS
- if ((f = fopen("/install/etc/fstab", "w")) == NULL) {
- /* i = */ dialog_msgbox("Error", "Cannot write /etc/fstab",
- 12, 40, 1);
- return;
- }
- fprintf(f, "%s / ext2 defaults 1 1\n", install_partition);
- fprintf(f, "none /proc proc defaults 0 2\n");
- /* XXX write swap-partitions */
- fclose(f);
-#endif
-}
-
-static void
-install_premounted(void)
-{
- extract_packages("");
-}
-
-static void
-install_harddisk(void)
-{
- const char *name;
- int part, ret;
-
- if ((part = select_source_partition()) <= -1)
- return;
- name = partitions[part].name;
-
- if (my_system("mount -t ext2 %s /source %s", name, null))
- return;
- ret = dialog_inputbox("Path in partition",
- "Please enter the directory in which the "
- "source files are.", 13, 50, "", FALSE);
- dialog_clear();
- if (ret != 0)
- return;
- /* XXX strdup */
- extract_packages(strdup(dialog_input_result));
- if (my_system("umount /source %s", null))
- return;
-}
-
-static void
-install_nfs(void)
-{
- if (my_system("ifconfig eth0 134.96.81.36 netmask 255.255.255.224 "
- "broadcast 134.96.81.63 %s", null))
- return;
- if (my_system("route add -net 134.96.81.32 %s", null))
- return;
- if (my_system("mount -t nfs 134.96.81.38:"
- "/local/ftp/pub/linux/ELF.binary/tar /source %s", null))
- return;
- extract_packages("/base");
- if (my_system("umount /source %s", null))
- return;
- if (my_system("ifconfig eth0 down %s", null))
- return;
-}
-
-static void
-main_install(void)
-{
- int part, ret;
- const char *name;
- char *items1[] =
- {
- "1", "Harddisk Install",
- "2", "Network Install(NFS)",
- "3", "Premounted on /source"
- };
-
- if (num_linux == 0) {
- /* XXX */
- return;
- }
- if ((part = select_install_partition()) <= -1)
- return;
- install_partition = name = partitions[part].name;
- if (my_system("mke2fs %s %s", name, null))
- return;
- if (my_system("mount -t ext2 %s /install %s", name, null))
- return;
- ret = dialog_menu("Choose install medium",
- "\\nPlease say from where you want to install.\\n",
- 12, 62, 3, 3, items1);
- dialog_clear();
- switch (ret) {
- case 0:
- install_harddisk();
- break;
- case 1:
- install_nfs();
- break;
- case 2:
- install_premounted();
- break;
- case -2: /* cancel */
- case -1:
- break; /* esc */
- }
- if (my_system("umount /install %s", null))
- return;
-}
-
-int
-main(int argc, char **argv)
-{
- int stop = 0;
- int ret;
- char *items1[] =
- {
- "1", "Display a help text",
- "2", "Start an installation",
- "3", "Exit to the shell"
- };
-
- progname = argv[0];
-
- read_partitions();
- if (num_linux == 0) {
- printf("\n\nPlease start \"fdisk\" or \"cfdisk\" and create a"
- "\nnative Linux-partition to install Linux on.\n\n");
- exit(1);
- }
-
- init_dialog();
-
- while (!stop) {
- ret = dialog_menu("Linux Install Utility",
- "\\nCopyright (C) 1995 Florian La Roche\\n"
- "\\nPre-Alpha version, be careful, read the doc!!!"
- "\\nemail: florian@jurix.jura.uni-sb.de, "
- "flla@stud.uni-sb.de\\n",
- 15, 64, 3, 3, items1);
- dialog_clear();
- switch (ret) {
- case 0:
- ret = dialog_textbox("Help Text",
- "setup.help", 20, 70);
- dialog_clear();
- break;
- case 1:
- main_install();
- break;
- case 2:
- stop = 1;
- break;
- case -2: /* cancel */
- case -1:
- stop = 1; /* esc */
- }
- }
- end_dialog();
- printf("\nExecute \"reboot\" to restart your computer...\n");
-
- exit(0);
-}