aboutsummaryrefslogtreecommitdiff
path: root/sbin/sysinstall
diff options
context:
space:
mode:
authorPaul Richards <paul@FreeBSD.org>1994-11-18 18:24:00 +0000
committerPaul Richards <paul@FreeBSD.org>1994-11-18 18:24:00 +0000
commit111054f0badaaab5cc15cb5249518ed08418099d (patch)
tree2a283641dd6411dd074b44fe2cd72ca35d5781b4 /sbin/sysinstall
parent9e3f27547d313e91105ed8c0f41304e3ceea9bd0 (diff)
downloadsrc-111054f0badaaab5cc15cb5249518ed08418099d.tar.gz
src-111054f0badaaab5cc15cb5249518ed08418099d.zip
New files that the last commit missed.
Notes
Notes: svn path=/head/; revision=4646
Diffstat (limited to 'sbin/sysinstall')
-rw-r--r--sbin/sysinstall/disk.h98
-rw-r--r--sbin/sysinstall/editor.c197
-rw-r--r--sbin/sysinstall/editor.h19
-rw-r--r--sbin/sysinstall/label.h48
4 files changed, 362 insertions, 0 deletions
diff --git a/sbin/sysinstall/disk.h b/sbin/sysinstall/disk.h
new file mode 100644
index 000000000000..1abc904abe3b
--- /dev/null
+++ b/sbin/sysinstall/disk.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 1994, Paul Richards.
+ *
+ * All rights reserved.
+ *
+ * This software may be used, modified, copied, distributed, and
+ * sold, in both source and binary form provided that the above
+ * copyright and these terms are retained, verbatim, as the first
+ * lines of this file. Under no circumstances is the author
+ * responsible for the proper functioning of this software, nor does
+ * the author assume any responsibility for damages incurred with
+ * its use.
+ */
+
+#define MBRSIZE 512
+#define MBR_MAGIC 0xAA55
+#define ACTIVE 0x80
+
+#define BOOT1 "/stand/sdboot"
+#define BOOT2 "/stand/bootsd"
+
+/* XXX -- calculate these, this is nasty */
+#define DEFFSIZE 1024
+#define DEFFRAG 8
+
+/* bootarea.c */
+int write_bootblocks(int);
+int enable_label(int);
+int disable_label(int);
+/* label.c */
+char *diskname(int);
+
+struct mbr
+{
+ unsigned char padding[2];
+ unsigned char bootcode[DOSPARTOFF];
+ struct dos_partition dospart[4];
+ unsigned short magic;
+};
+
+struct disk {
+ struct disklabel lbl;
+ struct mbr mbr;
+ struct devconf *devconf;
+ int selected;
+ int inst_part;
+ struct fstab mounts[MAXPARTITIONS];
+};
+
+extern struct disk disk_list[];
+
+struct part_type
+{
+ unsigned char type;
+ char *name;
+};
+
+#define PARTITION_TYPES \
+{ \
+ {0x00, "Unused"} \
+ ,{0x01, "Primary DOS with 12 bit FAT"} \
+ ,{0x02, "XENIX / filesystem"} \
+ ,{0x03, "XENIX /usr filesystem"} \
+ ,{0x04, "Primary DOS with 16 bit FAT"} \
+ ,{0x05, "Extended DOS"} \
+ ,{0x06, "Primary 'big' DOS (> 32MB)"} \
+ ,{0x07, "OS/2 HPFS, QNX or Advanced UNIX"} \
+ ,{0x08, "AIX filesystem"} \
+ ,{0x09, "AIX boot partition or Coherent"} \
+ ,{0x0A, "OS/2 Boot Manager or OPUS"} \
+ ,{0x10, "OPUS"} \
+ ,{0x40, "VENIX 286"} \
+ ,{0x50, "DM"} \
+ ,{0x51, "DM"} \
+ ,{0x52, "CP/M or Microport SysV/AT"} \
+ ,{0x56, "GB"} \
+ ,{0x61, "Speed"} \
+ ,{0x63, "ISC UNIX, other System V/386, GNU HURD or Mach"} \
+ ,{0x64, "Novell Netware 2.xx"} \
+ ,{0x65, "Novell Netware 3.xx"} \
+ ,{0x75, "PCIX"} \
+ ,{0x80, "Minix 1.1 ... 1.4a"} \
+ ,{0x81, "Minix 1.4b ... 1.5.10"} \
+ ,{0x82, "Linux"} \
+ ,{0x93, "Amoeba filesystem"} \
+ ,{0x94, "Amoeba bad block table"} \
+ ,{0xA5, "FreeBSD/NetBSD/386BSD"} \
+ ,{0xB7, "BSDI BSD/386 filesystem"} \
+ ,{0xB8, "BSDI BSD/386 swap"} \
+ ,{0xDB, "Concurrent CPM or C.DOS or CTOS"} \
+ ,{0xE1, "Speed"} \
+ ,{0xE3, "Speed"} \
+ ,{0xE4, "Speed"} \
+ ,{0xF1, "Speed"} \
+ ,{0xF2, "DOS 3.3+ Secondary"} \
+ ,{0xF4, "Speed"} \
+ ,{0xFF, "BBT (Bad Blocks Table)"} \
+};
diff --git a/sbin/sysinstall/editor.c b/sbin/sysinstall/editor.c
new file mode 100644
index 000000000000..4b4eee807e43
--- /dev/null
+++ b/sbin/sysinstall/editor.c
@@ -0,0 +1,197 @@
+#include <string.h>
+#include <ncurses.h>
+#include <dialog.h>
+
+#include "editor.h"
+
+int
+disp_fields(WINDOW *window, struct field field[], int no_fields)
+{
+ int i, j;
+
+ wattrset(window, dialog_attr);
+ for (i=0; i < no_fields; i++) {
+ mvwprintw(window, field[i].y, field[i].x, "%s", field[i].field);
+ j=strlen(field[i].field);
+ if (j < field[i].width)
+ for (; j < field[i].width; j++)
+ waddch(window, ' ');
+ }
+ wrefresh(window);
+}
+
+int
+change_field(struct field field, int key)
+{
+ int next;
+
+ switch(key) {
+ case KEY_UP:
+ next = field.up;
+ break;
+ case KEY_DOWN:
+ next = field.down;
+ break;
+ case '\t':
+ next = field.right;
+ break;
+ case KEY_BTAB:
+ next = field.left;
+ break;
+ case '\n':
+ case '\r':
+ next = field.next;
+ break;
+ default:
+ next = -1;
+ break;
+ }
+ return (next);
+}
+
+int
+edit_line(WINDOW *window, int y, int x, char *field, int width, int maxlen)
+{
+ int len;
+ int key = 0;
+ int fpos, dispos, curpos;
+ int i;
+ int done = 0;
+
+ len = strlen(field);
+ if (len < width) {
+ fpos = len;
+ curpos = len;
+ dispos = 0;
+ } else {
+ fpos = width;
+ curpos = width;
+ dispos = len - width;
+ };
+
+
+ do {
+ wattrset(window, item_selected_attr);
+ wmove(window, y, x);
+ for (i=0; i < width; i++)
+ if (i < (len - dispos))
+ waddch(window, field[dispos+i]);
+ else
+ waddch(window, ' ');
+ wmove(window, y, x + curpos);
+ wrefresh(window);
+
+ key = wgetch(window);
+ switch (key) {
+ case TAB:
+ case KEY_BTAB:
+ case KEY_UP:
+ case KEY_DOWN:
+ case ESC:
+ case '\n':
+ case '\r':
+ done = 1;
+ break;
+ case KEY_HOME:
+ if (len < width) {
+ fpos = len;
+ curpos = len;
+ dispos = 0;
+ } else {
+ fpos = width;
+ curpos = width;
+ dispos = len - width;
+ };
+ break;
+ case KEY_END:
+ if (len < width) {
+ dispos = 0;
+ curpos = len - 1;
+ } else {
+ dispos = len - width - 1;
+ curpos = width - 1;
+ }
+ fpos = len - 1;
+ break;
+ case KEY_LEFT:
+ if ((!curpos) && (!dispos)) {
+ beep();
+ break;
+ }
+ if (--curpos < 0) {
+ curpos = 0;
+ if (--dispos < 0)
+ dispos = 0;
+ }
+ if (--fpos < 0)
+ fpos = 0;
+ break;
+ case KEY_RIGHT:
+ if ((curpos + dispos) == len) {
+ beep();
+ break;
+ }
+ if ((curpos == (width-1)) && (dispos == (maxlen - width -1))) {
+ beep();
+ break;
+ }
+ if (++curpos >= width) {
+ curpos = width - 1;
+ dispos++;
+ }
+ if (dispos >= len)
+ dispos = len - 1;
+ if (++fpos >= len) {
+ fpos = len;
+ }
+ break;
+ case KEY_BACKSPACE:
+ case KEY_DC:
+ if ((!curpos) && (!dispos)) {
+ beep();
+ break;
+ }
+ if (fpos > 0) {
+ memmove(field+fpos-1, field+fpos, len - fpos);
+ len--;
+ fpos--;
+ if (curpos > 0)
+ --curpos;
+ if (!curpos)
+ --dispos;
+ if (dispos < 0)
+ dispos = 0;
+ } else
+ beep();
+ break;
+ default:
+ if (len < maxlen - 1) {
+ memmove(field+fpos+1, field+fpos, len - fpos);
+ field[fpos] = key;
+ len++;
+ fpos++;
+ if (++curpos == width) {
+ --curpos;
+ dispos++;
+ }
+ if (len == (maxlen - 1)) {
+ dispos = (maxlen - width - 1);
+ }
+ } else
+ beep();
+ break;
+ }
+ } while (!done);
+ wattrset(window, dialog_attr);
+ wmove(window, y, x);
+ for (i=0; i < width; i++)
+ if (i < (len - dispos))
+ waddch(window, field[dispos+i]);
+ else
+ waddch(window, ' ');
+ wmove(window, y, x + curpos);
+ wstandend(window);
+ field[len] = 0;
+ wrefresh(window);
+ return (key);
+}
diff --git a/sbin/sysinstall/editor.h b/sbin/sysinstall/editor.h
new file mode 100644
index 000000000000..0df8554fe4cf
--- /dev/null
+++ b/sbin/sysinstall/editor.h
@@ -0,0 +1,19 @@
+#define ESC 27
+#define TAB 9
+
+struct field {
+ int y;
+ int x;
+ int width;
+ int maxlen;
+ int next;
+ int up;
+ int down;
+ int left;
+ int right;
+ char field[80];
+};
+
+int disp_fields(WINDOW *, struct field *, int);
+int change_field(struct field, int);
+int edit_line(WINDOW *, int, int, char *, int, int);
diff --git a/sbin/sysinstall/label.h b/sbin/sysinstall/label.h
new file mode 100644
index 000000000000..41c114f72371
--- /dev/null
+++ b/sbin/sysinstall/label.h
@@ -0,0 +1,48 @@
+struct field label_field[] = {
+ { 4, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ { 4, 16, 3, 3, 2, -1, -1, -1, -1, "YES"},
+ { 4, 27, 20, 20, 3, -1, -1, -1, -1, "MSDOS"},
+ { 4, 39, 5, 5, 4, -1, -1, -1, -1, "1000"},
+ { 4, 47, 20, 30, 6, -1, -1, -1, -1, "/an/example/mountpoint"},
+ { 6, 02, 4, 4, -1, -1, -1, -1, -1, "wd0a"},
+ { 6, 16, 3, 3, 7, -1, -1, -1, -1, "YES"},
+ { 6, 27, 20, 20, 8, -1, -1, -1, -1, "MSDOS"},
+ { 6, 39, 5, 5, 9, -1, -1, -1, -1, "1000"},
+ { 6, 47, 20, 30, 11, -1, -1, -1, -1, "/an/example/mountpoint"},
+ { 8, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ { 8, 16, 3, 3, 12, -1, -1, -1, -1, "YES"},
+ { 8, 27, 20, 20, 13, -1, -1, -1, -1, "MSDOS"},
+ { 8, 39, 5, 5, 14, -1, -1, -1, -1, "1000"},
+ { 8, 47, 20, 30, 16, -1, -1, -1, -1, "/an/example/mountpoint"},
+ {10, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ {10, 16, 3, 3, 17, -1, -1, -1, -1, "YES"},
+ {10, 27, 20, 20, 18, -1, -1, -1, -1, "MSDOS"},
+ {10, 39, 5, 5, 19, -1, -1, -1, -1, "1000"},
+ {10, 47, 20, 30, 21, -1, -1, -1, -1, "/an/example/mountpoint"},
+ {12, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ {12, 16, 3, 3, 22, -1, -1, -1, -1, "YES"},
+ {12, 27, 20, 20, 23, -1, -1, -1, -1, "MSDOS"},
+ {12, 39, 5, 5, 24, -1, -1, -1, -1, "1000"},
+ {12, 47, 20, 30, 26, -1, -1, -1, -1, "/an/example/mountpoint"},
+ {14, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ {14, 16, 3, 3, 27, -1, -1, -1, -1, "YES"},
+ {14, 27, 20, 20, 28, -1, -1, -1, -1, "MSDOS"},
+ {14, 39, 5, 5, 29, -1, -1, -1, -1, "1000"},
+ {14, 47, 20, 30, 31, -1, -1, -1, -1, "/an/example/mountpoint"},
+ {16, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ {16, 16, 3, 3, 32, -1, -1, -1, -1, "YES"},
+ {16, 27, 20, 20, 33, -1, -1, -1, -1, "MSDOS"},
+ {16, 39, 5, 5, 34, -1, -1, -1, -1, "1000"},
+ {16, 47, 20, 30, 36, -1, -1, -1, -1, "/an/example/mountpoint"},
+ {18, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"},
+ {18, 16, 3, 3, 37, -1, -1, -1, -1, "YES"},
+ {18, 27, 20, 20, 38, -1, -1, -1, -1, "MSDOS"},
+ {18, 39, 5, 5, 39, -1, -1, -1, -1, "1000"},
+ {18, 47, 20, 30, 1, -1, -1, -1, -1, "/an/example/mountpoint"},
+ { 0, 18, 17, 17, -1, -1, -1, -1, -1, "Disk label editor"},
+ { 2, 2, 11, 11, -1, -1, -1, -1, -1, "Partition"},
+ { 2, 14, 8, 8, -1, -1, -1, -1, -1, "Preserve"},
+ { 2, 25, 10, 10, -1, -1, -1, -1, -1, "Filesystem"},
+ { 2, 39, 5, 5, -1, -1, -1, -1, -1, "Size"},
+ { 2, 47, 10, 10, -1, -1, -1, -1, -1, "Mountpoint"}
+};