aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
Diffstat (limited to 'sbin')
-rw-r--r--sbin/comcontrol/Makefile6
-rw-r--r--sbin/comcontrol/comcontrol.853
-rw-r--r--sbin/comcontrol/comcontrol.c92
-rw-r--r--sbin/fdisk/Makefile9
-rw-r--r--sbin/fdisk/fdisk.8178
-rw-r--r--sbin/fdisk/fdisk.c699
-rw-r--r--sbin/ft/Makefile2
-rw-r--r--sbin/modload/Makefile2
-rw-r--r--sbin/modload/modload.82
-rw-r--r--sbin/modload/modload.c2
-rw-r--r--sbin/modunload/Makefile2
-rw-r--r--sbin/modunload/modunload.82
-rw-r--r--sbin/modunload/modunload.c2
-rw-r--r--sbin/mount_msdos/Makefile16
-rw-r--r--sbin/mount_msdos/mount_msdos.8111
-rw-r--r--sbin/mount_msdos/mount_msdos.c208
-rw-r--r--sbin/mount_portal/activate.c2
-rw-r--r--sbin/mount_portal/conf.c2
-rw-r--r--sbin/mount_portal/pathnames.h2
-rw-r--r--sbin/mount_portal/portal.conf2
-rw-r--r--sbin/mount_portal/portald.h2
-rw-r--r--sbin/mount_portal/pt_conf.c2
-rw-r--r--sbin/mount_portal/pt_exec.c2
-rw-r--r--sbin/mount_portal/pt_file.c2
-rw-r--r--sbin/mount_portal/pt_tcp.c2
-rw-r--r--sbin/mountd/Makefile2
-rw-r--r--sbin/mountd/mountd.82
-rw-r--r--sbin/mountd/mountd.c2
-rw-r--r--sbin/nfsiod/nfsiod.82
-rw-r--r--sbin/savecore/savecore.82
-rw-r--r--sbin/slattach/Makefile2
-rw-r--r--sbin/slattach/slattach.82
-rw-r--r--sbin/sysinstall/dev2c.sh2
-rw-r--r--sbin/sysinstall/exec.c2
-rw-r--r--sbin/sysinstall/label.c2
-rw-r--r--sbin/sysinstall/main.c2
-rw-r--r--sbin/sysinstall/stage2.c2
-rw-r--r--sbin/sysinstall/stage3.c2
-rw-r--r--sbin/sysinstall/stage4.c2
-rw-r--r--sbin/sysinstall/stage5.c2
-rw-r--r--sbin/sysinstall/utils.c2
41 files changed, 1404 insertions, 32 deletions
diff --git a/sbin/comcontrol/Makefile b/sbin/comcontrol/Makefile
new file mode 100644
index 000000000000..abc8d0a7f81f
--- /dev/null
+++ b/sbin/comcontrol/Makefile
@@ -0,0 +1,6 @@
+# @(#)Makefile 5.4 (Berkeley) 6/5/91
+
+PROG= comcontrol
+MAN8= comcontrol.8
+
+.include <bsd.prog.mk>
diff --git a/sbin/comcontrol/comcontrol.8 b/sbin/comcontrol/comcontrol.8
new file mode 100644
index 000000000000..53d7d332afdc
--- /dev/null
+++ b/sbin/comcontrol/comcontrol.8
@@ -0,0 +1,53 @@
+.Dd May 15, 1994
+.Dt COMCONTROL 8
+.Os FreeBSD
+.Sh NAME
+.Nm comcontrol
+.Nd control an sio device.
+.Sh SYNOPSIS
+.Nm comcontrol
+.Ar sio_special_device
+.Op options
+.Sh DESCRIPTION
+.Nm Comcontrol
+is used to examine and modify some of the special characterstics
+of the specified sio device.
+If no arguments other than the device are specified,
+it prints the settings of all controllable characteristics.
+This usage requires only read access on the device.
+Only the superuser can change the settings.
+.Pp
+The following options are available:
+.Bl -tag -width Fl
+.It Cm dtrwait Ar number
+Set the time to wait after dropping DTR
+to the given number.
+The units are hundredths of a second.
+The default is 300 hundredths, i.e., 3 seconds.
+.El
+.Pp
+The standard way to use
+.Nm comcontrol
+is to put invocations of it in the
+.Ar /etc/rc.local
+startup script.
+.Sh SEE ALSO
+.Xr sio 4 ,
+.Xr stty 1 .
+.Sh FILES
+.Bl -tag -width Pa
+.It Pa /dev/ttyd?
+dialin devices.
+.It Pa /dev/cua0?
+dialout devices.
+.Sh AUTHOR
+Christopher G. Demetriou
+.Sh BUGS
+.Nm comcontrol
+should be named
+.Nm siocontrol .
+.
+.Sh HISTORY
+Originally part of cgd's com package patches, version 0.2.1, to 386BSD 0.1.
+Once controlled bidirectional capabilities. Little is left to control now
+that these capabilities are standard.
diff --git a/sbin/comcontrol/comcontrol.c b/sbin/comcontrol/comcontrol.c
new file mode 100644
index 000000000000..40cf8d25c8a8
--- /dev/null
+++ b/sbin/comcontrol/comcontrol.c
@@ -0,0 +1,92 @@
+/*-
+ * Copyright (c) 1992 Christopher G. Demetriou
+ * All rights reserved.
+ *
+ * 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. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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.
+ */
+
+/* comcontrol.c */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <fcntl.h>
+
+
+void usage(char *progname)
+{
+ fprintf(stderr, "usage: %s <filename> [dtrwait <n>]\n", progname);
+ exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+ int fd;
+ int res;
+ int dtrwait;
+
+ if ((argc < 2) || (argc > 5)) usage(argv[0]);
+
+ fd = open(argv[1], O_RDONLY|O_NONBLOCK, 0);
+ if (fd < 0) {
+ fprintf(stderr, "%s: couldn't open file %s\n", argv[0], argv[1]);
+ perror("open");
+ exit(1);
+ }
+
+ if (argc == 2) {
+ if (ioctl(fd, TIOCMGDTRWAIT, &dtrwait) < 0) {
+ perror("TIOCMGDTRWAIT");
+ exit(1);
+ }
+ printf("dtrwait %d\n", dtrwait);
+ } else {
+ char *prg = argv[0];
+
+ res = dtrwait = -1;
+ while (argv[2] != NULL) {
+ if (!strcmp(argv[2],"dtrwait")) {
+ if (dtrwait >= 0)
+ usage(prg);
+ if (argv[3] == NULL || !isdigit(argv[3][0]))
+ usage(prg);
+ dtrwait = atoi(argv[3]);
+ argv += 2;
+ } else {
+ usage(prg);
+ }
+ }
+ if (dtrwait >= 0) {
+ if (ioctl(fd, TIOCMSDTRWAIT, &dtrwait) < 0) {
+ perror("TIOCMSDTRWAIT");
+ exit(1);
+ }
+ }
+ }
+
+ close(fd);
+ exit(0);
+}
diff --git a/sbin/fdisk/Makefile b/sbin/fdisk/Makefile
new file mode 100644
index 000000000000..78b1c9ac3d1d
--- /dev/null
+++ b/sbin/fdisk/Makefile
@@ -0,0 +1,9 @@
+# @(#)Makefile 1.1 (Julian Elischer) 3/28/93
+#
+#
+
+PROG= fdisk
+SRCS= fdisk.c
+MAN8= fdisk.8
+
+.include <bsd.prog.mk>
diff --git a/sbin/fdisk/fdisk.8 b/sbin/fdisk/fdisk.8
new file mode 100644
index 000000000000..5eb2deaa436d
--- /dev/null
+++ b/sbin/fdisk/fdisk.8
@@ -0,0 +1,178 @@
+.Dd April 4, 1993
+.Dt FDISK 8
+.\".Os BSD 4
+.Sh NAME
+.Nm fdisk
+.Nd DOS partition maintainance program
+.Sh SYNOPSIS
+.Nm
+.Op Fl i
+.Op Fl u
+.Op disk
+.Bl -tag -width time
+.It Fl i
+Initializes sector 0 of the disk.
+.It Fl u
+Is used for updating (editing) sector 0 of the disk.
+.El
+.Sh PROLOGUE
+In order for the BIOS to boot the kernel,
+certain conventions must be adhered to.
+Sector 0 of the disk must contain boot code,
+a partition table,
+and a magic number.
+BIOS partitions can be used to break the disk up into several pieces.
+The BIOS brings in sector 0
+(does it really use the code?)
+and verifies the magic number.
+It then searches the 4 BIOS partitions described by sector 0
+to determine which of them is
+.Em active.
+This boot then brings in the secondary boot block from the
+.Em active
+partition and runs it.
+Under DOS,
+you could have one or more partitions with one
+.Em active.
+The DOS
+.Nm
+program can be used to divide space on the disk into partitions and set one
+.Em active.
+.Sh DESCRIPTION
+The 386bsd program
+.Nm
+serves a similar purpose to the DOS program.
+When called with no arguments, it prints the sector 0 partition table.
+An example follows:
+
+.Bd -literal
+ ******* Working on device /dev/rwd0d *******
+ parameters extracted from in-core disklabel are:
+ cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
+
+ parameters to be used for BIOS calculations are:
+ cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
+
+ Warning: BIOS sector numbering starts with sector 1
+ Information from DOS bootblock is:
+ The data for partition 0 is:
+ sysid 165,(386BSD)
+ start 495, size 380160 (185 Meg), flag 0
+ beg: cyl 1/ sector 1/ head 0;
+ end: cyl 768/ sector 33/ head 14
+ The data for partition 1 is:
+ sysid 164,(unknown)
+ start 378180, size 2475 (1 Meg), flag 0
+ beg: cyl 764/ sector 1/ head 0;
+ end: cyl 768/ sector 33/ head 14
+ The data for partition 2 is:
+ <UNUSED>
+ The data for partition 3 is:
+ sysid 99,(ISC UNIX, other System V/386, GNU HURD or Mach)
+ start 380656, size 224234 (109 Meg), flag 80
+ beg: cyl 769/ sector 2/ head 0;
+ end: cyl 197/ sector 33/ head 14
+.Ed
+.Pp
+The disk is divided into three parititions that happen to fill the disk.
+The second partition overlaps the end of the first.
+(Used for debugging purposes)
+.Bl -tag -width "cyl, sector and head"
+.It Em "sysid"
+is used to label the partition. 386bsd reserves the
+magic number 165 decimal (A5 in hex).
+.It Em "start and size"
+fields provide the start address
+and size of a parition in sectors.
+.It Em "flag 80"
+specifies that this is the active partition.
+.It Em "cyl, sector and head"
+fields are used to specify the beginning address
+and end address for the parititon.
+.It Em "Note:"
+these numbers are calculated using BIOS's understanding of the disk geometry
+and saved in the bootblock.
+.El
+.Pp
+The flags
+.Fl i
+or
+.Fl u
+are used to indicate that the paritition data is to be updated.
+The
+.Nm
+program will enter a conversational mode.
+This mode is designed not to change any data unless you explicitly tell it to.
+.Nm
+selects defaults for its questions to guarantee the above behavior.
+.Pp
+It displays each partition
+and ask if you want to edit it.
+If you say yes,
+it will step through each field showing the old value
+and asking for a new one.
+When you are done with a partition,
+.Nm
+will display it and ask if it is correct.
+.Nm
+will then procede to the next entry.
+.Pp
+Getting the
+.Em cyl, sector,
+and
+.Em head
+fields correct is tricky.
+So by default,
+they will be calculated for you;
+you can specify them if you choose.
+.Pp
+After all the partitions are processed,
+you are given the option to change the
+.Em active
+partition.
+Finally,
+when the all the data for the first sector has been accumulated,
+you are asked if you really want to rewrite sector 0.
+Only if you answer yes,
+will the data be written to disk.
+.Pp
+The difference between the
+.Fl u
+flag and
+.Fl i
+flag is that
+the
+.Fl u
+flag just edits the fields as they appear on the disk.
+While the
+.Fl i
+flag is used to "initialize" sector 0;
+it will setup the last BIOS partition to use the whole disk for 386bsd;
+and make it active.
+.Sh NOTES
+.Pp
+The automatic calculation of starting cylinder etc. uses
+a set of figures that represent what the BIOS thinks is the
+geometry of the drive.
+These figures are by default taken from the incore disklabel,
+but the program initially gives you an oportunity to change them.
+This allows the user to create a bootblock that can work with drives
+that use geometry translation under the BIOS.
+.Pp
+If you hand craft your disk layout,
+please make sure that the 386bsd partition starts on a cylinder boundary.
+A number of decisions made later may assume this.
+(This might not be necessary later.)
+.Pp
+Editing an existing partition will most likely cause you to
+lose all the data in that partition.
+.Pp
+You should run this program interactively once or twice to see how it works.
+This is completely safe as long as you answer the last question in the negative.
+There are subtleties
+that the program detects
+that are not fully explained in this manual page.
+.Sh SEE ALSO
+.Xr disklabel 8
+.Sh BUGS
+One less now, but probably more
diff --git a/sbin/fdisk/fdisk.c b/sbin/fdisk/fdisk.c
new file mode 100644
index 000000000000..f19eedb2abe1
--- /dev/null
+++ b/sbin/fdisk/fdisk.c
@@ -0,0 +1,699 @@
+/*
+ * Mach Operating System
+ * Copyright (c) 1992 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+
+#include <sys/types.h>
+#include <sys/disklabel.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+int iotest;
+
+#define LBUF 100
+static char lbuf[LBUF];
+
+/*
+ *
+ * Ported to 386bsd by Julian Elischer Thu Oct 15 20:26:46 PDT 1992
+ *
+ * 14-Dec-89 Robert Baron (rvb) at Carnegie-Mellon University
+ * Copyright (c) 1989 Robert. V. Baron
+ * Created.
+ */
+
+#define Decimal(str, ans, tmp) if (decimal(str, &tmp, ans)) ans = tmp
+#define Hex(str, ans, tmp) if (hex(str, &tmp, ans)) ans = tmp
+#define String(str, ans, len) {char *z = ans; char **dflt = &z; if (string(str, dflt)) strncpy(ans, *dflt, len); }
+
+#define RoundCyl(x) ((((x) + cylsecs - 1) / cylsecs) * cylsecs)
+
+#define SECSIZE 512
+
+char *disk = "/dev/rwd0d";
+char *name;
+
+struct disklabel disklabel; /* disk parameters */
+
+int cyls, sectors, heads, cylsecs, disksecs;
+
+struct mboot
+{
+ unsigned char padding[2]; /* force the longs to be long alligned */
+ unsigned char bootinst[DOSPARTOFF];
+ struct dos_partition parts[4];
+ unsigned short int signature;
+};
+struct mboot mboot;
+
+#define ACTIVE 0x80
+#define BOOT_MAGIC 0xAA55
+
+int dos_cyls;
+int dos_heads;
+int dos_sectors;
+int dos_cylsecs;
+
+#define DOSSECT(s,c) ((s & 0x3f) | ((c >> 2) & 0xc0))
+#define DOSCYL(c) (c & 0xff)
+static int dos();
+char *get_type();
+static int partition = -1;
+
+
+static int a_flag = 0; /* set active partition */
+static int i_flag = 0; /* replace partition data */
+static int u_flag = 0; /* update partition data */
+
+static unsigned char bootcode[] = {
+0x33, 0xc0, 0xfa, 0x8e, 0xd0, 0xbc, 0x00, 0x7c, 0x8e, 0xc0, 0x8e, 0xd8, 0xfb, 0x8b, 0xf4, 0xbf,
+0x00, 0x06, 0xb9, 0x00, 0x02, 0xfc, 0xf3, 0xa4, 0xea, 0x1d, 0x06, 0x00, 0x00, 0xb0, 0x04, 0xbe,
+0xbe, 0x07, 0x80, 0x3c, 0x80, 0x74, 0x0c, 0x83, 0xc6, 0x10, 0xfe, 0xc8, 0x75, 0xf4, 0xbe, 0xbd,
+0x06, 0xeb, 0x43, 0x8b, 0xfe, 0x8b, 0x14, 0x8b, 0x4c, 0x02, 0x83, 0xc6, 0x10, 0xfe, 0xc8, 0x74,
+0x0a, 0x80, 0x3c, 0x80, 0x75, 0xf4, 0xbe, 0xbd, 0x06, 0xeb, 0x2b, 0xbd, 0x05, 0x00, 0xbb, 0x00,
+0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13, 0x73, 0x0c, 0x33, 0xc0, 0xcd, 0x13, 0x4d, 0x75, 0xef, 0xbe,
+0x9e, 0x06, 0xeb, 0x12, 0x81, 0x3e, 0xfe, 0x7d, 0x55, 0xaa, 0x75, 0x07, 0x8b, 0xf7, 0xea, 0x00,
+0x7c, 0x00, 0x00, 0xbe, 0x85, 0x06, 0x2e, 0xac, 0x0a, 0xc0, 0x74, 0x06, 0xb4, 0x0e, 0xcd, 0x10,
+0xeb, 0xf4, 0xfb, 0xeb, 0xfe,
+'M', 'i', 's', 's', 'i', 'n', 'g', ' ',
+ 'o', 'p', 'e', 'r', 'a', 't', 'i', 'n', 'g', ' ', 's', 'y', 's', 't', 'e', 'm', 0,
+'E', 'r', 'r', 'o', 'r', ' ', 'l', 'o', 'a', 'd', 'i', 'n', 'g', ' ',
+ 'o', 'p', 'e', 'r', 'a', 't', 'i', 'n', 'g', ' ', 's', 'y', 's', 't', 'e', 'm', 0,
+'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ',
+ 'p', 'a', 'r', 't', 'i', 't', 'i', 'o', 'n', ' ', 't', 'a', 'b', 'l', 'e', 0,
+'A', 'u', 't', 'h', 'o', 'r', ' ', '-', ' ',
+ 'S', 'i', 'e', 'g', 'm', 'a', 'r', ' ', 'S', 'c', 'h', 'm', 'i', 'd', 't', 0,0,0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+struct part_type
+{
+ unsigned char type;
+ char *name;
+}part_types[] =
+{
+ {0x00, "unused"}
+ ,{0x01, "Primary DOS with 12 bit FAT"}
+ ,{0x02, "XENIX / filesystem"}
+ ,{0x03, "XENIX /usr filesystem"}
+ ,{0x04, "Primary DOS with 16 bit FAT"}
+ ,{0x05, "Extended DOS"}
+ ,{0x06, "Primary 'big' DOS (> 32MB)"}
+ ,{0x07, "OS/2 HPFS, QNX or Advanced UNIX"}
+ ,{0x08, "AIX filesystem"}
+ ,{0x09, "AIX boot partition or Coherent"}
+ ,{0x0A, "OS/2 Boot Manager or OPUS"}
+ ,{0x10, "OPUS"}
+ ,{0x40, "VENIX 286"}
+ ,{0x50, "DM"}
+ ,{0x51, "DM"}
+ ,{0x52, "CP/M or Microport SysV/AT"}
+ ,{0x56, "GB"}
+ ,{0x61, "Speed"}
+ ,{0x63, "ISC UNIX, other System V/386, GNU HURD or Mach"}
+ ,{0x64, "Novell Netware 2.xx"}
+ ,{0x65, "Novell Netware 3.xx"}
+ ,{0x75, "PCIX"}
+ ,{0x80, "Minix 1.1 ... 1.4a"}
+ ,{0x81, "Minix 1.4b ... 1.5.10"}
+ ,{0x82, "Linux"}
+ ,{0x93, "Amoeba filesystem"}
+ ,{0x94, "Amoeba bad block table"}
+ ,{0xA5, "386BSD"}
+ ,{0xB7, "BSDI BSD/386 filesystem"}
+ ,{0xB8, "BSDI BSD/386 swap"}
+ ,{0xDB, "Concurrent CPM or C.DOS or CTOS"}
+ ,{0xE1, "Speed"}
+ ,{0xE3, "Speed"}
+ ,{0xE4, "Speed"}
+ ,{0xF1, "Speed"}
+ ,{0xF2, "DOS 3.3+ Secondary"}
+ ,{0xF4, "Speed"}
+ ,{0xFF, "BBT (Bad Blocks Table)"}
+};
+
+
+main(argc, argv)
+char **argv;
+{
+int i;
+
+ name = *argv;
+ {register char *cp = name;
+ while (*cp) if (*cp++ == '/') name = cp;
+ }
+
+ for ( argv++ ; --argc ; argv++ ) { register char *token = *argv;
+ if (*token++ != '-' || !*token)
+ break;
+ else { register int flag;
+ for ( ; flag = *token++ ; ) {
+ switch (flag) {
+ case '0':
+ partition = 0;
+ break;
+ case '1':
+ partition = 1;
+ break;
+ case '2':
+ partition = 2;
+ break;
+ case '3':
+ partition = 3;
+ break;
+ case 'a':
+ a_flag = 1;
+ break;
+ case 'i':
+ i_flag = 1;
+ case 'u':
+ u_flag = 1;
+ break;
+ default:
+ goto usage;
+ }
+ }
+ }
+ }
+
+ if (argc > 0)
+ disk = argv[0];
+
+ if (open_disk(u_flag) < 0)
+ exit(1);
+
+ printf("******* Working on device %s *******\n",disk);
+ if(u_flag)
+ {
+ get_params_to_use();
+ }
+ else
+ {
+ print_params();
+ }
+
+ if (read_s0())
+ init_sector0(1);
+
+ printf("Warning: BIOS sector numbering starts with sector 1\n");
+ printf("Information from DOS bootblock is:\n");
+ if (partition == -1)
+ for (i = 0; i < NDOSPART; i++)
+ change_part(i);
+ else
+ change_part(partition);
+
+ if (u_flag || a_flag)
+ change_active(partition);
+
+ if (u_flag || a_flag) {
+ printf("\nWe haven't changed the partition table yet. ");
+ printf("This is your last chance.\n");
+ print_s0(-1);
+ if (ok("Should we write new partition table?"))
+ write_s0();
+ }
+
+ exit(0);
+
+usage:
+ printf("fdisk {-a|-i|-r} {disk}\n");
+}
+
+print_s0(which)
+{
+int i;
+
+ print_params();
+ printf("Information from DOS bootblock is:\n");
+ if (which == -1)
+ for (i = 0; i < NDOSPART; i++)
+ printf("%d: ", i), print_part(i);
+ else
+ print_part(which);
+}
+
+static struct dos_partition mtpart = { 0 };
+
+print_part(i)
+{
+struct dos_partition *partp = ((struct dos_partition *) &mboot.parts) + i;
+
+
+ if (!bcmp(partp, &mtpart, sizeof (struct dos_partition))) {
+ printf("<UNUSED>\n");
+ return;
+ }
+ printf("sysid %d,(%s)\n", partp->dp_typ, get_type(partp->dp_typ));
+ printf(" start %d, size %d (%d Meg), flag %x\n",
+ partp->dp_start,
+ partp->dp_size, partp->dp_size * 512 / (1024 * 1024),
+ partp->dp_flag);
+ printf("\tbeg: cyl %d/ sector %d/ head %d;\n\tend: cyl %d/ sector %d/ head %d\n"
+ ,DPCYL(partp->dp_scyl, partp->dp_ssect)
+ ,DPSECT(partp->dp_ssect)
+ ,partp->dp_shd
+ ,DPCYL(partp->dp_ecyl, partp->dp_esect)
+ ,DPSECT(partp->dp_esect)
+ ,partp->dp_ehd);
+}
+
+init_sector0(start)
+{
+struct dos_partition *partp = (struct dos_partition *) (&mboot.parts[3]);
+int size = disksecs - start;
+int rest;
+
+ memcpy(mboot.bootinst, bootcode, sizeof(bootcode));
+ mboot.signature = BOOT_MAGIC;
+
+ partp->dp_typ = DOSPTYP_386BSD;
+ partp->dp_flag = ACTIVE;
+ partp->dp_start = start;
+ partp->dp_size = size;
+
+ dos(partp->dp_start, &partp->dp_scyl, &partp->dp_ssect, &partp->dp_shd);
+ dos(partp->dp_start+partp->dp_size, &partp->dp_ecyl, &partp->dp_esect, &partp->dp_ehd);
+}
+
+change_part(i)
+{
+struct dos_partition *partp = ((struct dos_partition *) &mboot.parts) + i;
+
+ printf("The data for partition %d is:\n", i);
+ print_part(i);
+
+ if (u_flag && ok("Do you want to change it?")) {
+ int tmp;
+
+ if (i_flag) {
+ bzero((char *)partp, sizeof (struct dos_partition));
+ if (i == 3) {
+ init_sector0(1);
+ printf("\nThe static data for the DOS partition 3 has been reinitialized to:\n");
+ print_part(i);
+ }
+ }
+
+ do {
+ Decimal("sysid", partp->dp_typ, tmp);
+ Decimal("start", partp->dp_start, tmp);
+ Decimal("size", partp->dp_size, tmp);
+
+ if (ok("Explicitly specifiy beg/end address ?"))
+ {
+ int tsec,tcyl,thd;
+ tcyl = DPCYL(partp->dp_scyl,partp->dp_ssect);
+ thd = partp->dp_shd;
+ tsec = DPSECT(partp->dp_ssect);
+ Decimal("beginning cylinder", tcyl, tmp);
+ Decimal("beginning head", thd, tmp);
+ Decimal("beginning sector", tsec, tmp);
+ partp->dp_scyl = DOSCYL(tcyl);
+ partp->dp_ssect = DOSSECT(tsec,tcyl);
+ partp->dp_shd = thd;
+
+ tcyl = DPCYL(partp->dp_ecyl,partp->dp_esect);
+ thd = partp->dp_ehd;
+ tsec = DPSECT(partp->dp_esect);
+ Decimal("ending cylinder", tcyl, tmp);
+ Decimal("ending head", thd, tmp);
+ Decimal("ending sector", tsec, tmp);
+ partp->dp_ecyl = DOSCYL(tcyl);
+ partp->dp_esect = DOSSECT(tsec,tcyl);
+ partp->dp_ehd = thd;
+ } else {
+ dos(partp->dp_start,
+ &partp->dp_scyl, &partp->dp_ssect, &partp->dp_shd);
+ dos(partp->dp_start+partp->dp_size - 1,
+ &partp->dp_ecyl, &partp->dp_esect, &partp->dp_ehd);
+ }
+
+ print_part(i);
+ } while (!ok("Are we happy with this entry?"));
+ }
+}
+
+print_params()
+{
+ printf("parameters extracted from in-core disklabel are:\n");
+ printf("cylinders=%d heads=%d sectors/track=%d (%d blks/cyl)\n\n"
+ ,cyls,heads,sectors,cylsecs);
+ if((dos_sectors > 63) || (dos_cyls > 1023) || (dos_heads > 255))
+ printf(" Figures below won't work with BIOS for partitions not in cyl 1\n");
+ printf("parameters to be used for BIOS calculations are:\n");
+ printf("cylinders=%d heads=%d sectors/track=%d (%d blks/cyl)\n\n"
+ ,dos_cyls,dos_heads,dos_sectors,dos_cylsecs);
+}
+
+change_active(which)
+{
+int i;
+int active = 3, tmp;
+struct dos_partition *partp = ((struct dos_partition *) &mboot.parts);
+
+ if (a_flag && which != -1)
+ active = which;
+ if (!ok("Do you want to change the active partition?"))
+ return;
+ do
+ Decimal("active partition", active, tmp);
+ while (!ok("Are you happy with this choice"));
+ for (i = 0; i < NDOSPART; i++)
+ partp[i].dp_flag = 0;
+ if (active >= 0 && active < NDOSPART)
+ partp[active].dp_flag = ACTIVE;
+}
+
+get_params_to_use()
+{
+ int tmp;
+ print_params();
+ if (ok("Do you want to change our idea of what BIOS thinks ?"))
+ {
+ do
+ {
+ Decimal("BIOS's idea of #cylinders", dos_cyls, tmp);
+ Decimal("BIOS's idea of #heads", dos_heads, tmp);
+ Decimal("BIOS's idea of #sectors", dos_sectors, tmp);
+ dos_cylsecs = dos_heads * dos_sectors;
+ print_params();
+ }
+ while(!ok("Are you happy with this choice"));
+ }
+}
+
+/***********************************************\
+* Change real numbers into strange dos numbers *
+\***********************************************/
+static
+dos(sec, c, s, h)
+int sec;
+unsigned char *c, *s, *h;
+{
+int cy;
+int hd;
+
+ if (sec == 0) {
+ *s = *c = *h = 0;
+ return;
+ }
+
+ cy = sec / ( dos_cylsecs );
+ sec = sec - cy * ( dos_cylsecs );
+
+ hd = sec / dos_sectors;
+ sec = (sec - hd * dos_sectors) + 1;
+
+ *h = hd;
+ *c = cy & 0xff;
+ *s = (sec & 0x3f) | ( (cy & 0x300) >> 2);
+}
+
+int fd;
+
+ /* Getting device status */
+
+open_disk(u_flag)
+{
+struct stat st;
+
+ if (stat(disk, &st) == -1) {
+ fprintf(stderr, "%s: Can't get file status of %s\n",
+ name, disk);
+ return -1;
+ }
+ if ( !(st.st_mode & S_IFCHR) )
+ fprintf(stderr,"%s: Device %s is not character special\n",
+ name, disk);
+ if ((fd = open(disk, a_flag || u_flag ? O_RDWR : O_RDONLY)) == -1) {
+ fprintf(stderr,"%s: Can't open device %s\n", name, disk);
+ return -1;
+ }
+ if (get_params(0) == -1) {
+ fprintf(stderr, "%s: Can't get disk parameters on %s\n",
+ name, disk);
+ return -1;
+ }
+ return fd;
+}
+
+
+read_disk(sector, buf)
+{
+ lseek(fd,(sector * 512), 0);
+ return read(fd, buf, 512);
+}
+
+write_disk(sector, buf)
+{
+ lseek(fd,(sector * 512), 0);
+ return write(fd, buf, 512);
+}
+
+get_params(verbose)
+{
+
+ if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) {
+ fprintf(stderr,
+ "%s: Can't get disk parameters on %s; supplying dummy ones\n",
+ name, disk);
+ dos_cyls = cyls = 1;
+ dos_heads = heads = 1;
+ dos_sectors = sectors = 1;
+ dos_cylsecs = cylsecs = heads * sectors;
+ disksecs = cyls * heads * sectors;
+ return disksecs;
+ }
+
+ dos_cyls = cyls = disklabel.d_ncylinders;
+ dos_heads = heads = disklabel.d_ntracks;
+ dos_sectors = sectors = disklabel.d_nsectors;
+ dos_cylsecs = cylsecs = heads * sectors;
+ disksecs = cyls * heads * sectors;
+
+ return (disksecs);
+}
+
+
+read_s0()
+{
+ if (read_disk(0, (char *) mboot.bootinst) == -1) {
+ fprintf(stderr, "%s: Can't read fdisk partition table\n", name);
+ return -1;
+ }
+ if (mboot.signature != BOOT_MAGIC) {
+ fprintf(stderr, "%s: Invalid fdisk partition table found\n",
+ name);
+ /* So should we initialize things */
+ return -1;
+ }
+ return 0;
+}
+
+write_s0()
+{
+ int flag;
+ if (iotest) {
+ print_s0(-1);
+ return 0;
+ }
+ /*
+ * write enable label sector before write (if necessary),
+ * disable after writing.
+ * needed if the disklabel protected area also protects
+ * sector 0. (e.g. empty disk)
+ */
+ flag = 1;
+ if (ioctl(fd, DIOCWLABEL, &flag) < 0)
+ perror("ioctl DIOCWLABEL");
+ if (write_disk(0, (char *) mboot.bootinst) == -1) {
+ fprintf(stderr, "%s: Can't write fdisk partition table\n",
+ name);
+ return -1;
+ flag = 0;
+ (void) ioctl(fd, DIOCWLABEL, &flag);
+ }
+}
+
+
+
+ok(str)
+char *str;
+{
+ printf("%s [n] ", str);
+ fgets(lbuf, LBUF, stdin);
+ lbuf[strlen(lbuf)-1] = 0;
+
+ if (*lbuf &&
+ (!strcmp(lbuf, "yes") || !strcmp(lbuf, "YES") ||
+ !strcmp(lbuf, "y") || !strcmp(lbuf, "Y")))
+ return 1;
+ else
+ return 0;
+}
+
+decimal(str, num, deflt)
+char *str;
+int *num;
+{
+int acc = 0, c;
+char *cp;
+
+ while (1) {
+ printf("Supply a decimal value for \"%s\" [%d] ", str, deflt);
+ fgets(lbuf, LBUF, stdin);
+ lbuf[strlen(lbuf)-1] = 0;
+
+ if (!*lbuf)
+ return 0;
+
+ cp = lbuf;
+ while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
+ if (!c)
+ return 0;
+ while (c = *cp++) {
+ if (c <= '9' && c >= '0')
+ acc = acc * 10 + c - '0';
+ else
+ break;
+ }
+ if (c == ' ' || c == '\t')
+ while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
+ if (!c) {
+ *num = acc;
+ return 1;
+ } else
+ printf("%s is an invalid decimal number. Try again\n",
+ lbuf);
+ }
+
+}
+
+hex(str, num, deflt)
+char *str;
+int *num;
+{
+int acc = 0, c;
+char *cp;
+
+ while (1) {
+ printf("Supply a hex value for \"%s\" [%x] ", str, deflt);
+ fgets(lbuf, LBUF, stdin);
+ lbuf[strlen(lbuf)-1] = 0;
+
+ if (!*lbuf)
+ return 0;
+
+ cp = lbuf;
+ while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
+ if (!c)
+ return 0;
+ while (c = *cp++) {
+ if (c <= '9' && c >= '0')
+ acc = (acc << 4) + c - '0';
+ else if (c <= 'f' && c >= 'a')
+ acc = (acc << 4) + c - 'a' + 10;
+ else if (c <= 'F' && c >= 'A')
+ acc = (acc << 4) + c - 'A' + 10;
+ else
+ break;
+ }
+ if (c == ' ' || c == '\t')
+ while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
+ if (!c) {
+ *num = acc;
+ return 1;
+ } else
+ printf("%s is an invalid hex number. Try again\n",
+ lbuf);
+ }
+
+}
+
+string(str, ans)
+char *str;
+char **ans;
+{
+int c;
+char *cp = lbuf;
+
+ while (1) {
+ printf("Supply a string value for \"%s\" [%s] ", str, *ans);
+ fgets(lbuf, LBUF, stdin);
+ lbuf[strlen(lbuf)-1] = 0;
+
+ if (!*lbuf)
+ return 0;
+
+ while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
+ if (c == '"') {
+ c = *++cp;
+ *ans = cp;
+ while ((c = *cp) && c != '"') cp++;
+ } else {
+ *ans = cp;
+ while ((c = *cp) && c != ' ' && c != '\t') cp++;
+ }
+
+ if (c)
+ *cp = 0;
+ return 1;
+ }
+}
+
+char *get_type(type)
+int type;
+{
+ int numentries = (sizeof(part_types)/sizeof(struct part_type));
+ int counter = 0;
+ struct part_type *ptr = part_types;
+
+
+ while(counter < numentries)
+ {
+ if(ptr->type == type)
+ {
+ return(ptr->name);
+ }
+ ptr++;
+ counter++;
+ }
+ return("unknown");
+}
diff --git a/sbin/ft/Makefile b/sbin/ft/Makefile
index 6166c08a56b7..68d87044ab1c 100644
--- a/sbin/ft/Makefile
+++ b/sbin/ft/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.2 1994/02/07 08:40:16 rgrimes Exp $
+# Makefile,v 1.3 1994/06/22 04:49:02 jkh Exp
PROG= ft
MAN8= ft.8
diff --git a/sbin/modload/Makefile b/sbin/modload/Makefile
index 265869fbaa6a..6d2022a81c49 100644
--- a/sbin/modload/Makefile
+++ b/sbin/modload/Makefile
@@ -33,7 +33,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $Id: Makefile,v 1.4 1994/02/09 15:00:32 deraadt Exp $
+# Makefile,v 1.1 1994/08/19 12:07:09 davidg Exp
#
PROG= modload
diff --git a/sbin/modload/modload.8 b/sbin/modload/modload.8
index d2aaac6d9f87..2117cefeb696 100644
--- a/sbin/modload/modload.8
+++ b/sbin/modload/modload.8
@@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $Id: modload.8,v 1.4 1994/09/18 04:12:12 davidg Exp $
+.\" modload.8,v 1.5 1994/09/22 22:35:50 wollman Exp
.\"
.Dd September 22, 1994
.Dt MODLOAD 8
diff --git a/sbin/modload/modload.c b/sbin/modload/modload.c
index e873e0206c20..defef64d2808 100644
--- a/sbin/modload/modload.c
+++ b/sbin/modload/modload.c
@@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: modload.c,v 1.4 1994/09/22 22:35:53 wollman Exp $
+ * modload.c,v 1.5 1994/09/24 03:18:32 wollman Exp
*/
#include <stdio.h>
diff --git a/sbin/modunload/Makefile b/sbin/modunload/Makefile
index 3520c48d2f83..ca3939f2563c 100644
--- a/sbin/modunload/Makefile
+++ b/sbin/modunload/Makefile
@@ -33,7 +33,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $Id: Makefile,v 1.4 1994/02/09 15:00:35 deraadt Exp $
+# Makefile,v 1.1 1994/08/19 12:07:18 davidg Exp
#
PROG= modunload
diff --git a/sbin/modunload/modunload.8 b/sbin/modunload/modunload.8
index e98de02f401e..c442c52f6abb 100644
--- a/sbin/modunload/modunload.8
+++ b/sbin/modunload/modunload.8
@@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $Id: modunload.8,v 1.2 1994/08/19 13:29:23 davidg Exp $
+.\" modunload.8,v 1.3 1994/08/19 13:40:41 davidg Exp
.\"
.Dd June 7, 1993
.Dt MODUNLOAD 8
diff --git a/sbin/modunload/modunload.c b/sbin/modunload/modunload.c
index 88689ff19ba3..1fe4a41992b5 100644
--- a/sbin/modunload/modunload.c
+++ b/sbin/modunload/modunload.c
@@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: modunload.c,v 1.6 1994/05/23 05:42:58 cgd Exp $
+ * modunload.c,v 1.1 1994/08/19 12:07:21 davidg Exp
*/
#include <stdio.h>
diff --git a/sbin/mount_msdos/Makefile b/sbin/mount_msdos/Makefile
new file mode 100644
index 000000000000..a98fbb557d4a
--- /dev/null
+++ b/sbin/mount_msdos/Makefile
@@ -0,0 +1,16 @@
+#
+# Makefile,v 1.1 1994/09/19 15:30:33 dfr Exp
+#
+
+PROG= mount_msdos
+SRCS= mount_msdos.c getmntopts.c
+MAN8= mount_msdos.8
+
+BINOWN= root
+BINMODE= 4555
+
+MOUNT= ${.CURDIR}/../mount
+CFLAGS+= -I${MOUNT}
+.PATH: ${MOUNT}
+
+.include <bsd.prog.mk>
diff --git a/sbin/mount_msdos/mount_msdos.8 b/sbin/mount_msdos/mount_msdos.8
new file mode 100644
index 000000000000..666c4129c0c9
--- /dev/null
+++ b/sbin/mount_msdos/mount_msdos.8
@@ -0,0 +1,111 @@
+.\"
+.\" Copyright (c) 1993,1994 Christopher G. Demetriou
+.\" All rights reserved.
+.\"
+.\" 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 Christopher G. Demetriou.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+.\"
+.\" mount_msdos.8,v 1.2 1994/11/19 17:55:35 nate Exp
+.\"
+.Dd April 7, 1994
+.Dt MOUNT_MSDOS 8
+.Os FreeBSD 2.0
+.Sh NAME
+.Nm mount_msdos
+.Nd mount an MS-DOS file system
+.Sh SYNOPSIS
+.Nm mount_msdos
+.Op Fl u Ar uid
+.Op Fl g Ar gid
+.Op Fl m Ar mask
+.Pa special
+.Pa node
+.Sh DESCRIPTION
+The
+.Nm mount_msdos
+command attaches the MS-DOS filesystem residing on
+the device
+.Pa special
+to the global filesystem namespace at the location
+indicated by
+.Pa node .
+This command is normally executed by
+.Xr mount 8
+at boot time, but can be used by any user to mount an
+MS-DOS file system on any directory that they own (provided,
+of course, that they have appropriate access to the device that
+contains the file system).
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl u
+Set the owner of the files in the file system to
+.Ar uid .
+The default owner is the owner of the directory
+on which the file system is being mounted.
+.It Fl g
+Set the group of the files in the file system to
+.Ar gid .
+The default group is the group of the directory
+on which the file system is being mounted.
+.It Fl m
+Specify the maximum file permissions for files
+in the file system.
+(For example, a mask of
+.Li 755
+specifies that, by default, the owner should have
+read, write, and execute permissions for files, but
+others should only have read and execute permissions.
+See
+.Xr chmod 1
+for more information about octal file modes.)
+Only the nine low-order bits of
+.Ar mask
+are used.
+The default mask is taken from the
+directory on which the file system is being mounted.
+.El
+.Sh SEE ALSO
+.Xr mount 2 ,
+.Xr unmount 2 ,
+.Xr fstab 5
+.Sh CAVEATS
+The
+.Nm msdos
+filesystem is not known to work reliably with filesystems created by versions
+of MS-DOS later than version 3.3.
+.Pp
+The limitations on file names imposed by MS-DOS are strange, at best.
+For instance, they are
+limited to single-case, 8 character names with 3 character extensions.
+.Sh HISTORY
+The
+.Nm mount_msdos
+utility first appeared in FreeBSD 2.0.
+Its predecessor, the
+.Nm mount_pcfs
+utility appeared in FreeBSD 1, and was abandoned in favor
+of the more aptly-named
+.Nm mount_msdos .
diff --git a/sbin/mount_msdos/mount_msdos.c b/sbin/mount_msdos/mount_msdos.c
new file mode 100644
index 000000000000..c9d7eaabeb10
--- /dev/null
+++ b/sbin/mount_msdos/mount_msdos.c
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 1994 Christopher G. Demetriou
+ * All rights reserved.
+ *
+ * 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 Christopher G. Demetriou.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#ifndef lint
+static char rcsid[] = "mount_msdos.c,v 1.3 1994/11/01 23:51:42 wollman Exp";
+#endif /* not lint */
+
+#include <sys/cdefs.h>
+#include <sys/param.h>
+#define MSDOSFS
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <ctype.h>
+#include <err.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "mntopts.h"
+
+struct mntopt mopts[] = {
+ MOPT_STDOPTS,
+ { NULL }
+};
+
+gid_t a_gid __P((char *));
+uid_t a_uid __P((char *));
+mode_t a_mask __P((char *));
+void usage __P((void));
+
+int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ struct msdosfs_args args;
+ struct stat sb;
+ int c, mntflags, set_gid, set_uid, set_mask;
+ char *dev, *dir, ndir[MAXPATHLEN+1];
+ struct vfsconf *vfc;
+
+ mntflags = set_gid = set_uid = set_mask = 0;
+ (void)memset(&args, '\0', sizeof(args));
+
+ while ((c = getopt(argc, argv, "u:g:m:o:")) != EOF) {
+ switch (c) {
+ case 'u':
+ args.uid = a_uid(optarg);
+ set_uid = 1;
+ break;
+ case 'g':
+ args.gid = a_gid(optarg);
+ set_gid = 1;
+ break;
+ case 'm':
+ args.mask = a_mask(optarg);
+ set_mask = 1;
+ break;
+ case 'o':
+ getmntopts(optarg, mopts, &mntflags, 0);
+ break;
+ case '?':
+ default:
+ usage();
+ break;
+ }
+ }
+
+ if (optind + 2 != argc)
+ usage();
+
+ dev = argv[optind];
+ dir = argv[optind + 1];
+ if (dir[0] != '/') {
+ warnx("\"%s\" is a relative path.", dir);
+ if (getcwd(ndir, sizeof(ndir)) == NULL)
+ err(1, "getcwd");
+ strncat(ndir, "/", sizeof(ndir) - strlen(ndir) - 1);
+ strncat(ndir, dir, sizeof(ndir) - strlen(ndir) - 1);
+ dir = ndir;
+ warnx("using \"%s\" instead.", dir);
+ }
+
+ args.fspec = dev;
+ args.export.ex_root = -2; /* unchecked anyway on DOS fs */
+ if (mntflags & MNT_RDONLY)
+ args.export.ex_flags = MNT_EXRDONLY;
+ else
+ args.export.ex_flags = 0;
+ if (!set_gid || !set_uid || !set_mask) {
+ if (stat(dir, &sb) == -1)
+ err(1, "stat %s", dir);
+
+ if (!set_uid)
+ args.uid = sb.st_uid;
+ if (!set_gid)
+ args.gid = sb.st_gid;
+ if (!set_mask)
+ args.mask = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
+ }
+
+ vfc = getvfsbyname("msdos");
+ if(!vfc && vfsisloadable("msdos")) {
+ if(vfsload("msdos"))
+ err(1, "vfsload(msdos)");
+ endvfsent(); /* clear cache */
+ vfc = getvfsbyname("msdos");
+ }
+
+ if (mount(vfc ? vfc->vfc_index : MOUNT_MSDOS, dir, mntflags, &args) < 0)
+ err(1, "mount");
+
+ exit (0);
+}
+
+gid_t
+a_gid(s)
+ char *s;
+{
+ struct group *gr;
+ char *gname;
+ gid_t gid;
+
+ if ((gr = getgrnam(s)) != NULL)
+ gid = gr->gr_gid;
+ else {
+ for (gname = s; *s && isdigit(*s); ++s);
+ if (!*s)
+ gid = atoi(gname);
+ else
+ errx(1, "unknown group id: %s", gname);
+ }
+ return (gid);
+}
+
+uid_t
+a_uid(s)
+ char *s;
+{
+ struct passwd *pw;
+ char *uname;
+ uid_t uid;
+
+ if ((pw = getpwnam(s)) != NULL)
+ uid = pw->pw_uid;
+ else {
+ for (uname = s; *s && isdigit(*s); ++s);
+ if (!*s)
+ uid = atoi(uname);
+ else
+ errx(1, "unknown user id: %s", uname);
+ }
+ return (uid);
+}
+
+mode_t
+a_mask(s)
+ char *s;
+{
+ int done, rv;
+ char *ep;
+
+ done = 0;
+ if (*s >= '0' && *s <= '7') {
+ done = 1;
+ rv = strtol(optarg, &ep, 8);
+ }
+ if (!done || rv < 0 || *ep)
+ errx(1, "invalid file mode: %s", s);
+ return (rv);
+}
+
+void
+usage()
+{
+ fprintf(stderr, "usage: mount_msdos [-F flags] [-u user] [-g group] [-m mask] bdev dir\n");
+ exit(1);
+}
diff --git a/sbin/mount_portal/activate.c b/sbin/mount_portal/activate.c
index 33617988f7df..f5e1722efa9f 100644
--- a/sbin/mount_portal/activate.c
+++ b/sbin/mount_portal/activate.c
@@ -36,7 +36,7 @@
*
* @(#)activate.c 8.2 (Berkeley) 3/27/94
*
- * $Id: activate.c,v 1.2 1992/05/27 07:09:27 jsp Exp jsp $
+ * activate.c,v 1.1.1.1 1994/05/26 06:34:32 rgrimes Exp
*/
#include <stdio.h>
diff --git a/sbin/mount_portal/conf.c b/sbin/mount_portal/conf.c
index 18833b608093..d2a36b518d7d 100644
--- a/sbin/mount_portal/conf.c
+++ b/sbin/mount_portal/conf.c
@@ -36,7 +36,7 @@
*
* @(#)conf.c 8.2 (Berkeley) 3/27/94
*
- * $Id: conf.c,v 1.2 1992/05/27 07:09:27 jsp Exp jsp $
+ * conf.c,v 1.1.1.1 1994/05/26 06:34:30 rgrimes Exp
*/
#include <stdio.h>
diff --git a/sbin/mount_portal/pathnames.h b/sbin/mount_portal/pathnames.h
index 25321145d990..07d745fbde31 100644
--- a/sbin/mount_portal/pathnames.h
+++ b/sbin/mount_portal/pathnames.h
@@ -36,7 +36,7 @@
*
* @(#)pathnames.h 8.1 (Berkeley) 6/5/93
*
- * $Id: pathnames.h,v 1.2 1992/05/27 07:09:27 jsp Exp jsp $
+ * pathnames.h,v 1.1.1.1 1994/05/26 06:34:32 rgrimes Exp
*/
#include <paths.h>
diff --git a/sbin/mount_portal/portal.conf b/sbin/mount_portal/portal.conf
index 5b5a773eaa3c..8d5e82d18d01 100644
--- a/sbin/mount_portal/portal.conf
+++ b/sbin/mount_portal/portal.conf
@@ -1,5 +1,5 @@
# @(#)portal.conf 8.1 (Berkeley) 6/5/93
-# $Id: portal.conf,v 1.1 1992/05/27 06:50:13 jsp Exp jsp $
+# portal.conf,v 1.1.1.1 1994/05/26 06:34:33 rgrimes Exp
tcplisten/ tcplisten tcplisten/
tcp/ tcp tcp/
fs/ file fs/
diff --git a/sbin/mount_portal/portald.h b/sbin/mount_portal/portald.h
index fbe111b1a7ad..113d48678a03 100644
--- a/sbin/mount_portal/portald.h
+++ b/sbin/mount_portal/portald.h
@@ -36,7 +36,7 @@
*
* @(#)portald.h 8.1 (Berkeley) 6/5/93
*
- * $Id: portald.h,v 1.1 1992/05/25 21:43:09 jsp Exp jsp $
+ * portald.h,v 1.1.1.1 1994/05/26 06:34:33 rgrimes Exp
*/
#include <sys/cdefs.h>
diff --git a/sbin/mount_portal/pt_conf.c b/sbin/mount_portal/pt_conf.c
index d1eba94ea3fe..6745c828d4bf 100644
--- a/sbin/mount_portal/pt_conf.c
+++ b/sbin/mount_portal/pt_conf.c
@@ -36,7 +36,7 @@
*
* @(#)pt_conf.c 8.1 (Berkeley) 6/5/93
*
- * $Id: pt_conf.c,v 1.2 1992/05/27 07:09:27 jsp Exp jsp $
+ * pt_conf.c,v 1.1.1.1 1994/05/26 06:34:33 rgrimes Exp
*/
#include <sys/types.h>
diff --git a/sbin/mount_portal/pt_exec.c b/sbin/mount_portal/pt_exec.c
index 06e3382da85b..32f6fc33c4a9 100644
--- a/sbin/mount_portal/pt_exec.c
+++ b/sbin/mount_portal/pt_exec.c
@@ -36,7 +36,7 @@
*
* @(#)pt_exec.c 8.1 (Berkeley) 6/5/93
*
- * $Id: pt_exec.c,v 1.1 1992/05/25 21:43:09 jsp Exp jsp $
+ * pt_exec.c,v 1.1.1.1 1994/05/26 06:34:34 rgrimes Exp
*/
#include <stdio.h>
diff --git a/sbin/mount_portal/pt_file.c b/sbin/mount_portal/pt_file.c
index 929f2616d3cc..0e624fc243a2 100644
--- a/sbin/mount_portal/pt_file.c
+++ b/sbin/mount_portal/pt_file.c
@@ -36,7 +36,7 @@
*
* @(#)pt_file.c 8.2 (Berkeley) 3/27/94
*
- * $Id: pt_file.c,v 1.1.1.1 1994/05/26 06:34:34 rgrimes Exp $
+ * pt_file.c,v 1.2 1994/09/19 13:52:38 ache Exp
*/
#include <stdio.h>
diff --git a/sbin/mount_portal/pt_tcp.c b/sbin/mount_portal/pt_tcp.c
index 18a53ce26aba..acf59d6d743d 100644
--- a/sbin/mount_portal/pt_tcp.c
+++ b/sbin/mount_portal/pt_tcp.c
@@ -36,7 +36,7 @@
*
* @(#)pt_tcp.c 8.3 (Berkeley) 3/27/94
*
- * $Id: pt_tcp.c,v 1.1 1992/05/25 21:43:09 jsp Exp jsp $
+ * pt_tcp.c,v 1.1.1.1 1994/05/26 06:34:34 rgrimes Exp
*/
#include <stdio.h>
diff --git a/sbin/mountd/Makefile b/sbin/mountd/Makefile
index f32e11b895eb..05fdcc597a63 100644
--- a/sbin/mountd/Makefile
+++ b/sbin/mountd/Makefile
@@ -1,5 +1,5 @@
# From: @(#)Makefile 8.3 (Berkeley) 1/25/94
-# $Id$
+# Makefile,v 1.4 1994/09/22 22:16:48 wollman Exp
PROG= mountd
CFLAGS+=-DNFS -DMFS -DCD9660 -DMSDOSFS
diff --git a/sbin/mountd/mountd.8 b/sbin/mountd/mountd.8
index 77cb9c9e4a03..868089b769e0 100644
--- a/sbin/mountd/mountd.8
+++ b/sbin/mountd/mountd.8
@@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" From: @(#)mountd.8 8.1 (Berkeley) 6/9/93
-.\" $Id$
+.\" mountd.8,v 1.2 1994/09/22 22:16:49 wollman Exp
.\"
.Dd September 22, 1994
.Dt MOUNTD 8
diff --git a/sbin/mountd/mountd.c b/sbin/mountd/mountd.c
index 605e31fbcb6e..c86b802f998b 100644
--- a/sbin/mountd/mountd.c
+++ b/sbin/mountd/mountd.c
@@ -43,7 +43,7 @@ static char copyright[] =
#ifndef lint
/*static char sccsid[] = "From: @(#)mountd.c 8.8 (Berkeley) 2/20/94";*/
static const char rcsid[] =
- "$Id$";
+ "mountd.c,v 1.3 1994/09/22 22:16:50 wollman Exp";
#endif /*not lint*/
#include <sys/param.h>
diff --git a/sbin/nfsiod/nfsiod.8 b/sbin/nfsiod/nfsiod.8
index e2ccc67130d8..3dcbd004f22c 100644
--- a/sbin/nfsiod/nfsiod.8
+++ b/sbin/nfsiod/nfsiod.8
@@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" From: @(#)nfsiod.8 8.2 (Berkeley) 2/22/94
-.\" $Id$
+.\" nfsiod.8,v 1.2 1994/09/22 22:16:59 wollman Exp
.\"
.Dd September 22, 1994
.Dt NFSIOD 8
diff --git a/sbin/savecore/savecore.8 b/sbin/savecore/savecore.8
index 47e0a340b81a..74981a155956 100644
--- a/sbin/savecore/savecore.8
+++ b/sbin/savecore/savecore.8
@@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" From: @(#)savecore.8 8.1 (Berkeley) 6/5/93
-.\" $Id$
+.\" savecore.8,v 1.3 1994/09/24 00:08:21 wollman Exp
.\"
.Dd September 23, 1994
.Dt SAVECORE 8
diff --git a/sbin/slattach/Makefile b/sbin/slattach/Makefile
index bdc48a9f57dc..adcf85450973 100644
--- a/sbin/slattach/Makefile
+++ b/sbin/slattach/Makefile
@@ -1,6 +1,6 @@
# @(#)Makefile 5.4 (Berkeley) 5/11/90
#
-# $Header: /a/cvs/386BSD/src/sbin/slattach/Makefile,v 1.5 1993/08/29 18:11:14 rgrimes Exp $
+# /home/ncvs/src/sbin/slattach/Makefile,v 1.4 1994/08/23 08:28:30 rich Exp
PROG= slattach
MAN8= slattach.8
diff --git a/sbin/slattach/slattach.8 b/sbin/slattach/slattach.8
index f346824e3da8..7e3dd09e6502 100644
--- a/sbin/slattach/slattach.8
+++ b/sbin/slattach/slattach.8
@@ -31,7 +31,7 @@
.\"
.\" @(#)slattach.8 6.4 (Berkeley) 3/16/91
.\"
-.\" $Header: /a/cvs/386BSD/src/sbin/slattach/slattach.8,v 1.6 1993/09/15 21:18:07 jkh Exp $
+.\" /home/ncvs/src/sbin/slattach/slattach.8,v 1.3 1994/08/23 08:28:31 rich Exp
.\"
.Dd April 4, 1993
.Dt SLATTACH 8
diff --git a/sbin/sysinstall/dev2c.sh b/sbin/sysinstall/dev2c.sh
index d395810704b8..472e1754eef8 100644
--- a/sbin/sysinstall/dev2c.sh
+++ b/sbin/sysinstall/dev2c.sh
@@ -7,7 +7,7 @@
# this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
# ----------------------------------------------------------------------------
#
-# $Id: stage3.c,v 1.4 1994/10/21 02:14:52 phk Exp $
+# dev2c.sh,v 1.1 1994/10/26 02:53:08 phk Exp
#
# During installation, we suffer badly of we have to run MAKEDEV. MAKEDEV
# need sh, ln, chown, mknod, awk, rm, test and probably emacs too when
diff --git a/sbin/sysinstall/exec.c b/sbin/sysinstall/exec.c
index 5487604335cf..660e3c0a6693 100644
--- a/sbin/sysinstall/exec.c
+++ b/sbin/sysinstall/exec.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: exec.c,v 1.8 1994/11/18 11:30:02 phk Exp $
+ * exec.c,v 1.8.2.1 1994/11/21 03:11:59 phk Exp
*
*/
diff --git a/sbin/sysinstall/label.c b/sbin/sysinstall/label.c
index a7c982f485a2..2ff3242cb90c 100644
--- a/sbin/sysinstall/label.c
+++ b/sbin/sysinstall/label.c
@@ -1,5 +1,5 @@
/*
- * $Id: label.c,v 1.23.2.1 1994/11/21 03:12:01 phk Exp $
+ * label.c,v 1.23.2.2 1994/11/21 03:53:45 phk Exp
*/
#include <stdlib.h>
diff --git a/sbin/sysinstall/main.c b/sbin/sysinstall/main.c
index abbf32fa6f4b..63970b7c88f7 100644
--- a/sbin/sysinstall/main.c
+++ b/sbin/sysinstall/main.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: main.c,v 1.17 1994/11/17 23:36:46 ache Exp $
+ * main.c,v 1.17.2.1 1994/11/21 03:12:06 phk Exp
*
*/
diff --git a/sbin/sysinstall/stage2.c b/sbin/sysinstall/stage2.c
index e0e2b67fd0a8..0eac2acfc598 100644
--- a/sbin/sysinstall/stage2.c
+++ b/sbin/sysinstall/stage2.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: stage2.c,v 1.16 1994/11/18 11:30:04 phk Exp $
+ * stage2.c,v 1.16.2.1 1994/11/21 03:12:16 phk Exp
*
*/
diff --git a/sbin/sysinstall/stage3.c b/sbin/sysinstall/stage3.c
index e764510c6170..dcb5f991e41f 100644
--- a/sbin/sysinstall/stage3.c
+++ b/sbin/sysinstall/stage3.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: stage3.c,v 1.9 1994/11/17 14:12:36 jkh Exp $
+ * stage3.c,v 1.9.2.1 1994/11/21 03:12:18 phk Exp
*
*/
diff --git a/sbin/sysinstall/stage4.c b/sbin/sysinstall/stage4.c
index 81222d0e3fd5..64ad6bcfc7b9 100644
--- a/sbin/sysinstall/stage4.c
+++ b/sbin/sysinstall/stage4.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: stage4.c,v 1.9 1994/11/17 23:36:48 ache Exp $
+ * stage4.c,v 1.10 1994/11/18 10:12:56 jkh Exp
*
*/
diff --git a/sbin/sysinstall/stage5.c b/sbin/sysinstall/stage5.c
index 8fff2c9b31a9..102085d6401a 100644
--- a/sbin/sysinstall/stage5.c
+++ b/sbin/sysinstall/stage5.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: stage5.c,v 1.16 1994/11/17 19:44:54 ache Exp $
+ * stage5.c,v 1.16.2.1 1994/11/21 03:12:20 phk Exp
*
*/
diff --git a/sbin/sysinstall/utils.c b/sbin/sysinstall/utils.c
index e4d428788d2c..1dabc10ca6ae 100644
--- a/sbin/sysinstall/utils.c
+++ b/sbin/sysinstall/utils.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: utils.c,v 1.30 1994/11/17 23:36:49 ache Exp $
+ * utils.c,v 1.30.2.1 1994/11/21 03:12:24 phk Exp
*
*/