.include <bsd.own.mk>
-SUBDIR= add_route arp ash at autil awk \
+SUBDIR= add_route arp ash at awk \
backup badblocks banner basename \
btrace cal calendar \
cat cawf cd cdprobe checkhier \
+++ /dev/null
-# Makefile for commands/autil
-
-PROGS= anm asize
-SRCS.anm= anm.c rd.c rd_arhdr.c rd_bytes.c rd_unsig2.c
-SRCS.asize= asize.c
-CPPFLAGS+= -I${.CURDIR}
-MAN.anm=
-MAN.asize=
-
-.include <bsd.prog.mk>
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/*
-** print symbol tables for
-** ACK object files
-**
-** anm [-gopruns] [name ...]
-*/
-
-#include "out.h"
-#include "arch.h"
-#include "ranlib.h"
-
-#include <stdio.h>
-#include <ctype.h>
-
-int numsort_flg;
-int sectsort_flg;
-int undef_flg;
-int revsort_flg = 1;
-int globl_flg;
-int nosort_flg;
-int arch_flg;
-int prep_flg;
-int read_error;
-struct outhead hbuf;
-struct outsect sbuf;
-long off;
-char *malloc();
-char *realloc();
-long s_base[S_MAX]; /* for specially encoded bases */
-char *filename;
-int narg;
-
-main(argc, argv)
-char **argv;
-{
-
- if (--argc>0 && argv[1][0]=='-' && argv[1][1]!=0) {
- argv++;
- while (*++*argv) switch (**argv) {
- case 'n': /* sort numerically */
- numsort_flg++;
- continue;
-
- case 's': /* sort in section order */
- sectsort_flg++;
- continue;
-
- case 'g': /* globl symbols only */
- globl_flg++;
- continue;
-
- case 'u': /* undefined symbols only */
- undef_flg++;
- continue;
-
- case 'r': /* sort in reverse order */
- revsort_flg = -1;
- continue;
-
- case 'p': /* don't sort -- symbol table order */
- nosort_flg++;
- continue;
-
- case 'o': /* prepend a name to each line */
- prep_flg++;
- continue;
-
- default: /* oops */
- fprintf(stderr, "anm: invalid argument -%c\n", *argv[0]);
- exit(1);
- }
- argc--;
- }
- if (argc == 0) {
- argc = 1;
- argv[1] = "a.out";
- }
- narg = argc;
-
- while(argc--) {
- int fd;
-
- filename = *++argv;
- if ((fd = open(filename, 0)) < 0) {
- fprintf(stderr, "anm: cannot open %s\n", filename);
- continue;
- }
- process(fd);
- close(fd);
- }
- exit(0);
-}
-
-extern int rd_unsigned2();
-extern long lseek();
-extern char *strncpy();
-
-void do_file(int fd);
-
-process(fd)
- int fd;
-{
- unsigned int magic;
- long nextpos;
- struct ar_hdr archive_header;
- static char buf[sizeof(archive_header.ar_name)+1];
-
- if (narg > 1) printf("\n%s:\n", filename);
-
- magic = rd_unsigned2(fd);
- switch(magic) {
- case O_MAGIC:
- lseek(fd, 0L, 0);
- do_file(fd);
- break;
- case ARMAG:
- case AALMAG:
- while (rd_arhdr(fd, &archive_header)) {
- nextpos = lseek(fd, 0L, 1) + archive_header.ar_size;
- if (nextpos & 1) nextpos++;
- strncpy(buf,archive_header.ar_name,sizeof(archive_header.ar_name));
- filename = buf;
- if ( strcmp(filename, SYMDEF)) {
- printf("\n%s:\n", filename);
- do_file(fd);
- }
- lseek(fd, nextpos, 0);
- }
- break;
- default:
- fprintf(stderr, "anm: %s -- bad format\n", filename);
- break;
- }
-}
-
-void do_file(fd)
- int fd;
-{
- struct outname *nbufp = NULL;
- struct outname nbuf;
- char *cbufp;
- long fi_to_co;
- long n;
- unsigned readcount;
- int i,j;
- int compare();
-
- read_error = 0;
- rd_fdopen(fd);
-
- rd_ohead(&hbuf);
- if (read_error) {
- return;
- }
- if (BADMAGIC(hbuf)) {
- return;
- }
-
- n = hbuf.oh_nname;
- if (n == 0) {
- fprintf(stderr, "anm: %s -- no name list\n", filename);
- return;
- }
-
- if (hbuf.oh_nchar == 0) {
- fprintf(stderr, "anm: %s -- no names\n", filename);
- return;
- }
- if ((readcount = hbuf.oh_nchar) != hbuf.oh_nchar) {
- fprintf(stderr, "anm: string area too big in %s\n", filename);
- exit(2);
- }
-
- /* store special section bases ??? */
- if (hbuf.oh_flags & HF_8086) {
- rd_sect(&sbuf, hbuf.oh_nsect);
- if (read_error) {
- return;
- }
- for (i=0; i<hbuf.oh_nsect; i++) {
- s_base[i+S_MIN] =
- (sbuf.os_base>>12) & 03777760;
- }
- }
-
- if ((cbufp = (char *)malloc(readcount)) == NULL) {
- fprintf(stderr, "anm: out of memory on %s\n", filename);
- exit(2);
- }
- rd_string(cbufp, hbuf.oh_nchar);
- if (read_error) {
- free(cbufp);
- return;
- }
-
- fi_to_co = (long) (cbufp - OFF_CHAR(hbuf));
- i = 0;
- while (--n >= 0) {
- rd_name(&nbuf, 1);
- if (read_error) {
- break;
- }
-
- if (globl_flg && (nbuf.on_type&S_EXT)==0)
- continue;
-
- if (undef_flg
- &&
- ((nbuf.on_type&S_TYP)!=S_UND || (nbuf.on_type&S_ETC)!=0))
- continue;
-
- if (nbuf.on_foff == 0) nbuf.on_mptr = 0;
- else nbuf.on_mptr = (char *) (nbuf.on_foff + fi_to_co);
-
- /* adjust value for specially encoded bases */
- if (hbuf.oh_flags & HF_8086) {
- if (((nbuf.on_type&S_ETC) == 0) ||
- ((nbuf.on_type&S_ETC) == S_SCT)) {
- j = nbuf.on_type&S_TYP;
- if ((j>=S_MIN) && (j<=S_MAX))
- nbuf.on_valu += s_base[j];
- }
- }
-
- if (nbufp == NULL)
- nbufp = (struct outname *)malloc(sizeof(struct outname));
- else
- nbufp = (struct outname *)realloc(nbufp, (i+1)*sizeof(struct outname));
- if (nbufp == NULL) {
- fprintf(stderr, "anm: out of memory on %s\n", filename);
- exit(2);
- }
- nbufp[i++] = nbuf;
- }
-
- if (nbufp && nosort_flg==0)
- qsort(nbufp, i, sizeof(struct outname), compare);
-
- for (n=0; n<i; n++) {
- char cs1[4];
- char cs2[4];
-
- if (prep_flg)
- printf("%s:", filename);
-
- switch(nbufp[n].on_type&S_ETC) {
- case S_SCT:
- sprintf(cs1, "%2d", (nbufp[n].on_type&S_TYP) - S_MIN);
- sprintf(cs2, " S");
- break;
- case S_FIL:
- sprintf(cs1, " -");
- sprintf(cs2, " F");
- break;
- case S_MOD:
- sprintf(cs1, " -");
- sprintf(cs2, " M");
- break;
- case S_COM:
- sprintf(cs1, " C");
- if (nbufp[n].on_type&S_EXT)
- sprintf(cs2, " E");
- else
- sprintf(cs2, " -");
- break;
- case 0:
- if (nbufp[n].on_type&S_EXT)
- sprintf(cs2, " E");
- else
- sprintf(cs2, " -");
-
- switch(nbufp[n].on_type&S_TYP) {
- case S_UND:
- sprintf(cs1, " U");
- break;
- case S_ABS:
- sprintf(cs1, " A");
- break;
- default:
- sprintf(cs1, "%2d", (nbufp[n].on_type&S_TYP) - S_MIN);
- }
- break;
- default:
- sprintf(cs1, "??");
- sprintf(cs2, " ?");
- }
-
- printf("%8lx %s %s %s\n",nbufp[n].on_valu,cs1,cs2,nbufp[n].on_mptr ? nbufp[n].on_mptr : "(NULL)");
- }
-
- if (nbufp)
- free((char *)nbufp);
- if (cbufp)
- free((char *)cbufp);
-}
-
-compare(p1, p2)
-struct outname *p1, *p2;
-{
- int i;
-
- if (sectsort_flg) {
- if ((p1->on_type&S_TYP) > (p2->on_type&S_TYP))
- return(revsort_flg);
- if ((p1->on_type&S_TYP) < (p2->on_type&S_TYP))
- return(-revsort_flg);
- }
-
- if (numsort_flg) {
- if (p1->on_valu > p2->on_valu)
- return(revsort_flg);
- if (p1->on_valu < p2->on_valu)
- return(-revsort_flg);
- }
-
- if (! p1->on_mptr) {
- if (! p2->on_mptr) return 0;
- return -revsort_flg;
- }
- if (! p2->on_mptr) return revsort_flg;
-
- i = strcmp(p1->on_mptr, p2->on_mptr);
-
- if (i > 0)
- return(revsort_flg);
- if (i < 0)
- return(-revsort_flg);
-
- return(0);
-}
-
-rd_fatal()
-{
- fprintf(stderr,"read error on %s\n", filename);
- read_error = 1;
-}
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
-#ifndef __ARCH_H_INCLUDED
-#define __ARCH_H_INCLUDED
-
-#define ARMAG 0177545
-#define AALMAG 0177454
-
-struct ar_hdr {
- char ar_name[14];
- long ar_date;
- char ar_uid;
- char ar_gid;
- short ar_mode;
- long ar_size;
-};
-
-#define AR_TOTAL 26
-#define AR_SIZE 22
-
-#endif /* __ARCH_H_INCLUDED */
+++ /dev/null
-/* @(#)asize.c 1.4 */
-#define ushort unsigned short
-
-#include <stdio.h>
-#include "out.h"
-
-/*
- asize -- determine object size
-
-*/
-
-main(argc, argv)
-char **argv;
-{
- struct outhead buf;
- struct outsect sbuf;
- ushort nrsect;
- long sum;
- int gorp;
- FILE *f;
-
- if (--argc == 0) {
- argc = 1;
- argv[1] = "a.out";
- }
- gorp = argc;
-
- while(argc--) {
- if ((f = fopen(*++argv, "r"))==NULL) {
- fprintf(stderr, "asize: cannot open %s\n", *argv);
- continue;
- }
- getofmt ((char *)&buf, SF_HEAD , f);
- if(BADMAGIC(buf)) {
- fprintf(stderr, "asize: %s-- bad format\n", *argv);
- fclose(f);
- continue;
- }
- nrsect = buf.oh_nsect;
- if (nrsect == 0) {
- fprintf(stderr, "asize: %s-- no sections\n", *argv);
- fclose(f);
- continue;
- }
- if (gorp > 1)
- printf("%s: ", *argv);
-
- sum = 0;
- while (nrsect-- > 0) {
- getofmt ((char *)&sbuf, SF_SECT , f);
- printf("%ld", sbuf.os_size);
- sum += sbuf.os_size;
- if (nrsect > 0)
- putchar('+');
- }
- printf(" = %ld = 0x%lx\n", sum, sum);
- fclose(f);
- }
-}
-
-getofmt(p, s, f)
-register char *p;
-register char *s;
-register FILE *f;
-{
- register i;
- register long l;
-
- for (;;) {
- switch (*s++) {
-/* case '0': p++; continue; */
- case '1':
- *p++ = getc(f);
- continue;
- case '2':
- i = getc(f);
- i |= (getc(f) << 8);
- *((short *)p) = i; p += sizeof(short);
- continue;
- case '4':
- l = (long)getc(f);
- l |= ((long)getc(f) << 8);
- l |= ((long)getc(f) << 16);
- l |= ((long)getc(f) << 24);
- *((long *)p) = l; p += sizeof(long);
- continue;
- default:
- case '\0':
- break;
- }
- break;
- }
-}
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#include <local.h>
-#include <stdio.h>
-#include <out.h>
-#include <ranlib.h>
-#include <arch.h>
-#include "object.h"
-
-#if ! defined(CHAR_UNSIGNED)
-#define CHAR_UNSIGNED 0
-#endif
-
-#if CHAR_UNSIGNED
-#define Xchar(ch) (ch)
-#else
-#define Xchar(ch) ((ch) & 0377)
-#endif
-
-#if ! defined(BYTE_ORDER)
-#define BYTE_ORDER 0x3210
-#endif
-
-#if (BYTE_ORDER == 0x3210 || BYTE_ORDER == 0x1032)
-#define uget2(c) (Xchar((c)[0]) | ((unsigned) Xchar((c)[1]) << 8))
-#define Xput2(i, c) (((c)[0] = (i)), ((c)[1] = (i) >> 8))
-#define put2(i, c) { register int j = (i); Xput2(j, c); }
-#else
-#define uget2(c) (* ((unsigned short *) (c)))
-#define Xput2(i, c) (* ((short *) (c)) = (i))
-#define put2(i, c) Xput2(i, c)
-#endif
-
-#define get2(c) ((short) uget2(c))
-
-#if BYTE_ORDER != 0x0123
-#define get4(c) (uget2(c) | ((long) uget2((c)+2) << 16))
-#define put4(l, c) { register long x=(l); \
- Xput2((int)x,c); \
- Xput2((int)(x>>16),(c)+2); \
- }
-#else
-#define get4(c) (* ((long *) (c)))
-#define put4(l, c) (* ((long *) (c)) = (l))
-#endif
-
-#define SECTCNT 3 /* number of sections with own output buffer */
-#if BIGMACHINE
-#define WBUFSIZ (8*BUFSIZ)
-#else
-#define WBUFSIZ BUFSIZ
-#endif
-
-struct fil {
- int cnt;
- char *pnow;
- char *pbegin;
- long currpos;
- int fd;
- char pbuf[WBUFSIZ];
-};
-
-extern struct fil __parts[];
-
-#define PARTEMIT 0
-#define PARTRELO (PARTEMIT+SECTCNT)
-#define PARTNAME (PARTRELO+1)
-#define PARTCHAR (PARTNAME+1)
-#ifdef SYMDBUG
-#define PARTDBUG (PARTCHAR+1)
-#else
-#define PARTDBUG (PARTCHAR+0)
-#endif
-#define NPARTS (PARTDBUG + 1)
-
-#define getsect(s) (PARTEMIT+((s)>=(SECTCNT-1)?(SECTCNT-1):(s)))
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
-#include <minix/ansi.h>
-
-#ifndef __OBJECT_INCLUDED__
-#define __OBJECT_INCLUDED__
-
-_PROTOTYPE(int wr_open, (char *f));
-_PROTOTYPE(void wr_close, (void));
-_PROTOTYPE(void wr_ohead, (struct outhead *h));
-_PROTOTYPE(void wr_sect, (struct outsect *s, unsigned int c));
-_PROTOTYPE(void wr_outsect, (int sectno));
-_PROTOTYPE(void wr_emit, (char *b, long c));
-_PROTOTYPE(void wr_putc, (int c));
-_PROTOTYPE(void wr_relo, (struct outrelo *r, unsigned int c));
-_PROTOTYPE(void wr_name, (struct outname *n, unsigned int c));
-_PROTOTYPE(void wr_string, (char *s, long c));
-_PROTOTYPE(void wr_arhdr, (int fd, struct ar_hdr *a));
-_PROTOTYPE(void wr_ranlib, (int fd, struct ranlib *r, long cnt));
-_PROTOTYPE(void wr_int2, (int fd, int i));
-_PROTOTYPE(void wr_long, (int fd, long l));
-_PROTOTYPE(void wr_bytes, (int fd, char *buf, long l));
-_PROTOTYPE(int rd_open, (char *f));
-_PROTOTYPE(int rd_fdopen, (int f));
-_PROTOTYPE(void rd_close, (void));
-_PROTOTYPE(void rd_ohead, (struct outhead *h));
-_PROTOTYPE(void rd_sect, (struct outsect *s, unsigned int c));
-_PROTOTYPE(void rd_outsect, (int sectno));
-_PROTOTYPE(void rd_emit, (char *b, long c));
-_PROTOTYPE(void rd_relo, (struct outrelo *r, unsigned int c));
-_PROTOTYPE(void rd_rew_relo, (struct outhead *head));
-_PROTOTYPE(void rd_name, (struct outname *n, unsigned int c));
-_PROTOTYPE(void rd_string, (char *s, long c));
-_PROTOTYPE(int rd_arhdr, (int fd, struct ar_hdr *a));
-_PROTOTYPE(void rd_ranlib, (int fd, struct ranlib *r, long cnt));
-_PROTOTYPE(int rd_int2, (int fd));
-_PROTOTYPE(long rd_long, (int fd));
-_PROTOTYPE(void rd_bytes, (int fd, char *buf, long l));
-_PROTOTYPE(int rd_fd, (void));
-
-#endif /* __OBJECT_INCLUDED__ */
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-
-#ifndef __OUT_H_INCLUDED
-#define __OUT_H_INCLUDED
-/*
- * output format for ACK assemblers
- */
-#ifndef ushort
-#define ushort unsigned short
-#endif /* ushort */
-
-struct outhead {
- ushort oh_magic; /* magic number */
- ushort oh_stamp; /* version stamp */
- ushort oh_flags; /* several format flags */
- ushort oh_nsect; /* number of outsect structures */
- ushort oh_nrelo; /* number of outrelo structures */
- ushort oh_nname; /* number of outname structures */
- long oh_nemit; /* sum of all os_flen */
- long oh_nchar; /* size of string area */
-};
-
-#define O_MAGIC 0x0201 /* magic number of output file */
-#define O_STAMP 0 /* version stamp */
-#define MAXSECT 64 /* Maximum number of sections */
-
-#define HF_LINK 0x0004 /* unresolved references left */
-#define HF_8086 0x0008 /* os_base specially encoded */
-
-struct outsect {
- long os_base; /* startaddress in machine */
- long os_size; /* section size in machine */
- long os_foff; /* startaddress in file */
- long os_flen; /* section size in file */
- long os_lign; /* section alignment */
-};
-
-struct outrelo {
- char or_type; /* type of reference */
- char or_sect; /* referencing section */
- ushort or_nami; /* referenced symbol index */
- long or_addr; /* referencing address */
-};
-
-struct outname {
- union {
- char *on_ptr; /* symbol name (in core) */
- long on_off; /* symbol name (in file) */
- } on_u;
-#define on_mptr on_u.on_ptr
-#define on_foff on_u.on_off
- ushort on_type; /* symbol type */
- ushort on_desc; /* debug info */
- long on_valu; /* symbol value */
-};
-
-/*
- * relocation type bits
- */
-#define RELSZ 0x07 /* relocation length */
-#define RELO1 1 /* 1 byte */
-#define RELO2 2 /* 2 bytes */
-#define RELO4 4 /* 4 bytes */
-#define RELPC 0x08 /* pc relative */
-#define RELBR 0x10 /* High order byte lowest address. */
-#define RELWR 0x20 /* High order word lowest address. */
-
-/*
- * section type bits and fields
- */
-#define S_TYP 0x007F /* undefined, absolute or relative */
-#define S_EXT 0x0080 /* external flag */
-#define S_ETC 0x7F00 /* for symbolic debug, bypassing 'as' */
-
-/*
- * S_TYP field values
- */
-#define S_UND 0x0000 /* undefined item */
-#define S_ABS 0x0001 /* absolute item */
-#define S_MIN 0x0002 /* first user section */
-#define S_MAX (S_TYP-1) /* last user section */
-#define S_CRS S_TYP /* on_valu is symbol index which contains value */
-
-/*
- * S_ETC field values
- */
-#define S_SCT 0x0100 /* section names */
-#define S_LIN 0x0200 /* hll source line item */
-#define S_FIL 0x0300 /* hll source file item */
-#define S_MOD 0x0400 /* ass source file item */
-#define S_COM 0x1000 /* Common name. */
-#define S_STB 0xe000 /* entries with any of these bits set are
- reserved for debuggers
- */
-
-/*
- * structure format strings
- */
-#define SF_HEAD "22222244"
-#define SF_SECT "44444"
-#define SF_RELO "1124"
-#define SF_NAME "4224"
-
-/*
- * structure sizes (bytes in file; add digits in SF_*)
- */
-#define SZ_HEAD 20
-#define SZ_SECT 20
-#define SZ_RELO 8
-#define SZ_NAME 12
-
-/*
- * file access macros
- */
-#define BADMAGIC(x) ((x).oh_magic!=O_MAGIC)
-#define OFF_SECT(x) SZ_HEAD
-#define OFF_EMIT(x) (OFF_SECT(x) + ((long)(x).oh_nsect * SZ_SECT))
-#define OFF_RELO(x) (OFF_EMIT(x) + (x).oh_nemit)
-#define OFF_NAME(x) (OFF_RELO(x) + ((long)(x).oh_nrelo * SZ_RELO))
-#define OFF_CHAR(x) (OFF_NAME(x) + ((long)(x).oh_nname * SZ_NAME))
-
-#endif /* __OUT_H_INCLUDED */
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
-#ifndef __RANLIB_H_INCLUDED
-#define __RANLIB_H_INCLUDED
-
-#ifndef SYMDEF
-# define SYMDEF "__.SYMDEF"
-#endif /* SYMDEF */
-
-/*
- * Structure of the SYMDEF table of contents for an archive.
- * SYMDEF begins with a long giving the number of ranlib
- * structures that immediately follow, and then continues with a string
- * table consisting of a long giving the number of bytes of
- * strings that follow and then the strings themselves.
- */
-struct ranlib {
- union {
- char *ran__ptr; /* symbol name (in core) */
- long ran__off; /* symbol name (in file) */
- } ran_u;
-#define ran_ptr ran_u.ran__ptr
-#define ran_off ran_u.ran__off
- long ran_pos; /* library member is at this position */
-};
-
-#define SZ_RAN 8
-#define SF_RAN "44"
-
-#endif /* __RANLIB_H_INCLUDED */
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#include "obj.h"
-
-extern long lseek();
-
-/*
- * Parts of the output file.
- */
-#undef PARTEMIT
-#undef PARTRELO
-#undef PARTNAME
-#undef PARTCHAR
-#undef PARTDBUG
-#undef NPARTS
-
-#define PARTEMIT 0
-#define PARTRELO 1
-#define PARTNAME 2
-#define PARTCHAR 3
-#ifdef SYMDBUG
-#define PARTDBUG 4
-#else
-#define PARTDBUG 3
-#endif
-#define NPARTS (PARTDBUG + 1)
-
-static long offset[MAXSECT];
-
-static int outfile;
-static long outseek[NPARTS];
-static long currpos;
-static long rd_base;
-#define OUTSECT(i) \
- (outseek[PARTEMIT] = offset[i])
-#define BEGINSEEK(p, o) \
- (outseek[(p)] = (o))
-
-static int sectionnr;
-
-static void
-OUTREAD(p, b, n)
- char *b;
- long n;
-{
- register long l = outseek[p];
-
- if (currpos != l) {
- lseek(outfile, l, 0);
- }
- rd_bytes(outfile, b, n);
- l += n;
- currpos = l;
- outseek[p] = l;
-}
-
-/*
- * Open the output file according to the chosen strategy.
- */
-int
-rd_open(f)
- char *f;
-{
-
- if ((outfile = open(f, 0)) < 0)
- return 0;
- return rd_fdopen(outfile);
-}
-
-static int offcnt;
-
-int
-rd_fdopen(fd)
-{
- register int i;
-
- for (i = 0; i < NPARTS; i++) outseek[i] = 0;
- offcnt = 0;
- rd_base = lseek(fd, 0L, 1);
- if (rd_base < 0) {
- return 0;
- }
- currpos = rd_base;
- outseek[PARTEMIT] = currpos;
- outfile = fd;
- sectionnr = 0;
- return 1;
-}
-
-void
-rd_close()
-{
-
- close(outfile);
- outfile = -1;
-}
-
-int
-rd_fd()
-{
- return outfile;
-}
-
-void
-rd_ohead(head)
- register struct outhead *head;
-{
- register long off;
-
- OUTREAD(PARTEMIT, (char *) head, (long) SZ_HEAD);
-#if BYTE_ORDER == 0x0123
- if (sizeof(struct outhead) != SZ_HEAD)
-#endif
- {
- register char *c = (char *) head + (SZ_HEAD-4);
-
- head->oh_nchar = get4(c);
- c -= 4; head->oh_nemit = get4(c);
- c -= 2; head->oh_nname = uget2(c);
- c -= 2; head->oh_nrelo = uget2(c);
- c -= 2; head->oh_nsect = uget2(c);
- c -= 2; head->oh_flags = uget2(c);
- c -= 2; head->oh_stamp = uget2(c);
- c -= 2; head->oh_magic = uget2(c);
- }
- off = OFF_RELO(*head) + rd_base;
- BEGINSEEK(PARTRELO, off);
- off += (long) head->oh_nrelo * SZ_RELO;
- BEGINSEEK(PARTNAME, off);
- off += (long) head->oh_nname * SZ_NAME;
- BEGINSEEK(PARTCHAR, off);
-#ifdef SYMDBUG
- off += head->oh_nchar;
- BEGINSEEK(PARTDBUG, off);
-#endif
-}
-
-void
-rd_rew_relos(head)
- register struct outhead *head;
-{
- register long off = OFF_RELO(*head) + rd_base;
-
- BEGINSEEK(PARTRELO, off);
-}
-
-void
-rd_sect(sect, cnt)
- register struct outsect *sect;
- register unsigned int cnt;
-{
- register char *c = (char *) sect + cnt * SZ_SECT;
-
- OUTREAD(PARTEMIT, (char *) sect, (long)cnt * SZ_SECT);
- sect += cnt;
- offcnt += cnt;
- while (cnt--) {
- sect--;
-#if BYTE_ORDER == 0x0123
- if (sizeof(struct outsect) != SZ_SECT)
-#endif
- {
- c -= 4; sect->os_lign = get4(c);
- c -= 4; sect->os_flen = get4(c);
- c -= 4; sect->os_foff = get4(c);
- c -= 4; sect->os_size = get4(c);
- c -= 4; sect->os_base = get4(c);
- }
- offset[--offcnt] = sect->os_foff + rd_base;
- }
-}
-
-void
-rd_outsect(s)
-{
- OUTSECT(s);
- sectionnr = s;
-}
-
-/*
- * We don't have to worry about byte order here.
- */
-void
-rd_emit(emit, cnt)
- char *emit;
- long cnt;
-{
- OUTREAD(PARTEMIT, emit, cnt);
- offset[sectionnr] += cnt;
-}
-
-void
-rd_relo(relo, cnt)
- register struct outrelo *relo;
- register unsigned int cnt;
-{
-
- OUTREAD(PARTRELO, (char *) relo, (long) cnt * SZ_RELO);
-#if BYTE_ORDER == 0x0123
- if (sizeof(struct outrelo) != SZ_RELO)
-#endif
- {
- register char *c = (char *) relo + (long) cnt * SZ_RELO;
-
- relo += cnt;
- while (cnt--) {
- relo--;
- c -= 4; relo->or_addr = get4(c);
- c -= 2; relo->or_nami = uget2(c);
- relo->or_sect = *--c;
- relo->or_type = *--c;
- }
- }
-}
-
-void
-rd_name(name, cnt)
- register struct outname *name;
- register unsigned int cnt;
-{
-
- OUTREAD(PARTNAME, (char *) name, (long) cnt * SZ_NAME);
-#if BYTE_ORDER == 0x0123
- if (sizeof(struct outname) != SZ_NAME)
-#endif
- {
- register char *c = (char *) name + (long) cnt * SZ_NAME;
-
- name += cnt;
- while (cnt--) {
- name--;
- c -= 4; name->on_valu = get4(c);
- c -= 2; name->on_desc = uget2(c);
- c -= 2; name->on_type = uget2(c);
- c -= 4; name->on_foff = get4(c);
- }
- }
-}
-
-void
-rd_string(addr, len)
- char *addr;
- long len;
-{
-
- OUTREAD(PARTCHAR, addr, len);
-}
-
-#ifdef SYMDBUG
-void
-rd_dbug(buf, size)
- char *buf;
- long size;
-{
- OUTREAD(PARTDBUG, buf, size);
-}
-#endif
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#include "obj.h"
-
-int
-rd_arhdr(fd, arhdr)
- register struct ar_hdr *arhdr;
-{
- char buf[AR_TOTAL];
- register char *c = buf;
- register char *p = arhdr->ar_name;
- register int i;
-
- i = read(fd, c, AR_TOTAL);
- if (i == 0) return 0;
- if (i != AR_TOTAL) {
- rd_fatal();
- }
- i = 14;
- while (i--) {
- *p++ = *c++;
- }
- arhdr->ar_date = ((long) get2(c)) << 16; c += 2;
- arhdr->ar_date |= ((long) get2(c)) & 0xffff; c += 2;
- arhdr->ar_uid = *c++;
- arhdr->ar_gid = *c++;
- arhdr->ar_mode = get2(c); c += 2;
- arhdr->ar_size = (long) get2(c) << 16; c += 2;
- arhdr->ar_size |= (long) get2(c) & 0xffff;
- return 1;
-}
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
-#include "obj.h"
-
-#define MININT (1 << (sizeof(int) * 8 - 1))
-#define MAXCHUNK (~MININT) /* Highest count we read(2). */
-/* Unfortunately, MAXCHUNK is too large with some compilers. Put it in
- an int!
-*/
-
-static int maxchunk = MAXCHUNK;
-
-/*
- * We don't have to worry about byte order here.
- * Just read "cnt" bytes from file-descriptor "fd".
- */
-void
-rd_bytes(fd, string, cnt)
- register char *string;
- register long cnt;
-{
-
- while (cnt) {
- register int n = cnt >= maxchunk ? maxchunk : cnt;
-
- if (read(fd, string, n) != n)
- rd_fatal();
- string += n;
- cnt -= n;
- }
-}
+++ /dev/null
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#include "obj.h"
-
-unsigned int
-rd_unsigned2(fd)
-{
- char buf[2];
-
- rd_bytes(fd, buf, 2L);
- return uget2(buf);
-}
#include <machine/bios.h>
#include <minix/portio.h>
#include <minix/cpufeature.h>
-#if !defined(__ELF__)
-#include <a.out.h>
-#endif
#include <assert.h>
#include <signal.h>
#include <machine/vm.h>
NOT_REACHABLE;
}
-#if !defined(__ELF__)
-/* address of a.out headers, set in mpx386.s */
-phys_bytes aout;
-
-PUBLIC void arch_get_aout_headers(const int i, struct exec *h)
-{
- /* The bootstrap loader created an array of the a.out headers at
- * absolute address 'aout'. Get one element to h.
- */
- phys_copy(aout + i * A_MINHDR, vir2phys(h), (phys_bytes) A_MINHDR);
-}
-#endif
-
PUBLIC void fpu_init(void)
{
unsigned short cw, sw;
-/*
- * This file is part of the lowest layer of the MINIX kernel. (The other part
+/* This file is part of the lowest layer of the MINIX kernel. (The other part
* is "proc.c".) The lowest layer does process switching and message handling.
* Furthermore it contains the assembler startup code for Minix and the 32-bit
* interrupt handlers. It cooperates with the code in "start.c" to set up a
MINIX:
/* this is the entry point for the MINIX kernel */
-#if defined(__ELF__)
jmp _C_LABEL(multiboot_init)
-#endif
- jmp over_flags /* skip over the next few bytes */
-.short CLICK_SHIFT /* for the monitor: memory granularity */
-
-flags:
-/* boot monitor flags:
- * call in 386 mode, make bss, make stack,
- * load high, don't patch, will return,
- * uses generic INT, memory vector,
- * new boot code return
- */
-.short 0x03FD
- nop /* extra byte to sync up disassembler */
-
/* Multiboot header here*/
.balign 8
multiboot_depth:
.long 0
-over_flags:
-/* Set up a C stack frame on the monitor stack. (The monitor sets cs and ds */
-/* right. The ss descriptor still references the monitor data segment.) */
- movzwl %sp, %esp /* monitor stack is a 16 bit stack */
-
.globl kernel_init
kernel_init: /* after pre-init*/
push %ebp
mov 8(%ebp), %ebx /* boot parameters offset */
mov 12(%ebp), %edx /* boot parameters length */
mov 16(%ebp), %eax /* address of a.out headers */
-#if !defined(__ELF__)
- movl %eax, _C_LABEL(aout)
-#endif
mov %ds, %ax /* kernel data */
mov %ax, %es
mov %ax, %fs
register struct proc *rp; /* process pointer */
register int i, j;
size_t argsz; /* size of arguments passed to crtso on stack */
-#if !defined(__ELF__)
- vir_clicks text_clicks, data_clicks, st_clicks;
- phys_clicks text_base;
- int hdrindex; /* index to array of a.out headers */
- struct exec e_hdr; /* for a copy of an a.out header */
-#endif
BKL_LOCK();
/* Global value to test segment sanity. */
/* Don't let the process run for now. */
RTS_SET(rp, RTS_NO_PRIV | RTS_NO_QUANTUM);
}
-#if defined(__ELF__)
rp->p_memmap[T].mem_vir = ABS2CLICK(ip->memmap.text_vaddr);
rp->p_memmap[T].mem_phys = ABS2CLICK(ip->memmap.text_paddr);
rp->p_memmap[T].mem_len = ABS2CLICK(ip->memmap.text_bytes);
ip->memmap.data_bytes +
ip->memmap.stack_bytes);
rp->p_memmap[S].mem_len = 0;
-#else
- if (iskerneln(proc_nr)) { /* part of the kernel? */
- hdrindex = 0; /* all use the first a.out header */
- } else {
- hdrindex = 1 + i-NR_TASKS; /* system/user processes */
- }
-
- /* Architecture-specific way to find out aout header of this
- * boot process.
- */
- arch_get_aout_headers(hdrindex, &e_hdr);
-
- /* Convert addresses to clicks and build process memory map */
- text_base = e_hdr.a_syms >> CLICK_SHIFT;
- text_clicks = (vir_clicks) (CLICK_CEIL(e_hdr.a_text) >> CLICK_SHIFT);
- data_clicks = (vir_clicks) (CLICK_CEIL(e_hdr.a_data
- + e_hdr.a_bss) >> CLICK_SHIFT);
- st_clicks = (vir_clicks) (CLICK_CEIL(e_hdr.a_total) >> CLICK_SHIFT);
- if (!(e_hdr.a_flags & A_SEP))
- {
- data_clicks = (vir_clicks) (CLICK_CEIL(e_hdr.a_text +
- e_hdr.a_data + e_hdr.a_bss) >> CLICK_SHIFT);
- text_clicks = 0; /* common I&D */
- }
- rp->p_memmap[T].mem_phys = text_base;
- rp->p_memmap[T].mem_len = text_clicks;
- rp->p_memmap[D].mem_phys = text_base + text_clicks;
- rp->p_memmap[D].mem_len = data_clicks;
- rp->p_memmap[S].mem_phys = text_base + text_clicks + st_clicks;
- rp->p_memmap[S].mem_vir = st_clicks;
- rp->p_memmap[S].mem_len = 0;
-#endif
/* Set initial register values. The processor status word for tasks
* is different from that of other processes because tasks can
_PROTOTYPE( void ser_putc, (char) );
_PROTOTYPE( __dead void arch_shutdown, (int) );
_PROTOTYPE( __dead void arch_monitor, (void) );
-#if !defined(__ELF__)
-_PROTOTYPE( void arch_get_aout_headers, (int i, struct exec *h) );
-#endif
_PROTOTYPE( void restore_user_context, (struct proc * p) );
_PROTOTYPE( void read_tsc, (u32_t *high, u32_t *low) );
_PROTOTYPE( int arch_init_profile_clock, (u32_t freq) );
int nr_e, nr, r;
int wipe_rnd_bin = -1;
struct proc *p;
-#if !defined(__ELF__)
- struct exec e_hdr;
-#endif
/* Set source address and length based on request type. */
switch (m_ptr->I_REQUEST) {
src_vir = (vir_bytes) &idl->p_cycles;
break;
}
-#if !defined(__ELF__)
- case GET_AOUTHEADER: {
- int hdrindex, index = m_ptr->I_VAL_LEN2_E;
- if(index < 0 || index >= NR_BOOT_PROCS) {
- return EINVAL;
- }
- if (iskerneln(_ENDPOINT_P(image[index].endpoint))) {
- hdrindex = 0;
- } else {
- hdrindex = 1 + index-NR_TASKS;
- }
- arch_get_aout_headers(hdrindex, &e_hdr);
- length = sizeof(e_hdr);
- src_vir = (vir_bytes) &e_hdr;
- break;
- }
-#endif
default:
printf("do_getinfo: invalid request %d\n", m_ptr->I_REQUEST);
return(EINVAL);
+++ /dev/null
-ack_build.sh - for ACK library building
-gnu_build.sh - for GNU library building
-
-ack_build.sh obj - create objdirs for gnu libraries
-ack_build.sh depend - find dependencies of ack libraries
-ack_build.sh all - compile ack libraries
-ack_build.sh install - compile and install ack libraries
-ack_build.sh clean - clean for ack libraries
-
-gnu_build.sh obj - create objdirs for gnu libraries
-gnu_build.sh depend - find dependencies of gnu libraries
-gnu_build.sh all - compile gnu libraries
-gnu_build.sh install - compile and install gnu libraries
-gnu_build.sh clean - clean for gnu libraries
.include <bsd.own.mk>
-.if ${OBJECT_FMT} == "a.out"
-SUBDIR=${ARCH}-aout
-.elif ${OBJECT_FMT} == "ELF"
SUBDIR=${ARCH}-elf
-.endif
.include <bsd.subdir.mk>
+++ /dev/null
-.include <bsd.own.mk>
-
-SRCS= crtso.S
-OBJS= crtso.o
-
-realall: ${OBJS}
-
-FILES=${OBJS}
-FILESDIR=${LIBDIR}
-CLEANFILES=${OBJS}
-
-.include <bsd.prog.mk>
+++ /dev/null
-/* This is the C run-time start-off routine. It's job is to take the */
-/* arguments as put on the stack by EXEC, and to parse them and set them up the */
-/* way _main expects them. */
-/* It also initializes environ when this variable isn't defined by the */
-/* programmer. The detection of whether environ belong to us is rather */
-/* simplistic. We simply check for some magic value, but there is no other */
-/* way. */
-
-#include <machine/vm.h>
-
-
-.globl begtext, begdata, begbss
-.text
-begtext:
-#ifdef __ACK__
-.rom
-#else
-.data
-#endif
-begrom:
-.data
-begdata:
-.bss
-begbss:
-
-#ifdef __ACK__
-.globl __minix_datastart
-#endif
-
-.globl crtso, __penviron, __penvp, ___prognamep, ___argc
-.globl __minix_mainjump, __minix_unmapzero
-.extern _main, _exit
-
-#if defined(__ELF__)
-.section .init
-#else
-.text
-#endif
-
-#if defined(__ELF__)
-.globl __start
-__start:
-#endif
-crtso:
- xorl %ebp, %ebp /* clear for backtrace of core files */
- movl (%esp), %eax /* argc */
- leal 4(%esp), %edx /* argv */
- leal 8(%esp,%eax,4), %ecx /* envp */
-
-/* Test if environ is in the initialized data area and is set to our */
-/* magic number. If so then it is not redefined by the user. */
- movl $_environ, %ebx
- cmpl $__edata, %ebx /* within initialized data? */
- jae 0f
- testb $3, %bl /* aligned? */
- jne 0f
- cmpl $0x53535353, (%ebx) /* is it our environ? */
- jne 0f
- movl %ebx, __penviron /* _penviron = &environ; */
-0:
- movl __penviron, %ebx
- movl %ecx, (%ebx) /* *_penviron = envp; */
-
- /* Save argv[] and argc. This is so that we can return
- * argv[0] in the future, without having to check whether
- * argv can be dereferenced safely now.
- */
- mov %edx, (___prognamep)
- mov %eax, (___argc)
-
- push %ecx /* push envp */
- push %edx /* push argv */
- push %eax /* push argc */
-
- jmp __minix_mainjump
-
-.balign I386_PAGE_SIZE
-__minix_mainjump:
- /* unmap zero pages */
- call __minix_unmapzero
-
- call _main /* main(argc, argv, envp) */
-
- push %eax /* push exit status */
- call _exit
-
- hlt /* force a trap if exit fails */
-
-__minix_unmapzero:
-
- /* unmap 0-page code */
- push $I386_PAGE_SIZE
- push $crtso
- call _minix_munmap_text /* unmap_text(crtso, I386_PAGE_SIZE) */
- add $8, %esp
-
-#ifdef __ACK__
- /*
- * ack uses separate segments for text and data by default. We have a
- * common segment when compiling using any other compiler
- */
-
- /* unmap 0-page data */
- push $I386_PAGE_SIZE
- push $romstart
- call _minix_munmap /* munmap(romstart, I386_PAGE_SIZE) */
- add $8, %esp
-#endif
-
- ret
-
-#ifdef __ACK__
-.rom
-romstart:
-.space I386_PAGE_SIZE
-__minix_datastart:
-.space 4
-#endif
-.data
-__penviron:
-.long __penvp /* Pointer to environ, or hidden pointer */
-.bss
-___prognamep:
-.space 4
-___argc:
-.space 4
-.lcomm __penvp, 4 /* Hidden environment vector */
-
-.extern endtext /* Force loading of end labels. */
+++ /dev/null
-.TH M 1
-.SH NAME
-M, U \- conveniently mount and unmount
-.SH SYNOPSIS
-\fBM \fIdevice\fR [\fB\-r\fR]\fR
-.br
-\fBU \fIdevice\fR\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH OPTIONS
-.FL "\-r" "Mount read-only"
-.SH EXAMPLES
-.EX "M root" "Mount the RAM image on /root"
-.EX "M 0" "Mount /dev/fd0 on /fd0"
-.EX "U fd1" "Unmount /dev/fd1 from /fd1"
-.SH DESCRIPTION
-.PP
-\fIM\fR and \fIU\fR allow easy mounting and unmounting of a device by using
-only an abbreviated device name or keyword. Special keywords are
-\fBroot\fR, \fBtmp\fR, and \fBusr\fR for the three hard disk partitions
-MINIX 3 runs in. Floppy devices are mounted on \fB/fd0\fR or \fB/fd1\fR. You
-can use \fB0\fR and \fB1\fR instead of \fBfd0\fR and \fBfd1\fP. A device it
-doesn't know about is mounted on \fB/mnt\fR.
-.SH "SEE ALSO"
-.BR mount (1),
-.BR umount (1).
-MAN= acd.1 anm.1 ar.1 ash.1 asize.1 at.1 banner.1 basename.1 \
+MAN= ash.1 at.1 banner.1 basename.1 \
bsfilt.1 cal.1 \
calendar.1 cat.1 cawf.1 chgrp.1 \
- chmem.1 chmod.1 cksum.1 clear.1 cmp.1 comm.1 compress.1 \
+ chmod.1 cksum.1 clear.1 cmp.1 comm.1 compress.1 \
cp.1 crc.1 crontab.1 ctags.1 dd.1 dev2name.1 \
df.1 dhrystone.1 dosdir.1 dosread.1 doswrite.1 du.1 \
dumpcore.1 echo.1 ed.1 eject.1 elvis.1 elvrec.1 \
fsck.mfs.1 head.1 host.1 hostaddr.1 ifdef.1 \
install.1 isodir.1 isoinfo.1 isoread.1 join.1 kill.1 \
last.1 leave.1 loadfont.1 loadkeys.1 logger.1 login.1 \
- look.1 lp.1 ls.1 lspci.1 M.1 mail.1 \
- mesg.1 mixer.1 ackmkdep.1 mkfs.1 \
+ look.1 lp.1 ls.1 lspci.1 mail.1 \
+ mesg.1 mixer.1 mkfs.1 \
mkproto.1 modem.1 mount.1 mt.1 nice.1 nm.1 nohup.1 od.1 \
- paste.1 ping.1 playwave.1 postmort.1 pr.1 prep.1 \
+ paste.1 ping.1 playwave.1 pr.1 prep.1 \
profile.1 ps.1 pwd.1 rcp.1 readall.1 recwave.1 \
ref.1 remsync.1 rget.1 rlogin.1 rsh.1 rz.1 \
shar.1 acksize.1 sleep.1 sort.1 spell.1 \
- split.1 strip.1 stty.1 su.1 sum.1 svc.1 \
+ split.1 stty.1 su.1 sum.1 svc.1 \
synctree.1 sysenv.1 sz.1 tail.1 tee.1 telnet.1 template.1 \
term.1 termcap.1 tget.1 time.1 tr.1 true.1 \
truncate.1 tsort.1 tty.1 umount.1 uname.1 unexpand.1 \
who.1 write.1 xargs.1 yap.1 yes.1 linkfarm.1 pkg_view.1
MLINKS += ash.1 sh.1
-MLINKS += ash.1 bigsh.1
MLINKS += ash.1 ..1
MLINKS += ash.1 break.1
MLINKS += ash.1 case.1
+++ /dev/null
-.TH ACD 1
-.SH NAME
-acd \- a compiler driver
-.SH SYNOPSIS
-.B acd
-\fB\-v\fR[\fIn\fR]
-\fB\-vn\fR[\fIn\fR]
-.BI \-name " name"
-.BI \-descr " descr"
-.BI \-T " dir"
-.RI [ arg " ...]"
-.SH DESCRIPTION
-.de SP
-.if t .sp 0.4
-.if n .sp
-..
-.B Acd
-is a compiler driver, a program that calls the several passes that are needed
-to compile a source file. It keeps track of all the temporary files used
-between the passes. It also defines the interface of the compiler, the
-options the user gets to see.
-.PP
-This text only describes
-.B acd
-itself, it says nothing about the different options the C-compiler accepts.
-(It has nothing to do with any language, other than being a tool to give
-a compiler a user interface.)
-.SH OPTIONS
-.B Acd
-itself takes five options:
-.TP
-\fB\-v\fR[\fIn\fR]
-Sets the diagnostic level to
-.I n
-(by default
-.BR 2 ).
-The higher
-.I n
-is, the more output
-.B acd
-generates:
-.B \-v0
-does not produce any output.
-.B \-v1
-prints the basenames of the programs called.
-.B \-v2
-prints names and arguments of the programs called.
-.B \-v3
-shows the commands executed from the description file too.
-.B \-v4
-shows the program read from the description file too. Levels 3 and 4 use
-backspace overstrikes that look good when viewing the output with a smart
-pager.
-.TP
-\fB\-vn\fR[\fIn\fR]
-Like
-.B \-v
-except that no command is executed. The driver is just play-acting.
-.TP
-.BI \-name " name"
-.B Acd
-is normally linked to the name the compiler is to be called with by the
-user. The basename of this, say
-.BR cc ,
-is the call name of the driver. It plays a role in selecting the proper
-description file. With the
-.B \-name
-option one can change this.
-.B Acd \-name cc
-has the same effect as calling the program as
-.BR cc .
-.TP
-.BI \-descr " descr"
-Allows one to choose the pass description file of the driver. By default
-.I descr
-is the same as
-.IR name ,
-the call name of the program. If
-.I descr
-doesn't start with
-.BR / ,
-.BR ./ ,
-or
-.BR ../
-then the file
-.BI /usr/lib/ descr /descr
-will be used for the description, otherwise
-.I descr
-itself. Thus
-.B cc \-descr newcc
-calls the C-compiler with a different description file without changing the
-call name. Finally, if
-.I descr
-is \fB"\-"\fP, standard input is read. (The default lib directory
-.BR /usr/lib ,
-may be changed to
-.I dir
-at compile time by \fB\-DLIB=\e"\fP\fIdir\fP\fB\e"\fP. The default
-.I descr
-may be set with \fB\-DDESCR=\e"\fP\fIdescr\fP\fB\e"\fP for simple
-installations on a system without symlinks.)
-.TP
-.BI \-T " dir"
-Temporary files are made in
-.B /tmp
-by default, which may be overridden by the environment variable
-.BR TMPDIR ,
-which may be overridden by the
-.B \-T
-option.
-.SH "THE DESCRIPTION FILE"
-The description file is a program interpreted by the driver. It has variables,
-lists of files, argument parsing commands, and rules for transforming input
-files.
-.SS Syntax
-There are four simple objects:
-.PP
-.RS
-Words, Substitutions, Letters, and Operators.
-.RE
-.PP
-And there are two ways to group objects:
-.PP
-.RS
-Lists, forming sequences of anything but letters,
-.SP
-Strings, forming sequences of anything but Words and Operators.
-.RE
-.PP
-Each object has the following syntax:
-.IP Words
-They are sequences of characters, like
-.BR cc ,
-.BR \-I/usr/include ,
-.BR /lib/cpp .
-No whitespace and no special characters. The backslash character
-.RB ( \e )
-may be used to make special characters common, except whitespace. A backslash
-followed by whitespace is completely removed from the input. The sequence
-.B \en
-is changed to a newline.
-.IP Substitutions
-A substitution (henceforth called 'subst') is formed with a
-.BR $ ,
-e.g.
-.BR $opt ,
-.BR $PATH ,
-.BR ${lib} ,
-.BR $\(** .
-The variable name after the
-.B $
-is made of letters, digits and underscores, or any sequence of characters
-between parentheses or braces, or a single other character. A subst indicates
-that the value of the named variable must be substituted in the list or string
-when fully evaluated.
-.IP Letters
-Letters are the single characters that would make up a word.
-.IP Operators
-The characters
-.BR = ,
-.BR + ,
-.BR \- ,
-.BR \(** ,
-.BR < ,
-and
-.B >
-are the operators. The first four must be surrounded by whitespace if they
-are to be seen as special (they are often used in arguments). The last two
-are always special.
-.IP Lists
-One line of objects in the description file forms a list. Put parentheses
-around it and you have a sublist. The values of variables are lists.
-.IP Strings
-Anything that is not yet a word is a string. All it needs is that the substs
-in it are evaluated, e.g.
-.BR $LIBPATH/lib$key.a .
-A single subst doesn't make a string, it expands to a list. You need at
-least one letter or other subst next to it. Strings (and words) may also
-be formed by enclosing them in double quotes. Only
-.B \e
-and
-.B $
-keep their special meaning within quotes.
-.SS Evaluation
-One thing has to be carefully understood: Substitutions are delayed until
-the last possible moment, and description files make heavy use of this.
-Only if a subst is tainted, either because its variable is declared local, or
-because a subst in its variable's value is tainted, is it immediately
-substituted. So if a list is assigned to a variable then this list is only
-checked for tainted substs. Those substs are replaced by the value
-of their variable. This is called partial evaluation.
-.PP
-Full evaluation expands all substs, the list is flattened, i.e. all
-parentheses are removed from sublists.
-.PP
-Implosive evaluation is the last that has to be done to a list before it
-can be used as a command to execute. The substs within a string have been
-evaluated to lists after full expansion, but a string must be turned into
-a single word, not a list. To make this happen, a string is first exploded
-to all possible combinations of words choosing one member of the lists within
-the string. These words are tried one by one to see if they exist as a
-file. The first one that exists is taken, if none exists than the first
-choice is used. As an example, assume
-.B LIBPATH
-equals
-.BR "(/lib /usr/lib)" ,
-.B key
-is
-.B (c)
-and
-.B key
-happens to be local. Then we have:
-.PP
-.RS
-\fB"$LIBPATH/lib$key.a"\fP
-.RE
-.PP
-before evaluation,
-.PP
-.RS
-\fB"$LIBPATH/lib(c).a"\fP
-.RE
-.PP
-after partial evaluation,
-.PP
-.RS
-\fB"(/lib/libc.a /usr/lib/libc.a)"\fP
-.RE
-.PP
-after full evaluation, and finally
-.PP
-.RS
-.B /usr/lib/libc.a
-.RE
-.PP
-after implosion, if the file exists.
-.SS Operators
-The operators modify the way evaluation is done and perform a special
-function on a list:
-.TP
-.B \(**
-Forces full evaluation on all the list elements following it. Use it to
-force substitution of the current value of a variable. This is the only
-operator that forces immediate evaluation.
-.TP
-.B +
-When a
-.B +
-exists in a list that is fully evaluated, then all the elements before the
-.B +
-are imploded and all elements after the
-.B +
-are imploded and added to the list if they are not already in the list. So
-this operator can be used either for set addition, or to force implosive
-expansion within a sublist.
-.TP
-.B \-
-Like
-.BR + ,
-except that elements after the
-.B \-
-are removed from the list.
-.PP
-The set operators can be used to gather options that exclude each other
-or for their side effect of implosive expansion. You may want to write:
-.PP
-.RS
-\fBcpp \-I$LIBPATH/include\fP
-.RE
-.PP
-to call cpp with an extra include directory, but
-.B $LIBPATH
-is expanded using a filename starting with
-.B \-I
-so this won't work. Given that any problem in Computer Science can be solved
-with an extra level of indirection, use this instead:
-.PP
-.RS
-.ft B
-cpp \-I$INCLUDE
-.br
-INCLUDE = $LIBPATH/include +
-.ft P
-.RE
-.SS "Special Variables"
-There are three special variables used in a description file:
-.BR $\(** ,
-.BR $< ,
-and
-.BR $> .
-These variables are always local and mostly read-only. They will be
-explained later.
-.SS "A Program"
-The lists in a description file form a program that is executed from the
-first to the last list. The first word in a list may be recognized as a
-builtin command (only if the first list element is indeed simply a word.)
-If it is not a builtin command then the list is imploded and used as a
-\s-2UNIX\s+2 command with arguments.
-.PP
-Indentation (by tabs or spaces) is not just makeup for a program, but are
-used to group lines together. Some builtin commands need a body. These
-bodies are simply lines at a deeper indentation.
-.PP
-Empty lines are not ignored either, they have the same indentation level as
-the line before it. Comments (starting with a
-.B #
-and ending at end of line) have an indentation of their own and can be used
-as null commands.
-.PP
-.B Acd
-will complain about unexpected indentation shifts and empty bodies. Commands
-can share the same body by placing them at the same indentation level before
-the indented body. They are then "guards" to the same body, and are tried
-one by one until one succeeds, after which the body is executed.
-.PP
-Semicolons may be used to separate commands instead of newlines. The commands
-are then all at the indentation level of the first.
-.SS "Execution phases"
-The driver runs in three phases: Initialization, Argument scanning, and
-Compilation. Not all commands work in all phases. This is further explained
-below.
-.SS "The Commands"
-The commands accept arguments that are usually generic expressions that
-implode to a word or a list of words. When
-.I var
-is specified, then a single word or subst needs to be given, so
-an assignment can be either
-.I name
-.B =
-.IR value ,
-or
-.BI $ name
-.B =
-.IR value .
-.TP
-.IB "var " = " expr ..."
-The partially evaluated list of expressions is assigned to
-.IR var .
-During the evaluation is
-.I var
-marked as local, and after the assignment set from undefined to defined.
-.TP
-.BI unset " var"
-.I Var
-is set to null and is marked as undefined.
-.TP
-.BI import " var"
-If
-.I var
-is defined in the environment of
-.B acd
-then it is assigned to
-.IR var .
-The environment variable is split into words at whitespace and colons. Empty
-space between two colons
-.RB ( :: )
-is changed to a dot.
-.TP
-.BI mktemp " var " [ suffix ]
-Assigns to
-.I var
-the name of a new temporary file, usually something like /tmp/acd12345x. If
-.I suffix
-is present then it will be added to the temporary file's name. (Use it
-because some programs require it, or just because it looks good.)
-.B Acd
-remembers this file, and will delete it as soon as you stop referencing it.
-.TP
-.BI temporary " word"
-Mark the file named by
-.I word
-as a temporary file. You have to make sure that the name is stored in some
-list in imploded form, and not just temporarily created when
-.I word
-is evaluated, because then it will be immediately removed and forgotten.
-.TP
-.BI stop " suffix"
-Sets the target suffix for the compilation phase. Something like
-.B stop .o
-means that the source files must be compiled to object files. At least one
-.B stop
-command must be executed before the compilation phase begins. It may not be
-changed during the compilation phase. (Note: There is no restriction on
-.IR suffix ,
-it need not start with a dot.)
-.TP
-.BI treat " file suffix"
-Marks the file as having the given suffix for the compile phase. Useful
-for sending a
-.B \-l
-option directly to the loader by treating it as having the
-.B .a
-suffix.
-.TP
-.BI numeric " arg"
-Checks if
-.I arg
-is a number. If not then
-.B acd
-will exit with a nice error message.
-.TP
-.BI error " expr ..."
-Makes the driver print the error message
-.I "expr ..."
-and exit.
-.TP
-.BI if " expr " = " expr"
-.B If
-tests if the two expressions are equal using set comparison, i.e. each
-expression should contain all the words in the other expression. If the
-test succeeds then the if-body is executed.
-.TP
-.BI ifdef " var"
-Executes the ifdef-body if
-.I var
-is defined.
-.TP
-.BI ifndef " var"
-Executes the ifndef-body if
-.I var
-is undefined.
-.TP
-.BI iftemp " arg"
-Executes the iftemp-body if
-.I arg
-is a temporary file. Use it when a command has the same file as input and
-output and you don't want to clobber the source file:
-.SP
-.RS
-.nf
-.ft B
-transform .o .o
- iftemp $\(**
- $> = $\(**
- else
- cp $\(** $>
- optimize $>
-.ft P
-.fi
-.RE
-.TP
-.BI ifhash " arg"
-Executes the ifhash-body if
-.I arg
-is an existing file with a '\fB#\fP' as the very first character. This
-usually indicates that the file must be pre-processed:
-.SP
-.RS
-.nf
-.ft B
-transform .s .o
- ifhash $\(**
- mktemp ASM .s
- $CPP $\(** > $ASM
- else
- ASM = $\(**
- $AS \-o $> $ASM
- unset ASM
-.ft P
-.fi
-.RE
-.TP
-.B else
-Executes the else-body if the last executed
-.BR if ,
-.BR ifdef ,
-.BR ifndef ,
-.BR iftemp ,
-or
-.B ifhash
-was unsuccessful. Note that
-.B else
-need not immediately follow an if, but you are advised not to make use of
-this. It is a "feature" that may not last.
-.TP
-.BI apply " suffix1 suffix2"
-Executed inside a transform rule body to transform the input file according
-to another transform rule that has the given input and output suffixes. The
-file under
-.B $\(**
-will be replaced by the new file. So if there is a
-.B .c .i
-preprocessor rule then the example of
-.B ifhash
-can be replaced by:
-.SP
-.RS
-.nf
-.ft B
-transform .s .o
- ifhash $\(**
- apply .c .i
- $AS \-o $> $*
-.ft P
-.fi
-.RE
-.TP
-.BI include " descr"
-Reads another description file and replaces the
-.B include
-with it. Execution continues with the first list in the new program. The
-search for
-.I descr
-is the same as used for the
-.B \-descr
-option. Use
-.B include
-to switch in different front ends or back ends, or to call a shared
-description file with a different initialization. Note that
-.I descr
-is only evaluated the first time the
-.B include
-is called. After that the
-.B include
-has been replaced with the included program, so changing its argument won't
-get you a different file.
-.TP
-.BI arg " string ..."
-.B Arg
-may be executed in the initialization and scanning phase to post an argument
-scanning rule, that's all the command itself does. Like an
-.B if
-that fails it allows more guards to share the same body.
-.TP
-.BI transform " suffix1 suffix2"
-.BR Transform ,
-like
-.BR arg ,
-only posts a rule to transform a file with the suffix
-.I suffix1
-into a file with the suffix
-.IR suffix2 .
-.TP
-.BI prefer " suffix1 suffix2"
-Tells that the transformation rule from
-.I suffix1
-to
-.I suffix2
-is to be preferred when looking for a transformation path to the stop suffix.
-Normally the shortest route to the stop suffix is used.
-.B Prefer
-is ignored on a
-.BR combine ,
-because the special nature of combines does not allow ambiguity.
-.SP
-The two suffixes on a
-.B transform
-or
-.B prefer
-may be the same, giving a rule that is only executed when preferred.
-.TP
-.BI combine " suffix-list suffix"
-.B Combine
-is like
-.B transform
-except that it allows a list of input suffixes to match several types of
-input files that must be combined into one.
-.TP
-.B scan
-The scanning phase may be run early from the initialization phase with the
-.B scan
-command. Use it if you need to make choices based on the arguments before
-posting the transformation rules. After running this,
-.B scan
-and
-.B arg
-become no-ops.
-.TP
-.B compile
-Move on to the compilation phase early, so that you have a chance to run
-a few extra commands before exiting. This command implies a
-.BR scan .
-.PP
-Any other command is seen as a \s-2UNIX\s+2 command. This is where the
-.B <
-and
-.B >
-operators come into play. They redirect standard input and standard output
-to the file mentioned after them, just like the shell.
-.B Acd
-will stop with an error if the command is not successful.
-.SS The Initialization Phase
-The driver starts by executing the program once from top to bottom to
-initialize variables and post argument scanning and transformation rules.
-.SS The Scanning Phase
-In this phase the driver makes a pass over the command line arguments to
-process options. Each
-.B arg
-rule is tried one by one in the order they were posted against the front of
-the argument list. If a match is made then the matched arguments are removed
-from the argument list and the arg-body is executed. If no match can be made
-then the first argument is moved to the list of files waiting to be
-transformed and the scan is restarted.
-.PP
-The match is done as follows: Each of the strings after
-.B arg
-must match one argument at the front of the argument list. A character
-in a string must match a character in an argument word, a subst in a string
-may match 1 to all remaining characters in the argument, preferring the
-shortest possible match. The hyphen in a argument starting with a hyphen
-cannot be matched by a subst. Therefore:
-.PP
-.RS
-.B arg \-i
-.RE
-.PP
-matches only the argument
-.BR \-i .
-.PP
-.RS
-.B arg \-O$n
-.RE
-.PP
-matches any argument that starts with
-.B \-O
-and is at least three characters long. Lastly,
-.PP
-.RS
-.B arg \-o $out
-.RE
-.PP
-matches
-.B \-o
-and the argument following it, unless that argument starts with a hyphen.
-.PP
-The variable
-.B $\(**
-is set to all the matched arguments before the arg-body is executed. All
-the substs in the arg strings are set to the characters they match. The
-variable
-.B $>
-is set to null. All the values of the variables are saved and the variables
-marked local. All variables except
-.B $>
-are marked read-only. After the arg-body is executed is the value of
-.B $>
-concatenated to the file list. This allows one to stuff new files into the
-transformation phase. These added names are not evaluated until the start
-of the next phase.
-.SS The Compilation Phase
-The files gathered in the file list in the scanning phase are now transformed
-one by one using the transformation rules. The shortest, or preferred route
-is computed for each file all the way to the stop suffix. Each file is
-transformed until it lands at the stop suffix, or at a combine rule. After
-a while all files are either fully transformed or at a combine rule.
-.PP
-The driver chooses a combine rule that is not on a path from another combine
-rule and executes it. The file that results is then transformed until it
-again lands at a combine rule or the stop suffix. This continues until all
-files are at the stop suffix and the program exits.
-.PP
-The paths through transform rules may be ambiguous and have cycles, they will
-be resolved. But paths through combines must be unambiguous, because of
-the many paths from the different files that meet there. A description file
-will usually have only one combine rule for the loader. However if you do
-have a combine conflict then put a no-op transform rule in front of one to
-resolve the problem.
-.PP
-If a file matches a long and a short suffix then the long suffix is preferred.
-By putting a null input suffix (\fB""\fP) in a rule one can match any file
-that no other rule matches. You can send unknown files to the loader this
-way.
-.PP
-The variable
-.B $\(**
-is set to the file to be transformed or the files to be combined before the
-transform or combine-body is executed.
-.B $>
-is set to the output file name, it may again be modified.
-.B $<
-is set to the original name of the first file of
-.B $\(**
-with the leading directories and the suffix removed.
-.B $\(**
-will be made up of temporary files after the first rule.
-.B $>
-will be another temporary file or the name of the target file
-.RB ( $<
-plus the stop suffix), if the stop suffix is reached.
-.PP
-.B $>
-is passed to the next rule; it is imploded and checked to be a single word.
-This driver does not store intermediate object files in the current directory
-like most other compilers, but keeps them in
-.B /tmp
-too. (Who knows if the current directory can have files created in?) As an
-example, here is how you can express the "normal" method:
-.PP
-.RS
-.nf
-.ft B
-transform .s .o
- if $> = $<.o
- # Stop suffix is .o
- else
- $> = $<.o
- temporary $>
- $AS \-o $> $\(**
-.ft P
-.fi
-.RE
-.PP
-Note that
-.B temporary
-is not called if the target is already the object file, or you would lose
-the intended result!
-.B $>
-is known to be a word, because
-.B $<
-is local. (Any string whose substs are all expanded changes to a word.)
-.SS "Predefined Variables"
-The driver has three variables predefined:
-.BR PROGRAM ,
-set to the call name of the driver,
-.BR VERSION ,
-the driver's version number, and
-.BR ARCH ,
-set to the name of the default output architecture. The latter is optional,
-and only defined if
-.B acd
-was compiled with \fB\-DARCH=\e"\fP\fIarch-name\fP\fB\e"\fP.
-.SH EXAMPLE
-As an example a description file for a C compiler is given. It has a
-front end (ccom), an intermediate code optimizer (opt), a code generator (cg),
-an assembler (as), and a loader (ld). The compiler can pre-process, but
-there is also a separate cpp. If the
-.B \-D
-and options like it are changed to look like
-.B \-o
-then this example is even as required by \s-2POSIX\s+2.
-.RS
-.nf
-
-# The compiler support search path.
-C = /lib /usr/lib /usr/local/lib
-
-# Compiler passes.
-CPP = $C/cpp $CPP_F
-CCOM = $C/ccom $CPP_F
-OPT = $C/opt
-CG = $C/cg
-AS = $C/as
-LD = $C/ld
-
-# Predefined symbols.
-CPP_F = \-D__EXAMPLE_CC__
-
-# Library path.
-LIBPATH = $USERLIBPATH $C
-
-# Default transformation target.
-stop .out
-
-# Preprocessor directives.
-arg \-D$name
-arg \-U$name
-arg \-I$dir
- CPP_F = $CPP_F $\(**
-
-# Stop suffix.
-arg \-c
- stop .o
-
-arg \-E
- stop .E
-
-# Optimization.
-arg \-O
- prefer .m .m
- OPT = $OPT -O1
-
-arg \-O$n
- numeric $n
- prefer .m .m
- OPT = $OPT $\(**
-
-# Add debug info to the executable.
-arg \-g
- CCOM = $CCOM -g
-
-# Add directories to the library path.
-arg \-L$dir
- USERLIBPATH = $USERLIBPATH $dir
-
-# \-llib must be searched in $LIBPATH later.
-arg \-l$lib
- $> = $LIBPATH/lib$lib.a
-
-# Change output file.
-arg \-o$out
-arg \-o $out
- OUT = $out
-
-# Complain about a missing argument.
-arg \-o
- error "argument expected after '$\(**'"
-
-# Any other option (like \-s) are for the loader.
-arg \-$any
- LD = $LD $\(**
-
-# Preprocess C-source.
-transform .c .i
- $CPP $\(** > $>
-
-# Preprocess C-source and send it to standard output or $OUT.
-transform .c .E
- ifndef OUT
- $CPP $\(**
- else
- $CPP $\(** > $OUT
-
-# Compile C-source to intermediate code.
-transform .c .m
-transform .i .m
- $CCOM $\(** $>
-
-# Intermediate code optimizer.
-transform .m .m
- $OPT $\(** > $>
-
-# Intermediate to assembly.
-transform .m .s
- $CG $\(** > $>
-
-# Assembler to object code.
-transform .s .o
- if $> = $<.o
- ifdef OUT
- $> = $OUT
- $AS \-o $> $\(**
-
-# Combine object files and libraries to an executable.
-combine (.o .a) .out
- ifndef OUT
- OUT = a.out
- $LD \-o $OUT $C/crtso.o $\(** $C/libc.a
-.fi
-.RE
-.SH FILES
-.TP 25n
-.RI /usr/lib/ descr /descr
-\- compiler driver description file.
-.SH "SEE ALSO"
-.BR cc (1).
-.SH ACKNOWLEDGEMENTS
-Even though the end result doesn't look much like it, many ideas were
-nevertheless derived from the ACK compiler driver by Ed Keizer.
-.SH BUGS
-\s-2POSIX\s+2 requires that if compiling one source file to an object file
-fails then the compiler should continue with the next source file. There is
-no way
-.B acd
-can do this, it always stops after error. It doesn't even know what an
-object file is! (The requirement is stupid anyhow.)
-.PP
-If you don't think that tabs are 8 spaces wide, then don't mix them with
-spaces for indentation.
-.SH AUTHOR
-Kees J. Bot (kjb@cs.vu.nl)
+++ /dev/null
-.TH MKDEP 1 "February 1st, 2010"\r
-.SH NAME\r
-mkdep \- print dependencies in the Right Way for make(1)\r
-.SH SYNOPSIS\r
-.B mkdep \r
-.I path\r
-.br\r
-.B mkdep \r
-.I pp_command\r
-.IR sourcefile " ... "\r
-.SH DESCRIPTION\r
-.B Mkdep\r
-does what \r
-.B cpp -M\r
-should do, but no compiler gets it right, they all\r
-strip the leading path of the \fI*.o\fP files.\r
-.PP\r
-The first synopsis form just creates the needed\r
-.I .depend\r
-files in all the subdirectories of\r
-.IR path .\r
-.PP\r
-The second synopsis form does the hard work of emitting the\r
-dependencies instructions for\r
-.IR sourcefile\r
-in the right format expected by\r
-.IR make (1),\r
-including the path information.\r
-.PP\r
-.B Mkdep\r
-expects\r
-.I pp_command\r
-to be the correct invocation for the preprocessor\r
-.\" FIXME: there are no cpp(1x) manpage presently...\r
-.\" .IR cpp (1x)\r
-command adequate for\r
-.IR sourcefile ,\r
-and also expects this command to emit lines of the form\r
-.nf\r
-.ta +1i +\w'# lineno "filename"'u+2m\r
- # \fIlineno\fP "\fIfilename\fP"\r
-.fi\r
-for each files which is included by the named\r
-.IR sourcefile .\r
-.PP\r
-For C, the typical idiom is to add in all your\r
-.IR Makefile s:\r
-.PP\r
-.nf\r
-.ta +0.2i +\w'depend:'u+1m +\w'mkdep "$(CC) -E $(CPPFLAGS)" *.c > .depend'u+2m\r
- depend: \r
- cd sub1 && $(MAKE) -$(MAKEFLAGS) $@\r
- cd sub2 && $(MAKE) -$(MAKEFLAGS) $@\r
- # repeat for each subdirectory\r
- mkdep "$(CC) -E $(CPPFLAGS)" *.c > .depend \r
-.PP\r
-.fi \r
-.SH "SEE ALSO"\r
-.BR cc (1),\r
-.BR make (1).\r
-.SH BUGS\r
-Since\r
-.I Makefile\r
-is read in full before any command is executed,\r
-there is no way to prevent\r
-.IR make (1)\r
-to report an error if the\r
-.I .depend\r
-file was not created beforehand; hence the first form of\r
-.IR mkdep\r
-should be used \fBbefore\fP any attempt is done to use this feature in any\r
-.IR Makefile .\r
-.PP\r
-The current version hardcodes the \fI.o\fP suffix, so it cannot be used for e.g.\r
-.IR flex (1)\r
-or \r
-.IR yacc (1)\r
-source files.\r
-.SH AUTHOR\r
-.I Mkdep.c \r
-was written by Kees J. Bot and Jorrit N. Herder. \r
-.\" This manual page by A. Leca.\r
+++ /dev/null
-.TH ANM 1
-.SH NAME
-anm \- print name list
-.SH SYNOPSIS
-\fBanm \fR[\fB\-gnoprus\fR] \fIfile\fR ...\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH OPTIONS
-.FL "\-g" "Global symbols only"
-.FL "\-n" "Sort numerically"
-.FL "\-o" "Prepend the filename to each line"
-.FL "\-p" "No sorting\(emuse symbol table order"
-.FL "\-r" "Sort in reverse order"
-.FL "\-u" "List undefined symbols only"
-.FL "\-s" "Sort in section order"
-.SH EXAMPLES
-.EX "anm \-gn test.o" "Print global symbols in numerical order"
-.SH DESCRIPTION
-.PP
-.I Anm
-prints the name list (symbol table) of each ACK format object
-.I file
-in the argument list.
-If no file name is given, \fIa.out\fR is used.
-Each symbol name is preceded by its value, a section indicator
-and a type indicator.
-The section indicators are:
-.PP
-.ta 0.25i 0.50i
-.nf
- \fBU\fR Undefined symbol
- \fBA\fR Absolute symbol
- \fB\-\fR Other symbol
-.sp
-The type indicators are:
-.PP
- \fBF\fR Filename
- \fBM\fR Module name
- \fBS\fR Section name
- \fBE\fR External (global) symbol
- \fB\-\fR Local symbol
-.fi
-.PP
-The output is sorted alphabetically, unless otherwise specified.
-Notice that \fIanm\fR can only be used on ACK format object files
-(that is: \fI.o\fR and \fI.out\fR files).
-If you want to get the name list of an executable program use
-.I nm
-instead.
-.SH "SEE ALSO"
-.BR asize (1),
-.BR nm (1),
-.BR ar (1),
-.BR size (1).
+++ /dev/null
-.TH AR 1
-.SH NAME
-ar, aal \- archivers
-.SH SYNOPSIS
-\fBar\fR [\fBdmpqrtx\fR][\fBabciluv\fR]\fR [\fIposname\fR] \fIarchive\fR [\fIfile \fR...]\fR
-.br
-\fBaal\fR [\fBdpqrtx\fR][\fBclv\fR]\fR \fIarchive\fR [\fIfile \fR...]\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.EX "ar r libc.a sort.s" "Replace \fIsort\fR.s in \fIlibc.a\fR"
-.EX "ar rb a.s libc.a b.s" "Insert \fIb.s\fR before \fIa.s\fR in \fIlibc.a\fR"
-.SH DESCRIPTION
-.PP
-\fIAr\fR allows groups of files to be put together into a single archive.
-It is normally used for libraries of compiled procedures. \fIAal\fR is like
-\fIar\fP, but is to be used with the ACK compiler. The following keys
-are allowed:
-.PP
-.ta 0.25i 0.50i
-.nf
- \fBd\fR: Delete. \fIAr\fR will delete the named members.
- \fBm\fR: Move named files. \fIAr\fR expects \fIa\fR, \fIb\fR, or \fIi\fR to be specified.
- \fBp\fR: Print the named files (list them on \fIstdout\fR)
- \fBq\fR: Quickly append to the end of the archive file.
- \fBr\fR: Replace (append when not in archive).
- \fBt\fR: Print the archive's table of contents.
- \fBx\fR: Extract
-.fi
-.PP
-\fBThe keys may optionally concatencated with one or more of the following\fR:
-.nf
-.PP
- \fBa\fR: After \fIposname\fR
- \fBb\fR: Before \fIposname\fR
- \fBc\fR: Create (suppresses creation message)
- \fBi\fR: Before \fIposname\fR
- \fBl\fR: Local temporary file for work instead of \fI/tmp/ar.$$$$$\fR
- \fBu\fR: Replace only if dated later than member in archive
- \fBv\fR: Verbose
-.PP
-.fi
-.SH "SEE ALSO"
-.BR anm (1),
-.BR asize (1),
-.BR nm (1),
-.BR size (1).
+++ /dev/null
-.TH ASIZE 1
-.SH NAME
-asize \- report the size of an object file
-.SH SYNOPSIS
-\fBasize \fIfile\fR ...\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.EX "asize test.o" "Give the size of \fItest.o\fR"
-.SH DESCRIPTION
-.PP
-.I Asize
-prints for each argument
-the (decimal) number of bytes used by the different sections,
-as well as their sum in decimal and hexadecimal.
-If no
-.I file
-is given \fIa.out\fR is used.
-.I Asize
-can only be used to obtain the size of a \fI.o\fR or \fI.out\fR file.
-To obtain the size of an executable, use
-.I size
-instead.
-.SH "SEE ALSO"
-.BR anm (1),
-.BR nm (1),
-.BR ar (1),
-.BR size (1).
+++ /dev/null
-.TH CHMEM 1
-.SH NAME
-chmem \- change memory allocation
-.SH SYNOPSIS
-\fBchmem\fR [\fB+\fR]\fR [\fB\-\fR] [\fB=\fR] \fIamount file\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.EX "chmem =50000 a.out" "Give \fIa.out\fP 50K of stack space"
-.EX "chmem \-4000 a.out" "Reduce the stack space by 4000 bytes"
-.EX "chmem +1000 file1" "Increase each stack by 1000 bytes"
-.SH DESCRIPTION
-.PP
-When a program is loaded into memory, it is allocated enough memory
-for the text and data+bss segments, plus
-an area for the stack.
-Data segment growth using
-.I malloc ,
-.I brk ,
-or
-.I sbrk
-eats up stack space from the low end.
-The amount of stack space to allocate is derived
-from a field in the executable program's file header.
-If the combined stack and data segment growth exceeds the stack space
-allocated, the program will be terminated.
-.PP
-It is therefore important to set the amount of stack space carefully.
-If too little is provided, the program may crash.
-If too much is provided, memory will be wasted, and fewer programs will be able
-to fit in memory and run simultaneously.
-\s-1MINIX 3\s-1
-does not swap, so that when memory is full, subsequent attempts to fork will
-fail.
-The compiler sets the stack space
-to the largest possible value (for the Intel CPUs, 64K \- text \- data).
-For many programs, this value is far too large.
-Nonrecursive programs that do not call
-.I brk ,
-.I sbrk ,
-or
-.I malloc ,
-and do not have any local arrays usually do not need more than 8K of stack
-space.
-.PP
-The
-.I chmem
-command changes the value of the header field that determines the stack allocation, and
-thus indirectly the total memory required to run the program.
-The = option sets the stack size
-to a specific value; the + and \- options increment and decrement the
-current value by the indicated amount.
-The old and new stack sizes are printed.
-.SH "SEE ALSO"
-.BR install (1),
-.BR brk (2).
+++ /dev/null
-.TH POSTMORT 1
-.SH NAME
-postmort \- perform post-mortem on PC MINIX 3 core files
-.SH SYNOPSIS
-\fBpostmort\fR [\fB\-dpt\fR] \fB\-c \fIcorefile \fB\-s \fIsymbfile\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH OPTIONS
-.FL "\-c" "Use the named corefile"
-.FL "\-d" "Dump all text symbols and segment data"
-.FL "\-p" "Display the kernel process table"
-.FL "\-s" "Use the named symbol file"
-.FL "\-t" "Display a stack backtrace"
-.SH EXAMPLES
-.EX "postmort" "display the data from the file 'core'"
-.SH DESCRIPTION
-.PP
-.I Postmort
-does a simple static analysis of a PC MINIX 3 core file;
-By default, it looks for the
-file 'core' in the local directory and loads that for analysis; it
-also searches for the file 'symbol.out', and if that fails 'a.out',
-expecting them to contain symbol information for the core file.
-It is not a fatal error if the symbol files don't exist.
-.PP
-The stack backtrace is slightly tricky, and may go on longer
-than is really justified, since there's no easy way for it to
-know when to stop. Treat its results with caution.
+++ /dev/null
-.TH STRIP 1
-.SH NAME
-strip \- remove symbol table from executable file
-.SH SYNOPSIS
-\fBstrip\fR [\fIfile\fR] ...\fR
-.br
-.de FL
-.TP
-\\fB\\$1\\fR
-\\$2
-..
-.de EX
-.TP 20
-\\fB\\$1\\fR
-# \\$2
-..
-.SH EXAMPLES
-.EX "strip a.out" "Remove symbols from \fIa.out\fR"
-.SH DESCRIPTION
-.PP
-For each file argument, \fIstrip\fR removes the symbol table.
-Strip makes a copy of the file being stripped, so links are lost.
-.SH "SEE ALSO"
-.BR install (1).
-MAN= awk.1x dis88.1x elvis.1x kermit.1x \
+MAN= awk.1x elvis.1x kermit.1x \
macros.1x mined.1x
.include <bsd.man.mk>
+++ /dev/null
-.so mnx.mac
-.TH DIS88 1x
-.CD "dis88 \(en disassembler [IBM]"
-.SX "dis88\fR [\fB\(eno\fR] \fIinfile\fR [\fIoutfile\fR]"
-.FL "\(eno" "List the object code along with the assembly code"
-.EX "dis88 a.out >listing" "Disassemble \fIa.out\fR"
-.EX "dis88 \(eno a.out listing" "Ditto, but with object code"
-.PP
-\fIDis88\fR disassembles 8088 object code to the assembly language format
-used by
-.MX .
-It makes full use of
-symbol table information, supports separate
-instruction and data space, and generates synthetic labels when needed.
-It does not support 8087 mnemonics, symbolic data segment references, or
-the ESC mnemonic.
-.PP
-The program is invoked by:
-.HS
-.Cx "dis88 [\(eno] infile [outfile]"
-.HS
-The \(eno flag causes object code to be listed.
-If no outfile is given, \fIstdout\fR is used.
-.PP
-The text segment of an object file is always padded to an even address.
-In addition, if the file has split I/D space, the text segment will be padded
-to a paragraph boundary (i.e., an address divisible by 16). Due to padding, the
-disassembler may produce a few spurious, but harmless, instructions at the end
-of the text segment.
-.PP
-Because the information to which initialized data refers cannot generally
-be inferred from context, the data segment is treated literally. Byte values
-(in hexadecimal) are output, and long stretches of null data are represented by
-appropriate \fI.zerow\fR pseudo-ops.
-Disassembly of the bss segment, on the other
-hand, is quite straightforward, because uninitialized data is all zero by
-definition.
-No data is output in the bss segment, but symbolic labels are output
-as appropriate.
-.PP
-The output of operands in symbolic form is complicated somewhat by the
-existence of assembler symbolic constants and segment override opcodes. Thus,
-the program's symbol lookup routine attempts to apply a certain amount of
-intelligence when it is asked to find a symbol. If it cannot match on a symbol
-of the preferred type, it may output a symbol of some other type, depending on
-preassigned (and somewhat arbitrary) rankings within each type. Finally, if
-all else fails, it will output a string containing the address sought as a hex
-constant. For user convenience, the targets of branches are also output, in
-comments, as hexadecimal constants.
-.SS "Error Messages"
-.PP
-Various error messages may be generated as a result of problems encountered
-during the disassembly.
-They are listed below
-.HS.
-.in +3.20i
-.ta +2.75i +0.2i
-.ti -2.95i
-Cannot access input file \(en Input file cannot be opened or read
-.ti -2.95i
-Cannot open output file \(en Output file cannot be created
-.ti -2.95i
-Input file not in object format \(en Bad magic number
-.ti -2.95i
-Not an 8086/8088 object file \(en CPU ID of the file header is incorrect
-.ti -2.95i
-Reloc table overflow \(en Relocation table exceeds 1500 entries
-.ti -2.95i
-Symbol table overflow \(en Symbol table exceeds 1500 entries
-.ti -2.95i
-Lseek error \(en Input file corrupted (should never happen)
-.ti -2.95i
-Warning: no symbols \(en Symbol table is missing (use ast)
-.ti -2.95i
-Cannot reopen input file \(en Input file was removed during execution
-.in -3.20i
-.SS "Author"
-.PP
-\fIDis88\fR was written and
-copyrighted by G. M. Harding and is included here by permission. It may be
-freely redistributed provided that complete source code, with all copyright
-notices, accompanies any redistribution. This provision also applies to any
-modifications you may make. You are urged to comment such changes, giving,
-as a minimum, your name and complete address.
...
.fi
.TP
-.I /boot/
-Contains images and files which are needed during the boot process. See \fBmonitor\fP(8).
-.TP
.I /dev/
Contains device, block, or other special files. See
.BR mknod(2).
.nf
\fBconsole\fP computer's console device, \fBtty\fP(4)
\fBfd*\fP floppy disk, \fBfd\fP(4)
- \fBhd*\fP hard disk, \fBhd\fP(4)
+ \fBc?d*\fP hard disk, \fBhd\fP(4)
\fBnull\fP accetps and discards all input; produces no output
\fBtty*\fP terminal device, \fBtty\fP(4)
\fBzero\fP the zero device; produces null bytes
\fIbin/\fP Common user programs and utilities.
- \fBcc\fP MINIX 3 c compiler, \fBcc\fP(1)
\fBman\fP show manual pages, \fBman\fP(1)
...
\fBcawf/\fP text formatter support files, \fBcawf\fP(1)
\fBcrontab\fP cron jobs, \fBcron\fP(8)
\fBdict/\fP word lists
- \fBlibc.a\fP C library (Minix-8086 only), \fBcc\fP(1)
- \fBarch\fP per architecture compiler binaries and
- libaries, \fBcc\fP(1)
- ...
-
- \fIlocal/\fP
- Contains programs which are related to local softwares.
-
- \fBbin/\fP utilities for locally installed programs
- \fBetc/\fP local configuration and data files
- \fBrc\fP local system startup
- \fBman/\fP manual pages associated with local programs
- \fBsrc/\fP local sources
+ \fBlibc.a\fP C library
...
\fIman/\fP Contains manual pages in subdirectories according to
\fBboot\fP bootstrap code, \fBinstallboot\fP(8)
...
+ \fIpkg/\fP
+ Contains programs which are related to local softwares.
+
+ \fBbin/\fP utilities for locally installed programs
+ \fBetc/\fP local configuration and data files
+ \fBman/\fP manual pages associated with local programs
+ ...
+
\fIpreserve/\fP
Contains saved elvis editor buffers.
See \fBelvprsv\fP(8), \fBelvrec\fP(1).
utilities and boot files
\fBbenchmarks/\fP
test programs for system and graphic tests
- \fBboot/\fP source files for boot monitor package
\fBcommands/\fP source file for command utilities
\fBcommon/\fP
\fBinclude/\fP includes common to NetBSD and Minix
\fBlib/\fP lib files common to NetBSD kernel and libc
- \fBcrclist\fP CRC checksums of the source tree, \fBsrccrc\fP(8)
\fBdocs/\fP documents related to recent source changes
\fBdrivers/\fP source files for various device drivers
\fBetc/\fP source for files in /etc/
MAN= add_route.8 backup.8 badblocks.8 boot.8 btrace.8 \
cdprobe.8 checkhier.8 chown.8 cleantmp.8 config.8 cron.8 \
- dhcpd.8 diskctl.8 dosminix.8 elvprsv.8 fbdctl.8 fdisk.8 fingerd.8 \
- ftpd.8 getty.8 halt.8 hgfs.8 httpd.8 ifconfig.8 inet.8 init.8 \
- installboot.8 intr.8 irdpd.8 loadramdisk.8 MAKEDEV.8 \
- mknod.8 monitor.8 netconf.8 newroot.8 nonamed.8 \
+ dhcpd.8 diskctl.8 elvprsv.8 fbdctl.8 fdisk.8 fingerd.8 \
+ getty.8 halt.8 hgfs.8 httpd.8 ifconfig.8 inet.8 init.8 \
+ intr.8 irdpd.8 loadramdisk.8 MAKEDEV.8 \
+ mknod.8 netconf.8 newroot.8 nonamed.8 \
ossdevlinks.8 part.8 partition.8 \
poweroff.8 printroot.8 pr_routes.8 pwdauth.8 rarpd.8 \
rdate.8 readclock.8 reboot.8 repartition.8 rlogind.8 \
+++ /dev/null
-.TH DOSMINIX 8
-.SH NAME
-dosminix, mkfile \- Running MINIX 3 under DOS
-.SH SYNOPSIS
-.RB "C:\eMINIX> " "boot disk0.mnx" "\0\0\0\0\0(Typical example)"
-.br
-.RB "C:\eMINIX> " "mkfile \fIsize disk"
-.SH DESCRIPTION
-.de SP
-.if t .sp 0.4
-.if n .sp
-..
-This text describes running MINIX 3
-.\" or Minix-vmd
-under DOS. The DOS version
-of the Boot Monitor, described in
-.BR monitor (8),
-grabs as much memory as DOS is willing to give, loads MINIX 3 into that memory
-from the active partition of a "file as disk", and jumps to the MINIX 3 kernel
-to let MINIX 3 take control. As far as DOS is concerned MINIX 3 is just a part
-of the
-.B boot.com
-program.
-.PP
-In the example above
-.B disk0.mnx
-is the "file as disk". It is a file of many megabytes that is used by MINIX 3
-as a disk of four partitions. These partitions will normally be
-.B /dev/dosd1
-through
-.BR /dev/dosd4 ,
-with
-.BR /dev/dosd0
-for the whole "disk". The Boot Monitor will set the
-.B dosd0
-boot variable to the name of the disk (its first argument), the root file
-system will be the active partition, usually
-.BR dosd1 .
-It is better to use the special name
-.B bootdev
-to indicate this device, usually in the setting
-.BR rootdev = bootdev .
-.PP
-Once MINIX 3 is running it will operate the same as if started from a regular
-disk partition until it is shut down. On shutdown from protected mode it
-will return to the Boot Monitor prompt, and with the
-.B exit
-command you leave the Boot Monitor and return to DOS. Shutting down from
-real mode will reboot the machine, just like when run from a disk partition.
-(This more or less crashes DOS, but DOS is used to such abuse.)
-.SS EMM386
-MINIX 3 can't run in protected mode (286 or 386 mode) if DOS is using a memory
-manager like
-.BR EMM386 .
-You can either temporarily comment out EMM386 from
-.BR CONFIG.SYS ,
-or you can press
-.B F8
-on startup to bypass CONFIG.SYS. This is only possible with the later DOS
-versions.
-.SS "Windows 95"
-Press F8 at startup to make the boot menu visible. Choose
-"\fBCommand prompt\fP", or "\fBSafe mode command prompt\fP" to run DOS.
-Use the "safe mode" if EMM386 is started in CONFIG.SYS.
-.PP
-Typing F8 at the right moment isn't easy, so you may want to change the way
-Windows boots by editing the
-.B MSDOS.SYS
-file found in the root directory of your Windows system. This is alas not
-trivial.
-Open a window on your main drive, click on "\fBView\fP" and choose
-"\fBOptions\fP." In the Options window choose "\fBView\fP" and enable
-"\fBShow all files\fP". The MSDOS.SYS file should now be visible, among
-several other hidden files. Right-click on the MSDOS.SYS icon, choose
-"\fBProperties\fP" and disable "\fBRead-only\fP". Bring MSDOS.SYS into a
-simple text editor such as Notepad. In the
-.B "[Options]"
-segment add the following lines (or change existing lines into):
-.PP
-.RS
-.nf
-BootMenu=2
-BootMenuDelay=5
-.fi
-.RE
-.PP
-The first setting makes the Windows boot menu always visible, and the second
-line changes the delay before booting to 5 seconds. Take care not to change
-anything else, or things will go horribly wrong. Save MSDOS.SYS and exit.
-Don't forget to make MSDOS.SYS read-only again, and also hide all the hidden
-files again, unless you like it this way.
-.SS "DOS compatibility box"
-The 16-bit version of standard MINIX 3 can be run in real mode in a DOS box.
-This is somewhat surprising, because it means Windows 95 simulates devices
-like the keyboard, timer, and interrupt controller well enough to fool MINIX 3
-into thinking that all is well. Alas it doesn't work as well under Windows
-NT. Keypresses get lost if you type to fast, and using the floppy
-occasionally locks MINIX 3 up. This is a bit disappointing, because it is the
-only way to run MINIX 3 under NT. Under Windows 95 one is better off
-putting the system in DOS at boot and then to run MINIX 3 in protected mode.
-.PP
-One thing that is better under NT is that the Boot Monitor is able to get a
-so-called "Upper Memory Block", thereby raising useful memory to about 750K.
-Windows 95 however hogs leftover UMB memory in a process named
-.BR vmm32 ,
-whatever that may be. To get
-some of this memory you can put
-.B "BOOT /U"
-at the start of
-.BR autoexec.bat .
-The monitor will grab a 64K UMB if it can get it, and keep that memory safe
-for use by MINIX 3 when it is later started from Windows.
-.PP
-The easiest way to start MINIX 3 is to give all MINIX 3 disk files the suffix
-.BR MNX .
-Doubleclick on the disk you want to run to make the "\fBOpen With\fP" window
-appear. Click on "\fBOther\fP" and browse to the
-.B BOOT.COM
-program. Set the name of the .mnx files to "\fBMINIX 3 "disk" file\fP" in the
-description box if you want everything right. In the future you can
-just click on a MINIX 3 disk file to run it, you don't have to start a DOS
-box first. (To make it perfect use "View", "Options", "File Types", choose
-"MINIX 3 "disk" file", "Edit", "Change Icon", "Browse", select MINIX.ICO.)
-.PP
-When MINIX 3 shuts down it will try to reboot what it thinks is a PC. Windows
-seems to assume that the DOS session has exited. Right-click on the
-BOOT.COM program, "Properties", "Program", and enable "Close on exit" to make
-the DOS box disappear automatically when MINIX 3 thinks it reboots. You may
-also want to lock the font to
-.BR 7x12 ,
-or any other font that isn't ugly.
-.PP
-MINIX 3 disk files are opened in a write-exclusive mode. A second MINIX 3
-session can only open it read-only, which may lead to a "can't open
-root device" error.
-.SS "Mkfile"
-MINIX 3 disk files can be created or resized with the
-.B mkfile
-utility. Its two arguments are the size and name of the disk file. The
-size is a number optionally followed by the letter
-.BR k ,
-.BR m
-or
-.BR g
-to specify kilobytes, megabytes, or even gigabytes. So the call
-.PP
-.RS
-.B "mkfile 50m disk5.mnx"
-.RE
-.PP
-will create a 50 megabyte file named
-.BR disk5.mnx .
-If the file already exist then it is shrunk or grown to 50 megabytes. No
-data is lost if the file is grown. If the file is shrunk then only the data
-that is cut off is lost. These features allow one to inrease the size of a
-MINIX 3 /usr partition with the following recipe:
-.PP
-.RS
-.ta +24n+2m
-.nf
-copy disk0.mnx disk0.new Copy the disk to disk0.new
-mkfile 100M disk0.new Enlarge to 100 megabytes
-boot disk0.mnx Boot the old "disk"
-[ESC] Get the attention of the monitor
-dosd5=disk0.new /dev/dosd5 becomes disk0.new
-boot
-\&...
-login: root
-.fi
-.in +(24n+2m)
-.ti -(24n+2m)
-part Choose dosd5, move to the Size field of dosd7
-partition, hit 'm' to fill it out to the end of the "disk". Write and quit.
-.in -(24n+2m)
-.nf
-mkfs /dev/dosd7 Recreate the file system, but larger
-mount /dev/dosd7 /mnt
-cpdir -v /usr /mnt Copy /usr to the new disk's /usr to be
-shutdown Back to the monitor
-exit Back to DOS
-ren disk0.mnx disk0.old
-ren disk0.new disk0.mnx Replace old by new
-boot disk0.mnx Run the larger system
-.fi
-.RE
-.PP
-Now MINIX 3 runs from a larger "disk". Don't worry if it claims to have
-crashed, there wasn't a "shutdown" entry in /usr/adm/wtmp at the time it was
-copied.
-.PP
-The above recipe is for a ordinary standard MINIX 3 installation with /usr on
-the second and last partition.
-.\" Minix-vmd usually has /usr on the third and
-.\" last partition (dosd3 / dosd8), its
-.\" .B mkfs
-.\" command requires a
-.\" .B "-t\ 2f"
-.\" option to specify the file system type as "V2 flex", and it knows if
-.\" it has crashed or not.
-.SS Backups
-In the recipe above you saw how simple it is to create a new system, just
-copy a disk file. It is equally simple to make a backup, you just copy the
-disk file. To make a test system: copy the disk file. To make another test
-system: copy the disk file. Let friends have their own MINIX 3: copy the disk
-file again. (Exciting, eh?)
-.PP
-You may want to save a MINIX 3 disk file in a ZIP file to save space. It may
-look as a good idea to first run
-.B "make clean"
-in
-.B /usr/src
-to remove all the binary junk, but alas that has no effect at all.
-The disk file is compressed under DOS, and there it is unknown which blocks
-are in use and which are free. With the following trick you can make those
-deleted blocks compress really well:
-.PP
-.RS
-.nf
-cd /usr/tmp
-echo >junk
-while cat junk >>junk; do :; done
-sync
-rm junk
-.fi
-.RE
-.PP
-After these commands all free blocks contain newlines. Long runs of the
-same byte happen to compress by a factor 1000, so the unused disk blocks
-will almost disappear in the ZIP file.
-.\" Under Minix-vmd you can use
-.\" .PP
-.\" .RS
-.\" cp /dev/zero junk
-.\" .RE
-.\" .PP
-.\" instead of the echo/while pair of lines above. Standard MINIX 3 doesn't have
-.\" /dev/zero.
-.SS "FAT driver"
-The dos disk driver, described in
-.BR dosd (4),
-has two identities. By default you get the "\fBfile\fP" driver, that uses
-DOS file I/O calls to access a large DOS file as a disk. The other
-alternative is the "\fBFAT\fP" driver. The FAT driver sits on top of an
-ordinary MINIX 3 disk driver, and interprets a partition as a FAT (File Access
-Table) file system to find a file to use as a MINIX 3 disk. The result
-has the same effect as the file driver, except that no costly calls to DOS
-are made. To enable this feature you have to use the following Boot
-environment settings:
-.PP
-.RS
-.nf
-dosd = fat
-dosd0 = hd1:\eminix\edisk0.mnx
-.fi
-.RE
-.PP
-The
-.B dosd
-setting tells MINIX 3 to use the FAT driver, and the
-.B dosd0
-setting tells the MINIX 3 device and DOS file name to use. Disk I/O should
-be sped up nicely by this change, although typical use of MINIX 3 doesn't
-require fast disk I/O, so the difference won't be too noticable.
-.PP
-Support for FAT-32 (big file system support added in the later Windows 95
-releases) has not been tested very well. The FAT-12 and FAT-16 code has
-been used a lot, and seems safe. Note the risks inherent in these
-drivers: The file driver uses simple DOS file I/O calls, leaving it to
-DOS to know its own file system. The FAT driver interprets FAT file system
-structures by itself. MINIX 3 booted from a real hard disk partition can
-only use DOS disk files through the FAT driver.
-.SH "SEE ALSO"
-.BR dosd (4),
-.BR monitor (8),
-.BR usage (8).
-.SH NOTES
-Use at your own risk.
-.SH BUGS
-Hasn't been tried under Windows 98 yet.
-.PP
-Pray the deity of your choice will forgive you for running a UNIX-like
-system as an ordinary DOS program. The author of this code is already
-doomed. When his time comes the daemons wi*(&%*$%*&
-.br
-Memory fault \- core dumped
-.SH AUTHOR
-Kees J. Bot (kjb@cs.vu.nl)
+++ /dev/null
-.\" Copyright (c) 1985 Regents of the University of California.
-.\" All rights reserved. The Berkeley software License Agreement
-.\" specifies the terms and conditions for redistribution.
-.\"
-.\" @(#)ftpd.8c 6.4 (Berkeley) 5/28/86
-.\"
-.TH FTPD 8
-.SH NAME
-ftpd, in.ftpd, setup.anonftp \- DARPA Internet File Transfer Protocol server
-.SH SYNOPSIS
-.B "ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd"
-.br
-.B "tcpd ftp /usr/sbin/in.ftpd"
-.SH DESCRIPTION
-.B Ftpd
-is the DARPA Internet File Transfer Prototocol
-server process. The server uses the TCP protocol
-and listens at the port specified in the ``ftp''
-service specification; see
-.BR services (5).
-.PP
-The ftp server currently supports the following ftp
-requests; case is not distinguished.
-.PP
-.nf
-.ta \w'Request 'u
-\fBRequest Description\fP
-ABOR abort previous command
-ACCT specify account (ignored)
-ALLO allocate storage (vacuously)
-APPE append to a file
-CDUP change to parent of current working directory
-CWD change working directory
-DELE delete a file
-HELP give help information
-LIST give list files in a directory (``ls -lA'')
-MKD make a directory
-MODE specify data transfer \fImode\fP
-NLST give name list of files in directory (``ls'')
-NOOP do nothing
-PASS specify password
-PASV prepare for server-to-server transfer
-PORT specify data connection port
-PWD print the current working directory
-QUIT terminate session
-RETR retrieve a file
-RMD remove a directory
-RNFR specify rename-from file name
-RNTO specify rename-to file name
-STOR store a file
-STOU store a file with a unique name
-STRU specify data transfer \fIstructure\fP
-TYPE specify data transfer \fItype\fP
-USER specify user name
-XCUP change to parent of current working directory
-XCWD change working directory
-XMKD make a directory
-XPWD print the current working directory
-XRMD remove a directory
-.fi
-.PP
-The remaining ftp requests specified in Internet RFC 959 are
-recognized, but not implemented.
-.PP
-The ftp server will abort an active file transfer only when the
-ABOR command is preceded by a Telnet "Interrupt Process" (IP)
-signal and a Telnet "Synch" signal in the command Telnet stream,
-as described in Internet RFC 959.
-.PP
-.B Ftpd
-interprets file names according to the ``globbing''
-conventions used by
-.BR csh (1).
-This allows users to utilize the metacharacters ``*?[]{}~''.
-.PP
-.B Ftpd
-authenticates users according to three rules.
-.IP 1)
-The user name must be in the password data base,
-.BR /etc/passwd ,
-and not have a null password. In this case a password
-must be provided by the client before any file operations
-may be performed.
-.IP 2)
-The user name must not appear in the file
-.BR /etc/ftpusers .
-.IP 3)
-If the user name is ``anonymous'' or ``ftp'', an
-anonymous ftp account must be present in the password
-file (user ``ftp''). In this case the user is allowed
-to log in by specifying any password (by convention this
-is given as the client host's name).
-.PP
-In the last case,
-.B ftpd
-takes special measures to restrict the client's access privileges.
-The server performs a
-.BR chroot (2)
-command to the home directory of the ``ftp'' user.
-In order that system security is not breached, it is recommended
-that the ``ftp'' subtree be constructed with care; the following
-rules are recommended.
-.IP ~ftp)
-Make the home directory owned by ``ftp'' and unwritable by anyone.
-.IP ~ftp/bin)
-Make this directory owned by the super-user and unwritable by
-anyone. The program
-.BR ls (1)
-must be present to support the list commands. This
-program should have mode 111.
-.IP ~ftp/etc)
-This directory could be created, and could have
-.BR passwd (5)
-and
-.BR group (5)
-databases in it so that
-.B ls
-can show file ownership, but outsiders will grab your password file and
-misuse it to spam you. So don't bother.
-.IP ~ftp/pub)
-Make this directory mode 755 and owned by the super-user. Create
-directories in it owned by users if those users want to manage an
-anonymous ftp directory.
-.IP ~ftp/pub/incoming)
-Optionally create this directory for anonymous uploads. Make it mode
-777. The FTP daemon will create files with mode 266, so remote users
-can write a file, but only local users can do something with it.
-.PP
-The script
-.B setup.anonftp
-can be used to create or check an anonymous FTP tree.
-.SH "SEE ALSO"
-.BR ftp (1).
-.SH BUGS
-The anonymous account is inherently dangerous and should
-avoided when possible.
-.ig \" MINIX 3 doesn't have privileged port numbers (yet?)
-.PP
-The server must run as the super-user
-to create sockets with privileged port numbers. It maintains
-an effective user id of the logged in user, reverting to
-the super-user only when binding addresses to sockets. The
-possible security holes have been extensively
-scrutinized, but are possibly incomplete.
-..
+++ /dev/null
-.TH INSTALLBOOT 8
-.SH NAME
-installboot \- make a device bootable
-.SH SYNOPSIS
-.B installboot \-i(mage)
-.I image
-.RI [ label :] kernel
-.IR "mm fs" " ... " init
-.br
-.B installboot \-(e)x(tract)
-.I image
-.br
-.B installboot \-d(evice)
-.I device bootblock boot
-.RI [[ label :] image
-\&...]
-.br
-.B installboot \-b(oot)
-.I device bootblock boot
-.RI [ label :] image
-\&...
-.br
-.B installboot \-m(aster)
-.I device masterboot
-.RI [ keys " [" logical ]]
-.SH DESCRIPTION
-.de SP
-.if t .sp 0.4
-.if n .sp
-..
-.B Installboot
-may be used to make a device bootable by constructing a kernel image and
-installing bootstrap code into the boot block of a MINIX 3 file system. To
-understand how this can be done one first has to know what happens when a
-PC is booted.
-.PP
-When the power is turned on the typical PC will try to read the first sector
-from the first floppy disk or from the first hard disk into memory and execute
-it. The code obtained from the hard disk (from the so-called master boot
-sector) will immediately replace itself by the code found in the first sector
-of the active partition. Thus the PC is now executing the bootstrap code found
-in the first sector of /dev/fd0, /dev/c0d0p0, /dev/c0d0p1, /dev/c0d0p2, or
-/dev/c0d0p3 (assuming the boot disk is attached to controller 0.)
-The bootstrap will locate the operating system on the device it itself was
-loaded from, load it, and execute it.
-.PP
-To make a MINIX 3 file system
-.B /dev/fd0
-mounted on
-.B /mnt
-bootable, enter the following:
-.SP
-.RS
-.ft B
-cp /usr/mdec/boot /mnt/boot
-.SP
-installboot \-i /mnt/minix kernel mm fs init
-.SP
-installboot \-d /dev/fd0 /usr/mdec/bootblock boot
-.ft P
-.RE
-.PP
-The "boot" program in the example is named the "Boot Monitor". It is loaded
-by the bootblock code placed in the boot sector of /dev/fd0 and it will take
-care of loading the kernel image "minix" from the root directory of the
-file system. See
-.BR monitor (8)
-for a description of the Boot Monitor. Note that
-.B boot
-is a name in the file system on
-.B /dev/fd0
-in this example, the same file as
-.BR /mnt/boot .
-Making
-.B /mnt/minix
-is normally not necessary, there is usually a kernel image in the
-.B tools
-directory.
-.SH OPTIONS
-.B \-i(mage)
-.I image
-.RI [ label :] kernel
-.IR "mm fs" " ... " init
-.RS
-The
-.B \-image
-option (or the
-.B \-i
-shorthand) combines the executable files needed to run MINIX 3 in one file.
-Only the names and a few zero bytes are inserted into the image. The name
-is for identification and the zeros are used to pad separate pieces to
-sector boundaries for fast loading.
-.SP
-An executable may be prefixed by a label. The Monitor may be instructed to
-load processes by label. So more than one kernel process may be included in
-the image, each with a different winchester driver for instance. So if you
-have compiled two different kernels with an AT or XT driver then
-.SP
-.RS
-.BI "installboot \-i" " image AT:at_kernel XT:xt_kernel mm fs init"
-.RE
-.SP
-will make an image with two different labeled kernels and one
-unlabeled set of the other binaries.
-.RE
-.PP
-.B \-(e)x(tract)
-.I image
-.RS
-Extract the binaries from
-.I image
-under the names stored in the image. (The name includes the optional label.)
-.RE
-.PP
-.B \-d(evice)
-.I device bootblock boot
-.RI [[ label :] image
-\&...]
-.RS
-Installs
-.I bootblock
-in the boot sector of
-.I device
-together with the disk addresses to
-.IR boot .
-These disk addresses are needed to load
-.I boot
-from the file system at boot time. The argument
-.I boot
-is first searched in the file system on
-.IR device .
-If it is not found then it is read as a normal file and added at the end of
-the file system. The file system should be smaller than the device it is on
-to allow this. Any extra images are also added to the end as described
-under
-.BR \-boot .
-(Make sure you understand all this.)
-.SP
-The device need not be mounted when
-.B installboot
-is run, nor does it matter if it is.
-.SP
-.B Installboot
-needs to be run again if
-.I boot
-is rewritten, because it will then occupy a new place on the disk.
-.SP
-Old boot parameters are kept if there are no images added.
-.RE
-.PP
-.B \-b(oot)
-.I device bootblock boot
-.RI [ label :] image
-\&...
-.RS
-This option fills a blank floppy in
-.I device
-with boot code and kernel images. This "boot disk" does not have a root
-file system, only the Boot Monitor and MINIX 3 kernels. The boot parameters
-sector is filled with code that enables menu options for selecting an
-image. After loading an image, the Monitor will ask you to insert a root
-file system diskette before starting MINIX 3.
-.SP
-The labels used on the images should match those on the executables used
-inside the image. You can put a comma separated list of labels on an image
-for each label used within the image. For the image created earlier one
-would create a boot floppy like this:
-.SP
-.RS
-.nf
-.BI "installboot \-b /dev/fd0 bootblock boot" " AT,XT:image"
-.fi
-.RE
-.SP
-If a label-list is omitted on an image, then that image will be selected by
-default. (Like in the normal one image, no labels case.)
-.SP
-Note that
-.B \-device
-and
-.B \-boot
-together allow you to make a boot floppy with or without a root file system.
-With the boot code in the file system, attached to the end of it, or after
-the boot block. And with one or more kernel images in the file system or
-at the end of the device. Somewhat confusing.
-.RE
-.PP
-.B \-m(aster)
-.I device masterboot
-.RI [ keys " [" logical ]]
-.RS
-This option installs the
-.I masterboot
-program into the boot sector of the given device. If another device is
-given instead of
-.I masterboot
-then its bootstrap code is copied to
-.IR device .
-The master bootstrap on a hard disk boots the active partition on that disk
-at boot time. The MS-DOS fdisk command normally puts a master bootstrap on
-the hard disk. MINIX 3 has two bootstraps that can be used as a master
-bootstrap,
-.B masterboot
-and
-.BR jumpboot.
-.SP
-.B Masterboot
-is a fairly normal master bootstrap that works as follows:
-.RS
-.SP
-If installed on a hard disk then it will load the bootstrap of the active
-partition and run it.
-.B Masterboot
-can be put in the first sector of a hard disk to boot the active partition,
-or in the first sector of a MINIX 3 partition to boot the active subpartition.
-.SP
-If installed on a MINIX 3 floppy then it will try to boot the next floppy or
-the first hard disk. Ideal for floppies with just data on it, they will no
-longer obstruct the boot process if left in the drive. Also a very useful
-trick to boot from floppy drive 1.
-.RE
-.SP
-The other bootstrap named
-.B jumpboot
-is used for the weird cases:
-.SP
-.RS
-If your default operating system is installed on another disk then
-.B jumpboot
-can be installed on the first disk and instructed to boot the disk,
-partition or subpartition that must be booted by default.
-.SP
-If one of your operating systems insists on being active when booted then use
-.B jumpboot
-to ignore the active flag and boot your preferred O.S. instead. The Boot
-Monitor's "\fBboot\ \(**\fP" trick to activate the partition to boot is
-useful here.
-.SP
-To boot a logical partition within an extended partition. Note that you can
-put
-.B jumpboot
-in the first sector of the extended partition in this case, with the
-extended partition marked active.
-.SP
-If you hold down the ALT key while
-.B jumpboot
-is being executed, then you can type the disk, partition or subpartition
-you want to boot as one to three digits followed by typing ENTER.
-.RE
-.SP
-.B Jumpboot
-can be programmed to boot a certain partition with the
-.I keys
-argument and optionally also the
-.I logical
-argument.
-.I Keys
-are one to three digits naming the disk, partition or subpartition. If the
-device to boot is
-.BR /dev/c0d1p3s0 ,
-then
-.I keys
-is
-.BR 130 .
-These are the same three digits you can type manually if you hold down ALT
-at boot. To program
-.B jumpboot
-to boot a logical partition within an extended partition, let
-.I keys
-be just a disk number, and specify
-.I logical
-as the name of the logical partition on that disk that is to be booted.
-(Actually
-.I logical
-can be any device name, but this form should be avoided because it offers
-less checking to see if the device is still there after a disk
-rearrangement.)
-.SP
-A backup copy of the current master bootstrap (including the partition
-table) can be made with:
-.RS
-.SP
-dd if=\fIdevice\fP of=\fIbackup-file\fP count=1
-.SP
-.RE
-A simple 'cp \fIbackup-file\fP \fIdevice\fP' will put it back. You can
-also use
-.B fdisk /mbr
-under MS-DOS 5.0 (or newer) to restore the master bootstrap.
-.RE
-.RE
-.SH FILES
-.TP 25
-.B /usr/mdec/bootblock
-MINIX 3 bootstrap for the Minix root device. To be placed in the boot sector.
-.TP
-.B /usr/mdec/boot
-MINIX 3 Boot Monitor. Can usually be found in the root directory of a bootable
-device.
-.TP
-.B /usr/mdec/masterboot
-Master bootstrap. Can be placed in the first sector of a disk to select the
-active partition. In a MINIX 3 primary partition it selects the active
-subpartition.
-.TP
-.B /usr/mdec/jumpboot
-Special "boot this" bootstrap.
-.SH "SEE ALSO"
-.BR part (8),
-.BR monitor (8).
-.SH DIAGNOSTICS
-.I File
-is not an executable
-.RS
-What you think is boot code or part of the kernel isn't.
-.RE
-.SP
-.I Program
-will crash, text/data segment larger then 64K
-.RS
-One of the 16-bit programs added to an image has a text or data segment
-that is larger than 64K. You probably enabled too many drivers, or
-configured too many buffers.
-.RE
-.SP
-.I File
-can't be attached to
-.I device
-.RS
-You are trying to put the boot monitor or an image after a file system, but
-there is no or not enough space. Did you specify the full path of the
-monitor instead of just "boot"?
-.RE
-.SP
-.I Device
-is not a MINIX 3 file system
-.RS
-You are using
-.B \-device
-on a device that doesn't contain a file system. Maybe you specified the
-wrong device, maybe you should make a file system, or maybe you should use
-.BR \-boot .
-.RE
-.SP
-.I Device
-contains a file system
-.RS
-You are about to destroy a file system with
-.BR \-boot .
-Maybe you meant to use
-.BR \-device ?
-You have 10 seconds to make up your mind...
-.RE
-.SP
-.I File
-is too big
-.RS
-Several types of messages like these will tell you that
-.I file
-can't be installed in a boot sector, or that there is no room to add some
-parameters, etc. Is
-.I file
-really a bootstrap?
-.RE
-.SS "Bootstrap errors"
-Read error
-.RS
-A read error trying to get the next bit of boot code. You may even get the
-BIOS error code in hex. Either the device has a bad block, or jumpboot is
-told to read a nonexistent disk.
-.RE
-.SP
-No active partition
-.RS
-None of the partitions in a partition table is marked active.
-.RE
-.SP
-Not bootable
-.RS
-Partition does not exist (jumpboot), or it's bootstrap isn't executable.
-.RE
-.SH NOTES
-The MINIX 3 bootstraps can boot beyond the 8G disk size limit if the BIOS
-supports the IBM/MS INT 13 Extensions. Alas only Minix-vmd can make use of
-this, standard MINIX 3 has a 4G disk size limit.
-.SH BUGS
-It has four more options than the SunOS installboot program it is modeled
-after.
-.PP
-The bootblock code has been crunched to such ugliness that you can use it
-to scare little kids out of your garden.
-.SH AUTHOR
-Kees J. Bot (kjb@cs.vu.nl)
-.\"
-.\" $PchId: installboot.8,v 1.7 2000/08/13 22:09:31 philip Exp $
+++ /dev/null
-.TH MONITOR 8
-.SH NAME
-monitor, edparams \- load and start MINIX 3, modify boot parameters
-.SH SYNOPSIS
-.B /boot
-.br
-.B edparams
-.I device
-.RI [ command " ...]"
-.br
-.B boot.com
-.I virdisk
-.RI [ command " ...]"
-.SH DESCRIPTION
-.de SP
-.if t .sp 0.4
-.if n .sp
-..
-This text describes the Boot Monitor, a boot time interactive program designed
-not only to load and start MINIX 3, its most important task, but to also
-provide an interface to configure MINIX 3 and to boot other operating systems.
-.PP
-The monitor is controlled with an environment that is modeled after the
-Bourne shell. This environment is filled at startup with default values
-that depend on the machine the monitor is running on and the environment
-settings saved into the boot parameters sector (the second sector on a
-device). When the environment is loaded, the monitor executes the function
-named
-.BR main ,
-which by default starts a simple menu.
-.PP
-The environment can be manipulated at boot time from the monitor prompt,
-but may also be edited using
-.B edparams
-on a given device.
-.B Edparams
-simulates the monitor as much as it can, echoing commands it can't execute
-between brackets. It can also be used in Makefiles and scripts by giving
-it commands as arguments.
-.PP
-The DOS version of the monitor, usually named
-.B boot.com
-under DOS, boots MINIX 3 from a "DOS virtual disk".
-.B Boot.com
-is a simple COM program that interprets a DOS
-file as a disk, loads a MINIX 3 kernel from the active partition in the same
-way as the BIOS based monitor, and executes it to start MINIX 3. All the
-monitor commands function in the same way, except for the
-.B boot
-command, it can only load MINIX 3. The monitor grabs as much free memory as
-it can for MINIX 3 to work in, as the
-.B memory
-variable shows. Further details on how to run MINIX 3 under DOS, Windows 95,
-or even Windows NT are written down in
-.BR dosminix (8).
-.SH COMMANDS
-The monitor is best described by the commands you can type to the '>'
-prompt. This is known as the "monitor mode". You can enter this mode by
-hitting the Escape key. These are the monitor commands:
-.PP
-\fIname\fP = [\fBdevice\fP] \fIvalue\fP
-.SP
-.RS
-Set environment variable.
-.br
-Changes the value of
-.I name
-to
-.IR value .
-The optional word
-.B device
-marks
-.I name
-as being subject to device translation. (See the section on devices.) These
-(name, value) pairs are passed to the kernel who uses them to configure
-itself. These variables are passed by default:
-.SP
-.B rootdev
-.RS
-This is the device used as your root device. It is by default set to
-.BR ram,
-which means that the device specified by
-.B ramimagedev
-will be loaded into the RAM disk and used as root. If you change this
-variable then a physical device will be used as root, and the RAM disk will
-be uninitialized and have the size specified by
-.BR ramsize .
-.RE
-.SP
-.B ramimagedev
-.RS
-Describes the device to use to initialize the RAM disk if
-.B rootdev
-is set to
-.BR ram .
-It's by default set to
-.BR bootdev ,
-a special name for the device the monitor booted from.
-.RE
-.SP
-.B ramsize
-.RS
-The size of the RAM disk. If the RAM disk is used for the root file system
-then the root file system is stretched out to
-.B ramsize
-if possible.
-.RE
-.SP
-.B processor
-.RS
-Set by default to
-.BR 86 ,
-.BR 186 ,
-.BR 286 ,
-.BR 386 ,
-.BR 486 ", ..."
-depending on the hardware you have. You can set it to a smaller value to
-test your kernel in a more limited environment.
-.RE
-.SP
-.B bus
-.RS
-The type of system bus, either
-.BR xt ,
-.BR at
-or
-.BR mca .
-This answers basic questions like: "How many interrupt controllers and how
-to initialize?" Or: "Does the keyboard have LEDs?"
-.RE
-.SP
-.B memory
-.RS
-List of memory free for use by MINIX 3. It is a comma separated list of
-.IR base:size
-pairs denoting the byte offsets and sizes of free memory in hexadecimal.
-.B "800:925E0,100000:F00000"
-is a typical example of about 585K starting at 2K, and 15M starting at 1M.
-(The first 2K are BIOS parameters and the 53K under the 640K boundary is
-the monitor itself.) The very last number you can play with if you know
-what you are doing. Either increase it if the monitor has it wrong, or
-decrease it to test if MINIX 3 still runs with less memory then normal.
-.RE
-.SP
-.B video
-.RS
-Describes capabilities of the VDU:
-.BR mda ,
-.BR cga ,
-.B ega
-or
-.BR vga .
-.RE
-.SP
-.B chrome
-.RS
-Either
-.B color
-or
-.BR mono .
-.RE
-.SP
-.B c0
-.RS
-By default
-.B at
-(AT compatibles),
-.B bios
-(XT or PS/2), or
-.B dosfile
-(running under DOS).
-The
-.B c0
-variable binds a driver to the first controller, i.e. the
-.B /dev/c0*
-devices. The monitor sets
-.B c0
-to a suitable default, so that most machines can find their disk.
-.RE
-.SP
-.B console
-.RS
-If set to a hexadecimal value it makes the monitor set the BIOS video mode to
-this value when MINIX 3 is started.
-This allows the use of video modes with more rows or colums than the
-standard 80x25 mode. You can use any text mode in the 00-FF range, and VESA
-extended modes in the 100-FFF range. Most text modes use a 9x16 font with
-400 scanlines on screen, so you see 400/16 = 25 lines. The text mode can be
-modified by adding special flags to the console setting. Add
-2000 to switch to 480 scan lines, adding 20% more lines to the screen. Add
-4000 to select a 9x14 font, so 28 or 34 lines are shown. Add 8000 instead
-to select an 8x8 font showing 50 or 60 lines. Each setting has drawbacks.
-Using 480 scanlines implies a 60 Hz refresh, so the screen may flicker. The
-8x8 font looks squashed. More letters on screen require more memory, so there
-is less for virtual consoles. Interesting modes to try are 4003 (80x28),
-2003 (80x30), 6003 (80x34), 8003 (80x50), A003 (80x60), 109 (132x25),
-10A (132x43), 10B (132x50), 10C (132x60). The 109 VESA mode is often
-available, and can be modified like mode 3. Use mode 7 instead of 3 for
-monochrome. Which modes and flags work can only be found out by experiment.
-More parameters may follow the mode number that are of interest
-to the console driver, see
-.BR boot (8).
-.RE
-.SP
-.B dosfile-d0
-.RS
-Set by the DOS version of the monitor to the name of the virtual disk, i.e.
-the
-.I virdisk
-argument as shown above. The "dosfile" driver
-will use this as the name of the file to use as a disk.
-.RE
-.SP
-Two variables are only used by the monitor, even though they are passed to the
-kernel too:
-.SP
-.B image
-.RS
-The name of the file containing the kernel image, by default
-.BR minix .
-If it refers to a directory however then the newest file inside the
-directory is chosen to be the kernel image. The names inside
-.B /minix/
-are best set to the MINIX 3 version you are using, which looks good when the
-monitor prints its name. Rules for pretty printing image names:
-.RS
-.SP
-A '/' or '_' is changed to a space.
-.SP
-The first letter is changed from lowercase to uppercase.
-.SP
-An 'r' if followed by a digit changes to " revision ".
-.RE
-.RE
-.SP
-.B label
-.RS
-If set then only processes marked with this label or without a label are
-loaded from the image.
-.RE
-.SP
-.B Installboot \-boot
-will create functions to select images and labels. These functions will set
-.B label
-and
-.B image
-and echo what you selected. The two numbers separated by a colon used as an
-image name tell the starting sector and sector count of the image on disk.
-.RE
-.SP
-\fIname\fP() \fIcommand\fP
-.RS
-Define function.
-.br
-Functions may be used to bundle a set of commands, so that you can easily
-boot MINIX 3 with a different set of parameters then normal. E.g.
-.SP
-.RS
-ram() { rootdev=ram; boot }
-.RE
-.SP
-will allow you to run MINIX 3 with the root device on RAM for a change, if you
-normally use a real device as root. There are three predefined functions,
-.BR leader ,
-with default value an
-.B echo
-command that shows the monitor's startup banner,
-.BR main ,
-with default value
-.BR menu ,
-and
-.BR trailer ,
-with default value a command that clears the screen.
-The monitor executes
-.B leader;main
-at startup to show the banner message and a menu. The
-.B trailer
-function is executed just before MINIX 3 is started. These three functions can
-be redefined as you please.
-.RE
-.SP
-\fIname\fP(\fIkey\fP) \fIcommand\fP
-.RS
-Define kernel selecting function.
-.br
-The menu command uses functions like these to add menu entries to select
-a different kernel from a boot disk.
-.B Installboot \-boot
-produces these functions when the images are labeled. The label
-.B AT
-would give:
-.SP
-.RS
-AT(a) {label=AT;image=42:626;echo AT kernel selected;menu}
-.RE
-.SP
-With the menu option:
-.SP
-.RS
-a Select AT kernel
-.RE
-.SP
-Typing
-.B a
-will then execute the
-.B AT
-function above.
-.RE
-.SP
-\fIname\fP(\fIkey\fP,\fItext\fP) \fIcommand\fP
-.RS
-User defined menu option.
-.br
-This variant may be used to make any menu entry you like:
-.SP
-.RS
-dos(d,Boot MS-DOS) boot d0p0
-.RE
-.SP
-.I Text
-may be anything, even parentheses if they match.
-.RE
-.SP
-.I name
-.RS
-Call function.
-.br
-If
-.I name
-is a user defined function then its value is expanded and executed in place of
-.IR name .
-Try a recursive one like 'rec() {rec;xx}' one day. You can see the monitor
-run out of space with nice messages about using
-.BR chmem (1)
-to increase it's heap.
-.RE
-.SP
-\fBboot\fP [\fB\-\fP\fIopts\fP]
-.br
-\fBboot\fP \fIdevice\fP
-.RS
-Boot MINIX 3 or another O.S.
-.br
-Without an argument,
-.B boot
-will load and execute the MINIX 3 image named by the
-.B image
-variable. With options the variable
-.B bootopts
-is first set to
-.BI \- opts
-before MINIX 3 is started, and unset when Minix returns. With a
-.I device
-argument,
-.B boot
-loads the boot sector of
-.I device
-into memory and jumps to it, starting another operating system. You would
-normally use partitions on the first hard disk for this command (d0p[0\-3]),
-using d0 will also work (choosing the active partition). One can also boot
-devices on the second hard disk (d1, d1p[0\-3]) if the bootstrap writer did
-not hardwire the disk number to disk 0.
-.br
-Some Operating Systems can only be booted from the active partition, if
-you use a '*', e.g.
-.BR "boot *d0p2" ,
-then partition 2 is first made active. You'll then need to use
-.SP
-.RS
-.BI "installboot \-m /dev/c0d0 /usr/mdec/jumpboot" " keys"
-.RE
-.SP
-with
-.I keys
-chosen so that MINIX 3 is booted at startup. (See
-.BR installboot (8).)
-.RE
-.SP
-\fBctty\fP \fIn\fP
-.RS
-Copies output to and takes input from serial line
-.I n
-(0-3) at 9600 baud, 8 bits, no parity.
-This allows you to control a MINIX 3 system remotely through an RS-232
-connection.
-.RE
-.SP
-\fBdelay\fP [\fImsec\fP]
-.RS
-Delay (500 msec default).
-.br
-Fast booting speed was one of the objectives when this program was created,
-so a hard disk boot usually takes only a fraction of a second. If you need
-some time (to hit Escape, or stare at the numbers) you can use
-.B delay
-to make the monitor pause for a specified number of milliseconds.
-.RE
-.SP
-\fBecho\fP \fIword\fP ...
-.RS
-Print these words.
-.br
-Used to display messages, like the startup banner. Echo normally prints
-the words with spaces in between and a newline at the end. Echo understands
-special '\e' escape sequences as follows:
-.RS
-.SP
-\e (At the end) Don't print a newline.
-.br
-\en Print a newline.
-.br
-\ev Print the monitor's version numbers.
-.br
-\ec Clear the screen.
-.br
-\ew Wait until a RETURN is typed
-.br
-\e\e Print a backslash.
-.RE
-.RE
-.SP
-\fBls\fP [\fIdirectory\fP]
-.RS
-List contents of a directory.
-.br
-Useful when looking for kernel images.
-.RE
-.SP
-.B menu
-.RS
-Menu driven startup.
-.br
-This command allows you to execute functions defined with a
-.IR key .
-If no menu functions have been defined then
-.B menu
-will use this one hidden built-in function:
-.SP
-.RS
-*(=,Start Minix) boot
-.SP
-.RE
-Kernel selecting functions only add new options to this set, but if you
-define a two argument function yourself then the above one is no longer
-shown, allowing you to customize the menu completely. Your first
-function definition should therefore be one that starts MINIX 3.
-.SP
-Menu entries are shown in the same order as
-.B set
-shows them. If you don't like the order then you have to unset the
-functions and retype them in the proper order.
-.SP
-If you type a key then a scheduled trap is killed and the appropriate menu
-function is executed. If you need more time to choose then hit the
-spacebar. A key not on the menu also kills a trap, but does nothing more.
-.RE
-.SP
-.B save
-.RS
-Save environment.
-.br
-This will save all the environment variables and functions with nondefault
-values to the parameter sector (the second sector on the boot device), so
-they are automatically set the next time you boot the monitor.
-.RE
-.SP
-.B set
-.RS
-Show environment.
-.br
-Show the current values of the environment variables and functions. Default
-values are shown between parentheses to distinguish them from values that
-were explicitly set.
-.RE
-.SP
-\fBtrap\fP \fImsec\fP \fIfunction\fP
-.RS
-Schedule function.
-.br
-Schedules a function to be executed after
-.I msec
-milliseconds. Only the monitor mode cannot be interrupted, a scheduled trap
-is killed when the prompt is printed. Example:
-.SP
-.RS
-main() {trap 10000 boot; menu}
-.RE
-.SP
-This gives you 10 seconds to choose a menu option before MINIX 3 is booted.
-.RE
-.SP
-\fBunset\fP \fIname\fP ...
-.RS
-Unset environment variables.
-.br
-Removes the named variables and functions from the environment, and sets
-special variables back to their default values. This is also the only way
-to remove the "device name translation" property from a variable.
-.RE
-.SP
-\fBexit\fP
-.RS
-Exit the monitor.
-.br
-Reboot the machine, exit to MINIX 3 or exit to DOS as appropriate.
-.RE
-.SP
-\fBoff\fP
-.RS
-Turn the PC off.
-.br
-If the PC supports power management then turn it off, otherwise
-print some error messages and do nothing.
-.RE
-.SP
-\fB{\fP \fIcommand\fP; ... \fB}\fP
-.RS
-Bundle commands.
-.br
-Treat a number of commands as a single command. Used for function
-definitions when a function body must contain more than one command.
-.RE
-.SH DEVICES
-The MINIX 3 kernel can't do anything with device names, so they have to be
-translated to device numbers before they are passed to the kernel. This
-number is found under the st_rdev field (see
-.BR stat (2))
-of the file on the boot file system. The monitor will look for the device
-file with the working directory set to '/dev'. If it can't find the device
-name then it will translate names like 'ram', 'fd1', 'c0d1p0', 'c1d0p2s0',
-and even the obsolete 'hd2a' to what it itself thinks the numbers should be.
-.PP
-The special name
-.B bootdev
-is translated to the name of the device booted from, like 'fd0',
-or 'c0d0p1s0', and then searched for in /dev.
-.B Bootdev
-can only be translated to a device for the first controller, and only if
-the disks on that controller are numbered without "gaps". (The master
-device on the second IDE channel is always d2 on MINIX 3. The BIOS will
-call it disk 0, 1, or 2 depending on the number of disks on the first
-IDE channel.)
-.SP
-Controller numbers are meaningless to the BIOS, so everything is assumed to
-be attached to controller 0. You can omit
-.B c0
-for device names, and it is best to always omit
-.B c0
-for the
-.B boot
-command, and to always use the full name for variables passed to MINIX 3.
-.SH EXTENSIONS
-A few extensions have been made to this program for kernel hackers. They
-may be triggered by setting bits in the flags word in the kernel startup
-code (the mpx file.) The flag bits are:
-.TP 10
-0x0001
-Call kernel in 386 mode.
-.TP
-0x0002
-Do not make space for the bss areas of processes other than the kernel.
-.TP
-0x0004
-Use the stack size set by
-.BR chmem (1).
-.TP
-0x0008
-Load PM, VFS, etc. into extended memory.
-.TP
-0x0010
-No need to patch process sizes into the kernel.
-.TP
-0x0020
-The kernel can return to the monitor on halt or reboot.
-.TP
-0x0040
-Offer generic BIOS support instead of just INT 13 (disk I/O).
-.TP
-0x0080
-Pass memory lists for free and used memory (processes).
-.TP
-0x0100
-Kernel returns monitor code on shutdown in boot parameters array.
-.SH "SEE ALSO"
-.BR controller (4),
-.BR installboot (8),
-.BR usage (8),
-.BR boot (8),
-.BR dosminix (8).
-.SH BUGS
-The
-.B delay
-command will hang forever on the original IBM PC (not the XT!). Not that it
-matters, as everything takes forever on that box.
-.PP
-By redefining
-.B leader
-one can easily hide the identity of this program.
-.SH ACKNOWLEDGMENTS
-Earl Chew, for the inspiration his ShoeLace package provided, unless he wants
-to file a "look and feel" suit against me, then I will say I modeled it after
-the Sun ROM boot monitor, which is also true.
-.SH AUTHOR
-Kees J. Bot (kjb@cs.vu.nl)
-.\"
-.\" $PchId: monitor.8,v 1.11 2002/02/27 19:36:34 philip Exp $
#define click_to_round_k(n) \
((unsigned) ((((unsigned long) (n) << CLICK_SHIFT) + 512) / 1024))
-#if !defined(__ELF__)
-extern int unmap_ok;
-#endif
-
/* SEF functions and variables. */
FORWARD _PROTOTYPE( void sef_local_startup, (void) );
FORWARD _PROTOTYPE( int sef_cb_init_fresh, (int type, sef_init_info_t *info) );
system_hz = sys_hz();
- /* Map out our own text and data. This is normally done in crtso.o
- * but PM is an exception - we don't get to talk to VM so early on.
- * That's why we override munmap() and munmap_text() in utility.c.
- *
- * _minix_unmapzero() is the same code in crtso.o that normally does
- * it on startup. It's best that it's there as crtso.o knows exactly
- * what the ranges are of the filler data.
- */
-#if !defined(__ELF__)
- unmap_ok = 1;
- _minix_unmapzero();
-#endif
-
/* Initialize user-space scheduling. */
sched_init();
rmp->mp_flags |= VFS_CALL;
}
-
-#if !defined(__ELF__)
-int unmap_ok = 0;
-#endif
*/
#include "inc.h"
#include <fcntl.h>
-#include <a.out.h>
-#include <minix/crtso.h>
#include "kernel/const.h"
#include "kernel/type.h"
#include "kernel/proc.h"
FORWARD _PROTOTYPE(void catch_boot_init_ready, (endpoint_t endpoint) );
FORWARD _PROTOTYPE(void get_work, (message *m_ptr, int *status_ptr) );
-/* Flag set when memory unmapping can be done. */
-EXTERN int unmap_ok;
-
/* SEF functions and variables. */
FORWARD _PROTOTYPE( void sef_local_startup, (void) );
FORWARD _PROTOTYPE( int sef_cb_init_fresh, (int type, sef_init_info_t *info) );
/* Clean up the old RS instance, the new instance will take over. */
cleanup_service(rp);
- /* Map out our own text and data. */
- unmap_ok = 1;
-#if !defined(__ELF__)
- _minix_unmapzero();
-#endif
-
/* Ask VM to pin memory for the new RS instance. */
if((s = vm_memctl(RS_PROC_NR, VM_RS_MEM_PIN)) != OK) {
panic("unable to pin memory for the new RS instance: %d", s);
FORWARD _PROTOTYPE(int map_service, (struct rprocpub *rpub));
FORWARD _PROTOTYPE(int vm_acl_ok, (endpoint_t caller, int call));
-extern int unmap_ok;
-
/* SEF functions and variables. */
FORWARD _PROTOTYPE( void sef_local_startup, (void) );
FORWARD _PROTOTYPE( int sef_cb_init_fresh, (int type, sef_init_info_t *info) );
/* Initialize the structures for queryexit */
init_query_exit();
- /* Unmap our own low pages. */
- unmap_ok = 1;
-#if !defined(__ELF__)
- _minix_unmapzero();
-#endif
-
/* Map all the services in the boot image. */
if((s = sys_safecopyfrom(RS_PROC_NR, info->rproctab_gid, 0,
(vir_bytes) rprocpub, sizeof(rprocpub), S)) != OK) {
done
cp kernel /boot/minix/.temp/
[ -d /boot/image ] && ln -f /boot/minix/.temp/kernel /boot/kernel || true
- exec sh mkboot $@ minix
+ sh mkboot $@ minix
exec sh update_bootcfg.sh
fdboot: image