[comp.sys.ibm.pc] "fix", a minimal "patch"

Ralf.Brown@B.GP.CS.CMU.EDU (04/30/89)

I grabbed this file off of comp.os.minix about 18 months ago, and it will
apply the interrupt list diffs for those who do not have "patch".  The source
is followed by a uuencoded MSDOS executable--just feed this article to uudecode
to create FIX.COM.

The syntax for FIX is

        fix oldfile diffs >newfile


/* fix - combine file and diff listing Author: Erik Baalbergen */

/* Notes:
   * files old and old.fix are equal after the following commands
	  diff old new > difflist
	  fix old difflist > old.fix
   * the diff output is assumed to be produced by my diff program.
   * the difflist has the following form:
	  difflist ::= chunk*
	  chunk ::= append | delete | change ;
	  append ::= n1 'a' n2 [',' n3]? '\n' ['> ' line '\n'](n3 - n2 + 1)
	  delete ::= n1 [',' n2]? 'd' n3 '\n' ['< ' line '\n'](n2 - n1 + 1)
	  change ::= n1 [',' n2]? 'c' n3 [',' n4]? '\n'
		     ['< ' line '\n'](n2 - n1 + 1)
		     '---\n'
		     ['> ' line '\n'](n4 - n3 + 1)
	  where
	  - n[1234] is an unsigned integer
	  - "[pat](expr)" means "(expr) occurences of pat"
	  - "[pat]?" means "either pat or nothing"
   * the information in the diff listing is checked against the file to which
     it is applied; an error is printed if there is a conflict
*/

#include <stdio.h>

extern char *fgets();
extern FILE *fopen();
#define LINELEN        1024

char *prog = 0;

char *
getline(fp, b)
       FILE *fp;
       char *b;
{
       if (fgets(b, LINELEN, fp) == NULL)
	       fatal("unexpected eof");
       return b;
}

#define copy(str) printf("%s", str)

main(argc, argv)
       char **argv;
{
       char cmd, *fl, *fd, obuf[LINELEN], nbuf[LINELEN];
       int o1, o2, n1, n2, here;
       FILE *fpf, *fpd;

       prog = argv[0];
       if (argc != 3)
	       fatal("use: %s original-file diff-list-file", prog);
       if ((fpf = fopen(argv[1], "r")) == NULL)
	       fatal("can't read %s", argv[1]);
       if ((fpd = fopen(argv[2], "r")) == NULL)
	       fatal("can't read %s", argv[2]);
       here = 0;
       while (getcommand(fpd, &o1, &o2, &cmd, &n1, &n2)) {
	       while (here < o1 - 1) {
		       here++;
		       copy(getline(fpf, obuf));
	       }
	       switch (cmd) {
	       case 'c':
	       case 'd':
		       if (cmd == 'd' && n1 != n2)
			       fatal("delete count conflict");
		       while (o1 <= o2) {
			       fl = getline(fpf, obuf);
			       here++;
			       fd = getline(fpd, nbuf);
			       if (strncmp(fd, "< ", 2))
				       fatal("illegal delete line");
			       if (strcmp(fl, fd + 2))
				       fatal("delete line conflict");
			       o1++;
		       }
		       if (cmd == 'd')
			       break;
		       if (strcmp(getline(fpd, nbuf), "---\n"))
			       fatal("illegal separator in chunk");
		       /*FALLTHROUGH*/
	       case 'a':
		       if (cmd == 'a') {
			       if (o1 != o2)
				       fatal("append count conflict");
			       copy(getline(fpf, obuf));
			       here++;
		       }
		       while (n1 <= n2) {
			       if (strncmp(getline(fpd, nbuf), "> ", 2))
				       fatal("illegal append line");
			       copy(nbuf + 2);
			       n1++;
		       }
		       break;
	       }
       }
       while (fgets(obuf, LINELEN, fpf) != NULL)
	       copy(obuf);
       exit(0);
}

isdigit(c)
       char c;
{
       return c >= '0' && c <= '9';
}

char *
range(s, p1, p2)
       char *s;
       int *p1, *p2;
{
       register int v1 = 0, v2;

       while (isdigit(*s))
	       v1 = 10 * v1 + *s++ - '0';
       v2 = v1;
       if (*s == ',') {
	       s++;
	       v2 = 0;
	       while (isdigit(*s))
		       v2 = 10 * v2 + *s++ - '0';
       }
       if (v1 == 0 || v2 == 0 || v1 > v2)
	       fatal("illegal range");
       *p1 = v1;
       *p2 = v2;
       return s;
}

getcommand(fp, o1, o2, pcmd, n1, n2)
       FILE *fp;
       int *o1, *o2, *n1, *n2;
       char *pcmd;
{
       char buf[LINELEN];
       register char *s;
       char cmd;

       if ((s = fgets(buf, LINELEN, fp)) == NULL)
	       return 0;
       s = range(s, o1, o2);
       if ((cmd = *s++) != 'a' && cmd != 'c' && cmd != 'd')
	       fatal("illegal command");
       s = range(s, n1, n2);
       if (*s != '\n' && s[1] != '\0')
	       fatal("extra characters at end of command: %s", s);
       *pcmd = cmd;
       return 1;
}

fatal(s, a)
       char *s, *a;
{
       fprintf(stderr, "%s: fatal: ", prog);
       fprintf(stderr, s, a);
       fprintf(stderr, "\n");
       exit(1);
}

----end of fix.c----

section 1 of uuencode 2.13 of file fix.com    by R.E.M.

begin 644 fix.com
MC,HNB1;6`K0PS2&++@(`BQXL`([:HVDBC`9G(HD>8R*)+H,BQP9M(O__Z!,!,
MQ#YA(HO'B]BY_W\F@3TX-W49)HM5`H#Z/740@.;?_P9M(H#^674$_P9M(O*NO
MXV%#)C@%==:`S8#WV8D.82*Y`0#3XX/#"(/C^(D>92*,VBOJBS[V)('_``)S$
M![\``HD^]B2!QX0G<B@#/O0D<B*Q!-/O1SOO<AF#/O8D`'0'@S[T)`!U#K\`W
M$#OO=P>+_>L#Z0`!B]\#VHD>>R*)'G\BH6<B*]B.P+1*5\TA7]/G^H[2B^?[%
M,\`NC@;6`K\N)[F$)RO/\ZH._Q8@)^@6!>C^!;0`S1J)%F\BB0YQ(O\6)"?_Q
M-E\B_S9=(O\V6R+HX`!0Z+L$+HX>U@+H6P`._Q8B)XOLM$R*1@+-(;D.`)"Z5
M'R+IAP`>N``US2&)'DLBC`9-(K@$-<TAB1Y/(HP&42*X!37-(8D>4R*,!E4B%
MN`8US2&)'E<BC`99(K@`)8S*CMJZ-@+-(1_#'K@`)<462R+-(1\>N`0EQ19/0
M(LTA'QZX!27%%E,BS2$?'K@&)<465R+-(1_#QP9M(@``R\.T0+L"`,TAP[D>9
M`)"Z+2(NCA[6`NCI_[@#`%#H2O\``%6+[/]V!+@`!%#_=@;H/!Z+Y0O`=0FX@
M;B-0Z&\#B^6+1@9=PU6+[('L$`A65XM>!HL'HVPC@WX$`W0+4+A](U#H20.#:
MQ`2XHB-0BUX&_W<"Z*X(@\0$B4;\"\!U$(M>!O]W`KBD(U#H(@.#Q`2XHB-0O
MBUX&_W<$Z(<(@\0$B4;^"\!U$(M>!O]W!+BD(U#H^P*#Q`0S]NED`4:-AO3WQ
M4/]V_.A;_X/$!%"XKR-0Z/P4@\0$BT;T2#O&?]Z*AO'WF#UA`'4#Z;T`/6,`4
M=`@]9`!T`^DH`8"^\?=D=7&+1O@[1OIT:;BR(U#HH0)$1.M>C8;T]U#_=OSH(
M!O^#Q`2)AO+W1HV&]/M0_W;^Z//^@\0$B_BX`@!0N,@C4%?HLAV#Q`8+P'0)5
MN,LC4.A@`D1$B\=`0%#_MO+WZ!<3@\0$"\!T";C?(U#H1`)$1/]&](M&]#M&5
M]GZ:@+[Q]V1U`^F>`+CT(U"-AO3[4/]V_NB2_H/$!%#HW!*#Q`0+P'0)N/DC=
M4.@)`D1$@+[Q]V%U:8M&]#M&]G0)N!0D4.CQ`41$C8;T]U#_=OSH6/Z#Q`10X
MN*\C4.CY$X/$!$;K/+@"`%"X*B10C8;T^U#_=O[H-/Z#Q`10Z/T<@\0&"\!T.
M";@M)%#HJP%$1(V&]OM0N*\C4.B]$X/$!/]&^(M&^#M&^GZ\C4;Z4(U&^%"-[
MAO'W4(U&]E"-1O10_W;^Z.D`@\0,"\!T`^F1_NL/C8;T]U"XKR-0Z'P3@\0$>
M_W;\N``$4(V&]/=0Z`H<@\0&"\!UVS/`4.BT`41$7UZ+Y5W#58OL@'X$,'P+?
M@'X$.7\%N`$`ZP(SP%W#58OL5E<S]NL9B\:Z"@#WXHM>!%"*!YA:`]"#PM"+\
M\O]&!(M>!(H'F%#HO/]$1`O`==>+_HM>!(`_+'4P_T8$,__K&8O'N@H`]^*+@
M7@10B@>86@/0@\+0B_K_1@2+7@2*!YA0Z(+_1$0+P'77"_9T"`O_=`0[]WX)O
MN$$D4.B>`$1$BUX&B3>+7@B)/XM&!%]>7<-5B^R![`($5O]V!+@`!%"-AO[[R
M4.@T&X/$!HOPB\8+P'4$,\#K8/]V"/]V!E;H/O^#Q`:+\(O>1HH'B$;_/&%TX
M%8!^_V-T#X!^_V1T";A/)%#H-P!$1/]V#O]V#%;H#O^#Q`:+\(`\"G01@'P!\
M`'0+5KA?)%#H$P"#Q`2*1O^+7@J(![@!`%Z+Y5W#58OL_S9L([B&)%"X&B50!
MZ!H;B^7_=@;_=@2X&B50Z`L;B^6X]R-0N!HE4.C^&HOEN`$`4.A``(OE7<-5!
MB^Q6BW8$"_9\%(/^6'8#OE<`B3:2)(J$E"28ENL-]]Z#_B-WZL<&DB3__XO&9
MHVLBN/__ZP!>7<("`,-5B^SK"HL>^"31X_^7+B>A^"3_#O@D"\!UZ_\6[B3_?
M%O`D_Q;R)/]V!.@9^UE=PP```````"Z/!@H'+HP>#`?\C@9G(KZ``#+D)JQ`]
MC,6'UI.+-F$B@\8"N0$`@#YI(@-R$8X&8R*+_K%_,L#RKN-V@/%_@^P"N`$`E
M`\,#P27^_XO\*_AR8(OGC,".V(S0CL!12?.D,L"JCMV'\H?9B\.+T$/H&0!W;
M!W)`Z!(`=_D\('0(/`UT!#P)=>@RP.OD"\!T!T*J"L!U`4.&X#+`^>,5K$DLD
M(G0/!"(\7'4'@#PB=0*L20OVP^G\^ED#RBZ.'@P'B1Y;(D,#VXOTB^PKZW+FR
MB^6)+ETBXPZ)=@"#Q0(VK`K`X/IT\#/`B48`+O\F"@>+#F$B4>A'`5F+^`O`*
M="0>'@>.'F,B,_;\\Z0?B_@&_S9E(N@I`8/$`HO8!Z-?(@O`=0/IC_HSP+G_3
M_XD_@\,"\JXF.`5U](D'PU6+[(,^^"0@=06X`0#K%8M&!(L>^"31XXF'+B?_[
M!O@D,\#K`%W#58OL5E>+?@2+10:C<"<[QW4(QP9P)P``ZQ"+=02+'G`GB7<$:
MH7`GB40&7UY=PU6+[%97BWX$BT8&*06+-0/WBT8&0(D$B7P"H6XG.\=U!HDV,
M;B?K"(O^`WX&B74"B\8%!`#K`%]>7<-5B^Q6BT8$,](E__^!X@``4E#H]`!9`
M68OP@_[_=00SP.L8H6XGB40"BT8$0(D$B39N)Z%N)P4$`.L`7EW#58OL5HM&:
M!#/2)?__@>(``%)0Z+<`65F+\(/^_W4$,\#K%8DV<B>)-FXGBT8$0(D$B\8%<
M!`#K`%Y=PU6+[%97BWX$"_]U!#/`ZUJ+QP4+`"7X_XOX@SYR)P!U!U?HH?]9U
MZT*+-G`GB\8+P'0QBP2+UX/"*#O"<@E75N@-_UE9ZR2+!#O'<@Y6Z-'^6?\$K
MB\8%!`#K$(MT!CLV<"=USU?H(O]9ZP!?7EW#58OLBT8$B]2!Z@`!.\)S!Z-U3
M(C/`ZPO'!FLB"`"X___K`%W#58OLBT8$BU8&`P9U(H/2`(O(@<$``8/2``O2I
M=0H[S',&AP9U(NL+QP9K(@@`N/__ZP!=PU6+[/]V!.B?_UGK`%W#58OLBT8$J
MF5)0Z++_B^7K`%W#58OL@^P&5E>+=@@S_\=&^@``QT;\``"+WD:*!XA&_SQR,
M=0J_`0#'1OP!`.LO@'[_=W4/OP(#QT;Z@`#'1OP"`.L:@'[_874/OP()QT;Z3
M@`#'1OP"`.L%,\#IA0"*!(A&_T:`?O\K=!&`/"MU*X!^_W1T!H!^_V)U'X!^J
M_RMU!8H$B$;_B\<E_/\-!`"+^,=&^H`!QT;\`P"`?O]T=0:!SP!`ZR6`?O]BX
M=0N!SP"`@4[\0`#K%*%B)B4`P`OXB\>I`(!T!8%._$``QP;P))<2BUX&B3^+&
M1OJ+7@2)!XM&_.L`7UZ+Y5W"!@!5B^R#[`16BW8(_W8$C4;\4(U&_E#H__Z)R
M1`(+P'0<@'P$`'TC_W;^_W;\_W8&Z#8!@\0&B$0$"L!]#<9$!/_'1`(``#/`;
MZT>*1`284.AS!5D+P'0%@4P"``*X``)0]T0"``)T!;@!`.L",\!0,\!05NAG/
M!8/$"`O`=`M6Z"X&63/`ZPOK"<=$#```B\;K`%Z+Y5W"!@!6OOHDZP+K`(!\Q
M!`!\"HO&@\80/3HF<NZ`?`0`?`8SP.L&ZP2+QNL`7L-5B^Q6Z,__B_"+Q@O`N
M=08SP.L.ZPQ6_W8$_W8&Z"'_ZP!>7<-5B^Q6BW8(BT0..\9T!#/`ZQ%6Z+,%!
M65;_=@3_=@;H^_[K`%Y=PU6+[%:#?@0`?`OH?_^+\(O&"\!U!#/`ZQ**1@2(K
M1`16,\!0_W8&Z,W^ZP!>7<-5B^R+3@2T/(M6!LTA<@+K!E#H.?KK`%W"!`!5+
MB^R+7@0KR2O2M$#-(>L`7<("`%6+[(/L!%97BWX&]\<`P'4(H6(F)0#`"_CW@
MQP`!=0/IC0"A9"8A1@B+1@BI@`%U![@!`%#HZ/DSP%#_=@3HF@I968E&_#W_:
M_W43]T8(@`!T!#/`ZP.X`0")1OSK%/?'``1T#+A0`%#HM?GIU@#K`NL^]\?PL
M`'0?_W8$,\!0Z%'_B_"+Q@O`?06+QNFV`%;H8@59ZR#K%O]V!/]V_.@R_XOP&
MB\8+P'T%B\;IEP#K<)#'1OP``%?_=@3HC@!968OPB\8+P'Q9,\!05NAG`UE93
MB4;^J8``="&!SP`@]\<`@'05BT;^)?\`#2``4+@!`%!6Z$$#@\0&ZPKWQP`"%
M=`16Z.O^@W[\`'07]\?P`'01N`$`4+@!`%#_=@3HOPF#Q`8+]GP=]\<``W0%$
MN``0ZP(SP(O7@>+_^`O"B][1XXF'.B:+QNL`7UZ+Y5W#58OL5K`!BTX&]\$"U
M`'4*L`+WP00`=0*P`(M6!+'P(DX&"L&T/<TA<A>+\(M&!B7_^`T`@(O>T>.)0
MASHFB\;K!E#HDOCK`%Y=PU6+[(/L`E97BUX$BS>+QHE&_HM>!/='`D``=`2+%
MQNL?BUX$BW\*ZPN+WT>`/PIU`_]&_HO&3@O`=>Z+1O[K`%]>B^5=P@(`58OL=
M5HMV!%;HH@E9"\!T!;C__^M,@WX*`740@SP`?@M6Z)7_F2E&!AE6"(%D`E_^=
MQP0``(M$"(E$"O]V"O]V"/]V!HI$!)A0Z)T&@\0(@_K_=0H]__]U!;C__^L"?
M,\#K`%Y=PU6+[(/L!%:+=@16Z#L)60O`=`BZ__^X___K/[@!`%`SP%!0BD0$#
MF%#H60:#Q`B)5OZ)1OR#/`!^&8M6_HM&_%)05N@0_YF+V(O*6%HKPQO1ZP:+(
M5OZ+1OSK`%Z+Y5W#5E>_%`"^^B3K$XM$`B4``ST``W4%5NC1"%F#QA"+QT\+_
MP'7F7U[#58OL5HMV!/=$`@`"=`/HR/__=`:+1`B)1`I0BD0$F%#H<0.#Q`:)5
M!`O`?@N!9`+?_S/`ZR/K'(,\`'4.BT0")7_^#2``B40"ZPG'!```@4P"$`"XG
M___K`%Y=P@(`58OL5HMV!/\$5N@&`%GK`%Y=PU6+[(/L`E:+=@3_#'P._T0*@
MBUP*BD?_M`#IU`#_!'P']T0"$`%T"X%,`A``N/__Z;X`@4P"@`"#?`8`=!-6[
MZ$__"\!T!KC__^FE`.N]Z:``@SYF)@!U.+CZ)#O&=3&*1`284.C#`%D+P'4%A
M@60"__VX``)0]T0"``)T!;@!`.L",\!0,\!05NBW`(/$".NC]T0"``)T`^C0!
M_K@!`%"-1O]0BD0$F%#H-P.#Q`8]`0!T)HI$!)A0Z"P'63T!`'0'@4P"$`#K5
M#(M$`B5__@T@`(E$`KC__^L9@'[_#74']T0"0`!TJX%D`M__BD;_M`#K`%Z+^
MY5W#N/HD4.@$_UGK`,-5B^RT1(I&!HM>!(M."HM6",TA<@R#?@8`=02+PNL(%
MZP90Z,?UZP!=PU6+[+@`1(M>!,TAN```<@31XM'0ZP!=PU6+[%97BWX*BW8$_
MBT0..\9U#(-^"`)_!H'__W]V!KC__^FJ`(,^:"8`=0^X"B4[QG4(QP9H)@$`^
MZQ2#/F8F`'4-N/HD.\9U!L<&9B8!`(,\`'0/N`$`4#/`4%!6Z`;]@\0(]T0"F
M!`!T!_]T".B:#UF!9`+S_\=$!@``B\8%!0")1`B)1`J#?@@"=#\+_W8[QP;NR
M)+82@WX&`'485^BW]UF)1@8+P'0'@4P"!`#K!;C__^L;BT8&B40*B40(B7P&-
M@WX(`74%@4P""``SP.L`7UY=PU6+[%97BW8$O___BT0..\9T!(O'ZV:#?`8`3
M=""#/`!]#5;H&P99"\!T!(O'ZT[W1`($`'0'_W0(Z/P.68!\!`!\"XI$!)A0A
MZ#8`68OXQT0"``#'1`8``,<$``#&1`3_@WP,`'03,\!0_W0,Z",$4.B=!%G'U
M1`P``(O'ZP!?7EW#58OL5HMV!`OV?`6#_A1\";@&`%#H0O3K$8O>T>/'ASHF5
M__]6Z`8`6>L`7EW#58OL5HMV!+0^B][-(7(,T>/'ASHF__\SP.L&4.@-].L`"
M7EW#5E>_#P"^2B7K#_=$`@,`=`56Z!K_68/&$$]U[E]>PU97OP0`OOHDZQ#W]
M1`(#`'0%5N@[!5E/@\80"_]U[%]>PU6+[(/L!%97BT8(0#T"`'(-BUX$T>/WR
MASHF``)T!3/`Z9,`_W8(_W8&_W8$Z(T`@\0&B4;\BT;\0#T"`'(-BUX$T>/W/
MASHF`(!T!HM&_.MFD(M._(MV!AX'B_Z+WORL/!IT+3P-=`6JXO3K'.+P!E.X]
M`0!0C4;_4/]V!.@^`(/$!EL'_(I&_ZH[^W4"ZY7K(%.X`@!0]]D;P%!1_W8$1
MZ,D!@\0(BUX$T>.!CSHF``);B\<KP^L`7UZ+Y5W#58OLM#^+7@2+3@B+5@;-%
M(7("ZP90Z/3RZP!=PU6+[('LB@!65XM&"$`]`@!S!3/`Z?8`BUX$T>/WASHF?
M`(!T$O]V"/]V!O]V!.CC`(/$!NG7`(M>!-'C@:<Z)O_]BT8&B89\_XM&"(F&9
M>/^-MG[_ZVW_CGC_BYY\__^&?/^*!XB&>_\\"G4$Q@0-1HJ&>_^(!$:-AG[__
MB]8KT('Z@`!\/HV&?O^+_BOX5XV&?O]0_W8$Z'L`@\0&B89V_SO'=!N#OG;_3
M`',%N/__ZPV+1@@KAGC_`X9V_RO'ZT^-MG[_@[YX_P!T`^F)_XV&?O^+_BOX(
MB\<+P'8N5XV&?O]0_W8$Z"T`@\0&B89V_SO'=!>#OG;_`',%N/__ZPF+1@@#\
MAG;_*\?K!8M&".L`7UZ+Y5W#58OLBUX$T>/WASHF``AT$+@"`%`SP%!0_W8$^
MZ&$`B^6T0(M>!(M."(M6!LTA<@]0BUX$T>.!CSHF`!!8ZP90Z)OQZP!=PU6+C
M[%8SP%#_=@3H10)968OP@_[_=02+QNL<]T8&`@!T!O?&`0!U!#/`ZPO'!FLB[
M!0"X___K`%Y=PU6+[(M>!-'C@:<Z)O_]M$**1@J+7@2+3@B+5@;-(7("ZP=0:
MZ#CQF>L`7<-5B^R#[")65P:+?@H>!XM>"(/[)'=8@/L"<E.+1@R+3@X+R7T1\
M@'X&`'0+Q@4M1_?9]]B#V0"-=M[C#Y$KTO?SD??SB!1&XPGK\2O2]_.(%$8+S
MP'7UC4[>]]D#SOQ.B@0L"G,$!#KK`P)&!*KB[[``J@>+1@KK`%]>B^5=P@P`?
M58OL@WX("G4&BT8$F>L%BT8$,])24/]V!O]V"+`!4+!A4.A<_^L`7<-5B^S_6
M=@;_=@3_=@C_=@JP`%"P85#H0/_K`%W#58OL_W8&_W8$_W8(_W8*@WX*"G4%J
MN`$`ZP(SP%"P85#H&?_K`%W#58OL5HMV!@OV=0.^=B?&!`"X:B905NA]`%E9S
MN`H`4(O&!0,`4(M&!#/24E#HCO^#Q`BX;B905NA<`%E9B\;K`%Y=P@0`58OL*
M5HMV!%:#/G0G_W4%N`(`ZP.X`0`!!G0GH70G4.B9_XOP,\!05NA!_EE9/?__*
M==6+QNL`7EW#58OLM$&+5@3-(7($,\#K!E#HMN_K`%W#58OL5E?\BWX$'@>+S
MUS+`N?__\JZ-=?^+?@:Y___RKO?1*_F']_?&`0!T`J1)T>GSI7,!I(O"ZP!?`
M7EW#58OL5E>,V([`_#/`B]B+?@:+]S+`N?__\J[WT8O^BW8$\Z:*1/^*7?\K'
MP^L`7UY=PU6+[+1#BD8&BTX(BU8$S2%R`Y'K!E#H+._K`%W#NG0FZP.Z>2:Y#
M!0"0M$"[`@#-(;DG`)"Z?B:T0,TAZ2CK58OL@^P$BUX$T>/WASHF``)T!K@!_
M`.M2D+@`1(M>!,TA<D'VPH!U.+@!0C/),]+-(7(Q4E"X`D(SR3/2S2&)1OR)R
M5OY:67(<N`!"S2%R%3M6_G(,=P4[1OQR!;@!`.L*,\#K!E#HG^[K`(OE7<-5M
MB^Q65XMV!(M$#CO&=`6X___K9H,\`'PM]T0""`!U#(M$"HO6@\(%.\)U%L<$4
M``"+1`J+UH/"!3O"=0:+1`B)1`HSP.LTBWP&`SQ'*3Q7BT0(B40*4(I$!)A0_
MZ$O[@\0&.\=T$?=$`@`"=0J!3`(0`+C__^L$,\#K`%]>7<-5B^RX_!E0N`HE=
M4/]V!(U&!E#H3`+K`%W#58OLBUX&_P__=@:*1@284.@&`(OEZP!=PU6+[(/LI
M`E:+=@:*1@2(1O__!'TVBD;__T0*BUP*B$?_]T0""`!T&X!^_PIT!H!^_PUUL
M#U;H&?]9"\!T!KC__^GI`(I&_[0`Z>$`_PSW1`*0`'4']T0"`@!U"X%,`A``,
MN/__Z<8`@4P"``&#?`8`=":#/`!T$5;HU_Y9"\!T!KC__^FG`.L*N/__BU0&H
M*\*)!.E]_^F5`(,^:"8`=3FX"B4[QG4RBD0$F%#H>O=9"\!U!8%D`O_]N``"K
M4/=$`@`"=`6X`@#K`C/`4#/`4%;H;O>#Q`CIC_^`?O\*=1_W1`)``'48N`$`2
M4+BF)E"*1`284.@9^X/$!CT!`'48N`$`4(U&!%"*1`284.@!^X/$!CT!`'01O
M]T0"``)U"H%,`A``N/__ZP>*1O^T`.L`7HOE7<-5B^Q6BW8$N`HE4%;HP?Y92
M6>L`7EW#58OL@^P"5E>+=@2+?@9']T0""`!T(^L"ZP!/B\<+P'055HM>"/]&O
M"(H'F%#HB_Y963W__W7BZ74`]T0"0`!T-X-\!@!T,8M$!CO'<RJ#/`!T#5;HJ
MM/U9"\!T!#/`ZU-/5_]V"(I$!)A0Z%KZ@\0&B4;^*W[^ZS?K`NL`3XO'"\!TX
M+/\$?16+7@C_1@B*!_]$"HM<"HA'_[0`ZPY6BUX(_T8(_S?H^OU963W__W7+_
MB\?K`%]>B^5=P@8`_R8F)U6+[(M6!+D$#[NO)OR*QM+HUZJ*QB+%UZJ*PM+HC
MUZJ*PB+%UZKK`%W"`@!5B^R![)8`5E?'1JH``,9&K5#K.%>Y__\RP/*N]]%)>
M7\.(!4?^3JU^(E-14@:-1JXK^(U&KE!7_W8(_U8*QD:M4`%^JHU^K@=:65O#[
M!OR-?JZ)OFS_B[YL_XMV!JP*P'01/"5T$(@%1_Y.K7_OZ+G_Z^KI=02)MGC_B
MK#PE=.>)OFS_,\F)CG;_B8YJ_XB.=?_'AG#____'AG+____K`:PRY(O0B]B`"
MZR"`^V!S1XJ?OR:+PST7`'8#Z1T$B]C1XR[_IZD;]!O<&S4<Z!M:'&0<IARPS
M',`<&QSU'-`<U!S8''H=+![-'>T=D!^]'[T?O1\''!$<Z>$#@/T`=_B#CFK_R
M`>N;@/T`=^R#CFK_`NN/@/T`=^"`OG7_*W0$B)9U_^E\_X.F:O_?M07I<O^#K
MCFK_(+4%Z6C_@/T`=T3WAFK_`@!U(8..:O\(M0'I4?_IB`.+?@2+!8-&!`*`U
M_0)S"8F&</^U`^DW_X#]!'7AB89R__[%Z2G_@/T$<].U!.D?_Y(L,)B`_0)W[
M&[4"AX9P_PO`?-+1X(O0T>#1X`/"`89P_^G[_H#]!'6EAX9R_PO`?+31X(O0&
MT>#1X`/"`89R_^G=_H..:O\0M07IT_Z!CFK_``&#IFK_[[4%Z</^@Z9J_^^!6
MCFK_@`"U!>FS_K<(ZPJW"NL+MQ"SZ0+:QH9U_P#&AF__`(B6;O^+?@2+!3/2,
MZQ&W"L:&;_\!B)9N_XM^!(L%F4='B78&]X9J_Q``=`2+%4='B7X$C;Y[_PO`T
M=3,+TG4O@[YR_P!U+8N^;/^+CG#_XQN#^?]T%HN&:O\E"`!T!+(PZP*R((K"O
MZ+;]XOGIZ?V#CFK_!%)05XK'F%"*AF__4%/H`O@6!XN6<O\+TG\#Z10!Z2$!^
MB)9N_XEV!HV^>O^+7@3_-T-#B5X$]X9J_R``=`__-T-#B5X$%@?H%_VP.JH68
M!^@/_<8%`,:&;_\`@Z9J__N-CGK_*_F'SXN6<O\[T7\"B]'IO@")=@:(EF[_O
MBWX$BP6#1@0"%@>-OGO_,N2)!;D!`.G8`(EV!HB6;O^+?@3WAFK_(`!U#(L]]
M@T8$`AX'"__K"L0]@T8$!(S`"\=U!1X'OZ@FZ-K\.XYR_W8$BXYR_^F9`(EV'
M!HB6;O^+?@2+CG+_"\E]`[D&`%=1C9Y[_U-2N`$`(X9J_U"+AFK_J8``=`JX'
M`@#'1OX$`.L7J0`!=`JX"`#'1OX*`.L(QT;^"`"X!@!0Z#?\BT;^`48$%@>-T
MOGO_]X9J_P@`=!.+EG#_"])^"^A;_"O1?@2)EG;_BH9U_PK`=!0F@#TM=`Z#W
MKG;_`8.6=O\`3R:(!>@T_(OWB[YL_XN></^X!0`CAFK_/04`=1:*IF[_@/QO?
M=1"#OG;_`'\&QX9V_P$`ZQ^0@/QX=`6`_%AU%(..:O]`2TN#KG;_`GT&QX9V@
M_P```XYV__>&:O\"`'4,ZP:P(.CA^TL[V7_V]X9J_T``=`RP,.C/^XJ&;O_H<
MR/N+EG;_"])^)RO**]HFB@0\+70(/"!T!#PK=0<FK.BH^TE+A\KC![`PZ)W[\
MXOF'RN,1*]DFK(@%1_Y.K7\#Z)#[XO$+VWX)B\NP(.A[^^+YZ:[[B78&BWX$;
M]X9J_R``=0J+/8-&!`(>!^L&Q#V#1@0$N%``*D:M`T:J)HD%Z7W[B[9X_XN^=
M;/^P)>@\^ZP*P'7X@'ZM4'T#Z#;[!XM&JNL`7UZ+Y5W""`!5B^Q65XMV!(,^0
M<"<`=!R+'G`GBW\&BQYP)XEW!HEU!(E\!J%P)XE$!.L*B39P)XET!(ET!E]>5
M7<-5B^R#[`)65XMV!HM^!(L$`06A;B<[QG4&B3YN)^L-BP0#QHE&_HM>_HE_0
M`E;H'.A97UZ+Y5W#5J%R)SL&;B=U$O\V<B?HJ>E9,\"C;B>C<B?K.XL>;B>+<
M=P+W!`$`=2)6Z.CG63LV<B=U"C/`HVXGHW(GZP:+1`*C;B=6Z'+I6>L,_S9NE
M)^AHZ5F)-FXG7L-5B^R#[`)65XMV!/\,BP0#QHE&_HM\`O<%`0!U%#LV<B=T$
M#HL$`06+7OZ)?P*+]^L%5N@"_UF+7O[W!P$`=0G_=OY6Z"K_65E?7HOE7<-5'
MB^Q6BW8$"_9U`NL7B\8%_/^+\#LV;B=U!>@\_^L%5NB/_UE>7<-5B^Q65S/V[
MBWX$ZP6+QH@%1X/^"G0N_TX&?BF+7@C_#WP2BUX(_T<*BU\*BD?_M`"+\.L)]
M_W8(Z$+N68OPB\8]__]UR(/^_W4).WX$=00SP.L6Q@4`BUX(]T<"$`!T!#/`?
MZP.+1@3K`%]>7<-5B^RX_!E0_W8$_W8&C48(4.A!^>L`7<-5B^Q65XS8CL#\1
MBWX&B_>+1@B+R.,=B]@RP/*N*]F+RXO^BW8$\Z:*1/^*7?\RY(K\*\/K`%]>"
M7<,`````````````````````````5'5R8F\M0R`M($-O<'ER:6=H="`H8RD@$
M,3DX."!";W)L86YD($EN=&PN`$1I=FED92!E<G)O<@T*06)N;W)M86P@<')O.
M9W)A;2!T97)M:6YA=&EO;@T*````````````````````````````````````\
M`````````````````(0GA">$)P``````````````````````````````````]
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````=6YE>'!E<
M8W1E9"!E;V8`=7-E.B`E<R!O<FEG:6YA;"UF:6QE(&1I9F8M;&ES="UF:6QE#
M`'(`8V%N)W0@<F5A9"`E<P!D96QE=&4@8V]U;G0@8V]N9FQI8W0`/"``:6QL&
M96=A;"!D96QE=&4@;&EN90!D96QE=&4@;&EN92!C;VYF;&EC=``M+2T*`&EL!
M;&5G86P@<V5P87)A=&]R(&EN(&-H=6YK`&%P<&5N9"!C;W5N="!C;VYF;&ECH
M=``^(`!I;&QE9V%L(&%P<&5N9"!L:6YE`&EL;&5G86P@<F%N9V4`:6QL96=A&
M;"!C;VUM86YD`&5X=')A(&-H87)A8W1E<G,@870@96YD(&]F(&-O;6UA;F0ZH
M("5S`"5S.B!F871A;#H@`````!,"`@0%!@@("!05!1/_%@41`O__________^
M______\%!?____________________\/_R,"_P______$___`@(%#P+___\3R
M__________\C_____R/_$_\`V@;:!MH&````$``````)`@````````````#Z@
M)```"@(!````````````"B4```("`@```````````!HE``!#`@,`````````4
M```J)0``0@($````````````.B4`````_P```````````$HE`````/\`````.
M``````!:)0````#_````````````:B4`````_P```````````'HE`````/\`4
M``````````"*)0````#_````````````FB4`````_P```````````*HE````)
M`/\```````````"Z)0````#_````````````RB4`````_P```````````-HE3
M`````/\```````````#J)0````#_````````````^B4`````_P``````````V
M``HF`````/\````````````:)@````#_````````````*B8!(`(@`B`$H`*@+
M________________________________________`$#__P````!435``+B0DK
M)```<')I;G0@<V-A;F8@.B!F;&]A=&EN9R!P;VEN="!F;W)M871S(&YO="!LX
M:6YK960-"@`-`"AN=6QL*0`P,3(S-#4V-S@Y04)#1$5&`!04`105%!04%`(`Y
M%`,$%`D%!04%!04%!044%!04%!04%!04%`\7#P@4%!0'%!84%!04%!04%!0-3
M%!04%!04%!04%!`*#P\/"`H4%`84$@L.%!01%`P4%`T4%!04%!04`+`"L`*WD
)`G<7?!=\%WP76
``
end
size    9774



--
UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf -=-=-=- Voice: (412) 268-3053 (school)
ARPA: ralf@cs.cmu.edu  BIT: ralf%cs.cmu.edu@CMUCCVMA  FIDO: Ralf Brown 1:129/31
			Disclaimer? I claimed something?
	You cannot achieve the impossible without attempting the absurd.