[comp.os.minix] Method for applying patches to upgrade MINIX

rheffel@cs2.wsu.edu (05/30/89)

     I  have seen a lot of requests on the net asking how to apply  the 
patches    from    bugs.nosc.mil,     vm1.nodak.edu,     or    BITNET's 
listserv@ndsuvm1.   So,  I  decided  to write this little note to  help 
others.  Believe me, the method I used is included in this file.  I just
would like you to read some things that I think are important and      
relevant first.

     First,  I want to express some very strong opinions.   AST's MINIX 
is  a great for learning about operating systems.   I started first  on 
VM/CMS,  then  moved  to PC-DOS,  subsequently UNIX.   I have  come  to 
appreciate  UNIX  thoroughly.    The  main  drawback  to  UNIX  is  its 
interface.   For  hackers like myself,  the spartan interface is dandy.  
But for everyone else, it is a major pain in the rear. 
     I  would like to see UNIX become as dominant in the upper-end  PCs 
as DOS is on 8088/86 and 286 machines.   However,  I believe this  will 
not be the case.  Why?  The tools, such as Turbo[ Assembler, C, Pascal] 
as well as end-user programs have such a nice rapport with the end-user 
that  will cause them to promote an operating system such as OS/2 PM or 
WINDOWS-based DOS.
     What do I think should be done about this situation?  
     First,  I  have been working on modifying MINIX so that  a  floppy 
disk  (5  1/4) or micro-disk (3 1/2) can be formatted from MINIX so  it 
can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors 
is necessary) or can be used by PC-DOS.  The requirement that MINIX use 
another operating system to format its diskettes defeats the purpose of 
an OS.
     I  also believe that all programs should have a flag "?"  or  "-?" 
that  will  display the syntax of the  command.   Of  course,  programs 
expecting  stdin  will need to be re-written to accomodate  this  flag.  
The  ramifications  extend  further.  What happens if  the  command  is 
sitting in the middle of a pipeline with the "?" flag activated?
     Nevertheless,  I  am  using in a personal capacity  Allen  Holub's 
getargs() routine found in Dr.  Dobb's Journal May 1985.   I will write 
such  a  routine from scratch at some point with some improvements  and 
place it in the public domain.   But, I suggest that people look at the 
article and the following source code:

/* getargs.h		                        */
/* Typedefs and defines needed for getargs	*/

#define	INTEGER		0
#define	BOOLEAN		1
#define	CHARACTER	2
#define	STRING		3
#define	PROC		4

typedef struct {
	unsigned	arg 	: 	7;
	unsigned	type 	:	4;
	int			*variable;
	char			*errmsg;
} ARG;


/*	GETARGS.C		Command line argument processor for C programs	*/
/* (C) Copyright 1985, Allen I. Holub.  All rights reserved.		*/
/* This program may be copied for personal, non-profit use only	*/
/* Dr. Dobb's Journal May 1985                                    */

#include <stdio.h>
#include "getargs.h"

typedef int	(*PFI)();

static char *setarg( argp, linep)
ARG	*argp;
char	*linep;
{
/* Set an argument. */
/* argp points at the argument table entry corresponding to *linep. 	*/
/* Return linep, updated to point past the argument being set			*/

	++linep;
	switch(argp->type) {
		case INTEGER	:	*argp->variable = stoi(&linep);
								break;
		case BOOLEAN	:	*argp->variable = 1;
								break;
		case CHARACTER	:	*argp->variable = *linep++;
								break;
		case STRING		:	*(char **)argp->variable = linep;
								linep = "";
								break;
		case PROC		: 	(* (PFI)(argp->variable) )(linep);
								linep = "";
								break;
		default			:	fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n");
								break;
	}
	return(linep);
}

static ARG *findarg(c, tabp, tabsize)
int c, tabsize;
ARG	*tabp;
{
/* Return pointer to argument table entry corresponding to c 	*/
/* or 0 if c isn't in table.												*/

	for (; --tabsize >= 0; tabp++)
		if (tabp->arg == c)
			return(tabp);
	return(0);
}

static pr_usage(tabp, tabsize)
ARG *tabp;
int tabsize;
{
/* Print the argtab in the form:	*/
/*		-<arg> <errmsg> (value is <*variable>)	*/

	for (; --tabsize >= 0; tabp++)
		switch(tabp->type) {
			case INTEGER	:	fprintf(stderr, "-%c<num> %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5d)\n", *(tabp->variable) );
									break;

			case BOOLEAN	:	fprintf(stderr, "-%c      %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" );
									break;

			case CHARACTER	:	fprintf(stderr, "-%c<c>   %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5c)\n", *(tabp->variable) );
									break;

			case STRING		:	fprintf(stderr, "-%c<str> %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "<%s>)\n", *(char **)tabp->variable);
									break;

			case PROC  		:	fprintf(stderr, "-%c<str> %-40s\n",
											tabp->arg, tabp->errmsg);
									break;
		}
}

#define ERRMSG	"Illegal argument <%c>.		Legal arguments are:\n\n"

int getargs(argc, argv, tabp, tabsize)
int 	argc, tabsize;
char 	**argv;
ARG	*tabp;
{
/* Process command line arguments.  Stripping all command line switches	*/
/* out of argv.  Return a new argc.  If an error is found, exit(1) is	*/
/* called (getargs won't return) and a usage message is printed showing	*/
/* all arguments in the table.														*/

	register int	nargc;
	register char	**nargv, *p;
	register ARG	*argp;

	nargc = 1;
	for (nargv = ++argv; --argc > 0; argv++)
		if (**argv != '-') {
			*nargv++ = **argv;
			nargc++;
		} else {
			p = (*argv) + 1;
			while (*p)
				if (argp = findarg(*p, tabp, tabsize) )
					p = setarg(argp, p);
				else {
					fprintf(stderr, ERRMSG, *p);
					pr_usage(tabp, tabsize);
					exit(1);
				}
		}
	return(nargc);
}


/* STOI.C		More powerful version of atoi	                   */
/* Copyright (C) 1985 by Allen Holub.  All rights reserved.     */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985                                  */

#define islower(c)	('a' <= (c) && (c) <= 'z')
#define toupper(c)	(islower(c) ? (c) - ('a' - 'A') : (c) )

int	stoi(instr)
register char **instr;
{
/* Convert string to integer.  If string starts with 0x it is			*/
/* interpreted as a hex number, else if it starts with a 0 it			*/
/* is octal, else it is decimal.  Conversion stops on encountering	*/
/* the first character which is not a digit in the indicated radix	*/
/* *instr is updated to point past the end of the number					*/

	register int 	num=0;
	register char 	*str;
	int 				sign=1;

	str = *instr;
	while (*str == ' ' || *str == '\t' || *str == '\n')
		str++;
	if (*str == '-') {
		sign = -1;
		str++;
	}
	if (*str == '0') {
		++str;
		if (*str == 'x' || *str == 'X') {
			str++;
			while( 	('0' <= *str && *str <= '9') 	||
						('a' <= *str && *str <= 'f')	||
						('A' <= *str && *str <= 'F') 			) {
				num *= 16;
				num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10;
				str++;
			}
		} else
			while	('0' <= *str && *str <= '7') {
				num *= 8;
				num += *str++ - '0';
			}
	} else
		while	('0' <= *str && *str <= '9') {
			num *= 10;
			num += *str++ - '0';
		}

	*instr = str;
	return( num * sign);
}
    

     Furthermore,  a  graphical interface is now the de facto  standard 
(Menu  Headers  and  pull-down menus).   I know  this  means  all  that 
overhead  in terms of code and extra-time to do the programming.   But, 
end-users expect to be able to use software without having to RTFM. And 
in the end, it will be free-market forces that decide whether UNIX will 
grow in popularity or will be just a second-class OS used primarily  by 
DOD and universities.  Clearly, the window system called X (I wish they 
would  simply  call it X Windows) is out of the question  under  MINIX.  
However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a 
look at that later.   This also may be too large for MINIX (I don't yet 
know).   If  mgr  is too complex or too code intensive,  a simple  menu 
header  and  pop-down  window  scheme can be found  in  Al  Steven's  C 
programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal.  
This interface is simple yet elegant.  I also typed in this code, but I 
made a mistake somewhere and can not seem to find it.
     As  of right now,  I would like to see these authors (Allen  Holub 
and Al Stevens) donate these specific routines to the public domain.  I 
think  that  these  routines  together  could  be  used  to  develop  a 
consistent interface that would be extremely easy to use both in a  DOS 
and UNIX (particularly MINIX) environment.

     If you haven't caught the drift of this diatribe,  let me state it 
explicitly.  I believe that no-one has a monopoly (copyright or patent) 
on  a  user-interface.   I  am clearly dismayed  by  the  look-and-feel 
litigation  trend  in  industry.   My position is quite simply  that  a 
screen  (crt,  monitor)  is  simply  another  data  structure  that  is 
fundamental to computer science.   A consistent interface is  necessary 
across all hardware configurations.  Let us briefly examine an analogy.  
Road  signs  indicating hazards and driving conditions are pretty  much 
standardized internationally.   This allows a traveller to proceed from 
country to country without having to be licensed in every country.  The 
benefits are enormous.  Looking at the other side of the coin, the best 
example would be Great Britain and her former colonies.   They drive on 
the  wrong side of the road,  require cars with steering wheels in  the 
passenger's  seat,  etc.   It takes time to learn to navigate in  these 
backward countries.   
     Even more importantly, I am outraged by the fact that file-formats 
are proprietary as viewed by the courts in the SEAware vs. PKware case. 
Files are just streams of meaningless information to be deciphered by a 
program.   This  judgment is a serious detriment to the whole  industry 
unfortunately.     
     The  only  protection that should be accorded  developers  is  for 
their  source  code.   Reverse-engineering is very common.   Most  cars 
require  a  combustion engine (not solar or electric).   But  some  car 
manufacturers build a sports car like a Porche, others build a reliable 
family car like a Chevy,  and yet others build a funeral-box car like a 
Yugo  (I stay).   Some applications are faster and more comfortable  to 
use but accomplish the same tasks as does another vendor's application.  
The classic example is PKware's archiver versus SEAware's.
     My last comment concerns the legal community.   We are living in a 
new  age,  the INFORMATION AGE.   Most judges are  not  technologically 
competent  (having skills in EE and Computer Science).   They simply do 
not  have  the  background to  understand  these  issues.   Yet,  their 
decisions  will have very profound ramifications  upon  society.   This 
deficiency  is  highly  disconcerting.   What can be  done  about  this 
situation? I really don't know. Pray, I suppose.  Apart from praying, I 
hope  that  some  of the giants  (IBM,  INTEL,  Chips  &  Technologies, 
Microsoft,  ATT)  will  pressure  law schools to accept  students  with 
backgrounds  in  these areas and provide  scholarships  to  individuals 
willing  to continue their education in this field.   I hope that these 
companies  will  also push legislation to increase judges  salaries  so 
that  they  are equitable with those found  in  industry.   Why  should 
anyone  work  for  less than they could get  elsewhere?   Remember  the 
standing joke is that the biggest division at IBM is the legal division 
and not the manufacturing division.     
   

-------------------------------------------------------------------------------
Returning to the original subject matter dealing with MINIX PATCHES:

     I confess that I was having difficulty upgrading from MINIX 1.2 to 
1.3  using  the upgrades found on the net.   I found this  particularly 
annoying because I have used patch to upgrade the floppy device  driver 
to  handle 3 and 1/2 inch drives and a few other utilities.   But I was 
at  a complete loss when applying the diff patches to move  from  MINIX 
ver 1.2 to ver 1.3.   The following text documents how (and why I chose 
a particular manner to accomplish this feat) I did it.

First, grab the following files from bugs.nosc.mil via ftp:
     "patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z".
The following is a log of an ftp session that accomplishes the task  at 
hand.
 
	ftp bugs.nosc.mil
	Name (bugs.nosc.mil:rheffel): anonymous
	Password (bugs.nosc.mil: anonymous): guest
	cd pub/Minix/bin
	type binary
	get patch
	cd ../d1.1-1.1
	get d1.1-1.2.tar.Z
	cd ../d1.2-1.3
	get d1.2-1.3.tar.Z
	close
	quit

 
     At this point,  you will have copied in binary format 3 files from 
the  remote host.   The files are:  patch,  the upgrade from ver 1.1 to 
1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you 
rename  d1.1-1.2.tar.Z  to d1112.trz and d1.2-1.3.tar.Z  to  d1213.trz.  
Why  should  you rename the files.   Remember that DOS  allows  only  3 
characters  for a file's extension.  We will use *.trz under DOS as the 
equivalent of UNIX's *.tar.Z. 

     Somehow,  you  must transfer the files down to your PC  from  your 
local  host.   The  files must be transfered in binary format  just  as 
before.   I  am assuming that you are transferring these files to a PC-
DOS partition.   Personally,  I have not yet tried running kermit under 
MINIX yet.  The file mxkermit.tar.Z is available from bugs.nosc.mil.  I 
have  read that the modem handling under MINIX is not quite stable  yet 
so  that is the reason I assume that these files are being  transferred 
to a PC-DOS subdirectory.
     If  you have ftp on your PC,  you can follow the same sequence  as 
above  except for changing directory.   If you don't have ftp,  you can 
use KERMIT.   By typing "kermit -ix", you will invoke the kermit server 
on the local host.   It will transfer the file images (binary  format).  
Next type "get patch", "get d1112.trz", and "get d1213.trz".

     At this point,  you should now have these 3 files on your PC.  But 
first  lets  cover the aspect of getting the equivalent  files  from  a 
different remote host.

Note:  You can get the equivalent files from vm1.nodak.edu on  internet 
or listserv@ndsuvm1 on BITNET.   The major difference is that the files 
are in ASCII format.
     If you are dialing in to vm1.nodak.edu,  I presume that you are on 
internet and can get the files.   The following is a transcript of such 
a session. 
	ftp bugs.nosc.mil
	Name (vm1.nodak.edu:rheffel): anonymous
	Password (vm1.nodak.edu: anonymous): guest
	cd MINIX
	type ascii
        get commands.patch
	mget minix.*
	close
	quit

     If you are on an IBM mainframe and are using BITNET,  then you may 
use  the following command to retrieve one file at a time.   Type "TELL 
LISTSERV@NDSUVM1 GET MINIX 1112A".   Admittedly, this process of asking 
for one file at a time is painfully slow.   If anyone knows of a better 
method, please let me know.  (I assume that REXX could be programmed to 
expand a wildcard or a script file could be built).
     Regardless    of   whether   you   accessed    vm1.nodak.edu    or 
listserv@ndsuvm1,  the  naming  convention on that remote host  follows 
IBM's   standard   convention.     The   files   are   MINIX.1112[A-D], 
MINIX.1213[A-Z] and MINIX.1213[AA-AE].   The files to upgrade from  1.3 
to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9].  
     After  I  had  copied the files from the remote host to  my  local 
host, I renamed the files as follows since DOS allows only 3 characters 
for   the  extension.    MINIX.1112[A-]  was  renamed  to   M1112.[A-], 
MINIX.1213[A-Z]  was  changed  to  M1213.[A-Z],  MINIX.1213[AA-AE]  was 
transformed to M1213.[AA-AE]. Do you get the picture.  For those of you 
unfamiliar with this notation, let us take a specific file and show you 
what was done:

	MINIX.1213AA was renamed to M1213.AA

     This  renaming  scheme  will work on both UNIX  and  IBM  systems.   
Then  I  downloaded the files to PC-DOS.   This  method  prevented  the 
terminal  emulation  package  from  truncating the  name  to  something 
obscure.  Another advantage from this new naming scheme is that it will 
permit  us  to  write a shell script to UNSHAR  the  files  M1213.[A-W] 
unattended.

-------------------------------------------------------------------------------
     You will need to be able to uncompress files that end in *.Z.   To 
do this, you first must compile the compress command.  
	cc -i -o compress compress.c
The -i flag must be specified in order for this command to work.
Remember that you must always transfer compressed files (ending in *.Z) 
in binary format.

     The next step is to transfer the files from your DOS partition  to 
your MINIX partition.   The type of file that you downloaded (binary or 
ASCII format) will determine the switch settings on the dosread command 
line.

     If  your file is a binary file (file is from  bugs.nosc.mil),  you 
will want to type the following:
	dosread c ver13/d1213.trz > d1213.tar.Z
	dosread c ver13/patch > patch

     If your file is an ASCII file,  you will want to use the "-a" flag 
as  follows.   Notice that I read the file patch from the DOS partition 
as patchvm onto the MINIX partition.   There is a good reason for doing 
so, but will not be covered now.  Please note that I demonstrate how to 
read  in  the ASCII files m1213.* in the  following  command.   Do  not 
however  type  this  for each and every file.   Use the  Ralph  Clark's 
modified  script  included below to automatically read  an  entire  DOS 
directory  (eg,  dosrdall  c vm1 [where the files are on c:  drive  ind 
subdirectory \vm1]). 
	dosread -a c ver13/m1213.aa > m1213.aa
        dosread -a c ver13/patch > patchvm


     If   you  got  your  version  of  patch  from   vm1.nodak.edu   or 
listserv@ndsuvm1, you will need to do the following after you have read 
in the file onto MINIX partition.  
          uudecode patchvm
          compress -d patch.Z
     As you noticed, the uncompressing of patch.Z created a file called 
patch.   Now you understand why it was desirable to read the file patch 
from DOS to MINIX as patchvm and not as patch.
 
     The  above  2 steps are not necessary if you got your  version  of 
patch from bugs.nosc.mil.  
  
     Regardless of where you obtained patch, remember to change its rwx 
flags so that it is executable.
     chmod 755 patch
 
     I include Ralph Clark's script (which I have modified sligthly) to 
allow  you  to  read  all the files from a  PC-DOS  subdirectory  on  a 
particular drive.
	 
Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark
From: clark@ttidca.TTI.COM (Ralph Clark)
Newsgroups: comp.os.minix
Subject: my read-all-from-dos script (version 23)
Keywords: dosread
Message-ID: <2951@ttidca.TTI.COM>
Date: 24 Jul 88 06:45:23 GMT
Organization: Citicorp/TTI, Santa Monica
Lines: 20

Here's the one I've been using since the first time my fingers got tired
of backspacing to put the -a in the right place :
----------------cut me---------------
#/********************************************************************/
#/************ Modified version of Ralph Clark's DOSRDALL ************/
#/******************* modified by Rich Heffel ************************/ 
#/******************** handles only ASCII files **********************/
#dosrdall - read all files from DOS physical drive to current directory
echo  "dosrdall [drive [directory]]"
getlf "to proceed, press RETURN"

for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]`
do
     echo $FILE
     dosread -a $1 $2/$FILE > $FILE
done
----------------cut me---------------
The grep -v gets rid of the title and footer from dosdir, which have
lower case letters. I wish there were an option in dosread-write-dir to
suppress the noise and just give file names. This script needs addition
of a parameter to specify a dos subdirectory.
Remember  to  change  the  rwx flags to execute  by  typing:  
     chmod 755 dosrdall 

#Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark
--- 


-------------------------------------------------------------------------------

     The  next  major  step is to apply the patches.   The  files  from 
vm1.nodak.edu  and listserv@ndsuvm1 are in ASCII format  already.   The 
files from bugs.nosc.mil are not and must be uncompressed and extracted 
from the tape archive.  How is this accomplished?


     As  an example,  we will take the file d1.2-1.3.tar.Z which we had 
renamed   to  d1213.trz  previously.    First,   rename  d1213.trz   to 
d1213.tar.Z.
        mv d1213.trz d1213.tar.Z
	compress -d d1213.tar.Z
This  command unpacks (uncompresses) the file.   Next,  we must extract 
the files from this newly created tar file.
	tar vx d1213.tar

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
     The  file  "diff.patch" that was  extracted  from  bugs.nosc.mil's 
d1213.tar   (our  renamed  file)  corresponds  to  vm1.nodak.edu's  and 
listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z].

The question that remains is "How do we apply these patches?"


     First,  we must note that the patch command unfortunately uses the 
subdirectory /tmp for scratch work and does not allow a flag to specify 
another directory for scratch use.  (The lack of this needed feature is 
indicative  of some of the drawback's of UNIX besides being  a  classic 
example  of poor programming technique.  I confess that I too am guilty 
of  such poor practice.)  Unfortunately,  running patch  requires  more 
than  one floppy worth (mkfs /dev/fd0 360) of information.   If you are 
running  a RAM DISK that means you probably do not have  enough  space, 
and patch will choke.

The trick to overcome this is the following:
     Normally,  we  mount  our hard disk partition with the  /usr  file 
system as follows.  I will assume that /usr is on /dev/hd4, though this 
need not be the case.   In the file /etc/rc, we have a one-line command 
that says "/etc/mount /dev/hd4 /usr".

     Change  this  one-line command from "/etc/mount /dev/hd4 /usr"  to 
"/etc/mount  /dev/hd4  /tmp".   This change must be done  in  the  file 
/etc/rc.  After you have applied the patches, you should change it back 
to its original state.
     Why must it be done in /etc/rc.  Because if you try doing it after 
you  have logged in as "root",  you will be notified that /tmp is busy.  
Now logoff and reboot.

     When you log in as "root",  the file system will be found on /tmp.  
If  you  are applying the file "diff.patch" from the  tar.Z  file  from 
bugs.nosc.mil,  all  you  will  need  to do is to cd  (change  dir)  to 
subdirectory  where the copy of the original 1.2 distribution is  found 
(usually /usr/minix/commands) and type the following. 
     patch < diff.patch  

     I  presume that for those of you who are using vm1  or  listserv's 
patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae] 
to a newly created directory and cd to that directory.   You could then 
type the following:
     for i in *
     do echo $i; patch < $i
     done
  


-------------------------------------------------------------------------------
     Remember to change the file /etc/rc back to its original state and 
to reboot.
     
     Naturally,  the next step should be to unshar all the files.  This 
refers  to those files found on vm1 and listserv.   The simplest way to 
unshar the files is to write a simple script on the MINIX command line.

     for i in m1213.*
     do echo $i; sh < $i
     done

     If you have a PC,  leave it unattended overnight.   If you have an 
AT or 386 machine, go out to dinner.


     If  you  have  any suggestions,  please send them  to  me  at  the 
following address:
rheffel@cs2.wsu.edu

    I have include a uuencoded version of patch obtained from bugs.nosc.mil.
This is level 11 patch.  
To get this version running, get it onto your MINIX partition using
     dosread -a c patch > patch.ascii
Then uudecode the file.
     uudecode patch.ascii
Remember to make it executable.
     chmod 755 patch

Path: cod!nosc!helios.ee.lbl.gov!lll-tis!ames!mailrus!cornell!rochester!udel!mmdf
From: frank@morgan.com (Frank Wortner)
Newsgroups: comp.os.minix
Subject: Yet Another Patch Binary
Message-ID: <3961@louie.udel.EDU>
Date: 3 Sep 88 07:47:42 GMT
Sender: mmdf@udel.EDU
Lines: 704

I've posted several Minix patch binaries for the benefit of those who
can't compile the source for one reason or another.  Unfortunately,
those binaries had a minor bug in them which seems to be related to
the C compiler and/or library used to create them.  The bug caused
patch to print spurious messages about "skipping garbage" at the end
of a patch file.  In almost all cases, there was no "garbage" for
patch to skip.

Since my last binary posting, I've recompiled patch with the 1.3 Minix
library, and the spurious message bug seems to have disappeared.  If
anyone is using one of my previous binaries, try this one instead.  It
should work just a bit better.

If you have the source, don't worry:  I've made NO CHANGES.  I just
recompiled and relinked with a newer (and more bug-free) library.  You
should be able to do the same once you upgrade to Minix 1.3.

					Frank

------------------------cut here -- valuable program below --------------------
begin 644 patch
M 0,@!"    #08@  LA0  .X2           !      ")XXL/@\,"B<A T> !
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
MB1Z.)XM>!HD>DB>XB"=0N $ 4+@! +N()[D# ,T@B>Q=P^C3\E]>B>Q=PUY?
MZ_A;65I85HGFAUP"7CG3?P]\!CG(=PET!+C__\,QP,.X 0##     "1(96%D
M97(Z('!A=&-H+F,L=B R+C N,2XU(#@X+S V+S S(#$U.C Y.C,W(&QW86QL
M($QO8VME9" D *0!      $                    O=&UP+W!A=&-H;UA8
M6%A86  O=&UP+W!A=&-H:5A86%A86  O=&UP+W!A=&-H<EA86%A86  O=&UP
M+W!A=&-H<%A86%A86                @       0        "] P      
M "-E;'-E"@    #N!Q, 0@"$!D0 V@9& %('3@!Z!U( QP=3 -4'8@!J!F, 
MG@9D *<&90!!!V8 2@=L &D';@!Q!V\ @@=P )L'<@"L!W, S@=V -P'> #A
M!QH,!P * -4+( #Q"R$ \0LJ   +*P#Q"RT \0L] &L+3F]T(&5N;W5G:"!M
M96UO<GD@=&\@=')Y('-W87!P960@:'5N:R$@($%S<W5M:6YG('5N<W=A<'!E
M9"X*  !,;W-T(&AU;FL@;VX@86QL;V,@97)R;W(A"@  3&]S="!H=6YK(&]N
M(&%L;&]C(&5R<F]R(0H  $EG;F]R:6YG('!R979I;W5S;'D@87!P;&EE9" H
M;W(@<F5V97)S960I('!A=&-H+@H )7-E=F5R<V5D("AO<B!P<F5V:6]U<VQY
M(&%P<&QI960I('!A=&-H(&1E=&5C=&5D(2 @)7,@+5(_(%MY72   %( 56YR
M $%S<W5M90  26=N;W)E  !!<'!L>2!A;GEW87D_(%MN72   $QO<W0@:'5N
M:R!O;B!A;&QO8R!E<G)O<B$*  !(=6YK(",E9"!I9VYO<F5D(&%T("5L9"X*
M $AU;FL@(R5D(&9A:6QE9"!A=" E;&0N"@  2'5N:R C)60@<W5C8V5E9&5D
M(&%T("5L9  @=VET:"!F=7IZ("5L9   ("AO9F9S970@)6QD(&QI;F4E<RD 
M    <P N"@  "@I286X@;W5T(&]F(&UE;6]R>2!U<VEN9R!0;&%N($$M+71R
M>6EN9R!A9V%I;BXN+@H* ", )60@;W5T(&]F("5D(&AU;FMS(&EG;F]R960M
M+7-A=FEN9R!R96IE8W1S('1O("5S"@ E9"!O=70@;V8@)60@:'5N:W,@9F%I
M;&5D+2US879I;F<@<F5J96-T<R!T;R E<PH  %EO=2!M87D@;F]T(&-H86YG
M92!T;R!A(&1I9F9E<F5N="!P871C:"!F:6QE+@H  "L 5&]O(&UA;GD@9FEL
M92!A<F=U;65N=',N"@!#86XG="!C9"!T;R E<RX*  !!<F=U;65N="!T;R M
M1"!N;W0@86X@:61E;G1I9FEE<BX*   C:69D968@)7,*   C:69N9&5F("5S
M"@ C96YD:68@+RH@)7,@*B\*  !5;G)E8V]G;FEZ960@<W=I=&-H.B E<PH 
M $]F9G-E="!C:&%N9VEN9R!F<F]M("5L9"!T;R E;&0*  !/9F9S970@8VAA
M;F=I;F<@9G)O;2 E;&0@=&\@)6QD"@  ("HJ*BH    @+2TM+0 @+2TM+2T 
M "HJ*BHJ*BHJ*BHJ*BHJ*@H  "HJ*B P)7,*   J*BH@)6QD)7,*   J*BH@
M)6QD+"5L9"5S"@  +2TM(# E<PH  "TM+2 E;&0E<PH  "TM+2 E;&0L)6QD
M)7,*   E<P  )6,@)7, 1F%T86P@:6YT97)N86P@97)R;W(@:6X@86)O<G1?
M:'5N:R@I+@H  $]U="UO9BUS>6YC('!A=&-H+"!L:6YE<R E;&0L)6QD+2UM
M86YG;&5D('1E>'0@;W(@;&EN92!N=6UB97)S+"!M87EB93\* &]L9&-H87(@
M/2 G)6,G+"!N97=C:&%R(#T@)R5C)PH =P!P871C:#H@8V%N)W0@8W)E871E
M("5S+@H  '< <&%T8V@Z(&-A;B=T(&-R96%T92 E<RX*  !P871C:#H@;6ES
M;W)D97)E9"!H=6YK<R$@;W5T<'5T('=I;&P@8F4@9V%R8FQE9"X* &EL/25L
M9"!L9FP])6QD"@   /____\#                 'T __________^3)@< 
M"0!E)0H 924@ !\F(0"M)"H +B K *TD+0#N(2T =P!P871C:#H@8V%N)W0@
M8W)E871E("5S+@H  '( <&%T8V@@9FEL92 E<R!N;W0@9F]U;F0*  !P871C
M:#H@;W5T(&]F(&UE;6]R>2 H9W)O=U]H=6YK;6%X*0H  &1O;F4* $AM;2XN
M+@  ("!)9VYO<FEN9R!T:&4@=')A:6QI;F<@9V%R8F%G92X*9&]N90H  " @
M22!C86XG="!S965M('1O(&9I;F0@82!P871C:"!I;B!T:&5R92!A;GEW:&5R
M92X*   @("5S;V]K<R!L:6ME("5S('1O(&UE+BXN"@  3 !4:&4@;F5X="!P
M871C:"!L  !A(&YO<FUA;"!D:69F &%N(&5D('-C<FEP=   82!N97<M<W1Y
M;&4@8V]N=&5X="!D:69F  !A(&-O;G1E>'0@9&EF9@  *%!A=&-H(&ES(&EN
M9&5N=&5D("5D('-P86-E)7,N*0H     <P!.;R!F:6QE('1O('!A=&-H+B @
M4VMI<'!I;F<N+BX* $9I;&4@=&\@<&%T8V@Z( !.;R!F:6QE(&9O=6YD+2US
M:VEP('1H:7,@<&%T8V@_(%MN72   %-K:7!P:6YG('!A=&-H+BXN"@  *BHJ
M(   +2TM(   26YD97@Z  !0<F5R97$Z "X*   J*BHJ*BHJ*@  *BHJ(   
M/"   #X@  !4:&4@=&5X="!L96%D:6YG('5P('1O('1H:7,@=V%S.@HM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0H  'PE<P M+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+0H *BHJ*BHJ*BH  " @"@!5;F5X<&5C=&5D(&5N9"!O9B!F
M:6QE(&EN('!A=&-H+@H *BHJ*BHJ*BH  %5N97AP96-T960@96YD(&]F(&AU
M;FL@870@;&EN92 E;&0N"@  56YE>'!E8W1E9" J*BH@870@;&EN92 E;&0Z
M("5S   P+#  1'5P;&EC871E("(M+2TB(&%T(&QI;F4@)6QD+2UC:&5C:R!L
M:6YE(&YU;6)E<G,@870@;&EN92 E;&0N"@ E<R B+2TM(B!A="!L:6YE("5L
M9"TM8VAE8VL@;&EN92!N=6UB97)S(&%T(&QI;F4@)6QD+@H  %!R96UA='5R
M90!/=F5R9'5E $AU;FL@=&]O(&QA<F=E("@E;&0@;&EN97,I(&%T(&QI;F4@
M)6QD.B E<P  ( H  $YO("TM+2!F;W5N9"!I;B!P871C:"!A="!L:6YE("5L
M9 H  "5S"B5S"B5S"@ H1F%S8VEN871I;F<M+71H:7,@:7,@<F5A;&QY(&$@
M;F5W+7-T>6QE(&-O;G1E>'0@9&EF9B!B=70@=VET:&]U= !T:&4@=&5L;'1A
M;&4@97AT<F$@87-T97)I<VMS(&]N('1H92 J*BH@;&EN92!T:&%T('5S=6%L
M;'D@:6YD:6-A=&4  '1H92!N97<@<W1Y;&4N+BXI %)E<&QA8V5M96YT('1E
M>'0@;W(@;&EN92!N=6UB97)S(&UA;F=L960@:6X@:'5N:R!A="!L:6YE("5L
M9 H 9FEL;'-R8R E;&0L(&9I;&QD<W0@)6QD+"!R8B E;&0L(&4K,2 E;&0*
M  !(=6YK('1O;R!L87)G92 H)6QD(&QI;F5S*2!A="!L:6YE("5L9#H@)7, 
M "HJ*B E;&0L)6QD"@  56YE>'!E8W1E9"!E;F0@;V8@9FEL92!I;B!P871C
M:"!A="!L:6YE("5L9"X* #P@97AP96-T960@870@;&EN92 E;&0@;V8@<&%T
M8V@N"@!5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T(&QI;F4@
M)6QD+@H +2TM(&5X<&5C=&5D(&%T(&QI;F4@)6QD(&]F('!A=&-H+@H +2TM
M("5L9"PE;&0*  !5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T
M(&QI;F4@)6QD+@H /B!E>'!E8W1E9"!A="!L:6YE("5L9"!O9B!P871C:"X*
M $YO="!E;F]U9V@@;65M;W)Y('1O('-W87 @;F5X="!H=6YK(0H )3-D("5C
M("5C("5S  !-86QF;W)M960@<&%T8V@@870@;&EN92 E;&0Z("5S "]U<W(O
M8FEN+V5D("5S   O=7-R+V)I;B]E9" M("5S  !W "X*  !W"@  <0H     
M        _____________U!A=&-H:6YG(&9I;&4@)7,@=7-I;F<@4&QA;B E
M<RXN+@H  $$ 0@ H0W)E871I;F<@9FEL92 E<RXN+BD*  !20U,O)7,E<P  
M+'8  &-O("UL("5S  !#86XG="!F:6YD("5S+2UA='1E;7!T:6YG('1O(&-H
M96-K(&ET(&]U="!F<F]M(%)#4RX*  !#86XG="!C:&5C:R!O=70@)7,N"@  
M4T-#4R\E<R5S ',N  !G970@+64@)7, 0V%N)W0@9FEN9" E<RTM871T96UP
M=&EN9R!T;R!G970@:70@9G)O;2!30T-3+@H 0V%N)W0@9V5T("5S+@H  $-A
M;B=T(&9I;F0@)7,N"@ E<R!I<R!N;W0@82!N;W)M86P@9FEL92TM8V%N)W0@
M<&%T8V@N"@  0V%N)W0@;W!E;B!F:6QE("5S"@!787)N:6YG.B!T:&ES(&9I
M;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S('9E<G-I;VXM+7!A=&-H
M:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T(&%P<&5A<B!T;R!B92!T
M:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!;;ET@ $%B;W)T960N"@!'
M;V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@=&AE("5S('9E<G-I;VXN
M"@!R $-A;B=T(&]P96X@9FEL92 E<PH 0V%N)W0@;W!E;B!F:6QE("5S"@!7
M87)N:6YG.B!T:&ES(&9I;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S
M('9E<G-I;VXM+7!A=&-H:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T
M(&%P<&5A<B!T;R!B92!T:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!;
M;ET@ $%B;W)T960N"@!';V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@
M=&AE("5S('9E<G-I;VXN"@!#86XG="!S965M('1O(&=E="!E;F]U9V@@;65M
M;W)Y+@H <&%T8V@Z(&-A;B=T('=R:71E('1E;7 @9FEL92X*  !P871C:#H@
M8V%N)W0@=W)I=&4@=&5M<"!F:6QE+@H  $-A;B=T(')E;W!E;B!F:6QE("5S
M"@   $5R<F]R(')E861I;F<@=&UP(&9I;&4@)7,N"@ M $UO=FEN9R E<R!T
M;R!S=&1O=70N"@!P871C:#H@:6YT97)N86P@97)R;W(L(&-A;B=T(')E;W!E
M;B E<PH <&%T8V@Z('=R:71E(&9A:6QE9 H  'X 36]V:6YG("5S('1O("5S
M+@H <&%T8V@Z(&-A;B=T(&)A8VMU<" E<RP@;W5T<'5T(&ES(&EN("5S"@  
M36]V:6YG("5S('1O("5S+@H <&%T8V@Z(&-A;B=T(&-R96%T92 E<RP@;W5T
M<'5T(&ES(&EN("5S+@H <&%T8V@Z(&EN=&5R;F%L(&5R<F]R+"!C86XG="!R
M96]P96X@)7,* '!A=&-H.B!W<FET92!F86EL960*  !P871C:#H@8V%N)W0@
M8W)E871E("5S+@H  '!A=&-H.B!I;G1E<FYA;"!E<G)O<BP@8V%N)W0@<F5O
M<&5N("5S"@!P871C:#H@=W)I=&4@*"5S*2!F86EL960* $]O<',  '!A=&-H
M.B!O=70@;V8@;65M;W)Y("AS879E<W1R*0H +V1E=B]T='D  &UK9&ER &9E
M=&-H;F%M92 E<R E9" E9 H +V1E=B]N=6QL %)#4R\E<P  +'8  %-#0U,O
M)7,E<P!S+@  )7,*4&%T8V@@;&5V96PZ("5D"@ O8FEN+W-H '-H   M8P  
M+V)I;B]S: !S:   +6,  "=* P!A -9)<@ )2G< MDD      0!6(U8C 0  
M $( 5A]6'P(    &      "<$J82L!(                             
M                IDT# &$ ATUR )]-=P" 3391#0!$ '%03P V4%4 +E!8
M "908P#L4&0 =%!E .%09@#A4&< X5!O #E0<P#_4'4 ,5!X "E0*&YU;&PI
M  "@)P                                   " @(" @(" @( @(" @(
M(" @(" @(" @(" @(" @(" @"! 0$! 0$! 0$! 0$! 0$ 0$! 0$! 0$! 00
M$! 0$! 004%!04%! 0$! 0$! 0$! 0$! 0$! 0$! 0$0$! 0$!!"0D)"0D("
M @(" @(" @(" @(" @(" @(" A 0$! @    /Q16%        /H3        
M                  "#%!$4$10H%$5R<F]R.B!$:79I<VEO;B!B>2 P( H 
M26QL96=A;"!%32!I;G-T<G5C="=N"@!%<G(@:6X@14T@8V%S92!I;G-T<B *
M %9A<FEA8FQE(&]U="!O9B!R86YG90H 17)R(&EN($5-('-E="!I;G-T<B *
M $9L;V%T:6YG('!T(&YO="!I;7!L+@H 2&5A<"!O=F5R9FQO=R * $5-('1R
:87 @,# P,# P,"!O8W1A; H H">@)P    !A
 
end

rheffel@cs2.wsu.edu (05/30/89)

     I  have seen a lot of requests on the net asking how to apply  the 
patches    from    bugs.nosc.mil,     vm1.nodak.edu,     or    BITNET's 
listserv@ndsuvm1.   So,  I  decided  to write this little note to  help 
others.

     First,  I want to express some very strong opinions.   AST's MINIX 
is  a great for learning about operating systems.   I started first  on 
VM/CMS,  then  moved  to PC-DOS,  subsequently UNIX.   I have  come  to 
appreciate  UNIX  thoroughly.    The  main  drawback  to  UNIX  is  its 
interface.   For  hackers like myself,  the spartan interface is dandy.  
But for everyone else, it is a major pain in the rear. 
     I  would like to see UNIX become as dominant in the upper-end  PCs 
as DOS is on 8088/86 and 286 machines.   However,  I believe this  will 
not be the case.  Why?  The tools, such as Turbo[ Assembler, C, Pascal] 
as well as end-user programs have such a nice rapport with the end-user 
that  will cause them to promote an operating system such as OS/2 PM or 
WINDOWS-based DOS.
     What do I think should be done about this situation?  
     First,  I  have been working on modifying MINIX so that  a  floppy 
disk  (5  1/4) or micro-disk (3 1/2) can be formatted from MINIX so  it 
can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors 
is necessary) or can be used by PC-DOS.  The requirement that MINIX use 
another operating system to format its diskettes defeats the purpose of 
an OS.
     I  also believe that all programs should have a flag "?"  or  "-?" 
that  will  display the syntax of the  command.   Of  course,  programs 
expecting  stdin  will need to be re-written to accomodate  this  flag.  
The  ramifications  extend  further.  What happens if  the  command  is 
sitting in the middle of a pipeline with the "?" flag activated?
     Nevertheless,  I  am  using in a personal capacity  Allen  Holub's 
getargs() routine found in Dr.  Dobb's Journal May 1985.   I will write 
such  a  routine from scratch at some point with some improvements  and 
place it in the public domain.   But, I suggest that people look at the 
article and the following source code:

/* getargs.h		                        */
/* Typedefs and defines needed for getargs	*/

#define	INTEGER		0
#define	BOOLEAN		1
#define	CHARACTER	2
#define	STRING		3
#define	PROC		4

typedef struct {
	unsigned	arg 	: 	7;
	unsigned	type 	:	4;
	int			*variable;
	char			*errmsg;
} ARG;


/*	GETARGS.C		Command line argument processor for C programs	*/
/* (C) Copyright 1985, Allen I. Holub.  All rights reserved.		*/
/* This program may be copied for personal, non-profit use only	*/
/* Dr. Dobb's Journal May 1985                                    */

#include <stdio.h>
#include "getargs.h"

typedef int	(*PFI)();

static char *setarg( argp, linep)
ARG	*argp;
char	*linep;
{
/* Set an argument. */
/* argp points at the argument table entry corresponding to *linep. 	*/
/* Return linep, updated to point past the argument being set			*/

	++linep;
	switch(argp->type) {
		case INTEGER	:	*argp->variable = stoi(&linep);
								break;
		case BOOLEAN	:	*argp->variable = 1;
								break;
		case CHARACTER	:	*argp->variable = *linep++;
								break;
		case STRING		:	*(char **)argp->variable = linep;
								linep = "";
								break;
		case PROC		: 	(* (PFI)(argp->variable) )(linep);
								linep = "";
								break;
		default			:	fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n");
								break;
	}
	return(linep);
}

static ARG *findarg(c, tabp, tabsize)
int c, tabsize;
ARG	*tabp;
{
/* Return pointer to argument table entry corresponding to c 	*/
/* or 0 if c isn't in table.												*/

	for (; --tabsize >= 0; tabp++)
		if (tabp->arg == c)
			return(tabp);
	return(0);
}

static pr_usage(tabp, tabsize)
ARG *tabp;
int tabsize;
{
/* Print the argtab in the form:	*/
/*		-<arg> <errmsg> (value is <*variable>)	*/

	for (; --tabsize >= 0; tabp++)
		switch(tabp->type) {
			case INTEGER	:	fprintf(stderr, "-%c<num> %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5d)\n", *(tabp->variable) );
									break;

			case BOOLEAN	:	fprintf(stderr, "-%c      %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" );
									break;

			case CHARACTER	:	fprintf(stderr, "-%c<c>   %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "%-5c)\n", *(tabp->variable) );
									break;

			case STRING		:	fprintf(stderr, "-%c<str> %-40s (value is ",
											tabp->arg, tabp->errmsg);
									fprintf(stderr, "<%s>)\n", *(char **)tabp->variable);
									break;

			case PROC  		:	fprintf(stderr, "-%c<str> %-40s\n",
											tabp->arg, tabp->errmsg);
									break;
		}
}

#define ERRMSG	"Illegal argument <%c>.		Legal arguments are:\n\n"

int getargs(argc, argv, tabp, tabsize)
int 	argc, tabsize;
char 	**argv;
ARG	*tabp;
{
/* Process command line arguments.  Stripping all command line switches	*/
/* out of argv.  Return a new argc.  If an error is found, exit(1) is	*/
/* called (getargs won't return) and a usage message is printed showing	*/
/* all arguments in the table.														*/

	register int	nargc;
	register char	**nargv, *p;
	register ARG	*argp;

	nargc = 1;
	for (nargv = ++argv; --argc > 0; argv++)
		if (**argv != '-') {
			*nargv++ = **argv;
			nargc++;
		} else {
			p = (*argv) + 1;
			while (*p)
				if (argp = findarg(*p, tabp, tabsize) )
					p = setarg(argp, p);
				else {
					fprintf(stderr, ERRMSG, *p);
					pr_usage(tabp, tabsize);
					exit(1);
				}
		}
	return(nargc);
}


/* STOI.C		More powerful version of atoi	                   */
/* Copyright (C) 1985 by Allen Holub.  All rights reserved.     */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985                                  */

#define islower(c)	('a' <= (c) && (c) <= 'z')
#define toupper(c)	(islower(c) ? (c) - ('a' - 'A') : (c) )

int	stoi(instr)
register char **instr;
{
/* Convert string to integer.  If string starts with 0x it is			*/
/* interpreted as a hex number, else if it starts with a 0 it			*/
/* is octal, else it is decimal.  Conversion stops on encountering	*/
/* the first character which is not a digit in the indicated radix	*/
/* *instr is updated to point past the end of the number					*/

	register int 	num=0;
	register char 	*str;
	int 				sign=1;

	str = *instr;
	while (*str == ' ' || *str == '\t' || *str == '\n')
		str++;
	if (*str == '-') {
		sign = -1;
		str++;
	}
	if (*str == '0') {
		++str;
		if (*str == 'x' || *str == 'X') {
			str++;
			while( 	('0' <= *str && *str <= '9') 	||
						('a' <= *str && *str <= 'f')	||
						('A' <= *str && *str <= 'F') 			) {
				num *= 16;
				num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10;
				str++;
			}
		} else
			while	('0' <= *str && *str <= '7') {
				num *= 8;
				num += *str++ - '0';
			}
	} else
		while	('0' <= *str && *str <= '9') {
			num *= 10;
			num += *str++ - '0';
		}

	*instr = str;
	return( num * sign);
}
    

     Furthermore,  a  graphical interface is now the de facto  standard 
(Menu  Headers  and  pull-down menus).   I know  this  means  all  that 
overhead  in terms of code and extra-time to do the programming.   But, 
end-users expect to be able to use software without having to RTFM. And 
in the end, it will be free-market forces that decide whether UNIX will 
grow in popularity or will be just a second-class OS used primarily  by 
DOD and universities.  Clearly, the window system called X (I wish they 
would  simply  call it X Windows) is out of the question  under  MINIX.  
However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a 
look at that later.   This also may be too large for MINIX (I don't yet 
know).   If  mgr  is too complex or too code intensive,  a simple  menu 
header  and  pop-down  window  scheme can be found  in  Al  Steven's  C 
programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal.  
This interface is simple yet elegant.  I also typed in this code, but I 
made a mistake somewhere and can not seem to find it.
     As  of right now,  I would like to see these authors (Allen  Holub 
and Al Stevens) donate these specific routines to the public domain.  I 
think  that  these  routines  together  could  be  used  to  develop  a 
consistent interface that would be extremely easy to use both in a  DOS 
and UNIX (particularly MINIX) environment.

     If you haven't caught the drift of this diatribe,  let me state it 
explicitly.  I believe that no-one has a monopoly (copyright or patent) 
on  a  user-interface.   I  am clearly dismayed  by  the  look-and-feel 
litigation  trend  in  industry.   My position is quite simply  that  a 
screen  (crt,  monitor)  is  simply  another  data  structure  that  is 
fundamental to computer science.   A consistent interface is  necessary 
across all hardware configurations.  Let us briefly examine an analogy.  
Road  signs  indicating hazards and driving conditions are pretty  much 
standardized internationally.   This allows a traveller to proceed from 
country to country without having to be licensed in every country.  The 
benefits are enormous.  Looking at the other side of the coin, the best 
example would be Great Britain and her former colonies.   They drive on 
the  wrong side of the road,  require cars with steering wheels in  the 
passenger's  seat,  etc.   It takes time to learn to navigate in  these 
backward countries.   
     Even more importantly, I am outraged by the fact that file-formats 
are proprietary as viewed by the courts in the SEAware vs. PKware case. 
Files are just streams of meaningless information to be deciphered by a 
program.   This  judgment is a serious detriment to the whole  industry 
unfortunately.     
     The  only  protection that should be accorded  developers  is  for 
their  source  code.   Reverse-engineering is very common.   Most  cars 
require  a  combustion engine (not solar or electric).   But  some  car 
manufacturers build a sports car like a Porche, others build a reliable 
family car like a Chevy,  and yet others build a funeral-box car like a 
Yugo  (I stay).   Some applications are faster and more comfortable  to 
use but accomplish the same tasks as does another vendor's application.  
The classic example is PKware's archiver versus SEAware's.
     My last comment concerns the legal community.   We are living in a 
new  age,  the INFORMATION AGE.   Most judges are  not  technologically 
competent  (having skills in EE and Computer Science).   They simply do 
not  have  the  background to  understand  these  issues.   Yet,  their 
decisions  will have very profound ramifications  upon  society.   This 
deficiency  is  highly  disconcerting.   What can be  done  about  this 
situation? I really don't know. Pray, I suppose.  Apart from praying, I 
hope  that  some  of the giants  (IBM,  INTEL,  Chips  &  Technologies, 
Microsoft,  ATT)  will  pressure  law schools to accept  students  with 
backgrounds  in  these areas and provide  scholarships  to  individuals 
willing  to continue their education in this field.   I hope that these 
companies  will  also push legislation to increase judges  salaries  so 
that  they  are equitable with those found  in  industry.   Why  should 
anyone  work  for  less than they could get  elsewhere?   Remember  the 
standing joke is that the biggest division at IBM is the legal division 
and not the manufacturing division.     
   

-------------------------------------------------------------------------------
Returning to the original subject matter dealing with MINIX PATCHES:

     I confess that I was having difficulty upgrading from MINIX 1.2 to 
1.3  using  the upgrades found on the net.   I found this  particularly 
annoying because I have used patch to upgrade the floppy device  driver 
to  handle 3 and 1/2 inch drives and a few other utilities.   But I was 
at  a complete loss when applying the diff patches to move  from  MINIX 
ver 1.2 to ver 1.3.   The following text documents how (and why I chose 
a particular manner to accomplish this feat) I did it.

First, grab the following files from bugs.nosc.mil via ftp:
     "patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z".
The following is a log of an ftp session that accomplishes the task  at 
hand.
 
	ftp bugs.nosc.mil
	Name (bugs.nosc.mil:rheffel): anonymous
	Password (bugs.nosc.mil: anonymous): guest
	cd pub/Minix/bin
	type binary
	get patch
	cd ../d1.1-1.1
	get d1.1-1.2.tar.Z
	cd ../d1.2-1.3
	get d1.2-1.3.tar.Z
	close
	quit

 
     At this point,  you will have copied in binary format 3 files from 
the  remote host.   The files are:  patch,  the upgrade from ver 1.1 to 
1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you 
rename  d1.1-1.2.tar.Z  to d1112.trz and d1.2-1.3.tar.Z  to  d1213.trz.  
Why  should  you rename the files.   Remember that DOS  allows  only  3 
characters  for a file's extension.  We will use *.trz under DOS as the 
equivalent of UNIX's *.tar.Z. 

     Somehow,  you  must transfer the files down to your PC  from  your 
local  host.   The  files must be transfered in binary format  just  as 
before.   I  am assuming that you are transferring these files to a PC-
DOS partition.   Personally,  I have not yet tried running kermit under 
MINIX yet.  The file mxkermit.tar.Z is available from bugs.nosc.mil.  I 
have  read that the modem handling under MINIX is not quite stable  yet 
so  that is the reason I assume that these files are being  transferred 
to a PC-DOS subdirectory.
     If  you have ftp on your PC,  you can follow the same sequence  as 
above  except for changing directory.   If you don't have ftp,  you can 
use KERMIT.   By typing "kermit -ix", you will invoke the kermit server 
on the local host.   It will transfer the file images (binary  format).  
Next type "get patch", "get d1112.trz", and "get d1213.trz".

     At this point,  you should now have these 3 files on your PC.  But 
first  lets  cover the aspect of getting the equivalent  files  from  a 
different remote host.

Note:  You can get the equivalent files from vm1.nodak.edu on  internet 
or listserv@ndsuvm1 on BITNET.   The major difference is that the files 
are in ASCII format.
     If you are dialing in to vm1.nodak.edu,  I presume that you are on 
internet and can get the files.   The following is a transcript of such 
a session. 
	ftp bugs.nosc.mil
	Name (vm1.nodak.edu:rheffel): anonymous
	Password (vm1.nodak.edu: anonymous): guest
	cd MINIX
	type ascii
        get commands.patch
	mget minix.*
	close
	quit

     If you are on an IBM mainframe and are using BITNET,  then you may 
use  the following command to retrieve one file at a time.   Type "TELL 
LISTSERV@NDSUVM1 GET MINIX 1112A".   Admittedly, this process of asking 
for one file at a time is painfully slow.   If anyone knows of a better 
method, please let me know.  (I assume that REXX could be programmed to 
expand a wildcard or a script file could be built).
     Regardless    of   whether   you   accessed    vm1.nodak.edu    or 
listserv@ndsuvm1,  the  naming  convention on that remote host  follows 
IBM's   standard   convention.     The   files   are   MINIX.1112[A-D], 
MINIX.1213[A-Z] and MINIX.1213[AA-AE].   The files to upgrade from  1.3 
to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9].  
     After  I  had  copied the files from the remote host to  my  local 
host, I renamed the files as follows since DOS allows only 3 characters 
for   the  extension.    MINIX.1112[A-]  was  renamed  to   M1112.[A-], 
MINIX.1213[A-Z]  was  changed  to  M1213.[A-Z],  MINIX.1213[AA-AE]  was 
transformed to M1213.[AA-AE]. Do you get the picture.  For those of you 
unfamiliar with this notation, let us take a specific file and show you 
what was done:

	MINIX.1213AA was renamed to M1213.AA

     This  renaming  scheme  will work on both UNIX  and  IBM  systems.   
Then  I  downloaded the files to PC-DOS.   This  method  prevented  the 
terminal  emulation  package  from  truncating the  name  to  something 
obscure.  Another advantage from this new naming scheme is that it will 
permit  us  to  write a shell script to UNSHAR  the  files  M1213.[A-W] 
unattended.

-------------------------------------------------------------------------------
     You will need to be able to uncompress files that end in *.Z.   To 
do this, you first must compile the compress command.  
	cc -i -o compress compress.c
The -i flag must be specified in order for this command to work.
Remember that you must always transfer compressed files (ending in *.Z) 
in binary format.

     The next step is to transfer the files from your DOS partition  to 
your MINIX partition.   The type of file that you downloaded (binary or 
ASCII format) will determine the switch settings on the dosread command 
line.

     If  your file is a binary file (file is from  bugs.nosc.mil),  you 
will want to type the following:
	dosread c ver13/d1213.trz > d1213.tar.Z
	dosread c ver13/patch > patch

     If your file is an ASCII file,  you will want to use the "-a" flag 
as  follows.   Notice that I read the file patch from the DOS partition 
as patchvm onto the MINIX partition.   There is a good reason for doing 
so, but will not be covered now.  Please note that I demonstrate how to 
read  in  the ASCII files m1213.* in the  following  command.   Do  not 
however  type  this  for each and every file.   Use the  Ralph  Clark's 
modified  script  included below to automatically read  an  entire  DOS 
directory  (eg,  dosrdall  c vm1 [where the files are on c:  drive  ind 
subdirectory \vm1]). 
	dosread -a c ver13/m1213.aa > m1213.aa
        dosread -a c ver13/patch > patchvm


     If   you  got  your  version  of  patch  from   vm1.nodak.edu   or 
listserv@ndsuvm1, you will need to do the following after you have read 
in the file onto MINIX partition.  
          uudecode patchvm
          compress -d patch.Z
     As you noticed, the uncompressing of patch.Z created a file called 
patch.   Now you understand why it was desirable to read the file patch 
from DOS to MINIX as patchvm and not as patch.
 
     The  above  2 steps are not necessary if you got your  version  of 
patch from bugs.nosc.mil.  
  
     Regardless of where you obtained patch, remember to change its rwx 
flags so that it is executable.
     chmod 755 patch
 
     I include Ralph Clark's script (which I have modified sligthly) to 
allow  you  to  read  all the files from a  PC-DOS  subdirectory  on  a 
particular drive.
	 
Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark
From: clark@ttidca.TTI.COM (Ralph Clark)
Newsgroups: comp.os.minix
Subject: my read-all-from-dos script (version 23)
Keywords: dosread
Message-ID: <2951@ttidca.TTI.COM>
Date: 24 Jul 88 06:45:23 GMT
Organization: Citicorp/TTI, Santa Monica
Lines: 20

Here's the one I've been using since the first time my fingers got tired
of backspacing to put the -a in the right place :
----------------cut me---------------
#/********************************************************************/
#/************ Modified version of Ralph Clark's DOSRDALL ************/
#/******************* modified by Rich Heffel ************************/ 
#/******************** handles only ASCII files **********************/
#dosrdall - read all files from DOS physical drive to current directory
echo  "dosrdall [drive [directory]]"
getlf "to proceed, press RETURN"

for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]`
do
     echo $FILE
     dosread -a $1 $2/$FILE > $FILE
done
----------------cut me---------------
The grep -v gets rid of the title and footer from dosdir, which have
lower case letters. I wish there were an option in dosread-write-dir to
suppress the noise and just give file names. This script needs addition
of a parameter to specify a dos subdirectory.
Remember  to  change  the  rwx flags to execute  by  typing:  
     chmod 755 dosrdall 

#Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark
--- 


-------------------------------------------------------------------------------

     The  next  major  step is to apply the patches.   The  files  from 
vm1.nodak.edu  and listserv@ndsuvm1 are in ASCII format  already.   The 
files from bugs.nosc.mil are not and must be uncompressed and extracted 
from the tape archive.  How is this accomplished?


     As  an example,  we will take the file d1.2-1.3.tar.Z which we had 
renamed   to  d1213.trz  previously.    First,   rename  d1213.trz   to 
d1213.tar.Z.
        mv d1213.trz d1213.tar.Z
	compress -d d1213.tar.Z
This  command unpacks (uncompresses) the file.   Next,  we must extract 
the files from this newly created tar file.
	tar vx d1213.tar

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
     The  file  "diff.patch" that was  extracted  from  bugs.nosc.mil's 
d1213.tar   (our  renamed  file)  corresponds  to  vm1.nodak.edu's  and 
listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z].

The question that remains is "How do we apply these patches?"


     First,  we must note that the patch command unfortunately uses the 
subdirectory /tmp for scratch work and does not allow a flag to specify 
another directory for scratch use.  (The lack of this needed feature is 
indicative  of some of the drawback's of UNIX besides being  a  classic 
example  of poor programming technique.  I confess that I too am guilty 
of  such poor practice.)  Unfortunately,  running patch  requires  more 
than  one floppy worth (mkfs /dev/fd0 360) of information.   If you are 
running  a RAM DISK that means you probably do not have  enough  space, 
and patch will choke.

The trick to overcome this is the following:
     Normally,  we  mount  our hard disk partition with the  /usr  file 
system as follows.  I will assume that /usr is on /dev/hd4, though this 
need not be the case.   In the file /etc/rc, we have a one-line command 
that says "/etc/mount /dev/hd4 /usr".

     Change  this  one-line command from "/etc/mount /dev/hd4 /usr"  to 
"/etc/mount  /dev/hd4  /tmp".   This change must be done  in  the  file 
/etc/rc.  After you have applied the patches, you should change it back 
to its original state.
     Why must it be done in /etc/rc.  Because if you try doing it after 
you  have logged in as "root",  you will be notified that /tmp is busy.  
Now logoff and reboot.

     When you log in as "root",  the file system will be found on /tmp.  
If  you  are applying the file "diff.patch" from the  tar.Z  file  from 
bugs.nosc.mil,  all  you  will  need  to do is to cd  (change  dir)  to 
subdirectory  where the copy of the original 1.2 distribution is  found 
(usually /usr/minix/commands) and type the following. 
     patch < diff.patch  

     I  presume that for those of you who are using vm1  or  listserv's 
patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae] 
to a newly created directory and cd to that directory.   You could then 
type the following:
     for i in *
     do echo $i; patch < $i
     done
  


-------------------------------------------------------------------------------
     Remember to change the file /etc/rc back to its original state and 
to reboot.
     
     Naturally,  the next step should be to unshar all the files.  This 
refers  to those files found on vm1 and listserv.   The simplest way to 
unshar the files is to write a simple script on the MINIX command line.

     for i in m1213.*
     do echo $i; sh < $i
     done

     If you have a PC,  leave it unattended overnight.   If you have an 
AT or 386 machine, go out to dinner.


     If  you  have  any suggestions,  please send them  to  me  at  the 
following address:
rheffel@cs2.wsu.edu
 

HELMER%SDNET.BITNET@vm1.nodak.edu (Guy Helmer) (05/30/89)

I have a few comments about Rich's comments on upgrading MINIX.  Over the past
five months, I have upgraded from Minix 1.1 to Minix 1.3.  The upgrade from
Minix 1.1 to Minix 1.2 is the worst software nightmare I have ever had.  The
1.1 shell couldn't handle the shar files and patch (binary from NDSUVM1)
couldn't handle the diff files.  I spent many hours with BRIEF under PC-DOS
extracting files from the shars by hand, and I spent even more quality time
changing the diff files so patch could handle them without choking.  I don't
even remember how I got around the problem of space on the root file system.
I do know that after I finally had 1.2 source on my machine, I spent
plenty of time watching every little thing compile just in case the 1.1
compiler would abort and leave my file systems in a mess.  The neat thing
was I had 1.2 up and running, and then I trashed the hard disk and hard to
start over from Minix 1.1 on floppies.

The upgrade from 1.2 to 1.3 wasn't nearly as painful, and in fact hurt
less than a final exam in an upper-level Electrical Engineering course :-).
Even though sh would choke with "can't create pipe" after running into the
11th file in a shar and I still had to modify the patch files, the upgrade
went much better than the previous upgrade.  With the new compiler binaries
(again, from NDSUVM1), I now have a working 1.3 system.

Good luck to those that are still upgrading.  Many thanks go to those
who assembled Dr. Tannenbaum's postings into nice "little :-)" packages
and put these packages out on the net for the rest of us.

Now, to put in Bruce's patches and get a protected, fast-interrupting Minix...

-- Guy Helmer                              BITNET: HELMER@SDNET
   Dakota State College                    AT&T:   (605) 256-5315
   Technical Services, Development Group           (605) 256-6411
   Madison, SD  57042
   Opinions are mine, all mine.

henry@utzoo.uucp (Henry Spencer) (06/01/89)

In article <16461@louie.udel.EDU> rheffel@cs2.wsu.edu writes:
>     Nevertheless,  I  am  using in a personal capacity  Allen  Holub's 
>getargs() routine found in Dr.  Dobb's Journal May 1985.   I will write 
>such  a  routine from scratch at some point with some improvements  and 
>place it in the public domain...

You might want to consider that Unix already has a standardized, widely-
used option parser, with a public-domain implementation available:  getopt.
It's not as good in some ways, but programs written using it will be much
more portable.
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

paula@bcsaic.UUCP (Paul Allen) (06/01/89)

When I upgraded from 1.1 to 1.3, I used my Sun to apply the patches.
With no worries about memory, stack space, disk space or cpu horsepower,
the patching went fairly smoothly.  Compared to a real Unix environment, 
Minix is a considerable pain to try to do any real work on.  (And
applying all those diffs is *real* work.  :-)

If you are faced with the prospect of upgrading using Minix itself as 
the development environment, my heart goes out to you!  Based on the 
fact that many posters to this group have reported success, I'm certain 
that your quest is not hopeless.  Many attempted- upgraders have also 
reported frustration and confusion after spending many hours in the 
trying.  I don't see much joy in your ordeal.

Paul Allen
-- 
------------------------------------------------------------------------
Paul L. Allen                       | pallen@atc.boeing.com
Boeing Advanced Technology Center   | ...!uw-beaver!bcsaic!pallen