Import of sysinst. Not quite ready, but other ports want access for

parallel development.  i386 version about 90% complete.  pc532 version
just started, other architectures later in coordination with portmasters.

This is a curses based, menu driven installation program.

Better error checking is needed.
This commit is contained in:
phil 1997-09-26 23:02:53 +00:00
parent f338821834
commit af1d23bed3
28 changed files with 4560 additions and 0 deletions

View File

@ -0,0 +1,6 @@
# can't make here due to crunchgen
#
SUBDIR = arch/${MACHINE}
.include <bsd.subdir.mk>

View File

@ -0,0 +1,45 @@
# Makefile for install
PROG=sysinst
LDADD=-lcurses -ltermcap
.if exists(${.CURDIR}/../../../../sys/conf/osrelease.sh)
VER != sh ${.CURDIR}/../../../../sys/conf/osrelease.sh
.endif
.if exists(${.CURDIR}/../../../../../sys/conf/osrelease.sh)
VER != sh ${.CURDIR}/../../../../../sys/conf/osrelease.sh
.endif
CFLAGS+= -I. -I${.CURDIR}/../.. -I${.CURDIR} \
-DREL=\"${VER}\" -DMACH=\"${MACHINE}\"
NOMAN=y
WARNS=1
CLEANFILES= menu_defs.c menu_defs.h menus.def msg_defs.c msg_defs.h msg.def
LANG?=eng
.PATH: ${.CURDIR}/../..
MENUC=menuc
MSGC=msgc
.include <bsd.prog.mk>
menu_defs.c menu_defs.h: menus.def
${MENUC} menus.def
msg_defs.c msg_defs.h: msg.def
${MSGC} msg.def
msg.def: msg.mi.${LANG} msg.md.${LANG}
sed "s/@@VERSION@@/${VER}/" ${.ALLSRC} > ${.TARGET}
menus.def: menus.mi.${LANG} menus.md.${LANG}
sed "s/@@VERSION@@/${VER}/" ${.ALLSRC} > ${.TARGET}
menu_defs.c: msg_defs.h

View File

@ -0,0 +1,10 @@
# Makefile.inc for i386
#
# have to have all of them here for crunch ...
SRCS= menu_defs.c msg_defs.c main.c install.c upgrade.c \
txtwalk.c run.c factor.c net.c disks.c util.c \
md.c fdisk.c
.include "../../Makefile.inc"

View File

@ -0,0 +1,175 @@
/* $NetBSD: fdisk.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* fdisk.c -- routines to deal with fdisk ... */
#include <stdio.h>
#include "defs.h"
#include "md.h"
#include "txtwalk.h"
#include "msg_defs.h"
#include "menu_defs.h"
struct lookfor fdiskbuf[] = {
{"DLCYL", "DLCYL=%d", "a $0", &dlcyl, NULL},
{"DLHEAD", "DLHEAD=%d", "a $0", &dlhead, NULL},
{"DLSEC", "DLSEC=%d", "a $0", &dlsec, NULL},
{"BCYL", "BCYL=%d", "a $0", &bcyl, NULL},
{"BHEAD", "BHEAD=%d", "a $0", &bhead, NULL},
{"BSEC", "BSEC=%d", "a $0", &bsec, NULL},
{"PART0ID", "PART0ID=%d", "a $0", &part[0][ID], NULL},
{"PART0SIZE", "PART0SIZE=%d", "a $0", &part[0][SIZE], NULL},
{"PART0START", "PART0START=%d", "a $0", &part[0][START], NULL},
{"PART0FLAG", "PART0FLAG=%d", "a $0", &part[0][FLAG], NULL},
{"PART1ID", "PART1ID=%d", "a $0", &part[1][ID], NULL},
{"PART1SIZE", "PART1SIZE=%d", "a $0", &part[1][SIZE], NULL},
{"PART1START", "PART1START=%d", "a $0", &part[1][START], NULL},
{"PART1FLAG", "PART1FLAG=%d", "a $0", &part[1][FLAG], NULL},
{"PART2ID", "PART2ID=%d", "a $0", &part[2][ID], NULL},
{"PART2SIZE", "PART2SIZE=%d", "a $0", &part[2][SIZE], NULL},
{"PART2START", "PART2START=%d", "a $0", &part[2][START], NULL},
{"PART2FLAG", "PART2FLAG=%d", "a $0", &part[2][FLAG], NULL},
{"PART3ID", "PART3ID=%d", "a $0", &part[3][ID], NULL},
{"PART3SIZE", "PART3SIZE=%d", "a $0", &part[3][SIZE], NULL},
{"PART3START", "PART3START=%d", "a $0", &part[3][START], NULL},
{"PART3FLAG", "PART3FLAG=%d", "a $0", &part[3][FLAG], NULL}
};
int numfdiskbuf = sizeof(fdiskbuf) / sizeof(struct lookfor);
struct part_id {
int id;
char *name;
} part_ids[] = {
{0, "unused"},
{1, "Primary DOS, 12 bit FAT"},
{4, "Primary DOS, 16 bit FAT <32M"},
{5, "Extended DOS"},
{6, "Primary DOS, 16-bit FAT >32MB"},
{165, "NetBSD"},
{-1, "Unknown"},
};
int partsoverlap(int i, int j)
{
if (part[i][SIZE] == 0 || part[j][SIZE] == 0)
return 0;
return (part[i][START] >= part[j][START] &&
part[i][START] < part[j][START] + part[j][SIZE])
||
(part[i][START]+part[i][SIZE] > part[j][START] &&
part[i][START]+part[i][SIZE] < part[j][START] + part[j][SIZE])
||
(part[j][START] >= part[i][START] &&
part[j][START] < part[i][START] + part[i][SIZE])
||
(part[j][START]+part[j][SIZE] > part[i][START] &&
part[j][START]+part[j][SIZE] < part[i][START] + part[i][SIZE]);
}
void disp_cur_part (int sel, int disp)
{
int i, j, start, stop;
if (disp < 0)
start = 0, stop = 4;
else
start = disp, stop = disp+1;
msg_display_add (MSG_part_head, multname, multname);
for (i=start; i<stop; i++) {
if (sel == i) msg_standout();
if (part[i][SIZE] == 0 && part[i][START] == 0)
msg_printf_add ("%d %24s ", i, "");
else
msg_printf_add ("%d %12d%12d ", i,
part[i][START] / sizemult,
part[i][SIZE] / sizemult);
for (j = 0; part_ids[j].id != -1 &&
part_ids[j].id != part[i][ID]; j++);
msg_printf_add ("%s\n", part_ids[j].name);
if (sel == i) msg_standend();
}
}
int check_geom (void)
{
return bcyl < 1024 && bsec < 64 && bcyl > 0 && bhead > 0 && bsec > 0;
}
void set_fdisk_geom (void)
{
char res[80];
msg_display_add (MSG_setfdiskgeom);
disp_cur_geom();
msg_printf_add ("\n");
msg_prompt_add (MSG_cylinders, NULL, res, 80);
bcyl = atoi(res);
msg_prompt_add (MSG_heads, NULL, res, 80);
bhead = atoi(res);
msg_prompt_add (MSG_sectors, NULL, res, 80);
bsec = atoi(res);
bstuffset = 1;
}
void disp_cur_geom (void)
{
msg_display_add (MSG_realgeom, dlcyl, dlhead, dlsec);
msg_display_add (MSG_fdiskgeom, bcyl, bhead, bsec);
}
void get_fdisk_info (void)
{
char *textbuf;
int textsize;
/* Get Fdisk information */
textsize = collect (T_OUTPUT, &textbuf,
"/sbin/fdisk -S /dev/r%sd 2>/dev/null", diskdev);
if (textsize < 0) {
endwin();
(void) fprintf (stderr, "Could not run fdisk.");
exit (1);
}
walk (textbuf, textsize, fdiskbuf, numfdiskbuf);
free (textbuf);
}

View File

@ -0,0 +1,407 @@
/* $NetBSD: md.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* md.c -- Machine specific code for i386 */
#include <stdio.h>
#include "defs.h"
#include "md.h"
#include "msg_defs.h"
#include "menu_defs.h"
/* prototypes */
void md_get_info()
{
int i, j;
get_fdisk_info ();
/* Ask about disk type ... */
if (diskgeom == wd0 || diskgeom == wd1) {
process_menu (MENU_wdtype);
disktype = "ST506";
} else {
disktype = "SCSI";
if (diskgeom[0]*diskgeom[1]*diskgeom[2] != diskgeom[4])
if (diskgeom[0] != dlcyl || diskgeom[1] != dlhead
|| diskgeom[2] != dlsec)
process_menu (MENU_scsigeom1);
else
process_menu (MENU_scsigeom2);
}
/* Check against diskgeom. */
if (diskgeom[0] != dlcyl || diskgeom[1] != dlhead
|| diskgeom[2] != dlsec)
process_menu (MENU_dlgeom);
/* Check fdisk information */
if (bsec <= 0 || bcyl <= 0 || bsec <= 0 || bcyl > 1024 || bsec > 63)
process_menu (MENU_biosgeom);
/* Compute the full sizes ... */
dlcylsize = dlhead*dlsec;
dlsize = dlcyl*dlcylsize;
bcylsize = bhead*bsec;
bsize = bcyl*bcylsize;
/* Ask full/part */
msg_display (MSG_fullpart, diskdev);
process_menu (MENU_fullpart);
/* DOS fdisk label checking and value setting. */
if (usefull) {
/* Ask if we really want to blow away non-BSD stuff */
if (!(part[0][ID] == 0 || part[0][ID] == 165 ||
part[1][ID] == 0 || part[1][ID] == 165 ||
part[2][ID] == 0 || part[2][ID] == 165 ||
part[3][ID] == 0 || part[3][ID] == 165)) {
msg_display (MSG_ovrwrite);
process_menu (MENU_noyes);
if (!yesno) {
endwin();
return;
}
}
/* Set the partition information for full disk usage. */
part[0][ID] = part[0][SIZE] = 0;
part[1][ID] = part[1][SIZE] = 0;
part[2][ID] = part[2][SIZE] = 0;
part[3][ID] = 165;
part[3][SIZE] = bsize - bsec;
part[3][START] = bsec;
part[3][FLAG] = 0x80;
ptstart = bsec;
ptsize = bsize - bsec;
fsdsize = dlsize;
fsptsize = dlsize - bsec;
fsdmb = fsdsize / MEG;
activepart = 3;
} else {
int numbsd, overlap;
/* Ask for sizes, which partitions, ... */
ask_sizemult();
bsdpart = -1;
activepart = -1;
for (i=0; i<4; i++)
if (part[i][FLAG] != 0)
activepart = i;
do {
process_menu (MENU_editparttable);
numbsd = 0;
bsdpart = -1;
overlap = 0;
for (i=0; i<4; i++) {
if (part[i][ID] == 165) {
bsdpart = i;
numbsd++;
}
for (j = i+1; j<4; j++)
if (partsoverlap(i,j))
overlap = 1;
}
if (overlap || numbsd != 1) {
msg_display (MSG_reeditpart);
process_menu (MENU_ok);
}
} while (numbsd != 1 || overlap);
ptstart = part[bsdpart][START];
ptsize = part[bsdpart][SIZE];
fsdsize = dlsize;
if (ptstart + ptsize < bsize)
fsptsize = part[bsdpart][SIZE];
else
fsptsize = dlsize - ptstart;
fsdmb = fsdsize / MEG;
/* Ask if a boot selector is wanted. XXXX */
}
/* Compute minimum NetBSD partition sizes (in sectors). */
minfsdmb = (80 + 4*rammb) * (MEG / sectorsize);
if (usefull)
swapadj = bsec;
}
void md_pre_disklabel()
{
int i;
/* Fdisk the disk! */
printf ("%s", msg_string (MSG_dofdisk));
if (bstuffset)
run_prog ("/sbin/fdisk -i -f -b %d/%d/%d /dev/r%sd",
bcyl, bhead, bsec, diskdev);
for (i=0; i<4; i++)
run_prog ("/sbin/fdisk -u -f -%d -s %d/%d/%d /dev/r%sd",
i, part[i][ID], part[i][START], part[i][SIZE],
diskdev);
if (activepart >= 0)
run_prog ("/sbin/fdisk -a -%d -f", activepart);
}
void md_post_disklabel (void)
{
/* Sector forwarding / badblocks ... */
if (*doessf) {
printf ("%s", msg_string (MSG_dobad144));
run_prog ("/usr/sbin/bad144 %s 0", diskdev);
}
}
void md_post_newfs (void)
{
/* boot blocks ... */
printf (msg_string(MSG_dobootblks), diskdev);
run_prog ("/usr/mdec/installboot -v /usr/mdec/biosboot.sym "
"/dev/r%sa", diskdev);
}
void md_copy_filesystem (void)
{
/* Copy the instbin(s) to the disk */
printf ("%s", msg_string(MSG_dotar));
run_prog ("tar --one-file-system -cf - . |"
"(cd /mnt ; tar --unlink -xpf - )");
run_prog ("/bin/cp /tmp/.hdprofile /mnt/.profile");
}
void md_make_bsd_partitions (void)
{
FILE *f;
int i, part;
int remain;
char isize[20];
/* Ask for layout type -- standard or special */
msg_display (MSG_layout,
(1.0*fsptsize*sectorsize)/MEG,
(1.0*minfsdmb*sectorsize)/MEG,
(1.0*minfsdmb*sectorsize)/MEG+rammb+XNEEDMB);
process_menu (MENU_layout);
if (layoutkind == 3) {
ask_sizemult();
} else {
sizemult = MEG / sectorsize;
multname = msg_string(MSG_megname);
}
/* Build standard partitions */
/* Partitions C and D are predefined. */
bsdlabel[C][D_FSTYPE] = T_UNUSED;
bsdlabel[C][D_OFFSET] = ptstart;
bsdlabel[C][D_SIZE] = fsptsize;
bsdlabel[D][D_FSTYPE] = T_UNUSED;
bsdlabel[D][D_OFFSET] = 0;
bsdlabel[D][D_SIZE] = fsdsize;
/* Standard fstypes */
bsdlabel[A][D_FSTYPE] = T_42BSD;
bsdlabel[B][D_FSTYPE] = T_SWAP;
bsdlabel[E][D_FSTYPE] = T_42BSD;
bsdlabel[F][D_FSTYPE] = T_UNUSED;
bsdlabel[G][D_FSTYPE] = T_UNUSED;
bsdlabel[H][D_FSTYPE] = T_UNUSED;
switch (layoutkind) {
case 1: /* standard: a root, b swap, c/d "unused", e /usr */
case 2: /* standard X: a root, b swap (big), c/d "unused", e /usr */
partstart = ptstart;
/* Root */
i = NUMSEC(20+2*rammb, MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart;
bsdlabel[A][D_OFFSET] = partstart;
bsdlabel[A][D_SIZE] = partsize;
bsdlabel[A][D_BSIZE] = 8192;
bsdlabel[A][D_FSIZE] = 1024;
strcpy (fsmount[A], "/");
partstart += partsize;
/* swap */
i = NUMSEC(layoutkind * 2 * (rammb < 32 ? 32 : rammb),
MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart - swapadj;
bsdlabel[B][D_OFFSET] = partstart;
bsdlabel[B][D_SIZE] = partsize;
partstart += partsize;
/* /usr */
partsize = fsdsize - partstart;
bsdlabel[E][D_OFFSET] = partstart;
bsdlabel[E][D_SIZE] = partsize;
bsdlabel[E][D_BSIZE] = 8192;
bsdlabel[E][D_FSIZE] = 1024;
strcpy (fsmount[E], "/usr");
/* Verify Partitions. */
process_menu (MENU_fspartok);
break;
case 3: /* custom: ask user for all sizes */
ask_sizemult();
/* root */
partstart = ptstart;
remain = fsdsize - partstart;
i = NUMSEC(20+2*rammb, MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart;
snprintf (isize, 20, "%d", partsize/sizemult);
msg_prompt (MSG_askfsroot, isize, isize, 20,
remain/sizemult, multname);
partsize = NUMSEC(atoi(isize),sizemult, dlcylsize);
bsdlabel[A][D_OFFSET] = partstart;
bsdlabel[A][D_SIZE] = partsize;
bsdlabel[A][D_BSIZE] = 8192;
bsdlabel[A][D_FSIZE] = 1024;
strcpy (fsmount[A], "/");
partstart += partsize;
/* swap */
remain = fsdsize - partstart;
i = NUMSEC(layoutkind * 2 * (rammb < 32 ? 32 : rammb),
MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart - swapadj;
snprintf (isize, 20, "%d", partsize/sizemult);
msg_prompt_add (MSG_askfsswap, isize, isize, 20,
remain/sizemult, multname);
partsize = NUMSEC(atoi(isize),sizemult, dlcylsize) - swapadj;
bsdlabel[B][D_OFFSET] = partstart;
bsdlabel[B][D_SIZE] = partsize;
partstart += partsize;
/* /usr */
remain = fsdsize - partstart;
partsize = fsdsize - partstart;
snprintf (isize, 20, "%d", partsize/sizemult);
msg_prompt_add (MSG_askfsusr, isize, isize, 20,
remain/sizemult, multname);
partsize = NUMSEC(atoi(isize),sizemult, dlcylsize);
if (remain - partsize < sizemult)
partsize = remain;
bsdlabel[E][D_OFFSET] = partstart;
bsdlabel[E][D_SIZE] = partsize;
bsdlabel[E][D_BSIZE] = 8192;
bsdlabel[E][D_FSIZE] = 1024;
strcpy (fsmount[E], "/usr");
partstart += partsize;
/* Others ... */
remain = fsdsize - partstart;
part = F;
if (remain > 0)
msg_display (MSG_otherparts);
while (remain > 0 && part <= H) {
partsize = fsdsize - partstart;
snprintf (isize, 20, "%d", partsize/sizemult);
msg_prompt_add (MSG_askfspart, isize, isize, 20,
diskdev, partname[part],
remain/sizemult, multname);
partsize = NUMSEC(atoi(isize),sizemult, dlcylsize);
if (remain - partsize < sizemult)
partsize = remain;
bsdlabel[part][D_FSTYPE] = T_42BSD;
bsdlabel[part][D_OFFSET] = partstart;
bsdlabel[part][D_SIZE] = partsize;
bsdlabel[part][D_BSIZE] = 8192;
bsdlabel[part][D_FSIZE] = 1024;
msg_prompt_add (MSG_mountpoint, NULL,
fsmount[part], 20);
partstart += partsize;
remain = fsdsize - partstart;
part++;
}
/* Verify Partitions. */
process_menu(MENU_fspartok);
break;
}
/* Disk name */
msg_prompt (MSG_packname, "mydisk", bsddiskname, 80);
/* Create the disktab.preinstall */
run_prog ("cp /etc/disktab.preinstall /etc/disktab");
#ifdef DEBUG
f = fopen ("/tmp/disktab", "a");
#else
f = fopen ("/etc/disktab", "a");
#endif
if (f == NULL) {
endwin();
(void) fprintf (stderr, "Could not open /etc/disktab");
exit (1);
}
(void)fprintf (f, "%s|NetBSD installation generated:\\\n", bsddiskname);
(void)fprintf (f, "\t:dt=%s:ty=winchester:\\\n", disktype);
(void)fprintf (f, "\t:nc#%d:nt#%d:ns#%d:\\\n", dlcyl, dlhead, dlsec);
(void)fprintf (f, "\t:sc#%d:su#%d:\\\n", dlhead*dlsec, dlsize);
(void)fprintf (f, "\t:se#%d:%s\\\n", sectorsize, doessf);
for (i=0; i<8; i++) {
(void)fprintf (f, "\t:p%c#%d:o%c#%d:t%c=%s:",
'a'+i, bsdlabel[i][D_SIZE],
'a'+i, bsdlabel[i][D_OFFSET],
'a'+i, fstype[bsdlabel[i][D_FSTYPE]]);
if (bsdlabel[i][D_FSTYPE] == T_42BSD)
(void)fprintf (f, "b%c#%d:f%c#%d",
'a'+i, bsdlabel[i][D_BSIZE],
'a'+i, bsdlabel[i][D_FSIZE]);
if (i < 7)
(void)fprintf (f, "\\\n");
else
(void)fprintf (f, "\n");
}
fclose (f);
}

View File

@ -0,0 +1,72 @@
/* $NetBSD: md.h,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* md.h -- Machine specific definitions for the i386 */
/* constants and defines */
/* Megs required for a full X installation. */
#define XNEEDMB 50
/* fdisk partition information dlxxxx => NetBSD disklabel, bxxxx => bios */
EXTERN int bcyl, bhead, bsec, bsize, bcylsize;
EXTERN int bstuffset INIT(0);
enum info {ID,SIZE,START,FLAG};
EXTERN int part[4][4] INIT({{0}});
EXTERN int activepart;
EXTERN int bsdpart;
EXTERN int usefull;
/* Definition of files to retreive from ftp. */
EXTERN char ftp_prefix[STRSIZE] INIT("/binary/Tarfiles");
EXTERN char ftp_postfix[STRSIZE] INIT(".tar.gz");
EXTERN char *ftp_list[]
#ifdef MAIN
= { "kern", "base", "comp", "etc", "games", "man", "misc", "text", NULL }
#endif
;
/* prototypes */
/* from fdisk.c */
void set_fdisk_geom (void);
void disp_cur_geom (void);
int check_geom (void);
int partsoverlap (int, int);
void get_fdisk_info (void);

View File

@ -0,0 +1,148 @@
/* $NetBSD: menus.md.eng,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* Menu definitions for sysinst. i386 version, machine dependent. */
menu fullpart, title " Select your choice";
option "Use the entire disk", exit, action {usefull = 1;};
option "Use only part of the disk", exit, action {usefull = 0;};
menu wdtype, title " Select type";
display action { msg_display (MSG_wdtype, diskdev); };
option "IDE", exit;
option "ESDI", exit, action
{ msg_display (MSG_sectforward);
process_menu (MENU_yesno);
if (yesno)
doessf = "sf:";
};
option "ST506", exit, action
{ msg_display (MSG_sectforward);
process_menu (MENU_yesno);
if (yesno)
doessf = "sf:";
};
menu dlgeom, title " Choose an option";
display action { msg_display (MSG_dlgeom, diskdev, dlcyl, dlhead,
dlsec, diskgeom[0], diskgeom[1], diskgeom[2]);
};
option "Use real geometry", exit, action {
dlcyl = diskgeom[0];
dlhead = diskgeom[1];
dlsec = diskgeom[2];
};
option "Use disklabel geometry", exit, action {
diskgeom[0] = dlcyl;
diskgeom[1] = dlhead;
diskgeom[2] = dlsec;
};
menu biosgeom, title " Choose an option", y=16;
display action { msg_display (MSG_biosgeom, diskdev);
disp_cur_geom ();
};
option "Abort install, halt machine",
action (endwin) { system ("/sbin/halt"); exit(1); };
option "Enter geometry",
action { msg_clear(); set_fdisk_geom(); },
next menu confirmbios;
menu confirmbios;
display action {
msg_display (MSG_badgeom);
disp_cur_geom ();
};
option "Reenter geometry",
action { msg_clear(); set_fdisk_geom(); };
option "Continue with install",
action {
if (check_geom())
return TRUE;
msg_display (MSG_reentergeom);
set_fdisk_geom();
};
menu editparttable, title " Choose your partition", exit;
display action { msg_display (MSG_editparttable);
disp_cur_part (activepart,-1);
};
option "Edit partition 0", sub menu editpart,
action { editpart = 0; };
option "Edit partition 1", sub menu editpart,
action { editpart = 1; };
option "Edit partition 2", sub menu editpart,
action { editpart = 2; };
option "Edit partition 3", sub menu editpart,
action { editpart = 3; };
menu editpart, title " Select to change";
display action { msg_display (MSG_editpart, editpart);
disp_cur_part (activepart,editpart);
msg_printf_add ("\n");
};
option "Kind", sub menu chooseid;
option "Start and size", action
{ char buf[40]; int start, size;
msg_prompt_add (MSG_start, NULL, buf, 40);
start = NUMSEC(atoi(buf),sizemult,dlcylsize);
if (sizemult > 1 && start < bsec)
start = bsec;
msg_prompt_add (MSG_size, NULL, buf, 40);
size = NUMSEC(atoi(buf),sizemult,dlcylsize);
if (sizemult > 1 && start == bsec)
size -= bsec;
if (start + size > bsize)
size = bsize - start;
if (size < 0) {
size = 0;
start = 0;
}
part[editpart][START] = start;
part[editpart][SIZE] = size;
};
option "Set active", action { activepart = editpart; };
option "Partition OK", exit;
menu chooseid, title " Partition Kind? ";
option "NetBSD", exit, action { part[editpart][ID] = 165; };
option "DOS < 32 Meg", exit, action { part[editpart][ID] = 4; };
option "DOS > 32 Meg", exit, action { part[editpart][ID] = 6; };
option "unused", exit, action { part[editpart][ID] = 0; };

View File

@ -0,0 +1,160 @@
/* $NetBSD: msg.md.eng,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* MD Message catalog -- english, i386 version */
message fullpart
{We are now going to install NetBSD on the disk %s. You may
choose to install NetBSD on the entire disk or part of the disk.
Which would you like to do?
}
message wdtype
{What kind of disk is %s?}
message sectforward
{Does your disk to AUTOMATIC sector forwarding?}
message dlgeom
{It appears that your disk, %s, has already been labeled with a BSD
disklabel and the disklabel reports geometry that is different from
the the real geometry. The two geometries are:
disklabel: %d cylinders, %d heads, %d sectors
real geom: %d cylinders, %d heads, %d sectors
}
message biosgeom
{It appears that your disk, %s, did not have a FDISK label on the disk.
NetBSD is using the true geometry which is incompatible with the
BIOS. This install program gets the BIOS fake geometry of your disk
by reading the FDISK label. Your options are:
-- Abort the install, have DOS/Windows/? put on a FDISK label
-- Choose your own gemoetry and then tell the BIOS about it
-- Find out what the BIOS uses and set it
Note: Entering new geometry will cause this program to initialize your
master boot record.
}
message part_head
{No Start(%s) Size(%s) Kind\n}
message setfdiskgeom
{You will be prompted for the geometry. Please enter the values you
want. Remember, cylinders should be <= 1023 and sectors should <= 63.
}
message badgeom
{The current values for your disk geometry are:
}
message realgeom
{real geom: %d cyl, %d heads, %d sec\n}
message fdiskgeom
{fdisk geom: %d cyl, %d heads, %d sec\n}
message reentergeom
{The values just entered for the geometry are not usable. Please,
reenter the geometry.
}
message ovrwrite
{Your disk currently has a non-NetBSD partition. Do you really want to
overwrite that partition with NetBSD?
}
message parttable
{The partition table on your disk currently looks like the following:
}
message editpart
{Partition %d looks like:\n\n}
message editparttable
{Edit your DOS partition table. The highlighted partition is the currently
active partition. The partition table currently looks like:
}
message reeditpart
{You have specified overlaping DOS partitions or do not have exactly
one NetBSD partition. You will need to re-edit the DOS partition table.
}
message dofdisk
{Setting up the DOS partition table ...
}
message dobad144
{Installing the bad block table ...
}
message dobootblks
{Installing boot blocks on %s....
}
message askfsroot
{I will be asking for partition sizes and on some, mount points.
First the root partition. You have %d %s left on your disk.
Root partition size? }
message askfsswap
{
Next the swap partition. You have %d %s left on your disk.
Swap partition size? }
message askfsusr
{
Next the /usr partition. You have %d %s left on your disk.
/usr partition size? }
message otherparts
{You still have some space remaining unallocated on your disk. Please
give sizes and mount points for the following partitions.
}
message askfspart
{The next partition is /dev/%s%c. You have %d %s left on your disk.
Partition size? }

View File

@ -0,0 +1,10 @@
# Makefile for pc532
#
# have to have all of them here for crunch ...
SRCS= menu_defs.c msg_defs.c main.c install.c upgrade.c \
txtwalk.c run.c factor.c net.c disks.c util.c \
md.c
.include "../../Makefile.inc"

View File

@ -0,0 +1,212 @@
/* $NetBSD: md.c,v 1.1.1.1 1997/09/26 23:02:56 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* md.c -- pc532 machine specific routines */
#include <stdio.h>
#include <curses.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/disklabel.h>
#include <sys/ioctl.h>
#include "defs.h"
#include "md.h"
#include "msg_defs.h"
#include "menu_defs.h"
void md_get_info (void)
{ struct disklabel disklabel;
int fd;
char devname[100];
snprintf (devname, 100, "/dev/r%sc", diskdev);
fd = open (devname, O_RDONLY, 0);
if (fd < 0) {
endwin();
fprintf (stderr, "Can't open %s\n", devname);
exit(1);
}
if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) {
endwin();
fprintf (stderr, "Can't read disklabel on %s.\n", devname);
close(fd);
exit(1);
}
close(fd);
dlcyl = disklabel.d_ncylinders;
dlhead = disklabel.d_ntracks;
dlsec = disklabel.d_nsectors;
sectorsize = disklabel.d_secsize;
dlcylsize = disklabel.d_secpercyl;
dlsize = dlcyl*dlhead*dlsec;
/* Compute minimum NetBSD partition sizes (in sectors). */
minfsdmb = (80 + 4*rammb) * (MEG / sectorsize);
}
void md_pre_disklabel (void)
{
}
void md_post_disklabel (void)
{
}
void md_post_newfs (void)
{
}
void md_copy_filesystem (void)
{
}
void md_make_bsd_partitions (void)
{
FILE *f;
int i;
/* Ask for layout type -- standard or special */
msg_display (MSG_layout,
(1.0*fsptsize*sectorsize)/MEG,
(1.0*minfsdmb*sectorsize)/MEG,
(1.0*minfsdmb*sectorsize)/MEG+rammb+XNEEDMB);
process_menu (MENU_layout);
if (layoutkind == 3) {
ask_sizemult();
} else
sizemult = MEG / sectorsize;
/* Build standard partitions */
/* Partitions C and D are predefined. */
bsdlabel[C][D_FSTYPE] = T_UNUSED;
bsdlabel[C][D_OFFSET] = 0;
bsdlabel[C][D_SIZE] = dlsize;
/* Standard fstypes */
bsdlabel[A][D_FSTYPE] = T_42BSD;
bsdlabel[B][D_FSTYPE] = T_SWAP;
bsdlabel[E][D_FSTYPE] = T_42BSD;
bsdlabel[F][D_FSTYPE] = T_UNUSED;
bsdlabel[G][D_FSTYPE] = T_UNUSED;
bsdlabel[H][D_FSTYPE] = T_UNUSED;
switch (layoutkind) {
case 1: /* standard: a root, b swap, c/d "unused", e /usr */
case 2: /* standard X: a root, b swap (big), c/d "unused", e /usr */
partstart = ptstart;
/* Root */
i = NUMSEC(20+2*rammb, MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart;
bsdlabel[A][D_OFFSET] = partstart;
bsdlabel[A][D_SIZE] = partsize;
bsdlabel[A][D_BSIZE] = 8192;
bsdlabel[A][D_FSIZE] = 1024;
strcpy (fsmount[A], "/");
partstart += partsize;
/* swap */
i = NUMSEC(layoutkind * 2 * (rammb < 32 ? 32 : rammb),
MEG/sectorsize, dlcylsize) + partstart;
partsize = NUMSEC (i/(MEG/sectorsize)+1, MEG/sectorsize,
dlcylsize) - partstart - swapadj;
bsdlabel[B][D_OFFSET] = partstart;
bsdlabel[B][D_SIZE] = partsize;
partstart += partsize;
/* /usr */
partsize = fsdsize - partstart;
bsdlabel[D][D_OFFSET] = partstart;
bsdlabel[D][D_SIZE] = partsize;
bsdlabel[D][D_BSIZE] = 8192;
bsdlabel[D][D_FSIZE] = 1024;
strcpy (fsmount[E], "/usr");
/* Verify Partitions. */
process_menu (MENU_fspartok);
break;
case 3: /* custom: ask user for all sizes */
process_menu(MENU_editfsparts);
break;
}
/* Disk name */
msg_prompt (MSG_packname, "mydisk", bsddiskname, 80);
/* Create the disktab.preinstall */
run_prog ("cp /etc/disktab.preinstall /etc/disktab");
#ifdef DEBUG
f = fopen ("/tmp/disktab", "a");
#else
f = fopen ("/etc/disktab", "a");
#endif
if (f == NULL) {
endwin();
(void) fprintf (stderr, "Could not open /etc/disktab");
exit (1);
}
(void)fprintf (f, "%s|NetBSD installation generated:\\\n", bsddiskname);
(void)fprintf (f, "\t:dt=%s:ty=winchester:\\\n", disktype);
(void)fprintf (f, "\t:nc#%d:nt#%d:ns#%d:\\\n", dlcyl, dlhead, dlsec);
(void)fprintf (f, "\t:sc#%d:su#%d:\\\n", dlhead*dlsec, dlsize);
(void)fprintf (f, "\t:se#%d:%s\\\n", sectorsize, doessf);
for (i=0; i<8; i++) {
(void)fprintf (f, "\t:p%c#%d:o%c#%d:t%c=%s:",
'a'+i, bsdlabel[i][D_SIZE],
'a'+i, bsdlabel[i][D_OFFSET],
'a'+i, fstype[bsdlabel[i][D_FSTYPE]]);
if (bsdlabel[i][D_FSTYPE] == T_42BSD)
(void)fprintf (f, "b%c#%d:f%c#%d",
'a'+i, bsdlabel[i][D_BSIZE],
'a'+i, bsdlabel[i][D_FSIZE]);
if (i < 7)
(void)fprintf (f, "\\\n");
else
(void)fprintf (f, "\n");
}
fclose (f);
}

View File

@ -0,0 +1,53 @@
/* $NetBSD: md.h,v 1.1.1.1 1997/09/26 23:02:56 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* md.h -- Machine specific definitions for the pc532 */
/* Constants and defines */
/* Megs required for a full X installation. */
#define XNEEDMB 50
/* Definition of files to retreive from ftp. */
EXTERN char ftp_prefix[STRSIZE] INIT("");
EXTERN char ftp_postfix[STRSIZE] INIT(".tar.gz");
EXTERN char *ftp_list[]
#ifdef MAIN
= { "kern", "base", "comp", "etc", "games", "man", "misc", "text", NULL }
#endif
;

View File

@ -0,0 +1,39 @@
/* $NetBSD: menus.md.eng,v 1.1.1.1 1997/09/26 23:02:56 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* pc532 machine dependent menus, english */

View File

@ -0,0 +1,39 @@
/* $NetBSD: msg.md.eng,v 1.1.1.1 1997/09/26 23:02:56 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* pc532 machine dependend messages, english */

View File

@ -0,0 +1,189 @@
/* $NetBSD: defs.h,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* defs.h -- definitions for use in the sysinst program. */
/* Define for external varible use */
#ifdef MAIN
#define EXTERN
#define INIT(x) = x
#else
#define EXTERN extern
#define INIT(x)
#endif
/* constants */
#define MEG 1048576
#define STRSIZE 255
/* For run.c: collect() */
#define T_FILE 0
#define T_OUTPUT 1
/* Macros */
/* Round up to the next full cylinder size */
#define NUMSEC(size,sizemult,cylsize) \
((sizemult == 1) ? (size) : \
(((size)*(sizemult)+(cylsize)-1)/(cylsize))*(cylsize))
/* variables */
EXTERN char rel[10] INIT(REL);
EXTERN char rels[10] INIT(REL);
EXTERN int yesno;
EXTERN int layoutkind;
EXTERN int sizemult INIT(1);
EXTERN char *multname;
EXTERN char *doingwhat;
/* Hardware variables */
EXTERN int ramsize INIT(0);
EXTERN int rammb INIT(0);
EXTERN int wd0[4] INIT({0});
EXTERN int wd1[4] INIT({0});
EXTERN int sd0[5] INIT({0});
EXTERN int sd1[5] INIT({0});
EXTERN int *diskgeom;
EXTERN int sectorsize;
/* Actual name of the disk ... wd0/wd1/sd0/sd1 */
EXTERN char diskdev[10];
EXTERN char disknames[80];
EXTERN int numdisks;
EXTERN char *disktype; /* ST506, SCSI, ... */
/* Used in editing partitions ... BSD disklabel and others */
EXTERN int editpart;
/* Final known sizes for the NetBSD partition, NetBSD disk sizes. */
EXTERN int ptstart, ptsize;
EXTERN int fsdsize, fsptsize;
EXTERN int fsdmb;
EXTERN int minfsdmb;
EXTERN int partstart;
EXTERN int partsize;
/* set by md_get_info() */
EXTERN int dlcyl, dlhead, dlsec, dlsize, dlcylsize;
EXTERN int swapadj INIT(0);
/* Information for the NetBSD disklabel */
EXTERN char *fstype[]
#ifdef MAIN
= {"unused", "swap", "4.2BSD", "msdos"}
#endif
;
enum DTYPE {T_UNUSED, T_SWAP, T_42BSD, T_MSDOS};
enum DINFO {D_SIZE, D_OFFSET, D_FSTYPE, D_BSIZE, D_FSIZE};
enum DLTR {A,B,C,D,E,F,G,H};
EXTERN char partname[] INIT("abcdefgh");
EXTERN int bsdlabel[8][5];
EXTERN char fsmount[8][20] INIT({""});
EXTERN char bsddiskname[80];
EXTERN char *doessf INIT("");
/* scsi_fake communication */
EXTERN int fake_sel;
/* other vars for menu communication */
EXTERN int nodist;
EXTERN char dist_dir[STRSIZE] INIT("/usr/INSTALL");
EXTERN char ftp_host[STRSIZE] INIT("ftp.netbsd.org");
EXTERN char ftp_dir[STRSIZE] INIT("/pub/NetBSD/NetBSD-" REL "/" MACH);
EXTERN char ftp_user[STRSIZE] INIT("ftp");
EXTERN char ftp_pass[STRSIZE] INIT("");
/* Vars for runing commands ... */
EXTERN char command[STRSIZE];
/* Access to network information */
EXTERN char net_devices [STRSIZE] INIT("");
EXTERN char net_dev[STRSIZE] INIT("");
EXTERN char net_domain[STRSIZE] INIT("");
EXTERN char net_host[STRSIZE] INIT("");
EXTERN char net_ip[STRSIZE] INIT("");
EXTERN char net_mask[STRSIZE] INIT("");
EXTERN char net_namesvr[STRSIZE] INIT("");
EXTERN char net_defroute[STRSIZE] INIT("");
/* needed prototypes */
/* Machine dependent functions .... */
void md_get_info (void);
void md_pre_disklabel (void);
void md_post_disklabel (void);
void md_post_newfs (void);
void md_copy_filesystem (void);
void md_make_bsd_partitions (void);
/* from install.c */
void do_install (void);
/* from upgrade.c */
void do_upgrade (void);
/* From run.c */
int collect (int kind, char **buffer, char *name, ...);
int run_prog (char *, ...);
/* from factor.c */
void factor (long, long *, int, int *);
/* from net.c */
void get_via_ftp (void);
void get_via_nfs (void);
/* from disks.c */
int find_disks_and_mem_size(void);
void disp_cur_part (int,int);
void disp_cur_fspart (int, int);
void scsi_fake (void);
void make_bsd_partitions (void);
void write_disklabel (void);
void make_filesystems (void);
void make_fstab (void);
void fsck_disks(void);
/* from util.c */
void ask_sizemult (void);
int ask_ynquestion (char *quest, char def, ...);
void extract_dist (void);

View File

@ -0,0 +1,325 @@
/* $NetBSD: disks.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* disks.c -- routines to deal with finding disks and labeling disks. */
#include <stdio.h>
#include <stdlib.h>
#include "defs.h"
#include "msg_defs.h"
#include "menu_defs.h"
#include "txtwalk.h"
struct lookfor msgbuf[] = {
{"real mem", "real mem = %d", "a $0", (void *)&ramsize, NULL},
{"wd0:", "%i, %d cyl, %d head, %d sec, %d",
"a $0 $1 $2 $3", wd0, NULL},
{"wd1:", "%i, %d cyl, %d head, %d sec, %d",
"a $0 $1 $2 $3", wd1, NULL},
{"sd0:", "%i, %d cyl, %d head, %d sec, %d b%i x %d",
"a $0 $1 $2 $3 $4", sd0, NULL},
{"sd1:", "%i, %d cyl, %d head, %d sec, %d b%i x %d",
"a $0 $1 $2 $3 $4", sd1, NULL}
};
int nummsgbuf = sizeof(msgbuf) / sizeof(struct lookfor);
int find_disks_and_mem_size(void)
{
char *textbuf;
int textsize;
char *tp;
char defname[80];
/* initialize */
disknames[0] = 0;
numdisks = 0;
/* Probe for hardware ... */
textsize = collect (T_FILE, &textbuf, "/kern/msgbuf");
if (textsize < 0) {
endwin();
fprintf (stderr, "Could not open /kern/msgbuf\n");
exit(1);
}
walk (textbuf, textsize, msgbuf, nummsgbuf);
free(textbuf);
if (ramsize == 0) {
/* Lost information in boot! */
msg_display (MSG_lostinfo);
process_menu (MENU_noyes);
if (!yesno)
return -1;
}
/* Find out how many Megs ... round up. */
rammb = (ramsize + MEG - 1) / MEG;
/* Ask for which disk */
if (wd0[0] > 0) {
numdisks++;
strcat (disknames, "wd0 ");
}
if (wd1[0] > 0) {
numdisks++;
strcat (disknames, "wd1 ");
}
if (sd0[0] > 0) {
numdisks++;
strcat (disknames, "sd0 ");
}
if (sd1[0] > 0) {
numdisks++;
strcat (disknames, "sd1 ");
}
if (numdisks == 0) {
/* No disks found! */
msg_display (MSG_nodisk);
process_menu (MENU_ok);
endwin();
return -1;
} else if (numdisks == 1) {
/* One disk found! */
/* Remove that space we added. */
disknames[strlen(disknames)-1] = 0;
msg_display (MSG_onedisk, disknames, doingwhat);
process_menu (MENU_ok);
strcpy (diskdev, disknames);
} else {
/* Multiple disks found! */
strcpy (defname, disknames);
tp = defname;
strsep(&tp, " ");
msg_prompt (MSG_askdisk, defname, diskdev, 10, disknames);
tp = diskdev;
strsep(&tp, " ");
diskdev[strlen(diskdev)+1] = 0;
diskdev[strlen(diskdev)] = ' ';
while (!(*diskdev == 'w' || *diskdev == 's') ||
strstr(disknames, diskdev) == NULL) {
msg_prompt (MSG_badname, defname, diskdev, 10,
disknames);
tp = diskdev;
strsep(&tp, " ");
diskdev[strlen(diskdev)+1] = 0;
diskdev[strlen(diskdev)] = ' ';
}
/* Remove that space we added. */
diskdev[strlen(diskdev)-1] = 0;
}
/* Set diskgeom. */
if (strcmp(diskdev, "wd0") == 0)
diskgeom = wd0;
else if (strcmp(diskdev, "wd1") == 0)
diskgeom = wd1;
else if (strcmp(diskdev, "sd0") == 0)
diskgeom = sd0;
else if (strcmp(diskdev, "sd1") == 0)
diskgeom = sd1;
sectorsize = diskgeom[3];
return numdisks;
}
void disp_cur_fspart (int disp, int showall)
{
int i;
int start, stop;
if (disp < 0) {
start = 0;
stop = 8;
} else {
start = disp;
stop = disp+1;
}
msg_display_add (MSG_fspart_head);
for (i=start; i<stop; i++) {
if (showall || bsdlabel[i][D_SIZE] > 0) {
msg_printf_add (" %c:%10d%10d %6s",
'a'+i,
bsdlabel[i][D_SIZE]/sizemult ,
bsdlabel[i][D_OFFSET]/sizemult,
fstype[bsdlabel[i][D_FSTYPE]]);
if (bsdlabel[i][D_FSTYPE] == T_42BSD)
msg_printf_add ("%6d%6d %s",
bsdlabel[i][D_BSIZE],
bsdlabel[i][D_FSIZE],
fsmount[i]);
else if (bsdlabel[i][D_FSTYPE] == T_MSDOS)
msg_printf_add ("%12s %s", "", fsmount[i]);
msg_printf_add("\n");
}
}
msg_printf_add("\n");
}
/* choose a fake geometry. */
void scsi_fake (void)
{
long fact[20];
int numf;
int geom[5][4] = {{0}};
int i, j;
int sects = diskgeom[4];
int head, sec;
int stop = diskgeom[0]*diskgeom[1]*diskgeom[2];
i=0;
while (i < 4 && sects > stop) {
factor (sects, fact, 20, &numf);
if (numf >= 3) {
head = fact[0];
j = 1;
while (j < numf-2 && head*fact[j] < 50)
head *= fact[j++];
sec = fact[j++];
while (j < numf-1 && sec*fact[j] < 500)
sec *= fact[j++];
if (head >= 5 &&
sec >= 50) {
geom[i][0] = sects / (head*sec);
geom[i][1] = head;
geom[i][2] = sec;
geom[i][3] = head * sec * geom[i][0];
i++;
}
}
sects--;
}
while (i < 5) {
geom[i][0] = diskgeom[0];
geom[i][1] = diskgeom[1];
geom[i][2] = diskgeom[2];
geom[i][3] = diskgeom[0]*diskgeom[1]*diskgeom[2];
i++;
}
msg_display (MSG_scsi_fake, diskgeom[4],
geom[0][0], geom[0][1], geom[0][2], geom[0][3],
geom[1][0], geom[1][1], geom[1][2], geom[1][3],
geom[2][0], geom[2][1], geom[2][2], geom[2][3],
geom[3][0], geom[3][1], geom[3][2], geom[3][3],
geom[4][0], geom[4][1], geom[4][2], geom[4][3]);
process_menu (MENU_scsi_fake);
if (fake_sel >= 0) {
dlcyl = diskgeom[0] = geom[fake_sel][0];
dlhead = diskgeom[1] = geom[fake_sel][1];
dlsec = diskgeom[2] = geom[fake_sel][2];
dlsize = diskgeom[4] = geom[fake_sel][3];
}
}
void write_disklabel (void)
{
/* disklabel the disk */
printf ("%s", msg_string (MSG_dodisklabel));
run_prog ("/sbin/disklabel -w -r %s %s", diskdev, bsddiskname);
}
void make_filesystems (void)
{
int i;
/* Making new file systems and mounting them*/
printf ("%s", msg_string (MSG_donewfs));
for (i=0; i<8; i++)
if (bsdlabel[i][D_FSTYPE] == T_42BSD) {
run_prog ("/sbin/newfs /dev/r%s%c", diskdev, 'a'+i);
if (*fsmount[i]) {
if (i > 0) {
run_prog ("/bin/mkdir /mnt%s",
fsmount[i]);
run_prog ("/sbin/mount -v /dev/%s%c"
" /mnt%s",
diskdev, 'a'+i,
fsmount[i]);
} else
run_prog ("/sbin/mount -v /dev/%s%c"
" /mnt", diskdev, 'a'+i);
}
}
}
void make_fstab (void)
{
FILE *f;
int i;
/* Create the fstab. */
f = fopen ("/mnt/etc/fstab", "w");
if (f == NULL) {
#ifndef DEBUG
(void)fprintf (stderr, "There is a big problem! "
"Can not create /mnt/etc/fstab\n");
exit(1);
#else
f = stdout;
#endif
}
(void)fprintf (f, "/dev/%sa / ffs rw 1 1\n", diskdev);
(void)fprintf (f, "/dev/%sb none swap sw 0 0\n", diskdev);
for (i=4; i<8; i++)
if (bsdlabel[i][D_FSTYPE] == T_42BSD)
(void)fprintf (f, "/dev/%s%c %s ffs rw 1 2\n",
diskdev, 'a'+i, fsmount[i]);
else if (bsdlabel[i][D_FSTYPE] == T_MSDOS )
(void)fprintf (f, "/dev/%s%c %s msdos rw 0 0\n",
diskdev, 'a'+i, fsmount[i]);
#ifndef DEBUG
fclose(f);
#endif
}
void
fsck_disks (void)
{
}

View File

@ -0,0 +1,599 @@
/* $NetBSD: factor.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Landon Curt Noll.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)pr_tbl.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: factor.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $");
#endif
#endif /* not lint */
/* prime table taken from /usr/src/games/primes.
* Some things were changed, factor() function added.
*/
/*
* prime - prime table
*
* By: Landon Curt Noll chongo@toad.com, ...!{sun,tolsoft}!hoptoad!chongo
*
* chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
*
* We are able to sieve 2^32-1 because this table has primes up to 65537
* and 65537^2 > 2^32-1.
*/
long prime[] = {
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,
107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,
211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,
317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,
439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,
569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,
677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,
821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,
947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,
1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,
1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,
1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,
1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,
1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,
1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,
1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,
1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,
1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,
2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,
2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,
2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,
2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,
2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,
2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,
2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,
2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,
3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,
3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,
3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,
3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,
3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,
3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,
3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,
3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,
4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,
4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,
4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,
4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,
4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,
4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,
4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,
4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,
5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,
5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,
5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,
5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,
5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,
5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,
5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,
5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,
6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,
6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,
6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,
6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,
6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,
6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,
6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,
6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,
7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,
7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,
7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,
7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,
7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,
7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919,7927,7933,
7937,7949,7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,
8093,8101,8111,8117,8123,8147,8161,8167,8171,8179,8191,8209,8219,8221,8231,
8233,8237,8243,8263,8269,8273,8287,8291,8293,8297,8311,8317,8329,8353,8363,
8369,8377,8387,8389,8419,8423,8429,8431,8443,8447,8461,8467,8501,8513,8521,
8527,8537,8539,8543,8563,8573,8581,8597,8599,8609,8623,8627,8629,8641,8647,
8663,8669,8677,8681,8689,8693,8699,8707,8713,8719,8731,8737,8741,8747,8753,
8761,8779,8783,8803,8807,8819,8821,8831,8837,8839,8849,8861,8863,8867,8887,
8893,8923,8929,8933,8941,8951,8963,8969,8971,8999,9001,9007,9011,9013,9029,
9041,9043,9049,9059,9067,9091,9103,9109,9127,9133,9137,9151,9157,9161,9173,
9181,9187,9199,9203,9209,9221,9227,9239,9241,9257,9277,9281,9283,9293,9311,
9319,9323,9337,9341,9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,
9433,9437,9439,9461,9463,9467,9473,9479,9491,9497,9511,9521,9533,9539,9547,
9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,9679,9689,9697,
9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,
9833,9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,
9967,9973,10007,10009,10037,10039,10061,10067,10069,10079,10091,10093,10099,
10103,10111,10133,10139,10141,10151,10159,10163,10169,10177,10181,10193,10211,
10223,10243,10247,10253,10259,10267,10271,10273,10289,10301,10303,10313,10321,
10331,10333,10337,10343,10357,10369,10391,10399,10427,10429,10433,10453,10457,
10459,10463,10477,10487,10499,10501,10513,10529,10531,10559,10567,10589,10597,
10601,10607,10613,10627,10631,10639,10651,10657,10663,10667,10687,10691,10709,
10711,10723,10729,10733,10739,10753,10771,10781,10789,10799,10831,10837,10847,
10853,10859,10861,10867,10883,10889,10891,10903,10909,10937,10939,10949,10957,
10973,10979,10987,10993,11003,11027,11047,11057,11059,11069,11071,11083,11087,
11093,11113,11117,11119,11131,11149,11159,11161,11171,11173,11177,11197,11213,
11239,11243,11251,11257,11261,11273,11279,11287,11299,11311,11317,11321,11329,
11351,11353,11369,11383,11393,11399,11411,11423,11437,11443,11447,11467,11471,
11483,11489,11491,11497,11503,11519,11527,11549,11551,11579,11587,11593,11597,
11617,11621,11633,11657,11677,11681,11689,11699,11701,11717,11719,11731,11743,
11777,11779,11783,11789,11801,11807,11813,11821,11827,11831,11833,11839,11863,
11867,11887,11897,11903,11909,11923,11927,11933,11939,11941,11953,11959,11969,
11971,11981,11987,12007,12011,12037,12041,12043,12049,12071,12073,12097,12101,
12107,12109,12113,12119,12143,12149,12157,12161,12163,12197,12203,12211,12227,
12239,12241,12251,12253,12263,12269,12277,12281,12289,12301,12323,12329,12343,
12347,12373,12377,12379,12391,12401,12409,12413,12421,12433,12437,12451,12457,
12473,12479,12487,12491,12497,12503,12511,12517,12527,12539,12541,12547,12553,
12569,12577,12583,12589,12601,12611,12613,12619,12637,12641,12647,12653,12659,
12671,12689,12697,12703,12713,12721,12739,12743,12757,12763,12781,12791,12799,
12809,12821,12823,12829,12841,12853,12889,12893,12899,12907,12911,12917,12919,
12923,12941,12953,12959,12967,12973,12979,12983,13001,13003,13007,13009,13033,
13037,13043,13049,13063,13093,13099,13103,13109,13121,13127,13147,13151,13159,
13163,13171,13177,13183,13187,13217,13219,13229,13241,13249,13259,13267,13291,
13297,13309,13313,13327,13331,13337,13339,13367,13381,13397,13399,13411,13417,
13421,13441,13451,13457,13463,13469,13477,13487,13499,13513,13523,13537,13553,
13567,13577,13591,13597,13613,13619,13627,13633,13649,13669,13679,13681,13687,
13691,13693,13697,13709,13711,13721,13723,13729,13751,13757,13759,13763,13781,
13789,13799,13807,13829,13831,13841,13859,13873,13877,13879,13883,13901,13903,
13907,13913,13921,13931,13933,13963,13967,13997,13999,14009,14011,14029,14033,
14051,14057,14071,14081,14083,14087,14107,14143,14149,14153,14159,14173,14177,
14197,14207,14221,14243,14249,14251,14281,14293,14303,14321,14323,14327,14341,
14347,14369,14387,14389,14401,14407,14411,14419,14423,14431,14437,14447,14449,
14461,14479,14489,14503,14519,14533,14537,14543,14549,14551,14557,14561,14563,
14591,14593,14621,14627,14629,14633,14639,14653,14657,14669,14683,14699,14713,
14717,14723,14731,14737,14741,14747,14753,14759,14767,14771,14779,14783,14797,
14813,14821,14827,14831,14843,14851,14867,14869,14879,14887,14891,14897,14923,
14929,14939,14947,14951,14957,14969,14983,15013,15017,15031,15053,15061,15073,
15077,15083,15091,15101,15107,15121,15131,15137,15139,15149,15161,15173,15187,
15193,15199,15217,15227,15233,15241,15259,15263,15269,15271,15277,15287,15289,
15299,15307,15313,15319,15329,15331,15349,15359,15361,15373,15377,15383,15391,
15401,15413,15427,15439,15443,15451,15461,15467,15473,15493,15497,15511,15527,
15541,15551,15559,15569,15581,15583,15601,15607,15619,15629,15641,15643,15647,
15649,15661,15667,15671,15679,15683,15727,15731,15733,15737,15739,15749,15761,
15767,15773,15787,15791,15797,15803,15809,15817,15823,15859,15877,15881,15887,
15889,15901,15907,15913,15919,15923,15937,15959,15971,15973,15991,16001,16007,
16033,16057,16061,16063,16067,16069,16073,16087,16091,16097,16103,16111,16127,
16139,16141,16183,16187,16189,16193,16217,16223,16229,16231,16249,16253,16267,
16273,16301,16319,16333,16339,16349,16361,16363,16369,16381,16411,16417,16421,
16427,16433,16447,16451,16453,16477,16481,16487,16493,16519,16529,16547,16553,
16561,16567,16573,16603,16607,16619,16631,16633,16649,16651,16657,16661,16673,
16691,16693,16699,16703,16729,16741,16747,16759,16763,16787,16811,16823,16829,
16831,16843,16871,16879,16883,16889,16901,16903,16921,16927,16931,16937,16943,
16963,16979,16981,16987,16993,17011,17021,17027,17029,17033,17041,17047,17053,
17077,17093,17099,17107,17117,17123,17137,17159,17167,17183,17189,17191,17203,
17207,17209,17231,17239,17257,17291,17293,17299,17317,17321,17327,17333,17341,
17351,17359,17377,17383,17387,17389,17393,17401,17417,17419,17431,17443,17449,
17467,17471,17477,17483,17489,17491,17497,17509,17519,17539,17551,17569,17573,
17579,17581,17597,17599,17609,17623,17627,17657,17659,17669,17681,17683,17707,
17713,17729,17737,17747,17749,17761,17783,17789,17791,17807,17827,17837,17839,
17851,17863,17881,17891,17903,17909,17911,17921,17923,17929,17939,17957,17959,
17971,17977,17981,17987,17989,18013,18041,18043,18047,18049,18059,18061,18077,
18089,18097,18119,18121,18127,18131,18133,18143,18149,18169,18181,18191,18199,
18211,18217,18223,18229,18233,18251,18253,18257,18269,18287,18289,18301,18307,
18311,18313,18329,18341,18353,18367,18371,18379,18397,18401,18413,18427,18433,
18439,18443,18451,18457,18461,18481,18493,18503,18517,18521,18523,18539,18541,
18553,18583,18587,18593,18617,18637,18661,18671,18679,18691,18701,18713,18719,
18731,18743,18749,18757,18773,18787,18793,18797,18803,18839,18859,18869,18899,
18911,18913,18917,18919,18947,18959,18973,18979,19001,19009,19013,19031,19037,
19051,19069,19073,19079,19081,19087,19121,19139,19141,19157,19163,19181,19183,
19207,19211,19213,19219,19231,19237,19249,19259,19267,19273,19289,19301,19309,
19319,19333,19373,19379,19381,19387,19391,19403,19417,19421,19423,19427,19429,
19433,19441,19447,19457,19463,19469,19471,19477,19483,19489,19501,19507,19531,
19541,19543,19553,19559,19571,19577,19583,19597,19603,19609,19661,19681,19687,
19697,19699,19709,19717,19727,19739,19751,19753,19759,19763,19777,19793,19801,
19813,19819,19841,19843,19853,19861,19867,19889,19891,19913,19919,19927,19937,
19949,19961,19963,19973,19979,19991,19993,19997,20011,20021,20023,20029,20047,
20051,20063,20071,20089,20101,20107,20113,20117,20123,20129,20143,20147,20149,
20161,20173,20177,20183,20201,20219,20231,20233,20249,20261,20269,20287,20297,
20323,20327,20333,20341,20347,20353,20357,20359,20369,20389,20393,20399,20407,
20411,20431,20441,20443,20477,20479,20483,20507,20509,20521,20533,20543,20549,
20551,20563,20593,20599,20611,20627,20639,20641,20663,20681,20693,20707,20717,
20719,20731,20743,20747,20749,20753,20759,20771,20773,20789,20807,20809,20849,
20857,20873,20879,20887,20897,20899,20903,20921,20929,20939,20947,20959,20963,
20981,20983,21001,21011,21013,21017,21019,21023,21031,21059,21061,21067,21089,
21101,21107,21121,21139,21143,21149,21157,21163,21169,21179,21187,21191,21193,
21211,21221,21227,21247,21269,21277,21283,21313,21317,21319,21323,21341,21347,
21377,21379,21383,21391,21397,21401,21407,21419,21433,21467,21481,21487,21491,
21493,21499,21503,21517,21521,21523,21529,21557,21559,21563,21569,21577,21587,
21589,21599,21601,21611,21613,21617,21647,21649,21661,21673,21683,21701,21713,
21727,21737,21739,21751,21757,21767,21773,21787,21799,21803,21817,21821,21839,
21841,21851,21859,21863,21871,21881,21893,21911,21929,21937,21943,21961,21977,
21991,21997,22003,22013,22027,22031,22037,22039,22051,22063,22067,22073,22079,
22091,22093,22109,22111,22123,22129,22133,22147,22153,22157,22159,22171,22189,
22193,22229,22247,22259,22271,22273,22277,22279,22283,22291,22303,22307,22343,
22349,22367,22369,22381,22391,22397,22409,22433,22441,22447,22453,22469,22481,
22483,22501,22511,22531,22541,22543,22549,22567,22571,22573,22613,22619,22621,
22637,22639,22643,22651,22669,22679,22691,22697,22699,22709,22717,22721,22727,
22739,22741,22751,22769,22777,22783,22787,22807,22811,22817,22853,22859,22861,
22871,22877,22901,22907,22921,22937,22943,22961,22963,22973,22993,23003,23011,
23017,23021,23027,23029,23039,23041,23053,23057,23059,23063,23071,23081,23087,
23099,23117,23131,23143,23159,23167,23173,23189,23197,23201,23203,23209,23227,
23251,23269,23279,23291,23293,23297,23311,23321,23327,23333,23339,23357,23369,
23371,23399,23417,23431,23447,23459,23473,23497,23509,23531,23537,23539,23549,
23557,23561,23563,23567,23581,23593,23599,23603,23609,23623,23627,23629,23633,
23663,23669,23671,23677,23687,23689,23719,23741,23743,23747,23753,23761,23767,
23773,23789,23801,23813,23819,23827,23831,23833,23857,23869,23873,23879,23887,
23893,23899,23909,23911,23917,23929,23957,23971,23977,23981,23993,24001,24007,
24019,24023,24029,24043,24049,24061,24071,24077,24083,24091,24097,24103,24107,
24109,24113,24121,24133,24137,24151,24169,24179,24181,24197,24203,24223,24229,
24239,24247,24251,24281,24317,24329,24337,24359,24371,24373,24379,24391,24407,
24413,24419,24421,24439,24443,24469,24473,24481,24499,24509,24517,24527,24533,
24547,24551,24571,24593,24611,24623,24631,24659,24671,24677,24683,24691,24697,
24709,24733,24749,24763,24767,24781,24793,24799,24809,24821,24841,24847,24851,
24859,24877,24889,24907,24917,24919,24923,24943,24953,24967,24971,24977,24979,
24989,25013,25031,25033,25037,25057,25073,25087,25097,25111,25117,25121,25127,
25147,25153,25163,25169,25171,25183,25189,25219,25229,25237,25243,25247,25253,
25261,25301,25303,25307,25309,25321,25339,25343,25349,25357,25367,25373,25391,
25409,25411,25423,25439,25447,25453,25457,25463,25469,25471,25523,25537,25541,
25561,25577,25579,25583,25589,25601,25603,25609,25621,25633,25639,25643,25657,
25667,25673,25679,25693,25703,25717,25733,25741,25747,25759,25763,25771,25793,
25799,25801,25819,25841,25847,25849,25867,25873,25889,25903,25913,25919,25931,
25933,25939,25943,25951,25969,25981,25997,25999,26003,26017,26021,26029,26041,
26053,26083,26099,26107,26111,26113,26119,26141,26153,26161,26171,26177,26183,
26189,26203,26209,26227,26237,26249,26251,26261,26263,26267,26293,26297,26309,
26317,26321,26339,26347,26357,26371,26387,26393,26399,26407,26417,26423,26431,
26437,26449,26459,26479,26489,26497,26501,26513,26539,26557,26561,26573,26591,
26597,26627,26633,26641,26647,26669,26681,26683,26687,26693,26699,26701,26711,
26713,26717,26723,26729,26731,26737,26759,26777,26783,26801,26813,26821,26833,
26839,26849,26861,26863,26879,26881,26891,26893,26903,26921,26927,26947,26951,
26953,26959,26981,26987,26993,27011,27017,27031,27043,27059,27061,27067,27073,
27077,27091,27103,27107,27109,27127,27143,27179,27191,27197,27211,27239,27241,
27253,27259,27271,27277,27281,27283,27299,27329,27337,27361,27367,27397,27407,
27409,27427,27431,27437,27449,27457,27479,27481,27487,27509,27527,27529,27539,
27541,27551,27581,27583,27611,27617,27631,27647,27653,27673,27689,27691,27697,
27701,27733,27737,27739,27743,27749,27751,27763,27767,27773,27779,27791,27793,
27799,27803,27809,27817,27823,27827,27847,27851,27883,27893,27901,27917,27919,
27941,27943,27947,27953,27961,27967,27983,27997,28001,28019,28027,28031,28051,
28057,28069,28081,28087,28097,28099,28109,28111,28123,28151,28163,28181,28183,
28201,28211,28219,28229,28277,28279,28283,28289,28297,28307,28309,28319,28349,
28351,28387,28393,28403,28409,28411,28429,28433,28439,28447,28463,28477,28493,
28499,28513,28517,28537,28541,28547,28549,28559,28571,28573,28579,28591,28597,
28603,28607,28619,28621,28627,28631,28643,28649,28657,28661,28663,28669,28687,
28697,28703,28711,28723,28729,28751,28753,28759,28771,28789,28793,28807,28813,
28817,28837,28843,28859,28867,28871,28879,28901,28909,28921,28927,28933,28949,
28961,28979,29009,29017,29021,29023,29027,29033,29059,29063,29077,29101,29123,
29129,29131,29137,29147,29153,29167,29173,29179,29191,29201,29207,29209,29221,
29231,29243,29251,29269,29287,29297,29303,29311,29327,29333,29339,29347,29363,
29383,29387,29389,29399,29401,29411,29423,29429,29437,29443,29453,29473,29483,
29501,29527,29531,29537,29567,29569,29573,29581,29587,29599,29611,29629,29633,
29641,29663,29669,29671,29683,29717,29723,29741,29753,29759,29761,29789,29803,
29819,29833,29837,29851,29863,29867,29873,29879,29881,29917,29921,29927,29947,
29959,29983,29989,30011,30013,30029,30047,30059,30071,30089,30091,30097,30103,
30109,30113,30119,30133,30137,30139,30161,30169,30181,30187,30197,30203,30211,
30223,30241,30253,30259,30269,30271,30293,30307,30313,30319,30323,30341,30347,
30367,30389,30391,30403,30427,30431,30449,30467,30469,30491,30493,30497,30509,
30517,30529,30539,30553,30557,30559,30577,30593,30631,30637,30643,30649,30661,
30671,30677,30689,30697,30703,30707,30713,30727,30757,30763,30773,30781,30803,
30809,30817,30829,30839,30841,30851,30853,30859,30869,30871,30881,30893,30911,
30931,30937,30941,30949,30971,30977,30983,31013,31019,31033,31039,31051,31063,
31069,31079,31081,31091,31121,31123,31139,31147,31151,31153,31159,31177,31181,
31183,31189,31193,31219,31223,31231,31237,31247,31249,31253,31259,31267,31271,
31277,31307,31319,31321,31327,31333,31337,31357,31379,31387,31391,31393,31397,
31469,31477,31481,31489,31511,31513,31517,31531,31541,31543,31547,31567,31573,
31583,31601,31607,31627,31643,31649,31657,31663,31667,31687,31699,31721,31723,
31727,31729,31741,31751,31769,31771,31793,31799,31817,31847,31849,31859,31873,
31883,31891,31907,31957,31963,31973,31981,31991,32003,32009,32027,32029,32051,
32057,32059,32063,32069,32077,32083,32089,32099,32117,32119,32141,32143,32159,
32173,32183,32189,32191,32203,32213,32233,32237,32251,32257,32261,32297,32299,
32303,32309,32321,32323,32327,32341,32353,32359,32363,32369,32371,32377,32381,
32401,32411,32413,32423,32429,32441,32443,32467,32479,32491,32497,32503,32507,
32531,32533,32537,32561,32563,32569,32573,32579,32587,32603,32609,32611,32621,
32633,32647,32653,32687,32693,32707,32713,32717,32719,32749,32771,32779,32783,
32789,32797,32801,32803,32831,32833,32839,32843,32869,32887,32909,32911,32917,
32933,32939,32941,32957,32969,32971,32983,32987,32993,32999,33013,33023,33029,
33037,33049,33053,33071,33073,33083,33091,33107,33113,33119,33149,33151,33161,
33179,33181,33191,33199,33203,33211,33223,33247,33287,33289,33301,33311,33317,
33329,33331,33343,33347,33349,33353,33359,33377,33391,33403,33409,33413,33427,
33457,33461,33469,33479,33487,33493,33503,33521,33529,33533,33547,33563,33569,
33577,33581,33587,33589,33599,33601,33613,33617,33619,33623,33629,33637,33641,
33647,33679,33703,33713,33721,33739,33749,33751,33757,33767,33769,33773,33791,
33797,33809,33811,33827,33829,33851,33857,33863,33871,33889,33893,33911,33923,
33931,33937,33941,33961,33967,33997,34019,34031,34033,34039,34057,34061,34123,
34127,34129,34141,34147,34157,34159,34171,34183,34211,34213,34217,34231,34253,
34259,34261,34267,34273,34283,34297,34301,34303,34313,34319,34327,34337,34351,
34361,34367,34369,34381,34403,34421,34429,34439,34457,34469,34471,34483,34487,
34499,34501,34511,34513,34519,34537,34543,34549,34583,34589,34591,34603,34607,
34613,34631,34649,34651,34667,34673,34679,34687,34693,34703,34721,34729,34739,
34747,34757,34759,34763,34781,34807,34819,34841,34843,34847,34849,34871,34877,
34883,34897,34913,34919,34939,34949,34961,34963,34981,35023,35027,35051,35053,
35059,35069,35081,35083,35089,35099,35107,35111,35117,35129,35141,35149,35153,
35159,35171,35201,35221,35227,35251,35257,35267,35279,35281,35291,35311,35317,
35323,35327,35339,35353,35363,35381,35393,35401,35407,35419,35423,35437,35447,
35449,35461,35491,35507,35509,35521,35527,35531,35533,35537,35543,35569,35573,
35591,35593,35597,35603,35617,35671,35677,35729,35731,35747,35753,35759,35771,
35797,35801,35803,35809,35831,35837,35839,35851,35863,35869,35879,35897,35899,
35911,35923,35933,35951,35963,35969,35977,35983,35993,35999,36007,36011,36013,
36017,36037,36061,36067,36073,36083,36097,36107,36109,36131,36137,36151,36161,
36187,36191,36209,36217,36229,36241,36251,36263,36269,36277,36293,36299,36307,
36313,36319,36341,36343,36353,36373,36383,36389,36433,36451,36457,36467,36469,
36473,36479,36493,36497,36523,36527,36529,36541,36551,36559,36563,36571,36583,
36587,36599,36607,36629,36637,36643,36653,36671,36677,36683,36691,36697,36709,
36713,36721,36739,36749,36761,36767,36779,36781,36787,36791,36793,36809,36821,
36833,36847,36857,36871,36877,36887,36899,36901,36913,36919,36923,36929,36931,
36943,36947,36973,36979,36997,37003,37013,37019,37021,37039,37049,37057,37061,
37087,37097,37117,37123,37139,37159,37171,37181,37189,37199,37201,37217,37223,
37243,37253,37273,37277,37307,37309,37313,37321,37337,37339,37357,37361,37363,
37369,37379,37397,37409,37423,37441,37447,37463,37483,37489,37493,37501,37507,
37511,37517,37529,37537,37547,37549,37561,37567,37571,37573,37579,37589,37591,
37607,37619,37633,37643,37649,37657,37663,37691,37693,37699,37717,37747,37781,
37783,37799,37811,37813,37831,37847,37853,37861,37871,37879,37889,37897,37907,
37951,37957,37963,37967,37987,37991,37993,37997,38011,38039,38047,38053,38069,
38083,38113,38119,38149,38153,38167,38177,38183,38189,38197,38201,38219,38231,
38237,38239,38261,38273,38281,38287,38299,38303,38317,38321,38327,38329,38333,
38351,38371,38377,38393,38431,38447,38449,38453,38459,38461,38501,38543,38557,
38561,38567,38569,38593,38603,38609,38611,38629,38639,38651,38653,38669,38671,
38677,38693,38699,38707,38711,38713,38723,38729,38737,38747,38749,38767,38783,
38791,38803,38821,38833,38839,38851,38861,38867,38873,38891,38903,38917,38921,
38923,38933,38953,38959,38971,38977,38993,39019,39023,39041,39043,39047,39079,
39089,39097,39103,39107,39113,39119,39133,39139,39157,39161,39163,39181,39191,
39199,39209,39217,39227,39229,39233,39239,39241,39251,39293,39301,39313,39317,
39323,39341,39343,39359,39367,39371,39373,39383,39397,39409,39419,39439,39443,
39451,39461,39499,39503,39509,39511,39521,39541,39551,39563,39569,39581,39607,
39619,39623,39631,39659,39667,39671,39679,39703,39709,39719,39727,39733,39749,
39761,39769,39779,39791,39799,39821,39827,39829,39839,39841,39847,39857,39863,
39869,39877,39883,39887,39901,39929,39937,39953,39971,39979,39983,39989,40009,
40013,40031,40037,40039,40063,40087,40093,40099,40111,40123,40127,40129,40151,
40153,40163,40169,40177,40189,40193,40213,40231,40237,40241,40253,40277,40283,
40289,40343,40351,40357,40361,40387,40423,40427,40429,40433,40459,40471,40483,
40487,40493,40499,40507,40519,40529,40531,40543,40559,40577,40583,40591,40597,
40609,40627,40637,40639,40693,40697,40699,40709,40739,40751,40759,40763,40771,
40787,40801,40813,40819,40823,40829,40841,40847,40849,40853,40867,40879,40883,
40897,40903,40927,40933,40939,40949,40961,40973,40993,41011,41017,41023,41039,
41047,41051,41057,41077,41081,41113,41117,41131,41141,41143,41149,41161,41177,
41179,41183,41189,41201,41203,41213,41221,41227,41231,41233,41243,41257,41263,
41269,41281,41299,41333,41341,41351,41357,41381,41387,41389,41399,41411,41413,
41443,41453,41467,41479,41491,41507,41513,41519,41521,41539,41543,41549,41579,
41593,41597,41603,41609,41611,41617,41621,41627,41641,41647,41651,41659,41669,
41681,41687,41719,41729,41737,41759,41761,41771,41777,41801,41809,41813,41843,
41849,41851,41863,41879,41887,41893,41897,41903,41911,41927,41941,41947,41953,
41957,41959,41969,41981,41983,41999,42013,42017,42019,42023,42043,42061,42071,
42073,42083,42089,42101,42131,42139,42157,42169,42179,42181,42187,42193,42197,
42209,42221,42223,42227,42239,42257,42281,42283,42293,42299,42307,42323,42331,
42337,42349,42359,42373,42379,42391,42397,42403,42407,42409,42433,42437,42443,
42451,42457,42461,42463,42467,42473,42487,42491,42499,42509,42533,42557,42569,
42571,42577,42589,42611,42641,42643,42649,42667,42677,42683,42689,42697,42701,
42703,42709,42719,42727,42737,42743,42751,42767,42773,42787,42793,42797,42821,
42829,42839,42841,42853,42859,42863,42899,42901,42923,42929,42937,42943,42953,
42961,42967,42979,42989,43003,43013,43019,43037,43049,43051,43063,43067,43093,
43103,43117,43133,43151,43159,43177,43189,43201,43207,43223,43237,43261,43271,
43283,43291,43313,43319,43321,43331,43391,43397,43399,43403,43411,43427,43441,
43451,43457,43481,43487,43499,43517,43541,43543,43573,43577,43579,43591,43597,
43607,43609,43613,43627,43633,43649,43651,43661,43669,43691,43711,43717,43721,
43753,43759,43777,43781,43783,43787,43789,43793,43801,43853,43867,43889,43891,
43913,43933,43943,43951,43961,43963,43969,43973,43987,43991,43997,44017,44021,
44027,44029,44041,44053,44059,44071,44087,44089,44101,44111,44119,44123,44129,
44131,44159,44171,44179,44189,44201,44203,44207,44221,44249,44257,44263,44267,
44269,44273,44279,44281,44293,44351,44357,44371,44381,44383,44389,44417,44449,
44453,44483,44491,44497,44501,44507,44519,44531,44533,44537,44543,44549,44563,
44579,44587,44617,44621,44623,44633,44641,44647,44651,44657,44683,44687,44699,
44701,44711,44729,44741,44753,44771,44773,44777,44789,44797,44809,44819,44839,
44843,44851,44867,44879,44887,44893,44909,44917,44927,44939,44953,44959,44963,
44971,44983,44987,45007,45013,45053,45061,45077,45083,45119,45121,45127,45131,
45137,45139,45161,45179,45181,45191,45197,45233,45247,45259,45263,45281,45289,
45293,45307,45317,45319,45329,45337,45341,45343,45361,45377,45389,45403,45413,
45427,45433,45439,45481,45491,45497,45503,45523,45533,45541,45553,45557,45569,
45587,45589,45599,45613,45631,45641,45659,45667,45673,45677,45691,45697,45707,
45737,45751,45757,45763,45767,45779,45817,45821,45823,45827,45833,45841,45853,
45863,45869,45887,45893,45943,45949,45953,45959,45971,45979,45989,46021,46027,
46049,46051,46061,46073,46091,46093,46099,46103,46133,46141,46147,46153,46171,
46181,46183,46187,46199,46219,46229,46237,46261,46271,46273,46279,46301,46307,
46309,46327,46337,46349,46351,46381,46399,46411,46439,46441,46447,46451,46457,
46471,46477,46489,46499,46507,46511,46523,46549,46559,46567,46573,46589,46591,
46601,46619,46633,46639,46643,46649,46663,46679,46681,46687,46691,46703,46723,
46727,46747,46751,46757,46769,46771,46807,46811,46817,46819,46829,46831,46853,
46861,46867,46877,46889,46901,46919,46933,46957,46993,46997,47017,47041,47051,
47057,47059,47087,47093,47111,47119,47123,47129,47137,47143,47147,47149,47161,
47189,47207,47221,47237,47251,47269,47279,47287,47293,47297,47303,47309,47317,
47339,47351,47353,47363,47381,47387,47389,47407,47417,47419,47431,47441,47459,
47491,47497,47501,47507,47513,47521,47527,47533,47543,47563,47569,47581,47591,
47599,47609,47623,47629,47639,47653,47657,47659,47681,47699,47701,47711,47713,
47717,47737,47741,47743,47777,47779,47791,47797,47807,47809,47819,47837,47843,
47857,47869,47881,47903,47911,47917,47933,47939,47947,47951,47963,47969,47977,
47981,48017,48023,48029,48049,48073,48079,48091,48109,48119,48121,48131,48157,
48163,48179,48187,48193,48197,48221,48239,48247,48259,48271,48281,48299,48311,
48313,48337,48341,48353,48371,48383,48397,48407,48409,48413,48437,48449,48463,
48473,48479,48481,48487,48491,48497,48523,48527,48533,48539,48541,48563,48571,
48589,48593,48611,48619,48623,48647,48649,48661,48673,48677,48679,48731,48733,
48751,48757,48761,48767,48779,48781,48787,48799,48809,48817,48821,48823,48847,
48857,48859,48869,48871,48883,48889,48907,48947,48953,48973,48989,48991,49003,
49009,49019,49031,49033,49037,49043,49057,49069,49081,49103,49109,49117,49121,
49123,49139,49157,49169,49171,49177,49193,49199,49201,49207,49211,49223,49253,
49261,49277,49279,49297,49307,49331,49333,49339,49363,49367,49369,49391,49393,
49409,49411,49417,49429,49433,49451,49459,49463,49477,49481,49499,49523,49529,
49531,49537,49547,49549,49559,49597,49603,49613,49627,49633,49639,49663,49667,
49669,49681,49697,49711,49727,49739,49741,49747,49757,49783,49787,49789,49801,
49807,49811,49823,49831,49843,49853,49871,49877,49891,49919,49921,49927,49937,
49939,49943,49957,49991,49993,49999,50021,50023,50033,50047,50051,50053,50069,
50077,50087,50093,50101,50111,50119,50123,50129,50131,50147,50153,50159,50177,
50207,50221,50227,50231,50261,50263,50273,50287,50291,50311,50321,50329,50333,
50341,50359,50363,50377,50383,50387,50411,50417,50423,50441,50459,50461,50497,
50503,50513,50527,50539,50543,50549,50551,50581,50587,50591,50593,50599,50627,
50647,50651,50671,50683,50707,50723,50741,50753,50767,50773,50777,50789,50821,
50833,50839,50849,50857,50867,50873,50891,50893,50909,50923,50929,50951,50957,
50969,50971,50989,50993,51001,51031,51043,51047,51059,51061,51071,51109,51131,
51133,51137,51151,51157,51169,51193,51197,51199,51203,51217,51229,51239,51241,
51257,51263,51283,51287,51307,51329,51341,51343,51347,51349,51361,51383,51407,
51413,51419,51421,51427,51431,51437,51439,51449,51461,51473,51479,51481,51487,
51503,51511,51517,51521,51539,51551,51563,51577,51581,51593,51599,51607,51613,
51631,51637,51647,51659,51673,51679,51683,51691,51713,51719,51721,51749,51767,
51769,51787,51797,51803,51817,51827,51829,51839,51853,51859,51869,51871,51893,
51899,51907,51913,51929,51941,51949,51971,51973,51977,51991,52009,52021,52027,
52051,52057,52067,52069,52081,52103,52121,52127,52147,52153,52163,52177,52181,
52183,52189,52201,52223,52237,52249,52253,52259,52267,52289,52291,52301,52313,
52321,52361,52363,52369,52379,52387,52391,52433,52453,52457,52489,52501,52511,
52517,52529,52541,52543,52553,52561,52567,52571,52579,52583,52609,52627,52631,
52639,52667,52673,52691,52697,52709,52711,52721,52727,52733,52747,52757,52769,
52783,52807,52813,52817,52837,52859,52861,52879,52883,52889,52901,52903,52919,
52937,52951,52957,52963,52967,52973,52981,52999,53003,53017,53047,53051,53069,
53077,53087,53089,53093,53101,53113,53117,53129,53147,53149,53161,53171,53173,
53189,53197,53201,53231,53233,53239,53267,53269,53279,53281,53299,53309,53323,
53327,53353,53359,53377,53381,53401,53407,53411,53419,53437,53441,53453,53479,
53503,53507,53527,53549,53551,53569,53591,53593,53597,53609,53611,53617,53623,
53629,53633,53639,53653,53657,53681,53693,53699,53717,53719,53731,53759,53773,
53777,53783,53791,53813,53819,53831,53849,53857,53861,53881,53887,53891,53897,
53899,53917,53923,53927,53939,53951,53959,53987,53993,54001,54011,54013,54037,
54049,54059,54083,54091,54101,54121,54133,54139,54151,54163,54167,54181,54193,
54217,54251,54269,54277,54287,54293,54311,54319,54323,54331,54347,54361,54367,
54371,54377,54401,54403,54409,54413,54419,54421,54437,54443,54449,54469,54493,
54497,54499,54503,54517,54521,54539,54541,54547,54559,54563,54577,54581,54583,
54601,54617,54623,54629,54631,54647,54667,54673,54679,54709,54713,54721,54727,
54751,54767,54773,54779,54787,54799,54829,54833,54851,54869,54877,54881,54907,
54917,54919,54941,54949,54959,54973,54979,54983,55001,55009,55021,55049,55051,
55057,55061,55073,55079,55103,55109,55117,55127,55147,55163,55171,55201,55207,
55213,55217,55219,55229,55243,55249,55259,55291,55313,55331,55333,55337,55339,
55343,55351,55373,55381,55399,55411,55439,55441,55457,55469,55487,55501,55511,
55529,55541,55547,55579,55589,55603,55609,55619,55621,55631,55633,55639,55661,
55663,55667,55673,55681,55691,55697,55711,55717,55721,55733,55763,55787,55793,
55799,55807,55813,55817,55819,55823,55829,55837,55843,55849,55871,55889,55897,
55901,55903,55921,55927,55931,55933,55949,55967,55987,55997,56003,56009,56039,
56041,56053,56081,56087,56093,56099,56101,56113,56123,56131,56149,56167,56171,
56179,56197,56207,56209,56237,56239,56249,56263,56267,56269,56299,56311,56333,
56359,56369,56377,56383,56393,56401,56417,56431,56437,56443,56453,56467,56473,
56477,56479,56489,56501,56503,56509,56519,56527,56531,56533,56543,56569,56591,
56597,56599,56611,56629,56633,56659,56663,56671,56681,56687,56701,56711,56713,
56731,56737,56747,56767,56773,56779,56783,56807,56809,56813,56821,56827,56843,
56857,56873,56891,56893,56897,56909,56911,56921,56923,56929,56941,56951,56957,
56963,56983,56989,56993,56999,57037,57041,57047,57059,57073,57077,57089,57097,
57107,57119,57131,57139,57143,57149,57163,57173,57179,57191,57193,57203,57221,
57223,57241,57251,57259,57269,57271,57283,57287,57301,57329,57331,57347,57349,
57367,57373,57383,57389,57397,57413,57427,57457,57467,57487,57493,57503,57527,
57529,57557,57559,57571,57587,57593,57601,57637,57641,57649,57653,57667,57679,
57689,57697,57709,57713,57719,57727,57731,57737,57751,57773,57781,57787,57791,
57793,57803,57809,57829,57839,57847,57853,57859,57881,57899,57901,57917,57923,
57943,57947,57973,57977,57991,58013,58027,58031,58043,58049,58057,58061,58067,
58073,58099,58109,58111,58129,58147,58151,58153,58169,58171,58189,58193,58199,
58207,58211,58217,58229,58231,58237,58243,58271,58309,58313,58321,58337,58363,
58367,58369,58379,58391,58393,58403,58411,58417,58427,58439,58441,58451,58453,
58477,58481,58511,58537,58543,58549,58567,58573,58579,58601,58603,58613,58631,
58657,58661,58679,58687,58693,58699,58711,58727,58733,58741,58757,58763,58771,
58787,58789,58831,58889,58897,58901,58907,58909,58913,58921,58937,58943,58963,
58967,58979,58991,58997,59009,59011,59021,59023,59029,59051,59053,59063,59069,
59077,59083,59093,59107,59113,59119,59123,59141,59149,59159,59167,59183,59197,
59207,59209,59219,59221,59233,59239,59243,59263,59273,59281,59333,59341,59351,
59357,59359,59369,59377,59387,59393,59399,59407,59417,59419,59441,59443,59447,
59453,59467,59471,59473,59497,59509,59513,59539,59557,59561,59567,59581,59611,
59617,59621,59627,59629,59651,59659,59663,59669,59671,59693,59699,59707,59723,
59729,59743,59747,59753,59771,59779,59791,59797,59809,59833,59863,59879,59887,
59921,59929,59951,59957,59971,59981,59999,60013,60017,60029,60037,60041,60077,
60083,60089,60091,60101,60103,60107,60127,60133,60139,60149,60161,60167,60169,
60209,60217,60223,60251,60257,60259,60271,60289,60293,60317,60331,60337,60343,
60353,60373,60383,60397,60413,60427,60443,60449,60457,60493,60497,60509,60521,
60527,60539,60589,60601,60607,60611,60617,60623,60631,60637,60647,60649,60659,
60661,60679,60689,60703,60719,60727,60733,60737,60757,60761,60763,60773,60779,
60793,60811,60821,60859,60869,60887,60889,60899,60901,60913,60917,60919,60923,
60937,60943,60953,60961,61001,61007,61027,61031,61043,61051,61057,61091,61099,
61121,61129,61141,61151,61153,61169,61211,61223,61231,61253,61261,61283,61291,
61297,61331,61333,61339,61343,61357,61363,61379,61381,61403,61409,61417,61441,
61463,61469,61471,61483,61487,61493,61507,61511,61519,61543,61547,61553,61559,
61561,61583,61603,61609,61613,61627,61631,61637,61643,61651,61657,61667,61673,
61681,61687,61703,61717,61723,61729,61751,61757,61781,61813,61819,61837,61843,
61861,61871,61879,61909,61927,61933,61949,61961,61967,61979,61981,61987,61991,
62003,62011,62017,62039,62047,62053,62057,62071,62081,62099,62119,62129,62131,
62137,62141,62143,62171,62189,62191,62201,62207,62213,62219,62233,62273,62297,
62299,62303,62311,62323,62327,62347,62351,62383,62401,62417,62423,62459,62467,
62473,62477,62483,62497,62501,62507,62533,62539,62549,62563,62581,62591,62597,
62603,62617,62627,62633,62639,62653,62659,62683,62687,62701,62723,62731,62743,
62753,62761,62773,62791,62801,62819,62827,62851,62861,62869,62873,62897,62903,
62921,62927,62929,62939,62969,62971,62981,62983,62987,62989,63029,63031,63059,
63067,63073,63079,63097,63103,63113,63127,63131,63149,63179,63197,63199,63211,
63241,63247,63277,63281,63299,63311,63313,63317,63331,63337,63347,63353,63361,
63367,63377,63389,63391,63397,63409,63419,63421,63439,63443,63463,63467,63473,
63487,63493,63499,63521,63527,63533,63541,63559,63577,63587,63589,63599,63601,
63607,63611,63617,63629,63647,63649,63659,63667,63671,63689,63691,63697,63703,
63709,63719,63727,63737,63743,63761,63773,63781,63793,63799,63803,63809,63823,
63839,63841,63853,63857,63863,63901,63907,63913,63929,63949,63977,63997,64007,
64013,64019,64033,64037,64063,64067,64081,64091,64109,64123,64151,64153,64157,
64171,64187,64189,64217,64223,64231,64237,64271,64279,64283,64301,64303,64319,
64327,64333,64373,64381,64399,64403,64433,64439,64451,64453,64483,64489,64499,
64513,64553,64567,64577,64579,64591,64601,64609,64613,64621,64627,64633,64661,
64663,64667,64679,64693,64709,64717,64747,64763,64781,64783,64793,64811,64817,
64849,64853,64871,64877,64879,64891,64901,64919,64921,64927,64937,64951,64969,
64997,65003,65011,65027,65029,65033,65053,65063,65071,65089,65099,65101,65111,
65119,65123,65129,65141,65147,65167,65171,65173,65179,65183,65203,65213,65239,
65257,65267,65269,65287,65293,65309,65323,65327,65353,65357,65371,65381,65393,
65407,65413,65419,65423,65437,65447,65449,65479,65497,65519,65521,65537
};
int num_primes = sizeof(prime)/sizeof(prime[0]);
#include "defs.h"
/* factor: prepare a list of prime factors of val.
The last number may not be a prime factor is the list is not
long enough. */
void factor (long val, long *fact_list, int fact_size, int *num_fact)
{
int i;
i = 0;
*num_fact = 0;
while (*num_fact < fact_size-1 && val > 1 && i < num_primes) {
/* Find the next prime that divides. */
while (val % prime[i] != 0 && i < num_primes ) i++;
/* Put factors in array. */
while (*num_fact < fact_size-1 && i < num_primes &&
val % prime[i] == 0) {
fact_list[(*num_fact)++] = prime[i];
val /= prime[i];
}
}
if (val > 1)
fact_list[*num_fact] = val;
}
#ifdef TESTING
int main(int argc, char **argv)
{
long facts[30];
long val;
int i, nfact;
val = atol(argv[1]);
factor (val, facts, 30, &nfact);
printf ("%ld:", val);
for (i = 0; i<nfact; i++)
printf (" %d", facts[i]);
printf ("\n");
}
#endif

View File

@ -0,0 +1,175 @@
/* $NetBSD: fdisk.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* fdisk.c -- routines to deal with fdisk ... */
#include <stdio.h>
#include "defs.h"
#include "md.h"
#include "txtwalk.h"
#include "msg_defs.h"
#include "menu_defs.h"
struct lookfor fdiskbuf[] = {
{"DLCYL", "DLCYL=%d", "a $0", &dlcyl, NULL},
{"DLHEAD", "DLHEAD=%d", "a $0", &dlhead, NULL},
{"DLSEC", "DLSEC=%d", "a $0", &dlsec, NULL},
{"BCYL", "BCYL=%d", "a $0", &bcyl, NULL},
{"BHEAD", "BHEAD=%d", "a $0", &bhead, NULL},
{"BSEC", "BSEC=%d", "a $0", &bsec, NULL},
{"PART0ID", "PART0ID=%d", "a $0", &part[0][ID], NULL},
{"PART0SIZE", "PART0SIZE=%d", "a $0", &part[0][SIZE], NULL},
{"PART0START", "PART0START=%d", "a $0", &part[0][START], NULL},
{"PART0FLAG", "PART0FLAG=%d", "a $0", &part[0][FLAG], NULL},
{"PART1ID", "PART1ID=%d", "a $0", &part[1][ID], NULL},
{"PART1SIZE", "PART1SIZE=%d", "a $0", &part[1][SIZE], NULL},
{"PART1START", "PART1START=%d", "a $0", &part[1][START], NULL},
{"PART1FLAG", "PART1FLAG=%d", "a $0", &part[1][FLAG], NULL},
{"PART2ID", "PART2ID=%d", "a $0", &part[2][ID], NULL},
{"PART2SIZE", "PART2SIZE=%d", "a $0", &part[2][SIZE], NULL},
{"PART2START", "PART2START=%d", "a $0", &part[2][START], NULL},
{"PART2FLAG", "PART2FLAG=%d", "a $0", &part[2][FLAG], NULL},
{"PART3ID", "PART3ID=%d", "a $0", &part[3][ID], NULL},
{"PART3SIZE", "PART3SIZE=%d", "a $0", &part[3][SIZE], NULL},
{"PART3START", "PART3START=%d", "a $0", &part[3][START], NULL},
{"PART3FLAG", "PART3FLAG=%d", "a $0", &part[3][FLAG], NULL}
};
int numfdiskbuf = sizeof(fdiskbuf) / sizeof(struct lookfor);
struct part_id {
int id;
char *name;
} part_ids[] = {
{0, "unused"},
{1, "Primary DOS, 12 bit FAT"},
{4, "Primary DOS, 16 bit FAT <32M"},
{5, "Extended DOS"},
{6, "Primary DOS, 16-bit FAT >32MB"},
{165, "NetBSD"},
{-1, "Unknown"},
};
int partsoverlap(int i, int j)
{
if (part[i][SIZE] == 0 || part[j][SIZE] == 0)
return 0;
return (part[i][START] >= part[j][START] &&
part[i][START] < part[j][START] + part[j][SIZE])
||
(part[i][START]+part[i][SIZE] > part[j][START] &&
part[i][START]+part[i][SIZE] < part[j][START] + part[j][SIZE])
||
(part[j][START] >= part[i][START] &&
part[j][START] < part[i][START] + part[i][SIZE])
||
(part[j][START]+part[j][SIZE] > part[i][START] &&
part[j][START]+part[j][SIZE] < part[i][START] + part[i][SIZE]);
}
void disp_cur_part (int sel, int disp)
{
int i, j, start, stop;
if (disp < 0)
start = 0, stop = 4;
else
start = disp, stop = disp+1;
msg_display_add (MSG_part_head, multname, multname);
for (i=start; i<stop; i++) {
if (sel == i) msg_standout();
if (part[i][SIZE] == 0 && part[i][START] == 0)
msg_printf_add ("%d %24s ", i, "");
else
msg_printf_add ("%d %12d%12d ", i,
part[i][START] / sizemult,
part[i][SIZE] / sizemult);
for (j = 0; part_ids[j].id != -1 &&
part_ids[j].id != part[i][ID]; j++);
msg_printf_add ("%s\n", part_ids[j].name);
if (sel == i) msg_standend();
}
}
int check_geom (void)
{
return bcyl < 1024 && bsec < 64 && bcyl > 0 && bhead > 0 && bsec > 0;
}
void set_fdisk_geom (void)
{
char res[80];
msg_display_add (MSG_setfdiskgeom);
disp_cur_geom();
msg_printf_add ("\n");
msg_prompt_add (MSG_cylinders, NULL, res, 80);
bcyl = atoi(res);
msg_prompt_add (MSG_heads, NULL, res, 80);
bhead = atoi(res);
msg_prompt_add (MSG_sectors, NULL, res, 80);
bsec = atoi(res);
bstuffset = 1;
}
void disp_cur_geom (void)
{
msg_display_add (MSG_realgeom, dlcyl, dlhead, dlsec);
msg_display_add (MSG_fdiskgeom, bcyl, bhead, bsec);
}
void get_fdisk_info (void)
{
char *textbuf;
int textsize;
/* Get Fdisk information */
textsize = collect (T_OUTPUT, &textbuf,
"/sbin/fdisk -S /dev/r%sd 2>/dev/null", diskdev);
if (textsize < 0) {
endwin();
(void) fprintf (stderr, "Could not run fdisk.");
exit (1);
}
walk (textbuf, textsize, fdiskbuf, numfdiskbuf);
free (textbuf);
}

View File

@ -0,0 +1,109 @@
/* $NetBSD: install.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* install.c -- system installation. */
#include <stdio.h>
#include <curses.h>
#include "defs.h"
#include "msg_defs.h"
#include "menu_defs.h"
/* Do the system install. */
void do_install(void)
{
doingwhat = msg_string (MSG_install);
msg_display (MSG_installusure);
process_menu (MENU_noyes);
if (!yesno)
return;
if (find_disks_and_mem_size () < 0)
return;
md_get_info ();
md_make_bsd_partitions ();
/* Last chance ... do you really want to do this? */
msg_display (MSG_lastchance);
process_menu (MENU_noyes);
if (!yesno)
return;
/* Leave curses so program output looks good. */
endwin ();
md_pre_disklabel ();
write_disklabel ();
md_post_disklabel ();
make_filesystems ();
md_copy_filesystem ();
make_fstab();
md_post_newfs ();
/* Done to here. */
printf ("\n\nThis part of the installation completed."
" CR to continue\n");
getchar();
puts (CL); /* just to make sure */
wrefresh(stdscr);
/* Get the distribution files */
process_menu (MENU_distmedium);
if (nodist)
return;
/* Extract the distribution */
extract_dist ();
/* Configure the system */
/* Install complete ... reboot */
msg_display (MSG_instcomplete);
process_menu (MENU_ok);
}

View File

@ -0,0 +1,73 @@
/* $NetBSD: main.c,v 1.1.1.1 1997/09/26 23:02:53 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* main sysinst program. */
#include <stdio.h>
#include <curses.h>
#define MAIN
#include "defs.h"
#include "md.h"
#include "msg_defs.h"
#include "menu_defs.h"
int main(void);
int main(void)
{
WINDOW *win;
/* initialize message window */
win = newwin(22,78,1,1);
msg_window(win);
/* Change X.Y release number into XY */
{ char *t, *r;
for (t=r=rels; *t; t++)
if (*t != '.')
*r++=*t;
*r = 0;
}
/* Menu processing */
process_menu (MENU_netbsd);
return 0;
}

175
distrib/utils/sysinst/mbr.c Normal file
View File

@ -0,0 +1,175 @@
/* $NetBSD: mbr.c,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* fdisk.c -- routines to deal with fdisk ... */
#include <stdio.h>
#include "defs.h"
#include "md.h"
#include "txtwalk.h"
#include "msg_defs.h"
#include "menu_defs.h"
struct lookfor fdiskbuf[] = {
{"DLCYL", "DLCYL=%d", "a $0", &dlcyl, NULL},
{"DLHEAD", "DLHEAD=%d", "a $0", &dlhead, NULL},
{"DLSEC", "DLSEC=%d", "a $0", &dlsec, NULL},
{"BCYL", "BCYL=%d", "a $0", &bcyl, NULL},
{"BHEAD", "BHEAD=%d", "a $0", &bhead, NULL},
{"BSEC", "BSEC=%d", "a $0", &bsec, NULL},
{"PART0ID", "PART0ID=%d", "a $0", &part[0][ID], NULL},
{"PART0SIZE", "PART0SIZE=%d", "a $0", &part[0][SIZE], NULL},
{"PART0START", "PART0START=%d", "a $0", &part[0][START], NULL},
{"PART0FLAG", "PART0FLAG=%d", "a $0", &part[0][FLAG], NULL},
{"PART1ID", "PART1ID=%d", "a $0", &part[1][ID], NULL},
{"PART1SIZE", "PART1SIZE=%d", "a $0", &part[1][SIZE], NULL},
{"PART1START", "PART1START=%d", "a $0", &part[1][START], NULL},
{"PART1FLAG", "PART1FLAG=%d", "a $0", &part[1][FLAG], NULL},
{"PART2ID", "PART2ID=%d", "a $0", &part[2][ID], NULL},
{"PART2SIZE", "PART2SIZE=%d", "a $0", &part[2][SIZE], NULL},
{"PART2START", "PART2START=%d", "a $0", &part[2][START], NULL},
{"PART2FLAG", "PART2FLAG=%d", "a $0", &part[2][FLAG], NULL},
{"PART3ID", "PART3ID=%d", "a $0", &part[3][ID], NULL},
{"PART3SIZE", "PART3SIZE=%d", "a $0", &part[3][SIZE], NULL},
{"PART3START", "PART3START=%d", "a $0", &part[3][START], NULL},
{"PART3FLAG", "PART3FLAG=%d", "a $0", &part[3][FLAG], NULL}
};
int numfdiskbuf = sizeof(fdiskbuf) / sizeof(struct lookfor);
struct part_id {
int id;
char *name;
} part_ids[] = {
{0, "unused"},
{1, "Primary DOS, 12 bit FAT"},
{4, "Primary DOS, 16 bit FAT <32M"},
{5, "Extended DOS"},
{6, "Primary DOS, 16-bit FAT >32MB"},
{165, "NetBSD"},
{-1, "Unknown"},
};
int partsoverlap(int i, int j)
{
if (part[i][SIZE] == 0 || part[j][SIZE] == 0)
return 0;
return (part[i][START] >= part[j][START] &&
part[i][START] < part[j][START] + part[j][SIZE])
||
(part[i][START]+part[i][SIZE] > part[j][START] &&
part[i][START]+part[i][SIZE] < part[j][START] + part[j][SIZE])
||
(part[j][START] >= part[i][START] &&
part[j][START] < part[i][START] + part[i][SIZE])
||
(part[j][START]+part[j][SIZE] > part[i][START] &&
part[j][START]+part[j][SIZE] < part[i][START] + part[i][SIZE]);
}
void disp_cur_part (int sel, int disp)
{
int i, j, start, stop;
if (disp < 0)
start = 0, stop = 4;
else
start = disp, stop = disp+1;
msg_display_add (MSG_part_head, multname, multname);
for (i=start; i<stop; i++) {
if (sel == i) msg_standout();
if (part[i][SIZE] == 0 && part[i][START] == 0)
msg_printf_add ("%d %24s ", i, "");
else
msg_printf_add ("%d %12d%12d ", i,
part[i][START] / sizemult,
part[i][SIZE] / sizemult);
for (j = 0; part_ids[j].id != -1 &&
part_ids[j].id != part[i][ID]; j++);
msg_printf_add ("%s\n", part_ids[j].name);
if (sel == i) msg_standend();
}
}
int check_geom (void)
{
return bcyl < 1024 && bsec < 64 && bcyl > 0 && bhead > 0 && bsec > 0;
}
void set_fdisk_geom (void)
{
char res[80];
msg_display_add (MSG_setfdiskgeom);
disp_cur_geom();
msg_printf_add ("\n");
msg_prompt_add (MSG_cylinders, NULL, res, 80);
bcyl = atoi(res);
msg_prompt_add (MSG_heads, NULL, res, 80);
bhead = atoi(res);
msg_prompt_add (MSG_sectors, NULL, res, 80);
bsec = atoi(res);
bstuffset = 1;
}
void disp_cur_geom (void)
{
msg_display_add (MSG_realgeom, dlcyl, dlhead, dlsec);
msg_display_add (MSG_fdiskgeom, bcyl, bhead, bsec);
}
void get_fdisk_info (void)
{
char *textbuf;
int textsize;
/* Get Fdisk information */
textsize = collect (T_OUTPUT, &textbuf,
"/sbin/fdisk -S /dev/r%sd 2>/dev/null", diskdev);
if (textsize < 0) {
endwin();
(void) fprintf (stderr, "Could not run fdisk.");
exit (1);
}
walk (textbuf, textsize, fdiskbuf, numfdiskbuf);
free (textbuf);
}

View File

@ -0,0 +1,273 @@
/* $NetBSD: menus.mi.eng,v 1.1.1.1 1997/09/26 23:02:55 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
* Menu system definitions -- machine independent
*
* Some menus may be called directly in the code rather than via the
* menu system.
*
* This file must be first in the sed command line.
*
*/
{
#include <stdio.h>
#include <curses.h>
#include "defs.h"
#include "md.h"
#include "msg_defs.h"
#include "menu_defs.h"
}
default x=20, y=12, no exit;
menu netbsd, title " NetBSD-@@VERSION@@ Install System";
display action { msg_display (MSG_hello); };
option "Install NetBSD to hard disk",
action { do_install(); };
option "Upgrade NetBSD on a hard disk",
action { do_upgrade(); };
option "Run /bin/sh",
action (endwin) { system("/bin/sh"); puts(CL);
};
option "Reboot the computer", exit,
action (endwin) { run_prog("/sbin/reboot"); };
option "Halt the system", exit,
action (endwin) { run_prog("/sbin/halt"); };
menu upgrade, title " Upgrade NetBSD";
display action { msg_display(MSG_upgr); };
option "Not completed, exit", exit;
exit action { msg_clear(); };
menu yesno, title " yes or no? ";
option "Yes", exit, action {yesno = 1;};
option "No", exit, action {yesno = 0;};
menu noyes, title " yes or no? ";
option "No", exit, action {yesno = 0;};
option "Yes", exit, action {yesno = 1;};
menu ok, title " Hit enter to continue ";
option "ok", exit;
menu scsigeom1, title " Choose an option";
display action {
msg_display (MSG_scsigeom1, diskdev, diskgeom[4],
dlcyl, dlhead, dlsec, dlcyl*dlhead*dlsec,
diskgeom[0], diskgeom[1], diskgeom[2],
diskgeom[0]*diskgeom[1]*diskgeom[2]);
};
option "Use real geometry", exit, action {
dlcyl = diskgeom[0];
dlhead = diskgeom[1];
dlsec = diskgeom[2];
};
option "Use disklabel geometry", exit, action {
diskgeom[0] = dlcyl;
diskgeom[1] = dlhead;
diskgeom[2] = dlsec;
};
option "Choose a fake geometry", action { scsi_fake ();}, exit;
menu scsigeom2, title " Choose an option";
display action {
msg_display (MSG_scsigeom2, diskdev, diskgeom[4],
diskgeom[0], diskgeom[1], diskgeom[2],
diskgeom[0]*diskgeom[1]*diskgeom[2]);
};
option "Use real geometry", exit, action {
dlcyl = diskgeom[0];
dlhead = diskgeom[1];
dlsec = diskgeom[2];
};
option "Choose a fake geometry", action { scsi_fake ();}, exit;
menu scsi_fake, title " Choose a geometry";
option "Geometry 1", action { fake_sel = 0; }, exit;
option "Geometry 2", action { fake_sel = 1; }, exit;
option "Geometry 3", action { fake_sel = 2; }, exit;
option "Geometry 4", action { fake_sel = 3; }, exit;
option "Geometry 5", action { fake_sel = 4; }, exit;
menu layout, title " Choose your installation ";
option "Standard", exit, action { layoutkind = 1; };
option "Standard with X", exit, action { layoutkind = 2; };
option "Custom", exit, action { layoutkind = 3; };
menu sizechoice, title " Choose your size specifier";
option "Megabytes", exit, action
{ sizemult = MEG / sectorsize;
multname = msg_string(MSG_megname);
};
option "Cylinders", exit, action
{ sizemult = dlcylsize;
multname = msg_string(MSG_cylname);
};
option "Sectors", exit, action
{ sizemult = 1;
multname = msg_string(MSG_secname);
};
menu fspartok, title " Partitions ok?", y=15;
display action {
msg_display(MSG_fspart, multname);
disp_cur_fspart(-1, 0);
};
option "Partitions are ok", exit;
option "Change a partition", sub menu editfsparts;
menu editfsparts, y=15, exit;
display action {
ask_sizemult();
msg_display(MSG_fspart);
disp_cur_fspart(-1, 1);
};
option "Change a", action { editpart = A;}, sub menu edfspart;
option "Change b", action { editpart = B;}, sub menu edfspart;
option "Change e", action { editpart = E;}, sub menu edfspart;
option "Change f", action { editpart = F;}, sub menu edfspart;
option "Change g", action { editpart = G;}, sub menu edfspart;
option "Change h", action { editpart = H;}, sub menu edfspart;
menu edfspart, title " Change what? ", exit, y=15;
display action {
msg_display (MSG_edfspart, 'a'+editpart);
disp_cur_fspart(editpart, 1);
};
option "FS kind", sub menu selfskind;
option "Offset/size", action
{ char buf[40]; int start, size;
msg_prompt_add (MSG_offset, NULL, buf, 40);
start = NUMSEC(atoi(buf),sizemult,dlcylsize);
msg_prompt_add (MSG_size, NULL, buf, 40);
size = NUMSEC(atoi(buf),sizemult,dlcylsize);
if (editpart == 1 &&
bsdlabel[editpart][D_FSTYPE] == T_SWAP)
size -= swapadj;
if (start + size > dlsize)
size = dlsize - start;
bsdlabel[editpart][D_OFFSET] = start;
bsdlabel[editpart][D_SIZE] = size;
};
option "Bsize/Fsize", action
{ char buf[40]; int i;
if (bsdlabel[editpart][D_FSTYPE] != T_42BSD) {
msg_display (MSG_not42bsd, 'a'+editpart);
process_menu (MENU_ok);
return FALSE;
}
msg_prompt_add (MSG_bsize, NULL, buf, 40);
i = atoi(buf);
bsdlabel[editpart][D_BSIZE] = i;
msg_prompt_add (MSG_fsize, NULL, buf, 40);
i = atoi(buf);
bsdlabel[editpart][D_FSIZE] = i;
};
option "Mount point", action
{ if (bsdlabel[editpart][D_FSTYPE] == T_42BSD ||
bsdlabel[editpart][D_FSTYPE] == T_MSDOS)
msg_prompt_add (MSG_mountpoint, NULL,
fsmount[editpart], 20);
else {
msg_display (MSG_nomount, 'a'+editpart);
process_menu (MENU_ok);
}
};
menu selfskind, title " Select the type ", y=15;
option "4.2BSD", exit, action
{ bsdlabel[editpart][D_FSTYPE] = T_42BSD;
bsdlabel[editpart][D_BSIZE] = 8192;
bsdlabel[editpart][D_FSIZE] = 1024;
};
option "unused", exit, action
{ bsdlabel[editpart][D_FSTYPE] = T_UNUSED;
bsdlabel[editpart][D_BSIZE] = 0;
bsdlabel[editpart][D_FSIZE] = 0;
};
option "swap", exit, action
{ bsdlabel[editpart][D_FSTYPE] = T_SWAP;
bsdlabel[editpart][D_BSIZE] = 0;
bsdlabel[editpart][D_FSIZE] = 0;
};
option "msdos", exit, action
{ bsdlabel[editpart][D_FSTYPE] = T_MSDOS;
bsdlabel[editpart][D_BSIZE] = 0;
bsdlabel[editpart][D_FSIZE] = 0;
};
menu distmedium, title " Select medium";
display action { msg_display (MSG_distmedium); nodist = 0; };
option "ftp", action { get_via_ftp(); }, exit;
option "nfs", action { get_via_nfs(); }, exit;
/* option "cdrom", action { }, exit; */
option "floppy", action { }, exit;
option "none", action { nodist = 1; }, exit;
menu ftpsource, title " Change";
display action
{ int i;
msg_display (MSG_ftpsource, ftp_host, ftp_dir, ftp_user);
if (strcmp(ftp_user, "ftp") == 0)
msg_printf_add ("%s", ftp_pass);
else
for (i = strlen(ftp_pass); i>0; i--)
msg_printf_add ("*");
};
option "Host", action
{ msg_prompt (MSG_host, NULL, ftp_host, 255); };
option "Directory", action
{ msg_prompt (MSG_dir, NULL, ftp_dir, 255); };
option "User", action
{ msg_prompt (MSG_user, NULL, ftp_user, 255); };
option "Password", action
{ if (strcmp(ftp_user, "ftp") == 0)
msg_prompt (MSG_email, NULL, ftp_pass, 255);
else {
msg_noecho ();
msg_prompt (MSG_passwd, NULL, ftp_pass, 255);
msg_echo ();
}
};
option "Get Distribution", exit;

View File

@ -0,0 +1,348 @@
/* $NetBSD: msg.mi.eng,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* MI Message catalog -- english, machine independent */
message install
{install}
message upgrade
{upgrade}
message hello
{Welcome to the NetBSD-@@VERSION@@ installation process. This system was designed
to help you install NetBSD to your hard disk with a minimum of work for
you. In the following menus, you may change the current selection by
either typing the reference letter (a, b, c, ...) or using your arrow keys.
You activate the current selection from the menu by typing the enter key.
If you booted from a floppy, you may now remove the disk.
Thank you for using NetBSD!
}
message upgr
{Sorry, the upgrade part of this is not working.
}
message lostinfo
{It appears that your boot message buffer has lost information. Your
ram size information is not available. It is possible that other information
has also been lost. Do you want to continue?
}
message installusure
{Ok, lets get NetBSD installed on your hard disk. As always, this will
change information on your hard disk. You should have made a full backup
before this procedure! Do you really want to install NetBSD?
}
message upgradeusure
{Ok, lets get NetBSD upgraded your hard disk. As always, this will
change information on your hard disk. You should have made a full backup
before this procedure! Do you really want to upgrade NetBSD?
}
message nodisk
{I can not find any hard disks for use by NetBSD. You will be
returned to the original menu.
}
message onedisk
{I found only one disk, %s. Therefore I assume you want to %s
NetBSD on it.
}
message askdisk
{I have found the following disks: %s
\nOn which disk do you want to install NetBSD? }
message badname
{You did not choose one of the listed disks. Please try again.
The following disks are available: %s
\nOn which disk do you want to install NetBSD? }
message scsigeom1
{It appears that your disk, %s, has already been labeled with a BSD
disklabel and the disklabel reports geometry that is different from
the the real geometry. Also, the reporte geometry does not address all
possible sectors on your disk. Your disk has %d sectors.
disklabel: %d cylinders, %d heads, %d sectors = %d total sectors
reported geom: %d cylinders, %d heads, %d sectors = %d total sectors
It may be possible to choose a fake geometry for your BSD disklabel that
address most of your sectors.
}
message scsigeom2
{Your disk, %s, reports a geometry that does not address all possible sectors
on your disk. Your disk has %d sectors.
reported geom: %d cylinders, %d heads, %d sectors = %d total sectors
It may be possible to choose a fake geometry for your BSD disklabel that
address most of your sectors.
}
message scsi_fake
{Your SCSI disk has %d total sectors. The following are possible choices
for fake geometries. At least the last one is the reported geometry.
1: %6d cylinders * %6d heads * %6d sectors = %8d total sectors
2: %6d cylinders * %6d heads * %6d sectors = %8d total sectors
3: %6d cylinders * %6d heads * %6d sectors = %8d total sectors
4: %6d cylinders * %6d heads * %6d sectors = %8d total sectors
5: %6d cylinders * %6d heads * %6d sectors = %8d total sectors
}
message cylinders
{cylinders}
message heads
{heads}
message sectors
{sectors}
message size
{size}
message start
{start}
message offset
{offset}
message bsize
{block size}
message fsize
{frag size}
message mountpoint
{mount point}
message cylname
{cyl}
message secname
{sec}
message megname
{meg}
message layout
{You need to choose how the NetBSD part of your disk will be partitioned.
You have several choices. They are summarized below.
-- Standard: the partitions are computed by this program.
-- Standard with X: twice the swap space, space for X binaries.
-- Custom: you specify the sizes of all the partitions.
The NetBSD part of your disk is %.2f Megabytes.
Standard requires at least %.2f Megabytes.
Standard with X requires at least %.2f Megabytes.
}
message sizechoice
{You have elected to choose your partition sizes. You need to specify
the units of size you will use for your choices. Choosing megabytes
will make partition sizes close to your choice, but keep partitions
to an integral number of cylinders. Choosing sectors will allow you
to most acurately specify the sizes, but remember, it is most efficient
to choose partition sizes that are exact multiples of your cylinder
size, which is %d sectors.
}
message fspart
{We now have your NetBSD partitions as follows (Size and Offset in %s):
}
message fspart_head
{
id: Size Offset FStype Bsize Fsize Mount point
--- ---- ------ ------ ----- ----- -----------
}
message edfspart
{You should set the file system (FS) kind first. Then set the other values.
The current values for partition %c are:
}
message not42bsd
{Partition %c is not of type 4.2BSD and thus does not have a block and
frag size to set.
}
message packname
{Please enter a name for your NetBSD disk}
message lastchance
{Ok, we are now ready to install NetBSD on your hard disk. Nothing has been
written yet. This is your last chance to quit this process before anything
gets changed. Shall we continue?
}
message nomount
{Partition %c's type is not 4.2BSD or msdos and therefore does not have
a mount point.}
message dodisklabel
{Writing the NetBSD disklabel ...\n}
message donewfs
{Creating the new file systems on all 4.2BSD partitions...\n}
message dotar
{Populating filesystems with bootstrapping binaries and config files...\n}
message instcomplete
{The installation of NetBSD-@@VERSION@@ is now complete. You may
reboot your machine and NetBSD should boot from your hard drive.
}
message distmedium
{Your disk is now ready for installing the kernel and the distribution
sets. As noted in your INSTALL notes, you have several options. For
ftp or nfs, you must be connected to a network with access to the proper
machines. If you are not ready complete the installation at this time,
you may select "none" and you will be returned to the main menu. When
you are ready at a later time, you may select "upgrade" from the main
menu to complete the installation.
}
message ftpsource
{The following is the ftp site, directory, user, and password currently
ready to use. If "user" is "ftp", then the password is not needed.
host: %s
directory: %s
user: %s
password: }
message host
{host}
message dir
{directory}
message user
{user}
message passwd
{password}
message email
{e-mail address}
message asknetdev
{I have found the following network interfaces: %s
\nWhich device shall I use? }
message badnet
{You did not choose one of the listed network devices. Please try again.
The following network devices are available: %s
\nWhich device shall I use? }
message netinfo
{To be able to use the network, we need answers to the following:
}
message net_domain
{Domain (e.g. netbsd.org) }
message net_host
{Host name (e.g. ftp) }
message net_ip
{IP number (e.g. 127.0.0.1) }
message net_mask
{Netmask }
message net_namesrv
{IP of your name server }
message net_defroute
{IP of your gateway }
message netok
{The following are the values you entered. Are they OK?
Domain: %s
Host Name: %s
Host IP: %s
Netmask: %s
Nameserver IP: %s
Gateway IP: %s
}
message netagain
{Please reenter the information about your network. Your last answers
will be your default.
}
message resolv
{Could not create /etc/resolv.conf. Install aborted.
}
message realdir
{Could not change to directory %s. Install aborted.
}
message netdir
{What directory shall I use for %s? }
message verboseextract
{During the extraction process, do you want to see the file names as
each file is extracted?
}
message badls
{Could not run /bin/ls. This error should not have happened. Install aborted.
}
message endtar
{All your files have now been extracted. Please hit CR to continue.}

229
distrib/utils/sysinst/net.c Normal file
View File

@ -0,0 +1,229 @@
/* $NetBSD: net.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* net.c -- routines to fetch files off the network. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>
#include <unistd.h>
#include "defs.h"
#include "md.h"
#include "msg_defs.h"
#include "menu_defs.h"
#include "txtwalk.h"
static void found_net (struct data* list, int num);
struct lookfor netbuf[] = {
{"ed", "%s:", "c", NULL, found_net},
{"el", "%s:", "c", NULL, found_net},
{"ep", "%s:", "c", NULL, found_net},
{"ie", "%s:", "c", NULL, found_net},
{"lc", "%s:", "c", NULL, found_net},
{"fea", "%s:", "c", NULL, found_net},
{"le", "%s:", "c", NULL, found_net},
{"de", "%s:", "c", NULL, found_net},
{"fpa", "%s:", "c", NULL, found_net},
{"fxp", "%s:", "c", NULL, found_net}
};
int numnetbuf = sizeof(netbuf) / sizeof(struct lookfor);
static void found_net (struct data* list, int num)
{
int i;
strncat (net_devices, list[0].u.s_val, 253-strlen(net_devices));
i = strlen(net_devices);
net_devices[i] = ' ';
net_devices[i+1] = '\0';
}
static void get_ifconfig_info (void)
{
char *textbuf;
int textsize;
/* Get ifconfig information */
textsize = collect (T_OUTPUT, &textbuf,
"/sbin/ifconfig -a 2>/dev/null");
if (textsize < 0) {
endwin();
(void) fprintf (stderr, "Could not run ifconfig.");
exit (1);
}
walk (textbuf, textsize, netbuf, numnetbuf);
free (textbuf);
}
static void config_network (void)
{ char *tp;
char defname[255];
int octet0;
int pass;
FILE *f;
net_devices[0] = '\0';
get_ifconfig_info ();
strncpy (defname, net_devices, 255);
tp = defname;
strsep(&tp, " ");
msg_prompt (MSG_asknetdev, defname, net_dev, 255, net_devices);
tp = net_dev;
strsep(&tp, " ");
net_dev[strlen(net_dev)+1] = 0;
net_dev[strlen(net_dev)] = ' ';
while ((strlen(net_dev) != 4 && strlen(net_dev) != 5) ||
strstr(net_devices, net_dev) == NULL) {
msg_prompt (MSG_badnet, defname, net_dev, 10,
net_devices);
tp = net_dev;
strsep(&tp, " ");
net_dev[strlen(net_dev)+1] = 0;
net_dev[strlen(net_dev)] = ' ';
}
/* Remove that space we added. */
net_dev[strlen(net_dev)-1] = 0;
/* Get other net information */
msg_display (MSG_netinfo);
pass = 0;
do {
msg_prompt_add (MSG_net_domain, net_domain, net_domain,
STRSIZE);
msg_prompt_add (MSG_net_host, net_host, net_host, STRSIZE);
msg_prompt_add (MSG_net_ip, net_ip, net_ip, STRSIZE);
octet0 = atoi(net_ip);
if (!pass) {
if (0 <= octet0 && octet0 <= 127)
strcpy (net_mask, "0xff000000");
else if (127 <= octet0 && octet0 <= 191)
strcpy (net_mask, "0xffff0000");
else if (192 <= octet0 && octet0 <= 223)
strcpy (net_mask, "0xffff0000");
}
msg_prompt_add (MSG_net_mask, net_mask, net_mask, STRSIZE);
msg_prompt_add (MSG_net_namesrv, net_namesvr, net_namesvr,
STRSIZE);
msg_prompt_add (MSG_net_defroute, net_defroute, net_defroute,
STRSIZE);
msg_display (MSG_netok, net_domain, net_host, net_ip,
net_mask, net_namesvr, net_defroute);
process_menu (MENU_yesno);
if (!yesno)
msg_display (MSG_netagain);
pass++;
} while (!yesno);
/* Create /etc/resolv.conf */
#ifdef DEBUG
f = fopen ("/tmp/resolv.conf", "w");
#else
f = fopen ("/etc/resolv.conf", "w");
#endif
if (f == NULL) {
endwin();
(void)fprintf(stderr, "%s", msg_string(MSG_resolv));
exit(1);
}
(void)fprintf (f, "nameserver %s\nlookup file bind\nsearch %s",
net_namesvr, net_domain);
fclose (f);
run_prog ("/sbin/ifconfig lo0 127.0.0.1");
run_prog ("/sbin/ifconfig %s inet %s netmask %s", net_dev, net_ip,
net_mask);
run_prog ("/sbin/route add default %s > /dev/null", net_defroute);
}
void
get_via_ftp (void)
{
char **list;
char realdir[STRSIZE];
config_network ();
strncat (ftp_dir, ftp_prefix, STRSIZE-strlen(ftp_dir));
process_menu (MENU_ftpsource);
msg_prompt (MSG_netdir, dist_dir, dist_dir, STRSIZE, "ftp");
snprintf (realdir, STRSIZE, "/mnt/%s", dist_dir);
strcpy (dist_dir, realdir);
run_prog ("/bin/mkdir %s", realdir);
#ifndef DEBUG
if (chdir(realdir)) {
endwin();
(void)fprintf(stderr, msg_string(MSG_realdir), realdir);
exit(1);
}
#else
printf ("chdir (%s)\n", realdir);
#endif
list = ftp_list;
endwin();
while (*list) {
if (strcmp ("ftp", ftp_user) == 0)
run_prog ("/usr/bin/ftp -a ftp://%s/%s/%s%s%s",
ftp_host, ftp_dir,
*list, rels, ftp_postfix);
else
run_prog ("/usr/bin/ftp ftp://%s:%s@%s/%s/%s%s%s",
ftp_user, ftp_pass, ftp_host, ftp_dir,
*list, rels, ftp_postfix);
list++;
}
puts (CL); /* Just to make sure. */
#ifndef DEBUG
chdir("/");
#endif
}
void
get_via_nfs(void)
{
config_network ();
/* Get server and filepath */
/* Mount it */
}

137
distrib/utils/sysinst/run.c Normal file
View File

@ -0,0 +1,137 @@
/* $NetBSD: run.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* run.c -- routines to interact with other programs. */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "defs.h"
#ifdef DEBUG
#define Xsystem(y) printf ("%s\n", y)
#else
#define Xsystem(y) system(y)
#endif
#define BUFSIZE 4096
int
collect (int kind, char **buffer, char *name, ...)
{
size_t nbytes; /* Number of bytes in buffer. */
size_t fbytes; /* Number of bytes in file. */
struct stat st; /* stat information. */
int ch;
FILE *f;
char fileorcmd [STRSIZE];
va_list ap;
va_start (ap, name);
vsnprintf (fileorcmd, STRSIZE, name, ap);
va_end (ap);
if (kind == T_FILE) {
/* Get the file information. */
if (stat (fileorcmd, &st)) {
*buffer = NULL;
return -1;
}
fbytes = (size_t)st.st_size;
/* Open the file. */
f = fopen (fileorcmd, "r");
if (f == NULL) {
*buffer = NULL;
return -1;
}
} else {
/* Open the program. */
f = popen (fileorcmd, "r");
if (f == NULL) {
*buffer = NULL;
return -1;
}
fbytes = BUFSIZE;
}
if (fbytes == 0)
fbytes = BUFSIZE;
/* Allocate the buffer size. */
*buffer = (char *) malloc (fbytes + 1);
if (!*buffer)
return -1;
/* Read the buffer. */
nbytes = 0;
while (nbytes < fbytes && (ch = fgetc(f)) != EOF)
(*buffer)[nbytes++] = ch;
(*buffer)[nbytes] = 0;
if (kind == T_FILE)
fclose(f);
else
pclose(f);
return nbytes;
}
/* Run a program ... using printf style to format the command! */
int run_prog (char *cmd, ...)
{
char command [STRSIZE];
va_list ap;
int ret;
va_start (ap, cmd);
(void) vsnprintf (command, STRSIZE, cmd, ap);
va_end (ap);
/* The following may be more than one function call. Can't just
"return Xsystem (command);" */
ret = Xsystem (command);
return ret;
}

View File

@ -0,0 +1,267 @@
/* $NetBSD: txtwalk.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
* walk a text buffer, processing matched lines
*
* Written by Philip A. Nelson.
* 7/29/97
*
*/
#undef DEBUG
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include "txtwalk.h"
/* prototypes */
static void process (struct lookfor, char *);
static void match (char *, struct lookfor *, int);
static int finddata (struct lookfor, char *, struct data *, int *);
static char *strndup (char *, int);
/* Walk the buffer, call match for each line. */
void
walk (char *buffer, size_t size, struct lookfor *these, int numthese)
{
int i=0;
int len;
int line = 1;
while (i < size) {
/* Ignore zero characters. */
if (*buffer == '\0') {
buffer++;
i++;
} else {
/* Assume this starts a line. */
len = 0;
while (buffer[len] != '\n' && buffer[len] != '\0')
len++;
buffer[len] = '\0';
#ifdef DEBUG
printf ("%5d: %s\n", line, buffer);
#endif
match(buffer, these, numthese);
buffer += len+1;
i += len+1;
line++;
}
}
}
/* Match the current line with a string of interest.
* For each match in these, process the match.
*/
static void
match (char *line, struct lookfor *these, int numthese)
{
int linelen; /* Line length */
int patlen; /* Pattern length */
int which; /* Which pattern we are using */
linelen = strlen(line);
for (which = 0; which < numthese; which++) {
patlen = strlen(these[which].head);
if (linelen < patlen)
continue;
if (strncmp (these[which].head, line, patlen) == 0)
process (these[which], line);
}
}
/* process the matched line. */
static void
process (struct lookfor this, char *line)
{
struct data found[MAXDATA];
int numfound = 0;
char *p;
int i, j;
if (finddata(this, line, found, &numfound)) {
#ifdef DEBUG
printf ("process: \"%s\"\n", line);
for (i=0; i<numfound; i++) {
printf ("\t%d: ", i);
switch (found[i].what) {
case INT: printf ("%d\n", found[i].u.i_val);
break;
case STR: printf ("'%s'\n", found[i].u.s_val);
break;
}
}
#endif
/* Process the stuff. */
switch (this.todo[0]) {
case 'a':
p = this.todo;
j = 0;
while (*p && *p != '$') p++;
if (*p) p++;
while (*p && isdigit(*p)) {
i = atoi(p);
switch (found[i].what) {
case INT:
*((int *)this.var+j)
= found[i].u.i_val;
break;
case STR:
strcpy(*((char **)this.var+j),
found[i].u.s_val);
break;
}
while (isdigit(*p)) p++;
while (*p && *p != '$') p++;
if (*p) p++;
j++;
}
break;
case 'c':
(*this.func) (found, numfound);
break;
}
}
}
/* find the expected data. Return 1 if successful, return 0 if not.
* Successful means running into the end of the expect string before
* running out of line data or encountering other bad data.
*
* Side Effect -- sets numfound and found.
*/
static int
finddata (struct lookfor this, char *line, struct data *found, int *numfound )
{
char *fmt = this.fmt;
int len;
*numfound = 0;
while (*fmt) {
if (!*line && *fmt)
return 0;
if (*fmt == '%') {
fmt++;
if (!*fmt)
return 0;
switch (*fmt) {
case '%':
if (*line != '%')
return 0;
line++;
break;
case 'i':
if (!fmt[1])
return 1;
if (fmt[1] == ' ')
while (*line && !isspace(*line))
line++;
else
while (*line && *line != fmt[1])
line++;
break;
case 'd':
if (!isdigit (*line))
return 0;
found[*numfound].what = INT;
found[(*numfound)++].u.i_val = atoi(line);
while (*line && isdigit (*line))
line++;
break;
case 's':
len = 0;
while (line[len] && !isspace(line[len])
&& line[len] != fmt[1])
len++;
found[*numfound].what = STR;
found[*numfound].u.s_val = strndup(line, len);
if (found[(*numfound)++].u.s_val == NULL) {
(void) fprintf (stderr,
"msgwalk: strndup: out of vm.\n");
exit(1);
}
line += len;
break;
default:
return 0;
}
} else if (*fmt == ' ') {
while (*line && isspace(*line)) line++;
} else if (*line == *fmt) {
line++;
} else {
/* Mis match! */
return 0;
}
fmt++;
}
/* Ran out of fmt. */
return 1;
}
/* Utility routines....
*/
static char
*strndup (char *str, int len)
{
int alen;
char *val;
alen = strlen(str);
alen = len < alen ? len+1 : alen+1;
val = (char *) malloc(alen);
if (!val)
return NULL;
strncpy (val, str, alen-1);
return val;
}

View File

@ -0,0 +1,85 @@
/* $NetBSD: txtwalk.h,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* txtwalk.h - definitions for textwalk to be useful! */
/* data extractions */
enum kind {INT, STR};
struct data {
enum kind what;
union udata {
int i_val;
char *s_val;
} u;
};
/* Strings of interest! */
struct lookfor {
char *head; /* Line starts this way. */
char *fmt; /* Expected format. */
char *todo; /* What to do ... */
void *var; /* Possible var */
void (*func) (struct data *list, int num); /* function to call */
};
/* Format string for the expected string:
* space => skip white space
* %i => skip non-white space
* %d => expect an integer
* %s => expect a non-white space string
* \0 => ignore remainder of line
* %% => match a %
*
*/
/* What to do ....
*
* a -- assign to var, $n is data from the expect strings.
* c -- call the function
*
*/
/* prototypes */
void walk (char *, size_t, struct lookfor *, int);
/* Maximum number of matched data elements per line! */
#define MAXDATA 20

View File

@ -0,0 +1,73 @@
/* $NetBSD: upgrade.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* upgrade.c -- upgrade an installation. */
#include <stdio.h>
#include <curses.h>
#include "defs.h"
#include "msg_defs.h"
#include "menu_defs.h"
/* Do the system upgrade. */
void do_upgrade(void)
{
doingwhat = msg_string (MSG_upgrade);
msg_display (MSG_upgradeusure);
process_menu (MENU_noyes);
if (!yesno)
return;
if (find_disks_and_mem_size () < 0)
return;
fsck_disks();
/* Get the distribution files */
process_menu (MENU_distmedium);
if (nodist)
return;
/* Extract the distribution */
extract_dist();
process_menu (MENU_upgrade);
}

View File

@ -0,0 +1,127 @@
/* $NetBSD: util.c,v 1.1.1.1 1997/09/26 23:02:54 phil Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
* All rights reserved.
*
* Written by Philip A. Nelson for Piermont Information Systems Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software develooped for the NetBSD Project by
* Piermont Information Systems Inc.
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
* or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* util.c -- routines that don't really fit anywhere else... */
#include <stdio.h>
#include <unistd.h>
#include "defs.h"
#include "msg_defs.h"
#include "menu_defs.h"
static int asked = 0;
void ask_sizemult ()
{
if (!asked) {
msg_display (MSG_sizechoice, dlcylsize);
process_menu (MENU_sizechoice);
}
asked = 1;
}
/* Returns 1 for "y" or "Y" and "n" otherwise. CR => default. */
int
ask_ynquestion (char *quest, char def, ...)
{
char line[STRSIZE];
va_list ap;
char c;
va_start(ap, def);
vsnprintf (line, STRSIZE, quest, ap);
va_end(ap);
printf ("%s [%c]: ", line, def);
c = getchar();
if (c == '\n')
return def == 'y';
while (getchar() != '\n') /* eat characters */;
return c == 'y' || c == 'Y';
}
void
extract_dist (void)
{
int verbose;
int numchar;
char *files;
char *p;
msg_display (MSG_verboseextract);
process_menu (MENU_noyes);
verbose = yesno;
numchar = collect (T_OUTPUT, &files, "/bin/ls %s/*.tar.gz", dist_dir);
if (numchar < 0) {
endwin();
(void)fprintf (stderr, msg_string(MSG_badls));
exit(1);
}
files[numchar] = '\0';
endwin();
printf ("Files are %s\n", files);
getchar();
#ifndef DEBUG
if (chdir("/mnt")) {
endwin();
(void)fprintf(stderr, msg_string(MSG_realdir), "/mnt");
exit(1);
}
#else
printf ("chdir (%s)\n", "/mnt");
#endif
if (verbose)
endwin();
p = strtok (files, " \n");
while (p != NULL) {
run_prog ("/usr/bin/tar --unlink -xpz%s -f %s",
verbose ? "v":"", p);
p= strtok (NULL, " \n");
}
if (verbose) {
(void)fprintf(stderr, msg_string(MSG_endtar));
getchar();
puts(CL);
}
}