Don't stop /etc/sysconfig if we're `faking'.

More asthetic adjustments to menus.
Improve both the display efficiency and usability of the label
screen - it's now possible to label quite a few disks in the label editor.
This commit is contained in:
Jordan K. Hubbard 1996-04-28 22:54:21 +00:00
parent c97113d14f
commit ba034263ba
9 changed files with 432 additions and 435 deletions

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.27 1996/04/28 03:26:46 jkh Exp $
* $Id: config.c,v 1.28 1996/04/28 20:53:52 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -292,7 +292,12 @@ configSysconfig(void)
/* Now write it all back out again */
fclose(fp);
fp = fopen("/etc/sysconfig", "w");
if (Fake) {
msgDebug("Writing sysconfig out to debugging screen..\n");
fp = fdopen(DebugFD, "w");
}
else
fp = fopen("/etc/sysconfig", "w");
for (i = 0; i < nlines; i++) {
static Boolean firstTime = TRUE;

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: label.c,v 1.44 1996/04/25 17:31:21 jkh Exp $
* $Id: label.c,v 1.45 1996/04/28 03:27:08 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -66,6 +66,10 @@
/* The smallest /var partition we're willing to create by default */
#define VAR_MIN_SIZE 30
/* The bottom-most row we're allowed to scribble on */
#define CHUNK_ROW_MAX 16
/* All the chunks currently displayed on the screen */
static struct {
struct chunk *c;
@ -73,6 +77,9 @@ static struct {
} label_chunk_info[MAX_CHUNKS + 1];
static int here;
static int ChunkPartStartRow;
static WINDOW *ChunkWin;
static int diskLabel(char *str);
int
@ -171,6 +178,7 @@ record_label_chunks(Device **devs)
struct chunk *c1, *c2;
Disk *d;
ChunkPartStartRow = CHUNK_SLICE_START_ROW + 3;
j = p = 0;
/* First buzz through and pick up the FreeBSD slices */
for (i = 0; devs[i]; i++) {
@ -186,6 +194,7 @@ record_label_chunks(Device **devs)
label_chunk_info[j].type = PART_SLICE;
label_chunk_info[j].c = c1;
++j;
++ChunkPartStartRow;
}
}
}
@ -219,6 +228,10 @@ record_label_chunks(Device **devs)
label_chunk_info[j].c = NULL;
if (here >= j)
here = j ? j - 1 : 0;
if (ChunkWin)
wclear(ChunkWin);
else
ChunkWin = newwin(CHUNK_ROW_MAX - ChunkPartStartRow, 76, ChunkPartStartRow, 0);
}
/* A new partition entry */
@ -309,6 +322,7 @@ get_partition_type(void)
{
char selection[20];
int i;
WINDOW *w = savescr();
static unsigned char *fs_types[] = {
"FS",
@ -320,6 +334,7 @@ get_partition_type(void)
"If you want to use this partition for swap space, select Swap.\n"
"If you want to put a filesystem on it, choose FS.",
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
restorescr(w);
if (!i) {
if (!strcmp(selection, "FS"))
return PART_FILESYSTEM;
@ -350,9 +365,6 @@ getNewfsCmd(PartInfo *p)
#define PART_NEWFS_COL (PART_SIZE_COL + 7)
#define PART_OFF 38
/* How many mounted partitions to display in column before going to next */
#define CHUNK_COLUMN_MAX 5
/* stick this all up on the screen */
static void
print_label_chunks(void)
@ -362,36 +374,39 @@ print_label_chunks(void)
attrset(A_REVERSE);
mvaddstr(0, 25, "FreeBSD Disklabel Editor");
clrtobot();
attrset(A_NORMAL);
for (i = 0; i < 2; i++) {
mvaddstr(CHUNK_PART_START_ROW - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(ChunkPartStartRow - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(ChunkPartStartRow - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(ChunkPartStartRow - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(ChunkPartStartRow - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(ChunkPartStartRow - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(ChunkPartStartRow - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
}
srow = CHUNK_SLICE_START_ROW;
prow = CHUNK_PART_START_ROW;
prow = 0;
pcol = 0;
for (i = 0; label_chunk_info[i].c; i++) {
if (i == here)
attrset(A_REVERSE);
/* Is it a slice entry displayed at the top? */
if (label_chunk_info[i].type == PART_SLICE) {
sz = space_free(label_chunk_info[i].c);
if (i == here)
attrset(A_REVERSE);
mvprintw(srow++, 0, "Disk: %s\tPartition name: %s\tFree: %d blocks (%dMB)",
label_chunk_info[i].c->disk->name, label_chunk_info[i].c->name, sz, (sz / ONE_MEG));
attrset(A_NORMAL);
clrtoeol();
move(0, 0);
refresh();
}
/* Otherwise it's a DOS, swap or filesystem entry, at the bottom */
/* Otherwise it's a DOS, swap or filesystem entry in the Chunk window */
else {
char onestr[PART_OFF], num[10], *mountpoint, *newfs;
@ -401,10 +416,10 @@ print_label_chunks(void)
*/
memset(onestr, ' ', PART_OFF - 1);
onestr[PART_OFF - 1] = '\0';
/* Go for two columns */
if (prow == (CHUNK_PART_START_ROW + CHUNK_COLUMN_MAX)) {
/* Go for two columns if we've written one full columns worth */
if (prow == (CHUNK_ROW_MAX - ChunkPartStartRow)) {
pcol = PART_OFF;
prow = CHUNK_PART_START_ROW;
prow = 0;
}
memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name));
/* If it's a filesystem, display the mountpoint */
@ -429,11 +444,14 @@ print_label_chunks(void)
memcpy(onestr + PART_SIZE_COL, num, strlen(num));
memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs));
onestr[PART_NEWFS_COL + strlen(newfs)] = '\0';
mvaddstr(prow, pcol, onestr);
if (i == here)
wattrset(ChunkWin, A_REVERSE);
mvwaddstr(ChunkWin, prow, pcol, onestr);
wattrset(ChunkWin, A_NORMAL);
wrefresh(ChunkWin);
move(0, 0);
++prow;
}
if (i == here)
attrset(A_NORMAL);
}
}
@ -441,7 +459,9 @@ static void
print_command_summary()
{
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
mvprintw(18, 0, "C = Create D = Delete M = Mount W = Write");
mvprintw(18, 0, "C = Create D = Delete M = Mount");
if (!RunningAsInit)
mvprintw(18, 48, "W = Write");
mvprintw(19, 0, "N = Newfs Opts T = Newfs Toggle U = Undo Q = Finish");
mvprintw(20, 0, "A = Auto Defaults for all!");
mvprintw(22, 0, "The default target will be displayed in ");
@ -457,7 +477,7 @@ print_command_summary()
static int
diskLabel(char *str)
{
int sz, key = 0;
int sz, key = 0, first_time = 1;
Boolean labeling;
char *msg = NULL;
PartInfo *p, *oldp;
@ -478,19 +498,20 @@ diskLabel(char *str)
w = savescr();
dialog_clear(); clear();
while (labeling) {
clear();
print_label_chunks();
print_command_summary();
if (first_time) {
print_command_summary();
first_time = 0;
}
if (msg) {
attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL);
clrtoeol();
beep();
msg = NULL;
}
refresh();
key = toupper(getch());
switch (key) {
int i, cnt;
int i;
case '\014': /* ^L */
continue;
@ -530,137 +551,109 @@ diskLabel(char *str)
case 'A':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
msg = "You can only do this in a disk slice (at top of screen)";
break;
}
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2) + 4) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
msg = "Not enough free space to create a new partition in the slice";
break;
}
{
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
break;
break;
case 'C':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
break;
}
else {
int i, cnt;
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2)) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
break;
}
{
else {
char *val, *cp;
int size;
struct chunk *tmp;
@ -839,7 +832,6 @@ diskLabel(char *str)
"use during new installations but rather for modifying existing ones.\n\n"
"Are you absolutely SURE you want to do this now?")) {
variable_set2(DISK_LABELLED, "yes");
clear();
diskLabelCommit(NULL);
}
break;
@ -850,6 +842,7 @@ diskLabel(char *str)
"expected to understand!")) {
int i;
Device **devs;
WINDOW *save = savescr();
dialog_clear();
end_dialog();
@ -866,6 +859,7 @@ diskLabel(char *str)
variable_set2(DISK_LABELLED, "yes");
DialogActive = TRUE;
dialog_clear();
restorescr(save);
record_label_chunks(devs);
}
else

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.55 1996/04/28 00:37:34 jkh Exp $
* $Id: menus.c,v 1.56 1996/04/28 03:27:15 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -535,7 +535,7 @@ media.",
/* The distributions menu */
DMenu MenuDistributions = {
DMENU_CHECKLIST_TYPE,
DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
"Choose Distributions",
"As a convenience, we provide several \"canned\" distribution sets.\n\
These select what we consider to be the most reasonable defaults for the\n\

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.27 1996/04/28 03:26:46 jkh Exp $
* $Id: config.c,v 1.28 1996/04/28 20:53:52 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -292,7 +292,12 @@ configSysconfig(void)
/* Now write it all back out again */
fclose(fp);
fp = fopen("/etc/sysconfig", "w");
if (Fake) {
msgDebug("Writing sysconfig out to debugging screen..\n");
fp = fdopen(DebugFD, "w");
}
else
fp = fopen("/etc/sysconfig", "w");
for (i = 0; i < nlines; i++) {
static Boolean firstTime = TRUE;

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: label.c,v 1.44 1996/04/25 17:31:21 jkh Exp $
* $Id: label.c,v 1.45 1996/04/28 03:27:08 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -66,6 +66,10 @@
/* The smallest /var partition we're willing to create by default */
#define VAR_MIN_SIZE 30
/* The bottom-most row we're allowed to scribble on */
#define CHUNK_ROW_MAX 16
/* All the chunks currently displayed on the screen */
static struct {
struct chunk *c;
@ -73,6 +77,9 @@ static struct {
} label_chunk_info[MAX_CHUNKS + 1];
static int here;
static int ChunkPartStartRow;
static WINDOW *ChunkWin;
static int diskLabel(char *str);
int
@ -171,6 +178,7 @@ record_label_chunks(Device **devs)
struct chunk *c1, *c2;
Disk *d;
ChunkPartStartRow = CHUNK_SLICE_START_ROW + 3;
j = p = 0;
/* First buzz through and pick up the FreeBSD slices */
for (i = 0; devs[i]; i++) {
@ -186,6 +194,7 @@ record_label_chunks(Device **devs)
label_chunk_info[j].type = PART_SLICE;
label_chunk_info[j].c = c1;
++j;
++ChunkPartStartRow;
}
}
}
@ -219,6 +228,10 @@ record_label_chunks(Device **devs)
label_chunk_info[j].c = NULL;
if (here >= j)
here = j ? j - 1 : 0;
if (ChunkWin)
wclear(ChunkWin);
else
ChunkWin = newwin(CHUNK_ROW_MAX - ChunkPartStartRow, 76, ChunkPartStartRow, 0);
}
/* A new partition entry */
@ -309,6 +322,7 @@ get_partition_type(void)
{
char selection[20];
int i;
WINDOW *w = savescr();
static unsigned char *fs_types[] = {
"FS",
@ -320,6 +334,7 @@ get_partition_type(void)
"If you want to use this partition for swap space, select Swap.\n"
"If you want to put a filesystem on it, choose FS.",
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
restorescr(w);
if (!i) {
if (!strcmp(selection, "FS"))
return PART_FILESYSTEM;
@ -350,9 +365,6 @@ getNewfsCmd(PartInfo *p)
#define PART_NEWFS_COL (PART_SIZE_COL + 7)
#define PART_OFF 38
/* How many mounted partitions to display in column before going to next */
#define CHUNK_COLUMN_MAX 5
/* stick this all up on the screen */
static void
print_label_chunks(void)
@ -362,36 +374,39 @@ print_label_chunks(void)
attrset(A_REVERSE);
mvaddstr(0, 25, "FreeBSD Disklabel Editor");
clrtobot();
attrset(A_NORMAL);
for (i = 0; i < 2; i++) {
mvaddstr(CHUNK_PART_START_ROW - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(ChunkPartStartRow - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(ChunkPartStartRow - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(ChunkPartStartRow - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(ChunkPartStartRow - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(ChunkPartStartRow - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(ChunkPartStartRow - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
}
srow = CHUNK_SLICE_START_ROW;
prow = CHUNK_PART_START_ROW;
prow = 0;
pcol = 0;
for (i = 0; label_chunk_info[i].c; i++) {
if (i == here)
attrset(A_REVERSE);
/* Is it a slice entry displayed at the top? */
if (label_chunk_info[i].type == PART_SLICE) {
sz = space_free(label_chunk_info[i].c);
if (i == here)
attrset(A_REVERSE);
mvprintw(srow++, 0, "Disk: %s\tPartition name: %s\tFree: %d blocks (%dMB)",
label_chunk_info[i].c->disk->name, label_chunk_info[i].c->name, sz, (sz / ONE_MEG));
attrset(A_NORMAL);
clrtoeol();
move(0, 0);
refresh();
}
/* Otherwise it's a DOS, swap or filesystem entry, at the bottom */
/* Otherwise it's a DOS, swap or filesystem entry in the Chunk window */
else {
char onestr[PART_OFF], num[10], *mountpoint, *newfs;
@ -401,10 +416,10 @@ print_label_chunks(void)
*/
memset(onestr, ' ', PART_OFF - 1);
onestr[PART_OFF - 1] = '\0';
/* Go for two columns */
if (prow == (CHUNK_PART_START_ROW + CHUNK_COLUMN_MAX)) {
/* Go for two columns if we've written one full columns worth */
if (prow == (CHUNK_ROW_MAX - ChunkPartStartRow)) {
pcol = PART_OFF;
prow = CHUNK_PART_START_ROW;
prow = 0;
}
memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name));
/* If it's a filesystem, display the mountpoint */
@ -429,11 +444,14 @@ print_label_chunks(void)
memcpy(onestr + PART_SIZE_COL, num, strlen(num));
memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs));
onestr[PART_NEWFS_COL + strlen(newfs)] = '\0';
mvaddstr(prow, pcol, onestr);
if (i == here)
wattrset(ChunkWin, A_REVERSE);
mvwaddstr(ChunkWin, prow, pcol, onestr);
wattrset(ChunkWin, A_NORMAL);
wrefresh(ChunkWin);
move(0, 0);
++prow;
}
if (i == here)
attrset(A_NORMAL);
}
}
@ -441,7 +459,9 @@ static void
print_command_summary()
{
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
mvprintw(18, 0, "C = Create D = Delete M = Mount W = Write");
mvprintw(18, 0, "C = Create D = Delete M = Mount");
if (!RunningAsInit)
mvprintw(18, 48, "W = Write");
mvprintw(19, 0, "N = Newfs Opts T = Newfs Toggle U = Undo Q = Finish");
mvprintw(20, 0, "A = Auto Defaults for all!");
mvprintw(22, 0, "The default target will be displayed in ");
@ -457,7 +477,7 @@ print_command_summary()
static int
diskLabel(char *str)
{
int sz, key = 0;
int sz, key = 0, first_time = 1;
Boolean labeling;
char *msg = NULL;
PartInfo *p, *oldp;
@ -478,19 +498,20 @@ diskLabel(char *str)
w = savescr();
dialog_clear(); clear();
while (labeling) {
clear();
print_label_chunks();
print_command_summary();
if (first_time) {
print_command_summary();
first_time = 0;
}
if (msg) {
attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL);
clrtoeol();
beep();
msg = NULL;
}
refresh();
key = toupper(getch());
switch (key) {
int i, cnt;
int i;
case '\014': /* ^L */
continue;
@ -530,137 +551,109 @@ diskLabel(char *str)
case 'A':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
msg = "You can only do this in a disk slice (at top of screen)";
break;
}
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2) + 4) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
msg = "Not enough free space to create a new partition in the slice";
break;
}
{
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
break;
break;
case 'C':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
break;
}
else {
int i, cnt;
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2)) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
break;
}
{
else {
char *val, *cp;
int size;
struct chunk *tmp;
@ -839,7 +832,6 @@ diskLabel(char *str)
"use during new installations but rather for modifying existing ones.\n\n"
"Are you absolutely SURE you want to do this now?")) {
variable_set2(DISK_LABELLED, "yes");
clear();
diskLabelCommit(NULL);
}
break;
@ -850,6 +842,7 @@ diskLabel(char *str)
"expected to understand!")) {
int i;
Device **devs;
WINDOW *save = savescr();
dialog_clear();
end_dialog();
@ -866,6 +859,7 @@ diskLabel(char *str)
variable_set2(DISK_LABELLED, "yes");
DialogActive = TRUE;
dialog_clear();
restorescr(save);
record_label_chunks(devs);
}
else

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.55 1996/04/28 00:37:34 jkh Exp $
* $Id: menus.c,v 1.56 1996/04/28 03:27:15 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -535,7 +535,7 @@ media.",
/* The distributions menu */
DMenu MenuDistributions = {
DMENU_CHECKLIST_TYPE,
DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
"Choose Distributions",
"As a convenience, we provide several \"canned\" distribution sets.\n\
These select what we consider to be the most reasonable defaults for the\n\

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.27 1996/04/28 03:26:46 jkh Exp $
* $Id: config.c,v 1.28 1996/04/28 20:53:52 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -292,7 +292,12 @@ configSysconfig(void)
/* Now write it all back out again */
fclose(fp);
fp = fopen("/etc/sysconfig", "w");
if (Fake) {
msgDebug("Writing sysconfig out to debugging screen..\n");
fp = fdopen(DebugFD, "w");
}
else
fp = fopen("/etc/sysconfig", "w");
for (i = 0; i < nlines; i++) {
static Boolean firstTime = TRUE;

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: label.c,v 1.44 1996/04/25 17:31:21 jkh Exp $
* $Id: label.c,v 1.45 1996/04/28 03:27:08 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -66,6 +66,10 @@
/* The smallest /var partition we're willing to create by default */
#define VAR_MIN_SIZE 30
/* The bottom-most row we're allowed to scribble on */
#define CHUNK_ROW_MAX 16
/* All the chunks currently displayed on the screen */
static struct {
struct chunk *c;
@ -73,6 +77,9 @@ static struct {
} label_chunk_info[MAX_CHUNKS + 1];
static int here;
static int ChunkPartStartRow;
static WINDOW *ChunkWin;
static int diskLabel(char *str);
int
@ -171,6 +178,7 @@ record_label_chunks(Device **devs)
struct chunk *c1, *c2;
Disk *d;
ChunkPartStartRow = CHUNK_SLICE_START_ROW + 3;
j = p = 0;
/* First buzz through and pick up the FreeBSD slices */
for (i = 0; devs[i]; i++) {
@ -186,6 +194,7 @@ record_label_chunks(Device **devs)
label_chunk_info[j].type = PART_SLICE;
label_chunk_info[j].c = c1;
++j;
++ChunkPartStartRow;
}
}
}
@ -219,6 +228,10 @@ record_label_chunks(Device **devs)
label_chunk_info[j].c = NULL;
if (here >= j)
here = j ? j - 1 : 0;
if (ChunkWin)
wclear(ChunkWin);
else
ChunkWin = newwin(CHUNK_ROW_MAX - ChunkPartStartRow, 76, ChunkPartStartRow, 0);
}
/* A new partition entry */
@ -309,6 +322,7 @@ get_partition_type(void)
{
char selection[20];
int i;
WINDOW *w = savescr();
static unsigned char *fs_types[] = {
"FS",
@ -320,6 +334,7 @@ get_partition_type(void)
"If you want to use this partition for swap space, select Swap.\n"
"If you want to put a filesystem on it, choose FS.",
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
restorescr(w);
if (!i) {
if (!strcmp(selection, "FS"))
return PART_FILESYSTEM;
@ -350,9 +365,6 @@ getNewfsCmd(PartInfo *p)
#define PART_NEWFS_COL (PART_SIZE_COL + 7)
#define PART_OFF 38
/* How many mounted partitions to display in column before going to next */
#define CHUNK_COLUMN_MAX 5
/* stick this all up on the screen */
static void
print_label_chunks(void)
@ -362,36 +374,39 @@ print_label_chunks(void)
attrset(A_REVERSE);
mvaddstr(0, 25, "FreeBSD Disklabel Editor");
clrtobot();
attrset(A_NORMAL);
for (i = 0; i < 2; i++) {
mvaddstr(CHUNK_PART_START_ROW - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(ChunkPartStartRow - 2, PART_PART_COL + (i * PART_OFF), "Part");
mvaddstr(ChunkPartStartRow - 1, PART_PART_COL + (i * PART_OFF), "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount");
mvaddstr(ChunkPartStartRow - 1, PART_MOUNT_COL + (i * PART_OFF), "-----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(ChunkPartStartRow - 2, PART_SIZE_COL + (i * PART_OFF) + 2, "Size");
mvaddstr(ChunkPartStartRow - 1, PART_SIZE_COL + (i * PART_OFF) + 2, "----");
mvaddstr(CHUNK_PART_START_ROW - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(CHUNK_PART_START_ROW - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
mvaddstr(ChunkPartStartRow - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs");
mvaddstr(ChunkPartStartRow - 1, PART_NEWFS_COL + (i * PART_OFF), "-----");
}
srow = CHUNK_SLICE_START_ROW;
prow = CHUNK_PART_START_ROW;
prow = 0;
pcol = 0;
for (i = 0; label_chunk_info[i].c; i++) {
if (i == here)
attrset(A_REVERSE);
/* Is it a slice entry displayed at the top? */
if (label_chunk_info[i].type == PART_SLICE) {
sz = space_free(label_chunk_info[i].c);
if (i == here)
attrset(A_REVERSE);
mvprintw(srow++, 0, "Disk: %s\tPartition name: %s\tFree: %d blocks (%dMB)",
label_chunk_info[i].c->disk->name, label_chunk_info[i].c->name, sz, (sz / ONE_MEG));
attrset(A_NORMAL);
clrtoeol();
move(0, 0);
refresh();
}
/* Otherwise it's a DOS, swap or filesystem entry, at the bottom */
/* Otherwise it's a DOS, swap or filesystem entry in the Chunk window */
else {
char onestr[PART_OFF], num[10], *mountpoint, *newfs;
@ -401,10 +416,10 @@ print_label_chunks(void)
*/
memset(onestr, ' ', PART_OFF - 1);
onestr[PART_OFF - 1] = '\0';
/* Go for two columns */
if (prow == (CHUNK_PART_START_ROW + CHUNK_COLUMN_MAX)) {
/* Go for two columns if we've written one full columns worth */
if (prow == (CHUNK_ROW_MAX - ChunkPartStartRow)) {
pcol = PART_OFF;
prow = CHUNK_PART_START_ROW;
prow = 0;
}
memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name));
/* If it's a filesystem, display the mountpoint */
@ -429,11 +444,14 @@ print_label_chunks(void)
memcpy(onestr + PART_SIZE_COL, num, strlen(num));
memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs));
onestr[PART_NEWFS_COL + strlen(newfs)] = '\0';
mvaddstr(prow, pcol, onestr);
if (i == here)
wattrset(ChunkWin, A_REVERSE);
mvwaddstr(ChunkWin, prow, pcol, onestr);
wattrset(ChunkWin, A_NORMAL);
wrefresh(ChunkWin);
move(0, 0);
++prow;
}
if (i == here)
attrset(A_NORMAL);
}
}
@ -441,7 +459,9 @@ static void
print_command_summary()
{
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
mvprintw(18, 0, "C = Create D = Delete M = Mount W = Write");
mvprintw(18, 0, "C = Create D = Delete M = Mount");
if (!RunningAsInit)
mvprintw(18, 48, "W = Write");
mvprintw(19, 0, "N = Newfs Opts T = Newfs Toggle U = Undo Q = Finish");
mvprintw(20, 0, "A = Auto Defaults for all!");
mvprintw(22, 0, "The default target will be displayed in ");
@ -457,7 +477,7 @@ print_command_summary()
static int
diskLabel(char *str)
{
int sz, key = 0;
int sz, key = 0, first_time = 1;
Boolean labeling;
char *msg = NULL;
PartInfo *p, *oldp;
@ -478,19 +498,20 @@ diskLabel(char *str)
w = savescr();
dialog_clear(); clear();
while (labeling) {
clear();
print_label_chunks();
print_command_summary();
if (first_time) {
print_command_summary();
first_time = 0;
}
if (msg) {
attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL);
clrtoeol();
beep();
msg = NULL;
}
refresh();
key = toupper(getch());
switch (key) {
int i, cnt;
int i;
case '\014': /* ^L */
continue;
@ -530,137 +551,109 @@ diskLabel(char *str)
case 'A':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
msg = "You can only do this in a disk slice (at top of screen)";
break;
}
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2) + 4) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
msg = "Not enough free space to create a new partition in the slice";
break;
}
{
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
struct chunk *tmp;
int mib[2];
int physmem;
size_t size, swsize;
char *cp;
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
cp = variable_get(VAR_ROOT_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS,
CHUNK_IS_ROOT);
if (!tmp) {
msgConfirm("Unable to create the root partition. Too big?");
break;
}
tmp->private_data = new_part("/", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_SWAP_SIZE);
if (cp)
swsize = atoi(cp) * ONE_MEG;
else {
mib[0] = CTL_HW;
mib[1] = HW_PHYSMEM;
size = sizeof physmem;
sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0);
swsize = 16 * ONE_MEG + (physmem * 2 / 512);
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
swsize,
part, FS_SWAP, 0);
if (!tmp) {
msgConfirm("Unable to create the swap partition. Too big?");
break;
}
tmp->private_data = 0;
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_VAR_SIZE);
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
(cp ? atoi(cp) : VAR_MIN_SIZE) * ONE_MEG, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Less than %dMB free for /var - you will need to\n"
"partition your disk manually with a custom install!", (cp ? atoi(cp) : VAR_MIN_SIZE));
break;
}
tmp->private_data = new_part("/var", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
cp = variable_get(VAR_USR_SIZE);
if (cp)
sz = atoi(cp) * ONE_MEG;
else
sz = space_free(label_chunk_info[here].c);
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
msgConfirm("Less than %dMB free for /usr - you will need to\n"
"partition your disk manually with a custom install!", USR_MIN_SIZE);
break;
}
tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk,
label_chunk_info[here].c,
sz, part, FS_BSDFFS, 0);
if (!tmp) {
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
"You will need to partition your disk manually with a custom install!");
break;
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
/* At this point, we're reasonably "labelled" */
variable_set2(DISK_LABELLED, "yes");
tmp->private_data = new_part("/usr", TRUE, tmp->size);
tmp->private_free = safe_free;
record_label_chunks(devs);
}
break;
break;
case 'C':
if (label_chunk_info[here].type != PART_SLICE) {
msg = "You can only do this in a master partition (see top of screen)";
break;
}
else {
int i, cnt;
cnt = i = 0;
while (label_chunk_info[i].c)
if (label_chunk_info[i++].type != PART_SLICE)
cnt++;
if (cnt == (CHUNK_COLUMN_MAX * 2)) {
msgConfirm("Sorry, I can't fit any more partitions on the screen! You can get around\n"
"this limitation by partitioning your disks individually rather than all\n"
"at once. This will be fixed just as soon as we get a scrolling partition\n"
"box written. Sorry for the inconvenience!");
break;
}
}
sz = space_free(label_chunk_info[here].c);
if (sz <= FS_MIN_SIZE) {
msg = "Not enough space to create an additional FreeBSD partition";
break;
}
{
else {
char *val, *cp;
int size;
struct chunk *tmp;
@ -839,7 +832,6 @@ diskLabel(char *str)
"use during new installations but rather for modifying existing ones.\n\n"
"Are you absolutely SURE you want to do this now?")) {
variable_set2(DISK_LABELLED, "yes");
clear();
diskLabelCommit(NULL);
}
break;
@ -850,6 +842,7 @@ diskLabel(char *str)
"expected to understand!")) {
int i;
Device **devs;
WINDOW *save = savescr();
dialog_clear();
end_dialog();
@ -866,6 +859,7 @@ diskLabel(char *str)
variable_set2(DISK_LABELLED, "yes");
DialogActive = TRUE;
dialog_clear();
restorescr(save);
record_label_chunks(devs);
}
else

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.55 1996/04/28 00:37:34 jkh Exp $
* $Id: menus.c,v 1.56 1996/04/28 03:27:15 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -535,7 +535,7 @@ media.",
/* The distributions menu */
DMenu MenuDistributions = {
DMENU_CHECKLIST_TYPE,
DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
"Choose Distributions",
"As a convenience, we provide several \"canned\" distribution sets.\n\
These select what we consider to be the most reasonable defaults for the\n\