Some fairly serious cleanup. The proper offset should now be used in

creating partitions.  Still need to get the mount points displaying carefully,
but I need to get this into my tree on time so that I can work on that.
This commit is contained in:
jkh 1995-05-06 09:34:24 +00:00
parent 6067fc8395
commit 5e8cd7ffb7
21 changed files with 381 additions and 174 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: devices.c,v 1.2 1995/05/04 03:51:14 jkh Exp $
* $Id: devices.c,v 1.5 1995/05/05 23:47:38 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -133,11 +133,10 @@ print_command_summary()
int b_attr = ColorDisplay ? A_BOLD : A_UNDERLINE;
mvprintw(14, 0, "The following commands are supported (in upper or lower case):");
mvprintw(16, 0, "A = Use Entire Disk B = Scan For Bad Blocks");
mvprintw(17, 0, "C = Create New Partition D = Delete Partition");
mvprintw(18, 0, "G = Set BIOS Geometry U = Undo All Changes");
mvprintw(19, 0, "W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(21, 0, "The currently selected partition is displayed in ");
mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition");
mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable");
mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(20, 0, "The currently selected partition is displayed in ");
attrset(b_attr); addstr(ColorDisplay ? "bold" : "underline"); attrset(A_NORMAL);
move(0, 0);
}
@ -245,6 +244,10 @@ device_slice_disk(struct disk *d)
/* Set geometry */
break;
case 'S':
/* Set Bootable */
break;
case 'U':
Free_Disk(d);
d = Open_Disk(name);

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$
* $Id: disks.c,v 1.2 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -43,6 +43,7 @@
#include "sysinstall.h"
#include <ctype.h>
#include <sys/disklabel.h>
/*
* I make some pretty gross assumptions about having a max of 50 chunks
@ -55,8 +56,6 @@
#define MAX_CHUNKS 50
#define FS_SWAP 1
/* Where to start printing the freebsd slices */
#define CHUNK_SLICE_START_ROW 2
#define CHUNK_PART_START_ROW 10
@ -64,18 +63,11 @@
/* The smallest filesystem we're willing to create */
#define FS_MIN_SIZE 2048
typedef enum { PART_NONE, PART_SLICE, PART_SWAP, PART_FILESYSTEM } part_type;
struct part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
};
static struct {
struct disk *d;
struct chunk *c;
struct part_info *p;
part_type type;
PartInfo *p;
PartType type;
} fbsd_chunk_info[MAX_CHUNKS + 1];
static int current_chunk;
@ -176,7 +168,7 @@ int
get_mountpoint(struct chunk *c)
{
char *val;
struct part_info *part;
PartInfo *part;
val = msgGetInput(c->private,
"Please specify mount point for new partition");
@ -193,7 +185,7 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
safe_free(c->private);
part = (struct part_info *)malloc(sizeof(struct part_info));
part = (PartInfo *)malloc(sizeof(PartInfo));
strncpy(part->mountpoint, val, FILENAME_MAX);
part->newfs = TRUE;
c->private = (void *)part;
@ -203,15 +195,15 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
static part_type
static PartType
get_partition_type(struct chunk *c)
{
char selection[20];
static unsigned char *fs_types[] = {
"Swap",
"A swap partition.",
"FS",
"A file system",
"Swap",
"A swap partition.",
};
if (!dialog_menu("Please choose a partition type",
@ -280,8 +272,8 @@ print_fbsd_chunks(void)
char *mountpoint, *newfs;
if (fbsd_chunk_info[i].c->private) {
mountpoint = ((struct part_info *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((struct part_info *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
mountpoint = ((PartInfo *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((PartInfo *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
}
else {
mountpoint = "?";
@ -383,7 +375,7 @@ partition_disks(struct disk **disks)
snprintf(tmp, 20, "%d", sz);
val = msgGetInput(tmp, "Please specify size for new FreeBSD partition");
if (val && (size = strtol(val, 0, 0)) > 0) {
part_type type;
PartType type;
if (get_mountpoint(fbsd_chunk_info[current_chunk].c))
break;
@ -391,7 +383,8 @@ partition_disks(struct disk **disks)
if (type == PART_NONE)
break;
Create_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c->offset,
fbsd_chunk_info[current_chunk].c->offset +
sz - size,
size,
part,
type == PART_SWAP ? FS_SWAP : freebsd,
@ -400,7 +393,16 @@ partition_disks(struct disk **disks)
}
}
break;
case 'D':
if (fbsd_chunk_info[current_chunk].type == PART_SLICE) {
msg = "Use the Master Partition Editor to delete one of these";
break;
}
Delete_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c);
break;
case 27: /* ESC */
partitioning = FALSE;
break;
@ -416,11 +418,11 @@ write_disks(struct disk **disks)
extern u_char mbr[], bteasy17[];
dialog_clear();
if (!msgYesNo("Last Chance! Are you sure you want to write your changes to disk?")) {
if (!msgYesNo("Last Chance! Are you sure you want to write out\nall your changes to disk?")) {
for (i = 0; disks[i]; i++) {
if (contains_root_partition(disks[i]))
Set_Boot_Blocks(disks[i], boot1, boot2);
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, as well as boot from a driver other than the first."))
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, or boot from a disk other than the first."))
Set_Boot_Mgr(disks[i], bteasy17);
else if (i == 0 && !msgYesNo("Would you like to remove an existing boot manager?"))
Set_Boot_Mgr(disks[i], mbr);
@ -432,24 +434,3 @@ write_disks(struct disk **disks)
}
return 1;
}
void
make_filesystems(struct disk **disks)
{
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

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$
* $Id: globals.c,v 1.1.1.1 1995/04/27 12:50:34 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -53,6 +53,8 @@ int DebugFD; /* Where diagnostic output goes */
Boolean OnCDROM; /* Are we running off of a CDROM? */
Boolean OnSerial; /* Are we on a serial console? */
Boolean DialogActive;
Boolean ColorDisplay;
Boolean OnVTY;
Variable *VarHead; /* The head of the variable chain */
/*
@ -66,6 +68,8 @@ globalsInit(void)
DebugFD = -1;
OnCDROM = FALSE;
OnSerial = FALSE;
ColorDisplay = FALSE;
OnVTY = FALSE;
DialogActive = FALSE;
VarHead = NULL;
}

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: install.c,v 1.5 1995/05/04 03:51:16 jkh Exp $
* $Id: install.c,v 1.8 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -42,6 +42,7 @@
*/
#include "sysinstall.h"
#include<sys/disklabel.h>
Boolean SystemWasInstalled;
@ -87,6 +88,7 @@ installHook(char *str)
make_filesystems(disks);
cpio_extract(disks);
extract_dists(disks);
install_configuration_files(disks);
do_final_setup(disks);
SystemWasInstalled = TRUE;
break;
@ -147,3 +149,51 @@ installMaint(char *str)
msgConfirm("Sorry, maintainance mode is not implemented in this version.");
return 0;
}
/* Go newfs and/or mount all the filesystems we've been asked to */
void
make_filesystems(struct disk **disks)
{
int i;
for (i = 0; disks[i]; i++) {
struct chunk *c1;
if (!disks[i]->chunks)
msgFatal("No chunk list found for %s!", disks[i]->name);
c1 = disks[i]->chunks->part;
while (c1) {
if (c1->type == freebsd) {
struct chunk *c2 = c1->part;
while (c2) {
if (c2->type == part && c2->subtype != FS_SWAP)
vsystem("newfs %s", c2->name);
c2 = c2->next;
}
}
c1 = c1->next;
}
}
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
install_configuration_files(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

View File

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.5 1995/05/04 03:51:22 jkh Exp $
* $Id: sysinstall.h,v 1.8 1995/05/05 23:47:45 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -169,6 +169,19 @@ typedef struct _device {
DeviceType type;
} Device;
/* Some internal representations of partitions */
typedef enum {
PART_NONE,
PART_SLICE,
PART_SWAP,
PART_FILESYSTEM
} PartType;
typedef struct _part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
} PartInfo;
/*** Externs ***/
extern int CpioFD; /* The file descriptor for our CPIO floppy */
@ -215,6 +228,7 @@ extern void systemChangeLang(char *lang);
extern void systemChangeTerminal(char *color, const u_char c_termcap[],
char *mono, const u_char m_termcap[]);
extern void systemChangeScreenmap(const u_char newmap[]);
extern int vsystem(char *fmt, ...);
/* disks.c */
extern void partition_disks(struct disk **disks);
@ -222,6 +236,7 @@ extern int write_disks(struct disk **disks);
extern void make_filesystems(struct disk **disks);
extern void cpio_extract(struct disk **disks);
extern void extract_dists(struct disk **disks);
extern void install_configuration_files(struct disk **disks);
extern void do_final_setup(struct disk **disks);
/* dmenu.c */

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: system.c,v 1.3 1995/05/01 21:56:31 jkh Exp $
* $Id: system.c,v 1.5 1995/05/05 23:47:46 jkh Exp $
*
* Jordan Hubbard
*
@ -257,3 +257,22 @@ systemChangeScreenmap(const u_char newmap[])
getenv("LANG"));
}
}
/* Execute a system command, with varargs */
int
vsystem(char *fmt, ...)
{
va_list args;
char *cmd;
int i;
cmd = (char *)malloc(FILENAME_MAX);
cmd[0] = '\0';
va_start(args, fmt);
vsnprintf((char *)(cmd + strlen(cmd)), FILENAME_MAX, fmt, args);
va_end(args);
msgNotify("Executing command: %s", cmd);
i = system(cmd);
free(cmd);
return i;
}

View File

@ -22,9 +22,6 @@
#include "sysinstall.h"
Boolean ColorDisplay;
Boolean OnVTY;
int
set_termcap(void)
{

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: devices.c,v 1.2 1995/05/04 03:51:14 jkh Exp $
* $Id: devices.c,v 1.5 1995/05/05 23:47:38 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -133,11 +133,10 @@ print_command_summary()
int b_attr = ColorDisplay ? A_BOLD : A_UNDERLINE;
mvprintw(14, 0, "The following commands are supported (in upper or lower case):");
mvprintw(16, 0, "A = Use Entire Disk B = Scan For Bad Blocks");
mvprintw(17, 0, "C = Create New Partition D = Delete Partition");
mvprintw(18, 0, "G = Set BIOS Geometry U = Undo All Changes");
mvprintw(19, 0, "W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(21, 0, "The currently selected partition is displayed in ");
mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition");
mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable");
mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(20, 0, "The currently selected partition is displayed in ");
attrset(b_attr); addstr(ColorDisplay ? "bold" : "underline"); attrset(A_NORMAL);
move(0, 0);
}
@ -245,6 +244,10 @@ device_slice_disk(struct disk *d)
/* Set geometry */
break;
case 'S':
/* Set Bootable */
break;
case 'U':
Free_Disk(d);
d = Open_Disk(name);

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$
* $Id: disks.c,v 1.2 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -43,6 +43,7 @@
#include "sysinstall.h"
#include <ctype.h>
#include <sys/disklabel.h>
/*
* I make some pretty gross assumptions about having a max of 50 chunks
@ -55,8 +56,6 @@
#define MAX_CHUNKS 50
#define FS_SWAP 1
/* Where to start printing the freebsd slices */
#define CHUNK_SLICE_START_ROW 2
#define CHUNK_PART_START_ROW 10
@ -64,18 +63,11 @@
/* The smallest filesystem we're willing to create */
#define FS_MIN_SIZE 2048
typedef enum { PART_NONE, PART_SLICE, PART_SWAP, PART_FILESYSTEM } part_type;
struct part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
};
static struct {
struct disk *d;
struct chunk *c;
struct part_info *p;
part_type type;
PartInfo *p;
PartType type;
} fbsd_chunk_info[MAX_CHUNKS + 1];
static int current_chunk;
@ -176,7 +168,7 @@ int
get_mountpoint(struct chunk *c)
{
char *val;
struct part_info *part;
PartInfo *part;
val = msgGetInput(c->private,
"Please specify mount point for new partition");
@ -193,7 +185,7 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
safe_free(c->private);
part = (struct part_info *)malloc(sizeof(struct part_info));
part = (PartInfo *)malloc(sizeof(PartInfo));
strncpy(part->mountpoint, val, FILENAME_MAX);
part->newfs = TRUE;
c->private = (void *)part;
@ -203,15 +195,15 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
static part_type
static PartType
get_partition_type(struct chunk *c)
{
char selection[20];
static unsigned char *fs_types[] = {
"Swap",
"A swap partition.",
"FS",
"A file system",
"Swap",
"A swap partition.",
};
if (!dialog_menu("Please choose a partition type",
@ -280,8 +272,8 @@ print_fbsd_chunks(void)
char *mountpoint, *newfs;
if (fbsd_chunk_info[i].c->private) {
mountpoint = ((struct part_info *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((struct part_info *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
mountpoint = ((PartInfo *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((PartInfo *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
}
else {
mountpoint = "?";
@ -383,7 +375,7 @@ partition_disks(struct disk **disks)
snprintf(tmp, 20, "%d", sz);
val = msgGetInput(tmp, "Please specify size for new FreeBSD partition");
if (val && (size = strtol(val, 0, 0)) > 0) {
part_type type;
PartType type;
if (get_mountpoint(fbsd_chunk_info[current_chunk].c))
break;
@ -391,7 +383,8 @@ partition_disks(struct disk **disks)
if (type == PART_NONE)
break;
Create_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c->offset,
fbsd_chunk_info[current_chunk].c->offset +
sz - size,
size,
part,
type == PART_SWAP ? FS_SWAP : freebsd,
@ -400,7 +393,16 @@ partition_disks(struct disk **disks)
}
}
break;
case 'D':
if (fbsd_chunk_info[current_chunk].type == PART_SLICE) {
msg = "Use the Master Partition Editor to delete one of these";
break;
}
Delete_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c);
break;
case 27: /* ESC */
partitioning = FALSE;
break;
@ -416,11 +418,11 @@ write_disks(struct disk **disks)
extern u_char mbr[], bteasy17[];
dialog_clear();
if (!msgYesNo("Last Chance! Are you sure you want to write your changes to disk?")) {
if (!msgYesNo("Last Chance! Are you sure you want to write out\nall your changes to disk?")) {
for (i = 0; disks[i]; i++) {
if (contains_root_partition(disks[i]))
Set_Boot_Blocks(disks[i], boot1, boot2);
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, as well as boot from a driver other than the first."))
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, or boot from a disk other than the first."))
Set_Boot_Mgr(disks[i], bteasy17);
else if (i == 0 && !msgYesNo("Would you like to remove an existing boot manager?"))
Set_Boot_Mgr(disks[i], mbr);
@ -432,24 +434,3 @@ write_disks(struct disk **disks)
}
return 1;
}
void
make_filesystems(struct disk **disks)
{
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

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$
* $Id: globals.c,v 1.1.1.1 1995/04/27 12:50:34 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -53,6 +53,8 @@ int DebugFD; /* Where diagnostic output goes */
Boolean OnCDROM; /* Are we running off of a CDROM? */
Boolean OnSerial; /* Are we on a serial console? */
Boolean DialogActive;
Boolean ColorDisplay;
Boolean OnVTY;
Variable *VarHead; /* The head of the variable chain */
/*
@ -66,6 +68,8 @@ globalsInit(void)
DebugFD = -1;
OnCDROM = FALSE;
OnSerial = FALSE;
ColorDisplay = FALSE;
OnVTY = FALSE;
DialogActive = FALSE;
VarHead = NULL;
}

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: install.c,v 1.5 1995/05/04 03:51:16 jkh Exp $
* $Id: install.c,v 1.8 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -42,6 +42,7 @@
*/
#include "sysinstall.h"
#include<sys/disklabel.h>
Boolean SystemWasInstalled;
@ -87,6 +88,7 @@ installHook(char *str)
make_filesystems(disks);
cpio_extract(disks);
extract_dists(disks);
install_configuration_files(disks);
do_final_setup(disks);
SystemWasInstalled = TRUE;
break;
@ -147,3 +149,51 @@ installMaint(char *str)
msgConfirm("Sorry, maintainance mode is not implemented in this version.");
return 0;
}
/* Go newfs and/or mount all the filesystems we've been asked to */
void
make_filesystems(struct disk **disks)
{
int i;
for (i = 0; disks[i]; i++) {
struct chunk *c1;
if (!disks[i]->chunks)
msgFatal("No chunk list found for %s!", disks[i]->name);
c1 = disks[i]->chunks->part;
while (c1) {
if (c1->type == freebsd) {
struct chunk *c2 = c1->part;
while (c2) {
if (c2->type == part && c2->subtype != FS_SWAP)
vsystem("newfs %s", c2->name);
c2 = c2->next;
}
}
c1 = c1->next;
}
}
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
install_configuration_files(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

View File

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.5 1995/05/04 03:51:22 jkh Exp $
* $Id: sysinstall.h,v 1.8 1995/05/05 23:47:45 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -169,6 +169,19 @@ typedef struct _device {
DeviceType type;
} Device;
/* Some internal representations of partitions */
typedef enum {
PART_NONE,
PART_SLICE,
PART_SWAP,
PART_FILESYSTEM
} PartType;
typedef struct _part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
} PartInfo;
/*** Externs ***/
extern int CpioFD; /* The file descriptor for our CPIO floppy */
@ -215,6 +228,7 @@ extern void systemChangeLang(char *lang);
extern void systemChangeTerminal(char *color, const u_char c_termcap[],
char *mono, const u_char m_termcap[]);
extern void systemChangeScreenmap(const u_char newmap[]);
extern int vsystem(char *fmt, ...);
/* disks.c */
extern void partition_disks(struct disk **disks);
@ -222,6 +236,7 @@ extern int write_disks(struct disk **disks);
extern void make_filesystems(struct disk **disks);
extern void cpio_extract(struct disk **disks);
extern void extract_dists(struct disk **disks);
extern void install_configuration_files(struct disk **disks);
extern void do_final_setup(struct disk **disks);
/* dmenu.c */

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: system.c,v 1.3 1995/05/01 21:56:31 jkh Exp $
* $Id: system.c,v 1.5 1995/05/05 23:47:46 jkh Exp $
*
* Jordan Hubbard
*
@ -257,3 +257,22 @@ systemChangeScreenmap(const u_char newmap[])
getenv("LANG"));
}
}
/* Execute a system command, with varargs */
int
vsystem(char *fmt, ...)
{
va_list args;
char *cmd;
int i;
cmd = (char *)malloc(FILENAME_MAX);
cmd[0] = '\0';
va_start(args, fmt);
vsnprintf((char *)(cmd + strlen(cmd)), FILENAME_MAX, fmt, args);
va_end(args);
msgNotify("Executing command: %s", cmd);
i = system(cmd);
free(cmd);
return i;
}

View File

@ -22,9 +22,6 @@
#include "sysinstall.h"
Boolean ColorDisplay;
Boolean OnVTY;
int
set_termcap(void)
{

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: devices.c,v 1.2 1995/05/04 03:51:14 jkh Exp $
* $Id: devices.c,v 1.5 1995/05/05 23:47:38 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -133,11 +133,10 @@ print_command_summary()
int b_attr = ColorDisplay ? A_BOLD : A_UNDERLINE;
mvprintw(14, 0, "The following commands are supported (in upper or lower case):");
mvprintw(16, 0, "A = Use Entire Disk B = Scan For Bad Blocks");
mvprintw(17, 0, "C = Create New Partition D = Delete Partition");
mvprintw(18, 0, "G = Set BIOS Geometry U = Undo All Changes");
mvprintw(19, 0, "W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(21, 0, "The currently selected partition is displayed in ");
mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition");
mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable");
mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Proceed to next screen");
mvprintw(20, 0, "The currently selected partition is displayed in ");
attrset(b_attr); addstr(ColorDisplay ? "bold" : "underline"); attrset(A_NORMAL);
move(0, 0);
}
@ -245,6 +244,10 @@ device_slice_disk(struct disk *d)
/* Set geometry */
break;
case 'S':
/* Set Bootable */
break;
case 'U':
Free_Disk(d);
d = Open_Disk(name);

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$
* $Id: disks.c,v 1.2 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -43,6 +43,7 @@
#include "sysinstall.h"
#include <ctype.h>
#include <sys/disklabel.h>
/*
* I make some pretty gross assumptions about having a max of 50 chunks
@ -55,8 +56,6 @@
#define MAX_CHUNKS 50
#define FS_SWAP 1
/* Where to start printing the freebsd slices */
#define CHUNK_SLICE_START_ROW 2
#define CHUNK_PART_START_ROW 10
@ -64,18 +63,11 @@
/* The smallest filesystem we're willing to create */
#define FS_MIN_SIZE 2048
typedef enum { PART_NONE, PART_SLICE, PART_SWAP, PART_FILESYSTEM } part_type;
struct part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
};
static struct {
struct disk *d;
struct chunk *c;
struct part_info *p;
part_type type;
PartInfo *p;
PartType type;
} fbsd_chunk_info[MAX_CHUNKS + 1];
static int current_chunk;
@ -176,7 +168,7 @@ int
get_mountpoint(struct chunk *c)
{
char *val;
struct part_info *part;
PartInfo *part;
val = msgGetInput(c->private,
"Please specify mount point for new partition");
@ -193,7 +185,7 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
safe_free(c->private);
part = (struct part_info *)malloc(sizeof(struct part_info));
part = (PartInfo *)malloc(sizeof(PartInfo));
strncpy(part->mountpoint, val, FILENAME_MAX);
part->newfs = TRUE;
c->private = (void *)part;
@ -203,15 +195,15 @@ msgConfirm("This region cannot be used for your root partition as\nit is past th
return 1;
}
static part_type
static PartType
get_partition_type(struct chunk *c)
{
char selection[20];
static unsigned char *fs_types[] = {
"Swap",
"A swap partition.",
"FS",
"A file system",
"Swap",
"A swap partition.",
};
if (!dialog_menu("Please choose a partition type",
@ -280,8 +272,8 @@ print_fbsd_chunks(void)
char *mountpoint, *newfs;
if (fbsd_chunk_info[i].c->private) {
mountpoint = ((struct part_info *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((struct part_info *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
mountpoint = ((PartInfo *)fbsd_chunk_info[i].c->private)->mountpoint;
newfs = ((PartInfo *)fbsd_chunk_info[i].c->private)->newfs ? "Y" : "N";
}
else {
mountpoint = "?";
@ -383,7 +375,7 @@ partition_disks(struct disk **disks)
snprintf(tmp, 20, "%d", sz);
val = msgGetInput(tmp, "Please specify size for new FreeBSD partition");
if (val && (size = strtol(val, 0, 0)) > 0) {
part_type type;
PartType type;
if (get_mountpoint(fbsd_chunk_info[current_chunk].c))
break;
@ -391,7 +383,8 @@ partition_disks(struct disk **disks)
if (type == PART_NONE)
break;
Create_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c->offset,
fbsd_chunk_info[current_chunk].c->offset +
sz - size,
size,
part,
type == PART_SWAP ? FS_SWAP : freebsd,
@ -400,7 +393,16 @@ partition_disks(struct disk **disks)
}
}
break;
case 'D':
if (fbsd_chunk_info[current_chunk].type == PART_SLICE) {
msg = "Use the Master Partition Editor to delete one of these";
break;
}
Delete_Chunk(fbsd_chunk_info[current_chunk].d,
fbsd_chunk_info[current_chunk].c);
break;
case 27: /* ESC */
partitioning = FALSE;
break;
@ -416,11 +418,11 @@ write_disks(struct disk **disks)
extern u_char mbr[], bteasy17[];
dialog_clear();
if (!msgYesNo("Last Chance! Are you sure you want to write your changes to disk?")) {
if (!msgYesNo("Last Chance! Are you sure you want to write out\nall your changes to disk?")) {
for (i = 0; disks[i]; i++) {
if (contains_root_partition(disks[i]))
Set_Boot_Blocks(disks[i], boot1, boot2);
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, as well as boot from a driver other than the first."))
if (i == 0 && !msgYesNo("Would you like to install a boot manager?\n\nThis will allow you to easily select between other operating systems\non the first disk, or boot from a disk other than the first."))
Set_Boot_Mgr(disks[i], bteasy17);
else if (i == 0 && !msgYesNo("Would you like to remove an existing boot manager?"))
Set_Boot_Mgr(disks[i], mbr);
@ -432,24 +434,3 @@ write_disks(struct disk **disks)
}
return 1;
}
void
make_filesystems(struct disk **disks)
{
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

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$
* $Id: globals.c,v 1.1.1.1 1995/04/27 12:50:34 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -53,6 +53,8 @@ int DebugFD; /* Where diagnostic output goes */
Boolean OnCDROM; /* Are we running off of a CDROM? */
Boolean OnSerial; /* Are we on a serial console? */
Boolean DialogActive;
Boolean ColorDisplay;
Boolean OnVTY;
Variable *VarHead; /* The head of the variable chain */
/*
@ -66,6 +68,8 @@ globalsInit(void)
DebugFD = -1;
OnCDROM = FALSE;
OnSerial = FALSE;
ColorDisplay = FALSE;
OnVTY = FALSE;
DialogActive = FALSE;
VarHead = NULL;
}

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: install.c,v 1.5 1995/05/04 03:51:16 jkh Exp $
* $Id: install.c,v 1.8 1995/05/05 23:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -42,6 +42,7 @@
*/
#include "sysinstall.h"
#include<sys/disklabel.h>
Boolean SystemWasInstalled;
@ -87,6 +88,7 @@ installHook(char *str)
make_filesystems(disks);
cpio_extract(disks);
extract_dists(disks);
install_configuration_files(disks);
do_final_setup(disks);
SystemWasInstalled = TRUE;
break;
@ -147,3 +149,51 @@ installMaint(char *str)
msgConfirm("Sorry, maintainance mode is not implemented in this version.");
return 0;
}
/* Go newfs and/or mount all the filesystems we've been asked to */
void
make_filesystems(struct disk **disks)
{
int i;
for (i = 0; disks[i]; i++) {
struct chunk *c1;
if (!disks[i]->chunks)
msgFatal("No chunk list found for %s!", disks[i]->name);
c1 = disks[i]->chunks->part;
while (c1) {
if (c1->type == freebsd) {
struct chunk *c2 = c1->part;
while (c2) {
if (c2->type == part && c2->subtype != FS_SWAP)
vsystem("newfs %s", c2->name);
c2 = c2->next;
}
}
c1 = c1->next;
}
}
}
void
cpio_extract(struct disk **disks)
{
}
void
extract_dists(struct disk **disks)
{
}
void
install_configuration_files(struct disk **disks)
{
}
void
do_final_setup(struct disk **disks)
{
}

View File

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.5 1995/05/04 03:51:22 jkh Exp $
* $Id: sysinstall.h,v 1.8 1995/05/05 23:47:45 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -169,6 +169,19 @@ typedef struct _device {
DeviceType type;
} Device;
/* Some internal representations of partitions */
typedef enum {
PART_NONE,
PART_SLICE,
PART_SWAP,
PART_FILESYSTEM
} PartType;
typedef struct _part_info {
Boolean newfs;
char mountpoint[FILENAME_MAX];
} PartInfo;
/*** Externs ***/
extern int CpioFD; /* The file descriptor for our CPIO floppy */
@ -215,6 +228,7 @@ extern void systemChangeLang(char *lang);
extern void systemChangeTerminal(char *color, const u_char c_termcap[],
char *mono, const u_char m_termcap[]);
extern void systemChangeScreenmap(const u_char newmap[]);
extern int vsystem(char *fmt, ...);
/* disks.c */
extern void partition_disks(struct disk **disks);
@ -222,6 +236,7 @@ extern int write_disks(struct disk **disks);
extern void make_filesystems(struct disk **disks);
extern void cpio_extract(struct disk **disks);
extern void extract_dists(struct disk **disks);
extern void install_configuration_files(struct disk **disks);
extern void do_final_setup(struct disk **disks);
/* dmenu.c */

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: system.c,v 1.3 1995/05/01 21:56:31 jkh Exp $
* $Id: system.c,v 1.5 1995/05/05 23:47:46 jkh Exp $
*
* Jordan Hubbard
*
@ -257,3 +257,22 @@ systemChangeScreenmap(const u_char newmap[])
getenv("LANG"));
}
}
/* Execute a system command, with varargs */
int
vsystem(char *fmt, ...)
{
va_list args;
char *cmd;
int i;
cmd = (char *)malloc(FILENAME_MAX);
cmd[0] = '\0';
va_start(args, fmt);
vsnprintf((char *)(cmd + strlen(cmd)), FILENAME_MAX, fmt, args);
va_end(args);
msgNotify("Executing command: %s", cmd);
i = system(cmd);
free(cmd);
return i;
}

View File

@ -22,9 +22,6 @@
#include "sysinstall.h"
Boolean ColorDisplay;
Boolean OnVTY;
int
set_termcap(void)
{