Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (03/04/90)
Submitted-by: davids@ucscb.UCSC.EDU (60116000) Posting-number: Volume 90, Issue 098 Archive-name: util/wrap-1.00 [ uuencoded executable included. ...tad ] [ the sample unformatted file has been uuencoded since some news transport agents croak on long lines... ] Wrap is a simple text formatter designed to word-wrap text files that have no carriage returns in paragraphs. I wrote it because my word processor, Write & File (never heard of it? Imagine a scaled down version of Pen Pal, written by Pen Pal's author), when it saves a document as straight ASCII, only has carriage returns at the end of paragraphs. This is nice when I import something into a desktop publishing program, but not when I use Write & File to write program documentation such as the documentation you're reading now. I could insert carriage returns manually, but that's a lot of work for 3 page docs, and if I make one change in the documentation, I have to reformat the whole thing over again. #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 1)." # Contents: Wrap.c Wrap.doc Wrap.unfmt.uu Wrap.uu # Wrapped by tadguy@xanth on Sat Mar 3 22:25:55 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Wrap.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Wrap.c'\" else echo shar: Extracting \"'Wrap.c'\" \(9263 characters\) sed "s/^X//" >'Wrap.c' <<'END_OF_FILE' X#include <exec/types.h> X#include <exec/exec.h> X#include <libraries/dos.h> X#include <libraries/dosextens.h> X#include <ctype.h> X#define CR 0x0D X#define LF 0x0A X XUBYTE GetWord(); Xvoid SetVariables(); X XBYTE DoubleSpacing = FALSE; XUSHORT RightMargin = 0; XUSHORT LeftMargin = 0; XUSHORT TopMargin = 0; XUSHORT BottomMargin = 0; XSHORT PageSize = 66; XUSHORT TabSpaces = 5; XUSHORT ParaIndent = 0; X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X struct FileHandle *infile,*outfile; /*pointers to files*/ X char chip outbuf[256]; X UBYTE EOP=FALSE; /*End of paragraph flag*/ X UBYTE EOF=FALSE; /*End of file flag*/ X UBYTE wordcount,linecount; X ULONG Line; X char chip LeftSpaces[80]; X char chip TopReturns[80]; X char chip IndentSpaces[80]; X char chip BottomReturns[80]; X X LeftSpaces[0]=0x0a; X LeftSpaces[1]=NULL; X TopReturns[0]=BottomReturns[0]=NULL; X X if(argv[1][0]=='?') /*Print the instructions*/ X { X puts("Wrap V1.0 (c)1989, 1990 by Dave Schreiber. All rights reserved."); X puts("Written by Dave Schreiber."); X puts("Format:"); X puts(" 1> wrap [options] Infile Outfile"); X puts(" Infile-text file to be processed"); X puts(" Outfile-filename that the formatted text is to be written to"); X puts(" Options (in upper- or lowercase"); X puts(" -a# -- number of spaces to expand tabs out to (default 5)"); X puts(" -b# -- bottom margin (default 0)"); X puts(" -t# -- top margin (default 0)"); X puts(" -r# -- right margin (default 0)"); X puts(" -l# -- left margin (default 0)"); X puts(" -i# -- number of spaces to indent each paragraph (default 0)"); X puts(" -p# -- page size (with no margin, default 66)"); X puts(" -d -- double spaced (default is single spaced)"); X exit(0); X } X X if((argv[argc-1][0]=='-') || (argc == 2)) /*Check for output filename*/ X { X puts("No output file specified!!!\n"); X exit(100); X } X X if((argv[argc-2][0]=='-') || (argc == 1)) /*Check for input filename*/ X { X puts("No input file specified!!!\n"); X exit(200); X } X X /*Get the command line switches, etc.*/ X SetVariables(argc,argv,LeftSpaces,TopReturns,BottomReturns,IndentSpaces); X if(79-RightMargin-LeftMargin < 1) X { X puts("The left/right margins are too large!\n"); X exit(300); X } X X /*Get the true page size (after the margins are taken out)*/ X PageSize = PageSize - (TopMargin + BottomMargin); X if(PageSize < 1) X { X puts("The top/bottom margins are too large!"); X exit(400); X } X X /*Open read file*/ X if((infile=(struct FileHandle *)Open(argv[argc-2],MODE_OLDFILE))==NULL) X { X puts("Couldn't open the read file!"); X exit(500); X } X X /*Now go for write file*/ X if((outfile=(struct FileHandle *)Open(argv[argc-1],MODE_NEWFILE))==NULL) X { X puts("Couldn't open the write file!"); X Close(infile); /*Clean up*/ X exit(600); X } X X /*Write the first top margin padding*/ X Write(outfile,&TopReturns,TopMargin); X X /*Get the first word*/ X linecount=wordcount=GetWord(outbuf,&EOP,&EOF,infile); X X /*Write out the left margin*/ X Write(outfile,&LeftSpaces[1],LeftMargin); X X /*Write out the paragraph indent*/ X Write(outfile,IndentSpaces,ParaIndent); X linecount+=ParaIndent; X X /*Write the first word*/ X Write(outfile,outbuf,wordcount); X wordcount=(linecount+=LeftMargin); X X /*First line of the page...*/ X Line = 0; X X while(!EOF) /*While there's still stuff to be processed...*/ X { X outbuf[1]=NULL; X wordcount=GetWord(&outbuf[1],&EOP,&EOF,infile)+1; /*Get a word*/ X X if((linecount+=wordcount) > 79-RightMargin) /*End of line*/ X { X X if(DoubleSpacing) X { X Line++; X outbuf[0]=0x0a; /*If double spaced, write out an*/ X Write(outfile,outbuf,1); /*extra line*/ X } X X if(++Line == PageSize) /*If we're at the end of a page...*/ X { X Write(outfile,BottomReturns,BottomMargin); /*Write out the margins*/ X Write(outfile,TopReturns,TopMargin); X Line = 0; /*And start a new page*/ X } X X Write(outfile,LeftSpaces,LeftMargin+1); /*Left margin*/ X Write(outfile,&outbuf[1],wordcount-1); /*Write the word*/ X linecount=wordcount+LeftMargin; X } X else /*If we're not at the end of a line*/ X { X if(linecount != (wordcount+LeftMargin)) /*If were not at the start*/ X { /*of a line...*/ X outbuf[0]=0x20; /*Tack on a space*/ X Write(outfile,outbuf,wordcount); X } X else /*Don't tack on a space (insures new paragraphs are*/ X Write(outfile,&outbuf[1],wordcount-1); /*formatted properly)*/ X } X X if(EOP) /*If we're at the end of a paragraph*/ X { X outbuf[0]=0x0a; /*Start a new line*/ X Write(outfile,outbuf,1); X if(!EOF) /*Do this only if we're not at the end of the text*/ X { X if(DoubleSpacing) /*Another line if double spaced*/ X { X Line++; X Write(outfile,outbuf,1); X } X X if(++Line == PageSize) /*If at the end of a page?*/ X { /*Write the margins, etc.*/ X Write(outfile,BottomReturns,BottomMargin); X Write(outfile,TopReturns,TopMargin); X Line = 0; X } X if(LeftMargin>0) /*Write out a margin if it exists*/ X Write(outfile,&LeftSpaces[1],LeftMargin-1); X linecount=LeftMargin; X if(ParaIndent>0) /*Write out the indent for the start*/ X Write(outfile,IndentSpaces,ParaIndent-1); /*of the*/ X /*next paragraph*/ X linecount+=ParaIndent; X } X } X X } X X Close(outfile); /*Done*/ X Close(infile); X exit(0); X} X XUBYTE GetWord(buffer,EOP,EOF,in) Xchar *buffer; XUBYTE *EOP,*EOF; Xstruct FileHandle *in; X{ X char chip inbuf[8]; X UBYTE c,wordcount=0; X X *EOP=FALSE; X *EOF=GetByte(inbuf,in); X while ( ( !(*EOF) ) && (inbuf[0] != 0x0a) && (inbuf[0] != 0x20) ) X { X if(inbuf[0]=='\t') /*Expand tab out to spaces*/ X for(c=0;c<TabSpaces;buffer[c++]=' ',wordcount++); X else X buffer[wordcount++]=inbuf[0]; /*Just stick it in otherwise*/ X *EOF=GetByte(inbuf,in); X } X X if(inbuf[0]==0x0a || *EOF) /*If we're at the end of a paragraph...*/ X *EOP=TRUE; X X return(wordcount); X} X X/*This routine reads a small chuck (128) of a file at once and then*/ X/*lets the calling function get it a byte at a time. Why not just */ X/*read off the disk a byte at a time? Speed. For example, on my */ X/*hard drive equipped system, this speeds up processing 400% */ X XGetByte(buffer,infile) Xchar *buffer; Xstruct FileHandle *infile; X{ X static char chip Buffer[128]; X static curpos=0; /*Next byte to be returned*/ X static end = 0; /*Last byte in buffer*/ X X if(curpos == end) /*If we've sent every byte*/ X { /*Get another 8K chunk*/ X curpos = 0; X end=Read(infile,Buffer,sizeof(Buffer)); X } X X buffer[0]=Buffer[curpos++]; X return(!end); /*Returns whether or not EOF*/ X} X Xvoid SetVariables(argc,argv,LeftSpaces,TopReturns,BottomReturns, X IndentSpaces) Xint argc; Xchar *argv[]; Xchar *LeftSpaces,*TopReturns,*BottomReturns,*IndentSpaces; X{ X register BYTE c,s; X int value; X X for(c=1;c<argc-2;c++) X { X switch(argv[c][1]) /*Get each switch*/ X { X case 'd': /*Double spacing*/ X case 'D': /*(Lowercase and uppercase, just to be extra friendly)*/ X DoubleSpacing=TRUE; X break; X case 'r': X case 'R': /*Right margin*/ X stcd_i(&argv[c][2],&value); X RightMargin = value; X break; X case 'l': X case 'L': /*Left margin*/ X stcd_i(&argv[c][2],&value); X LeftMargin = value; X for(s=0;s < LeftMargin;LeftSpaces[++s]=' '); X LeftSpaces[s+1]=NULL; X break; X case 't': /*Set top margin*/ X case 'T': X stcd_i(&argv[c][2],&value); X TopMargin = value; X for(s=0;s < TopMargin;TopReturns[s++]=0x0a); X TopReturns[s]=NULL; X break; X case 'b': /*Set the bottom margin*/ X case 'B': X stcd_i(&argv[c][2],&value); X BottomMargin = value; X for(s=0;s < BottomMargin;BottomReturns[s++]=0x0a); X BottomReturns[s]=NULL; X break; X case 'p': /*Set the page size*/ X case 'P': X stcd_i(&argv[c][2],&value); X PageSize = value; X break; X case 'a': /*Set the number of spaces a TAB represents*/ X case 'A': X stcd_i(&argv[c][2],&value); X TabSpaces = value; X break; X case 'i': X case 'I': X stcd_i(&argv[c][2],&value); X ParaIndent = value; X for(s=0;s < ParaIndent && s < 80;IndentSpaces[s++]=' '); X IndentSpaces[s]=NULL; X break; X } X } X} END_OF_FILE if test 9263 -ne `wc -c <'Wrap.c'`; then echo shar: \"'Wrap.c'\" unpacked with wrong size! fi # end of 'Wrap.c' fi if test -f 'Wrap.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Wrap.doc'\" else echo shar: Extracting \"'Wrap.doc'\" \(2623 characters\) sed "s/^X//" >'Wrap.doc' <<'END_OF_FILE' X Wrap V1.00 is Copyright (c)1990 by Dave Schreiber. All rights reserved. XThis program is freely distributable, and may not be sold. Money may be Xcharged for copying, media, shipping/handling, labels, taxes, and related Xcosts. X X Wrap is a simple text formatter designed to word-wrap text files that Xhave no carriage returns in paragraphs. I wrote it because my word Xprocessor, Write & File (never heard of it? Imagine a scaled down version Xof Pen Pal, written by Pen Pal's author), when it saves a document as Xstraight ASCII, only has carriage returns at the end of paragraphs. This is Xnice when I import something into a desktop publishing program, but not when XI use Write & File to write program documentation such as the documentation Xyou're reading now. I could insert carriage returns manually, but that's a Xlot of work for 3 page docs, and if I make one change in the documentation, XI have to reformat the whole thing over again. X X But enough of justifying Wrap's existence. Wrap's command line should Xlook like this: X X 1> Wrap [options] <infile> <outfile> X X<infile> is the name of the unformatted text and <outfile> is the filename Xyou want the formatted text saved under. The options are: X X -a# -- expand TABs out # spaces (default: 5 spaces) X -b# -- set a bottom margin of # (default: 0) X -t# -- set a top margin of # (default: 0) X -r# -- set a right margin of # (default: 0) X -l# -- set a left margin of # (default: 0) X -i# -- number of spaces to indent each paragraph X (default: 0) X -p# -- number of lines in a page (default: 66) X -d -- use double spacing (single spacing is the X default) X XThe line width is set at 79 characters. To format a text file to fit into a XCLI window, I'd recommend a right margin of two. If you want to send the Xfile to a printer, set the bottom and top margins to suit the printer. If Xthe printer supports less or more than 66 lines per page, -p lets you set Xthat. If you forgot to indent your paragraphs, -i will let you set that. XIf you indent them with TABs, -a will let you control how many spaces are Xinserted in place of a TAB. X X That's it. Any questions, comments, praise, etc. should be sent to the Xe-mail address(es) below. Enjoy. X X-Dave Schreiber Xdavids@slugmail.ucsc.edu (prefered, but flakey. If it doesn't work, try: Xdavids@ucscb.ucsc.edu (school year) Xdavids@cup.portal.com (summer, vacations, etc.)) X XP.S. Just to give you something to experiment with, I've included the Xunformatted version of this documentation under the name "Wrap.unfmt". X X END_OF_FILE if test 2623 -ne `wc -c <'Wrap.doc'`; then echo shar: \"'Wrap.doc'\" unpacked with wrong size! fi # end of 'Wrap.doc' fi if test -f 'Wrap.unfmt.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Wrap.unfmt.uu'\" else echo shar: Extracting \"'Wrap.unfmt.uu'\" \(3625 characters\) sed "s/^X//" >'Wrap.unfmt.uu' <<'END_OF_FILE' Xbegin 664 Wrap.unfmt XM"5=R87`@5C$N,#`@:7,@0V]P>7)I9VAT("AC*3$Y.3`@8GD@1&%V92!38VAR? XM96EB97(N("!!;&P@<FEG:'1S(')E<V5R=F5D+B`@5&AI<R!P<F]G<F%M(&ES9 XM(&9R965L>2!D:7-T<FEB=71A8FQE+"!A;F0@;6%Y(&YO="!B92!S;VQD+B`@S XM36]N97D@;6%Y(&)E(&-H87)G960@9F]R(&-O<'EI;F<L(&UE9&EA+"!S:&EP0 XM<&EN9R]H86YD;&EN9RP@;&%B96QS+"!T87AE<RP@86YD(')E;&%T960@8V]SW XM=',N"@H)5W)A<"!I<R!A('-I;7!L92!T97AT(&9O<FUA='1E<B!D97-I9VYE+ XM9"!T;R!W;W)D+7=R87`@=&5X="!F:6QE<R!T:&%T(&AA=F4@;F\@8V%R<FEAF XM9V4@<F5T=7)N<R!I;B!P87)A9W)A<&AS+B`@22!W<F]T92!I="!B96-A=7-E\ XM(&UY('=O<F0@<')O8V5S<V]R+"!7<FET92`F($9I;&4@*&YE=F5R(&AE87)DK XM(&]F(&ET/R`@26UA9VEN92!A('-C86QE9"!D;W=N('9E<G-I;VX@;V8@4&5NN XM(%!A;"P@=W)I='1E;B!B>2!096X@4&%L)W,@875T:&]R*2P@=VAE;B!I="!S5 XM879E<R!A(&1O8W5M96YT(&%S('-T<F%I9VAT($%30TE)+"!O;FQY(&AA<R!C? XM87)R:6%G92!R971U<FYS(&%T('1H92!E;F0@;V8@<&%R86=R87!H<RX@(%1HC XM:7,@:7,@;FEC92!W:&5N($D@:6UP;W)T('-O;65T:&EN9R!I;G1O(&$@9&5SR XM:W1O<"!P=6)L:7-H:6YG('!R;V=R86TL(&)U="!N;W0@=VAE;B!)('5S92!72 XM<FET92`F($9I;&4@=&\@=W)I=&4@<')O9W)A;2!D;V-U;65N=&%T:6]N('-UB XM8V@@87,@=&AE(&1O8W5M96YT871I;VX@>6]U)W)E(')E861I;F<@;F]W+B`@1 XM22!C;W5L9"!I;G-E<G0@8V%R<FEA9V4@<F5T=7)N<R!M86YU86QL>2P@8G5T@ XM('1H870G<R!A(&QO="!O9B!W;W)K(&9O<B`S('!A9V4@9&]C<RP@86YD(&EFA XM($D@;6%K92!O;F4@8VAA;F=E(&EN('1H92!D;V-U;65N=&%T:6]N+"!)(&AA_ XM=F4@=&\@<F5F;W)M870@=&AE('=H;VQE('1H:6YG(&]V97(@86=A:6XN"@H)_ XM0G5T(&5N;W5G:"!O9B!J=7-T:69Y:6YG(%=R87`G<R!E>&ES=&5N8V4N("!7S XM<F%P)W,@8V]M;6%N9"!L:6YE('-H;W5L9"!L;V]K(&QI:V4@=&AI<SH*"@D@\ XM(#$^(%=R87`@6V]P=&EO;G-=(#QI;F9I;&4^(#QO=71F:6QE/@H*/&EN9FELR XM93X@:7,@=&AE(&YA;64@;V8@=&AE('5N9F]R;6%T=&5D('1E>'0@86YD(#QOC XM=71F:6QE/B!I<R!T:&4@9FEL96YA;64@>6]U('=A;G0@=&AE(&9O<FUA='1E_ XM9"!T97AT('-A=F5D('5N9&5R+B`@5&AE(&]P=&EO;G,@87)E.B`@"@H)("`M1 XM82,@+2T@97AP86YD(%1!0G,@;W5T(",@<W!A8V5S("AD969A=6QT.B`@-2!S1 XM<&%C97,I"@D@("UB(R`M+2!S970@82!B;W1T;VT@;6%R9VEN(&]F(",@*&1E] XM9F%U;'0Z("`P*0H)("`M=",@+2T@<V5T(&$@=&]P(&UA<F=I;B!O9B`C("ADB XM969A=6QT.B`@,"D*"2`@+7(C("TM('-E="!A(')I9VAT(&UA<F=I;B!O9B`CD XM("AD969A=6QT.B`@,"D*"2`@+6PC("TM('-E="!A(&QE9G0@;6%R9VEN(&]F4 XM(",@*&1E9F%U;'0Z("`P*0H)("`M:2,@+2T@;G5M8F5R(&]F('-P86-E<R!T: XM;R!I;F1E;G0@96%C:"!P87)A9W)A<&@*"2`@("`@("`@("AD969A=6QT.B`@2 XM,"D*"2`@+7`C("TM(&YU;6)E<B!O9B!L:6YE<R!I;B!A('!A9V4@*&1E9F%U! XM;'0Z("`V-BD*"2`@+60@("TM('5S92!D;W5B;&4@<W!A8VEN9R`H<VEN9VQE$ XM('-P86-I;F<@:7,@=&AE(`H)("`@("`@("`@9&5F875L="D*"E1H92!L:6YE` XM('=I9'1H(&ES('-E="!A="`W.2!C:&%R86-T97)S+B`@5&\@9F]R;6%T(&$@H XM=&5X="!F:6QE('1O(&9I="!I;G1O(&$@0TQ)('=I;F1O=RP@22=D(')E8V]M, XM;65N9"!A(')I9VAT(&UA<F=I;B!O9B!T=V\N("!)9B!Y;W4@=V%N="!T;R!SZ XM96YD('1H92!F:6QE('1O(&$@<')I;G1E<BP@<V5T('1H92!B;W1T;VT@86YD! XM('1O<"!M87)G:6YS('1O('-U:70@=&AE('!R:6YT97(N("!)9B!T:&4@<')I: XM;G1E<B!S=7!P;W)T<R!L97-S(&]R(&UO<F4@=&AA;B`V-B!L:6YE<R!P97(@M XM<&%G92P@+7`@;&5T<R!Y;W4@<V5T('1H870N("!)9B!Y;W4@9F]R9V]T('1OF XM(&EN9&5N="!Y;W5R('!A<F%G<F%P:',L("UI('=I;&P@;&5T('EO=2!S970@" XM=&AA="X@($EF('EO=2!I;F1E;G0@=&AE;2!W:71H(%1!0G,L("UA('=I;&P@3 XM;&5T('EO=2!C;VYT<F]L(&AO=R!M86YY('-P86-E<R!A<F4@:6YS97)T960@[ XM:6X@<&QA8V4@;V8@82!404(N"@H)5&AA="=S(&ET+B`@06YY('%U97-T:6]N* XM<RP@8V]M;65N=',L('!R86ES92P@971C+B!S:&]U;&0@8F4@<V5N="!T;R!TR XM:&4@92UM86EL(&%D9')E<W,H97,I(&)E;&]W+B`@16YJ;WDN"@HM1&%V92!3? XM8VAR96EB97(*9&%V:61S0'-L=6=M86EL+G5C<V,N961U("AP<F5F97)E9"P@0 XM8G5T(&9L86ME>2X@($EF(&ET(&1O97-N)W0@=V]R:RP@=')Y.@ID879I9'-`B XM=6-S8V(N=6-S8RYE9'4@*'-C:&]O;"!Y96%R*0ID879I9'-`8W5P+G!O<G1A# XM;"YC;VT@*'-U;6UE<BP@=F%C871I;VYS+"!E=&,N*2D*"E`N4RX@($IU<W0@O XM=&\@9VEV92!Y;W4@<V]M971H:6YG('1O(&5X<&5R:6UE;G0@=VET:"P@22=V+ XM92!I;F-L=61E9"!T:&4@=6YF;W)M871T960@=F5R<VEO;B!O9B!T:&ES(&1O= XJ8W5M96YT871I;VX@=6YD97(@=&AE(&YA;64@(E=R87`N=6YF;70B+@H*? X`` Xend Xsize 2562 END_OF_FILE if test 3625 -ne `wc -c <'Wrap.unfmt.uu'`; then echo shar: \"'Wrap.unfmt.uu'\" unpacked with wrong size! fi # end of 'Wrap.unfmt.uu' fi if test -f 'Wrap.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Wrap.uu'\" else echo shar: Extracting \"'Wrap.uu'\" \(11541 characters\) sed "s/^X//" >'Wrap.uu' <<'END_OF_FILE' Xbegin 664 Wrap XM```#\P`````````%``````````0```0W```"&T```"````&X````&@```^D`V XM``0W)$@D`$GY`````$?Y```$>'(`(#P```":8`(FP5'(__PL>``$*4X$L"E/9 XM!+A"K`2T)FX!%'``(CP``#``3J[^SBEK`)@$K$JK`*QG``!P(`^0KP`$!H``= XM``"`*4`$?&$``2X@:P"LT<C1R")H`!#3R=/)(`)R`!(9*4D$P-"!4H!"9U*`' XM`D#__I_`58!"=P@`(`)3@-2!'[(``"``4X)1R/_V'[P`("``4X(?L2``(`!1C XMRO_X(D\O"6```'@I:P`Z!'QP?U*`T:P$?&$``,)!ZP!<3J[^@$'K`%Q.KOZ,! XM*4`$M"\`)$`@*@`D9Q(L;`;0($`B*```*4$$K$ZN_X(B*@`@9QHD/````^U.5 XMKO_B*4`$O&<*Y8@@0"=H``@`I"!L!+0O"$AL!'@@:``D*6@`!`3`3KH`>$ZZI XM`.!P`&`$("\`!"\`("P$I&<$($!.D$ZZ#NPL>``$(FP&T$ZN_F).N@!.2JP$- XMM&<:(BP$O&<$3J[_W"QX``1.KO]\(FP$M$ZN_H8@'RYL!+A.=7!D8+1#^@`0W XM<`!.KOW8*4`&T&?L3G5D;W,N;&EB<F%R>0!.=4YU2.<',"XO`!@F;P`<+"\`L XM("\'3KH-6%A/)$`@"F8$</]@-@@J``,``V<02'@``D*G+P=.N@?$3^\`#"\&) XM+PLO*@`$3KH),$_O``PJ`$JL!)!G!'#_8`(@!4S?#.!.=0``````````<&%.P XM5?_P2.<A,B9O`"P,K````"`&/FP``(80$W(@L`%G#'()L`%G!G(*L`%F!%*+[ XM8.A*$V=H("P&/N6`4JP&/D'L!D;1P"1(<"*P$V8F4HLDBTH39PIP(K`39P12N XMBV#R2A-F#$AX``%.N@UH6$]@GD(;8)HDBTH39Q@0$W(@L`%G$'()L`%G"G(*G XML`%G!%*+8.1*$V8"8`9"&V``_W)*K`8^9@8@;`2T8`1![`9&*4@&0DJL!CYFV XM?$'Z`21#[`8$(M@BV"+8(M@RD")L!+0@:0`D2'@`*"\H``1(;`8$3KH$5D_O3 XM``Q![`8$(@@D/````^XL;`;03J[_XBE`!,@I0`30<@0I003,*4`$V"E!!-3E7 XM@)/)+'@`!"M`__!.KO[:(&W_\")`(V@`"`"D?@`K0/_T8"HL;`;03J[_RBE`) XM!,A.KO_$*4`$T$'Z`*8B""0\```#[4ZN_^(I0`38?@0@!P!`@`&!K`3$(`<`+ XM0(`"@:P$S`"L``"``P342JP#X&<$<`!@!B`\``"``"X`0JP#E"`'`$```2E`` XM`Y!P`2E``[8@!P!```(I0`.R<`(I0`/8(`<`0`"`*4`#U$'Z"AXI2`2H+RP&K XM0B\L!CY.N@`R0I=.N@;H3.U,A/_<3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`; XM````````````````3OD`````````````````````````````````````<&$O' XM"R9O``A*JP`49PP(*P`#`!MF!'``8#8O+`1T3KH&:EA/)T``!"=``!!*@&8*S XM<`PI0`;,</]@%B=L!'0`%'#SP:L`&'``)T``#"=```@F7TYU````````````\ XM``````!.5?_L2.<O$"XO`#0F;P`X*`=P,<"K`!AG!G#_8``"<`@K``<`&E;`% XM1`!(@$C`+`!*JP`49@``A`@K``(`&V9Z<``G0``,<O^^@6<``D(O"TZZ_TY8( XM3TJ`9PP(ZP`%`!MP_V```BH(ZP`!`!M*!F<.("L`%"(`1($G00`,8`@@*P`4O XM)T``#%.K``QM%B!K``1#Z``!)TD`!"`'$(!R`!(`8!(@!W(`$@`O"R\!80#_1 XM4E!/(@`@`6```=8(*P`"`!MG6'#_OH!F!G``8``!PB`'&T#__TH&9R)R"KZ!Z XM9AQR`B\!2'H!LB\K`!PK0?_P3KK\+$_O``PJ`&`:<@$O`4AM__\O*P`<*T'_! XM\$ZZ_!!/[P`,*@!^_V```.`(ZP`!`!M*!F=2</^^@&=,5*L`#'(*OH%F)B!K* XM``1#Z``!)TD`!!"\``TB*P`,2H%K"B\++P!A`/ZN4$]2JP`,(&L`!$/H``$G6 XM20`$(`<0@"(K``Q*@6L``1Q^_R`K``20JP`0*T#_\&=R""L`!@`:9U)(>``"( XM0J<O*P`<3KH#?$_O``PK0/_L2@9G.%.M_^QM,D*G+RW_["\K`!Q.N@-<2'@`, XM`4AM__TO*P`<3KH"C$_O`!A*K`209@H0+?_]<AJP`6?(+RW_\"\K`!`O*P`<> XM3KK[,$_O``PJ`&`">@!P_[J`9@@(ZP`%`!M@#+JM__!G!@CK``0`&TH&9PXB5 XM*P`4)`%$@B="``Q@&`@K``(`&V<(<@`G00`,8`@B*P`4)T$`#"!K`!`G2``$' XMOH!G+E.K``QM%B!K``1#Z``!)TD`!"`'$(!R`!(`8!(@!W(`$@`O"R\!80#]O XMD%!/(@!P,,"K`!AG!'#_8`QP_[B`9@1P`&`"(`1,WPCT3EU.=0T*`````"YL' XM!+A.N@4B2'D````43KH#D```````````<&%.5?_X2.<#,"9O`"`D;P`D+B\`Q XM*"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@"")+T\`K2?_XO(=C`BP'(`8@2F`"& XM$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU(&\`!")(<@!P`"\"#!``*V<&#!``I XM+68"4D@0&`0``#!M$@P```EN#"0!Y8'2@M*!TH!@Y@P1`"UF`D2!)!\@"%.`8 XM(&\`"""!D(E.=4Y5_^A(YP$R+B\`-$J';@9P_V```-)P"+Z`9`(N`"`'5H`NL XM``)'__PD;0`((&T`"-''WZP#=$/L`W`F42M(__`K2?_T(`MG``"0($L@*P`$* XMT<`K2/_L(FW_\+?)8Q`DBR5'``0L;?_T+(IP`&!XM\EF&BQ3)(X@*P`$(@#2] XMAR5!``0L;?_T+(IP`&!:M<AD")^L`W1P_V!.M<AF+$J39PX@4[/(8PB?K`-TA XM</]@.-^K``1*DV<.L]-F"B`I``31JP`$)I%P`&`>*TO_]"MM_^S_Z"938`#_Z XM;B!M__0@BD*2)4<`!'``3-],@$Y=3G4``````````'!A2.<',"XO`!@F;P`<. XM+"\`("\'3KH&(%A/)$`@"F8$</]@'B\&+PLO*@`$3KH"V$_O``PJ`$JL!)!G^ XM!'#_8`(@!4S?#.!.=0``2.<!$"9O``Q^`!X;2H=G,E.L`Z9M%B!L`YY#Z``!: XM*4D#GB`'$(!R`!(`8-P@!W(`$@!(;`.:+P%.NOLJ4$\B`&#&4ZP#IFT6(&P#$ XMGD/H``$I20.><`H0@'(`$@!@$$AL`YI(>``*3KKZ_%!/(@`@`4S?"(!.=0``, XM2.</$"XO`!@L+P`<*B\`("\'3KH%8%A/)D`@"V8$</]@'B\%+P8O*P`$3KH!U XMG$_O``PH`$JL!)!G!'#_8`(@!$S?"/!.=0``````````<&%(YP,P+B\`%$J'3 XM;@9P`&```*1P"+Z`9`(N`"`'5H`N``)'__Q%[`-P)E(@"V=`("L`!+"';3*PD XMAV8,(%,DB)^L`W0@"V!N("L`!)"'<@BP@646($O1QR2()$@DDR5```2?K`-T< XM(`M@3"1+)E-@O"`'(BP#Y-"!4X!.N@*Z(BP#Y$ZZ`I(L`%"&(`96@"P``D;_A XM_"\&3KH%WEA/)D`@"V<2+P8O"TZZ_5(NAV$`_U103V`"<`!,WPS`3G4`````G XM`````'!A+P<N+P`(+P=.NO\R6$\N'TYU``!(YP,0+B\`$$?L`W@@"V<T""L`H XM`@`;9B@(*P`!`!MG("`K``20JP`0+`!*AF<2+P8O*P`0+RL`'$ZZ]J9/[P`,3 XM)E-@R"\'3KH$T%A/3-\(P$YU``!(YS<0+B\`'"9O`"`L+P`D2JP$J&<$3KH$, XM*$*L!)`B!R0+)@8L;`;03J[_T"H`</^Z@&8.3J[_?"E`!)!P!2E`!LP@!4S?B XM".Q.=0``2.<_`"XO`!PL+P`@*B\`)$JL!*AG!$ZZ`]Q"K`20(`53@"(')`8F] XM`"QL!M!.KO^^*`!P_[B`9@Y.KO]\*4`$D'`6*4`&S"`%#(`````"9Q8,@```; XM``%G"$J`9A@@!F`4(`30AF`.(@=T`'8`+&P&T$ZN_[Y,WP#\3G4``$CG-Q`N" XM+P`<)F\`("PO`"1*K`2H9P1.N@-@0JP$D"(')`LF!BQL!M!.KO_6*@!P_[J`/ XM9@Y.KO]\*4`$D'`%*4`&S"`%3-\([$YU```O!RXO``A*K`2H9P1.N@,>(@<L% XM;`;03J[_W'``+A].=4Y5_[`O#DJL!LAF$D/Z`(AP`"QX``1.KOW8*4`&R'``Y XM(&P$P!`H__]#[?^P8`(2V%.`9/IP`"!L!,`0*/__0C4(L$'M_[`I2`/T2'@`, XM*$AX`/IP`"\`+P!(;`00<@`O`4AL`_PO`4ZZ`O1(>``43KH#("QM_ZQ.74YUL XM*BH@4W1A8VL@3W9E<F9L;W<@*BH``$58250``&EN='5I=&EO;BYL:6)R87)Y2 XM`````````````````$CG,``D`"8!2$)(0\3!QL#`P=1#2$)"0M""3-\`#$YU\ XM2H!J```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``1 XM!D2`3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?K XM3G4O`W80#$$`@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K` XM```&XYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`J XM,@-(0^>X2$#!028?)!].=4Y5_YY(YS,R?@`@;`3`'BC__W!/OH!O`BX`(`=#@ XM[?^O8`(2V%.`9/I"-7BOD\DL>``$3J[^VB9`2JL`K&=,("L`K.6`)$`L*@`X6 XM2H9F!"PK`*!*AF<T(@9!^@"R)`AV"RQL!M!.KO_0($=2AR`(&[P`"@BO(@9!` XM[?^O)`@F!RQL!M!.KO_0</]@3DJL!LAF$D/Z`(9P`"QX``1.KOW8*4`&R$'M7 XM_Z\I2`1$2'@`/$AX`/IP`"\`+P!(;`1@2&P$3$AL!#A"ITZZ`/Q/[P`@4X!G\ XM!'#_8`)P`$S?3,Q.74YU*BH@57-E<B!!8F]R="!297%U97-T960@*BH``$-/Y XM3E1)3E5%``!!0D]25``J*BH@0G)E86LZ(`!I;G1U:71I;VXN;&EB<F%R>0``N XM`"\'+B\`"'``*4`$D$J':R*^K`-@;!P@!^>`0>P$Q$JP"`!G#B`'YX!![`3$X XMT<`@"&`(<`DI0`;,<``N'TYU``````````!P84CG`0)P`"(\```P`"QX``1., XMKO[.+@`"AP``,`!*AV8$<`!@($JL!*AG&"!L!*A.D$J`9@1P`&`,2'@`%$ZZO XM`$983R`'3-]`@$YU8;1.=0``2.<P,BQL!L@@;P`8(F\`'"1O`"`F;P`D("\`@ XM*"(O`"PD+P`P)B\`-$ZN_J1,WTP,3G4``$CG!P`N+P`0("P#8%.`+`!*1FLP1 XM(`9(P.>`0>P$Q"HP"`!*!6<:"`4``F84(`9(P.>`0>P$Q"\P"`1.NOP46$]3, XM1F#,+P=.NO$.6$],WP#@3G4``$CG`#(F;`;4(`MG%"13(DL@*P`(+'@`!$ZNR XM_RXF2F#HD<@I2`;8*4@&U$S?3`!.=4CG`3(N+P`4<`S>@"`'<@`L>``$3J[_[ XM.B9`(`MF!'``8#HG1P`(1>P&U"!J``0G2``$D<@FB$J29@(DBTJJ``1G!B)JL XM``0BBR5+``1*K`-D9@0I2P-D0>L`#"`(3-],@$YU````````````````````A XM``/L`````0````$```06`````@````,````,````!@````````/R```#Z0``# XM`AM.5?VPO^P$?&4`"#)(YR<0+BT`""9M``QP`!M`_O<;0/[V&WP`"OZ@&T#^& XMH1M`_;`;0/Y0(&L`!'`_L!!F``"$2&P`$$ZZ"`)(;`!03KH'^DAL`&Q.N@?R^ XM2&P`=$ZZ!^I(;`"83KH'XDAL`+Q.N@?:2&P`_$ZZ!])(;`$>3KH'RDAL`5Q.3 XMN@?"2&P!@DZZ![I(;`&D3KH'LDAL`<A.N@>J2&P![$ZZ!Z)(;`(N3KH'FDALF XM`F!.N@>20I=.N@>D3^\`/"`'Y8`@<PC\<"VP$&<&<`*^@&822&P"E$ZZ!VQ(K XM>`!D3KH'?%!/(`?E@"!S"/AP+;`09P9P`;Z`9A)(;`*R3KH'1DAX`,A.N@=6` XM4$](;?X`2&W]L$AM_E!(;?Z@+PLO!V$`!(I/[P`8<``P+``"<D^2@'``,"P`L XM!)*`<`&R@&P22&P"SDZZ!P!(>`$L3KH'$%!/,"P`!C(L``C003(L``HD`91`O XM.4(`"G`!M$!L$DAL`O9.N@;22'@!D$ZZ!N)03R`'Y8!(>`/M+S,(^$ZZ!K)0" XM3RM`__Q*@&822&P#'$ZZ!J9(>`'T3KH&ME!/(`?E@$AX`^XO,PC\3KH&AE!/L XM*T#_^$J`9AI(;`,Z3KH&>BZM__Q.N@9^2'@"6$ZZ!H)03W``,"P`!B\`2&W^$ XM4"\M__A.N@9F+JW__$AM_O9(;?[W2&W^^&$``I8L`"H&<``P+``$+H!(;?ZA2 XM+RW_^$ZZ!CIP`#`L``XN@$AM_@`O+?_X3KH&)G``$`5R`#(L``[0@2H`<``0[ XM!BZ`2&W^^"\M__A.N@8&3^\`,'``$`5R`#(L``30@2H`+`5"K?[P2BW^]F8`G XM`@I"+?[Y+RW__$AM_O9(;?[W2&W^^6$``A)/[P`0+`!2!MH&<``P+``"<D^20 XM@'``$`6P@6\``*9*+```9QY2K?[P&WP`"O[X2'@``4AM_O@O+?_X3KH%D$_OD XM``Q2K?[P,"P`"DC`(BW^\+*`9C!P`#`L``@O`$AM_;`O+?_X3KH%9G``,"P`C XM!BZ`2&W^4"\M__A.N@523^\`%$*M_O!P`#`L``12@"\`2&W^H"\M__A.N@4T0 XM<``0!E.`+H!(;?[Y+RW_^$ZZ!2!/[P`4<``0!G(`,BP`!-"!*@!@2G``$`9R\ XM`#(L``30@7(`$@6R@&<>&WP`(/[X<``0!B\`2&W^^"\M__A.N@3@3^\`#&`8! XM<``0!E.`+P!(;?[Y+RW_^$ZZ!,9/[P`,2BW^]V<`_LX;?``*_OA(>``!2&W^- XM^"\M__A.N@2D3^\`#$HM_O9F`/ZL2BP``&<84JW^\$AX``%(;?[X+RW_^$ZZI XM!'Y/[P`,4JW^\#`L``I(P"(M_O"R@&8P<``P+``(+P!(;?VP+RW_^$ZZ!%1PT XM`#`L``8N@$AM_E`O+?_X3KH$0$_O`!1"K?[P,"P`!'(`L$%C&'(`,@!3@2\!' XM2&W^H2\M__A.N@0:3^\`##HL``0P+``.<@"P06,8<@`R`%.!+P%(;?X`+RW__ XM^$ZZ`_1/[P`,<``0!7(`,BP`#M"!*@!@`/WR+RW_^$ZZ`]`NK?_\3KH#R$*7> XM3KH#SDSM".3]G$Y=3G5.5?_TO^P$?&4``Y1(YP,P)FT`""1M``Q\`$(2+RT`( XM%$AM__AA``".4$\@;0`0$(`@;0`02A!F7!`M__AR"K`!9U)R(+`!9TQR";`!P XM9B)^`'``$`=R`#(L``RP@6P@(`=2!W(`$@`7O``@$`!2!F#@(`92!G(`$@`7> XMK?_X$``O+0`42&W_^&$``"Q03R!M`!`0@&"<$"W_^'(*L`%G""!M`!!*$&<$7 XM%+P``2`&3-\,P$Y=3G6_[`1\90`"Y$CG`#`F;P`,)&\`$"`L`UBPK`-<9AQ"; XMK`-82'@`@$AY`````"\*3KH"Y$_O``PI0`-<0?D`````T>P#6%*L`U@6D$JL( XM`UQ7P$0`2(!(P$S?#`!.=4Y5__B_[`1\90`"A$CG!S`N+0`()FT`#"1M`!!\Y XM`2`'58`B!DB!2,&R@&P``EH0!DB`(@!(P>6!(',8`%*($!!(@`1``$%G``&VP XM4T!G``$N54!G2EM`9P`!S%=`9W)90&<``7150&=`54!G``"V!$``#6<``8I3G XM0&<``0)50&<>6T!G``&@5T!G1EE`9P`!2%5`9Q150&<``(I@``'D&7P``0``E XM8``!VA`&2(`B`$C!Y8$@<Q@`5(A(;?_Z+PA.N@'@4$\@+?_Z.4```F```;(0" XM!DB`(@!(P>6!(',8`%2(2&W_^B\(3KH!N%!/("W_^CE```1Z`"`%2(!(P'(`/ XM,BP`!+"!;`Y2!1`%2(`5O``@``!@XB`%2(!(P$(R"`%@``%@$`9(@"(`2,'E5 XM@2!S&`!4B$AM__HO"$ZZ`6903R`M__HY0``&>@`@!4B`2,!R`#(L``:P@6P4V XM(`52!1(`2($@;0`4$;P`"A``8-P0!4B`(&T`%$(P``!@``$&$`9(@"(`2,'E@ XM@2!S&`!4B$AM__HO"$ZZ`0Q03R`M__HY0``(>@`@!4B`2,!R`#(L``BP@6P4@ XM(`52!1(`2($@;0`8$;P`"A``8-P0!4B`(&T`&$(P``!@``"L$`9(@"(`2,'E- XM@2!S&`!4B$AM__HO"$ZZ`+)03R`M__HY0``*8```A!`&2(`B`$C!Y8$@<Q@`- XM5(A(;?_Z+PA.N@"*4$\@+?_Z.4``#&!<$`9(@"(`2,'E@2!S&`!4B$AM__HO, XM"$ZZ`&103R`M__HY0``.>@`@!4B`2,!R`#(L``ZP@6P:<%"Z`&P4(`52!1(`L XM2($@;0`<$;P`(!``8-80!4B`(&T`'$(P``!2!F``_9I,WPS@3EU.=4[Y```'_ XM,$[Y`````$[Y```),$[Y```'I$[Y````'$[Y````3$[Y```*T$[Y````,```W XM`^P````$````````"%````AB```(2@``"#X````"`````@``!8X```5Z````C XM!`````0```AH```(7```"%8```A$`````````_)```/J````(```````````( XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM```````````````````````````````````````````#\@```^H```$>````! XM``````````!"``4``%=R87`@5C$N,""I,3DX.2P@,3DY,"!B>2!$879E(%-C: XM:')E:6)E<BX@($%L;"!R:6=H=',@<F5S97)V960N``!7<FET=&5N(&)Y($1AT XM=F4@4V-H<F5I8F5R+@``1F]R;6%T.@`@(#$^('=R87`@6V]P=&EO;G-=($ENG XM9FEL92!/=71F:6QE```@($EN9FEL92UT97AT(&9I;&4@=&\@8F4@<')O8V5SW XM<V5D```@($]U=&9I;&4M9FEL96YA;64@=&AA="!T:&4@9F]R;6%T=&5D('1E3 XM>'0@:7,@=&\@8F4@=W)I='1E;B!T;P``("!/<'1I;VYS("AI;B!U<'!E<BT@F XM;W(@;&]W97)C87-E`"`@("`M82,@+2T@;G5M8F5R(&]F('-P86-E<R!T;R!EV XM>'!A;F0@=&%B<R!O=70@=&\@*&1E9F%U;'0@-2D`("`@("UB(R`M+2!B;W1T0 XM;VT@;6%R9VEN("AD969A=6QT(#`I```@("`@+70C("TM('1O<"!M87)G:6X@/ XM*&1E9F%U;'0@,"D`("`@("UR(R`M+2!R:6=H="!M87)G:6X@*&1E9F%U;'0@K XM,"D`("`@("UL(R`M+2!L969T(&UA<F=I;B`H9&5F875L="`P*0``("`@("UIT XM(R`M+2!N=6UB97(@;V8@<W!A8V5S('1O(&EN9&5N="!E86-H('!A<F%G<F%P> XM:"`H9&5F875L="`P*0``("`@("UP(R`M+2!P86=E('-I>F4@*'=I=&@@;F\@! XM;6%R9VEN+"!D969A=6QT(#8V*0`@("`@+60@("TM(&1O=6)L92!S<&%C960@: XM*&1E9F%U;'0@:7,@<VEN9VQE('-P86-E9"D`3F\@;W5T<'5T(&9I;&4@<W!E: XM8VEF:65D(2$A"@``3F\@:6YP=70@9FEL92!S<&5C:69I960A(2$*`%1H92!L$ XM969T+W)I9VAT(&UA<F=I;G,@87)E('1O;R!L87)G92$*``!4:&4@=&]P+V)O1 XM='1O;2!M87)G:6YS(&%R92!T;V\@;&%R9V4A`$-O=6QD;B=T(&]P96X@=&AE> XM(')E860@9FEL92$``$-O=6QD;B=T(&]P96X@=&AE('=R:71E(&9I;&4A````\ XM````````````*``````````````````````````````#F@``````````````% XM`````````````````````````````[P`````````````````````````````_ XM````````````````````````````````````````````````````````````` XM`(`````$`/__````#@`.````````````````__\````$``0````````,T@``" XM`^C__P````0`!`````````SH`````/__````#@`.````````#M``````__\`; XM```$``0`````````````!"3__P````0`!`````````[L`````/__````!``$V XM````````#O8````````"`````^P````%````````!&P```18```$,```!!P`: XM``0(````!`````,```1(```$#````YH```-X`````````_(```/I````&DCGQ XM(`(L>0``!M!,[P`&``Q.KO_B3-]`!$YU```O#BQY```&T"(O``A.KO_<+%].Z XM=4CG,`(L>0``!M!,[P`.`!!.KO_63-]`#$YU``!(YS`"+'D```;03.\`#@`0J XM3J[_T$S?0`Q.=0`````#[`````0````#````4@```#8````@````!@``````I XM``/P`````E]7<FET90``````3`````)?4F5A9````````#`````"7T-L;W-E/ X>```````<`````E]/<&5N``````````````````/R$ X`` Xend Xsize 8220 END_OF_FILE if test 11541 -ne `wc -c <'Wrap.uu'`; then echo shar: \"'Wrap.uu'\" unpacked with wrong size! fi # end of 'Wrap.uu' fi echo shar: End of archive 1 \(of 1\). cp /dev/null ark1isdone MISSING="" for I in 1 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have the archive. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@cs.odu.edu>. Mail comments to the moderator at <amiga-request@cs.odu.edu>. Post requests for sources, and general discussion to comp.sys.amiga.