[comp.binaries.ibm.pc] nansi.sys source and executable part 1 of 2

tes@whuts.UUCP (07/04/87)

[This is part sources and part uuencodes; there's considerable resistance
to putting it in comp.sources.misc, so I'll give it to the people who will
appreciate it.  ++bsa]

There has been considerable interest in this program,
and this is the most complete version that I know of.
All credit belongs to other people as shown below.
--terry sterkel (6/5/87)

# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by sally!nather on Thu Jul 17 13:11:16 CDT 1986
# Contents:  readme nansi.doc nansi.mkf nansi.sup demo.uue nansi.uue
 
echo x - readme
sed 's/^@//' > "readme" <<'@//E*O*F readme//'
This package includes the source code for nansi.sys, an improved
console driver for MS-DOS running on IBM PC computers or their clones,
a makefile for how to assemble it, a uuencoded copy of the assembled
(executable) driver, documentation describing the driver, and a short 
demo program (uuencoded) to show off its strong point: very rapid
screen updates from multi-character write operations.

The demo program takes a single argument on the command line; it should
be the filename of a text file.  It then displays the first 24 text lines
from the file on the console screen and quits.  Try it first with your
current console driver (e.g. ansi.sys), then install the executable
copy of nansi.sys in its place and run demo again on the same text file.

I think the author of nansi.sys did us all a tremendous favor.


Ed Nather
Astronomy Dept, U of Texas @ Austin
{allegra,ihnp4}!{noao,ut-sally}!utastro!nather
nather@astro.AS.UTEXAS.EDU
@//E*O*F readme//
chmod u=rw,g=r,o=r readme
 
echo x - nansi.doc
sed 's/^@//' > "nansi.doc" <<'@//E*O*F nansi.doc//'

nansi   - enhanced MS-DOS ansi console driver

SYNOPSIS
        Include in \config.sys the line
                device=nansi.sys

DESCRIPTION
        Nansi.sys is a console driver which understands ANSI control
        sequences. It has several advantages over ANSI.SYS (the driver
        supplied with DOS):
        1. It supports new escape sequences (see below).
        2. It provides MUCH faster output under certain conditions.
        3. It supports the 43-line mode of the EGA.
        4. The darned bell is now 1/4 second instead of 1/2 second long.

        What a console driver does:
        When you, for example, type
                C:> type foo.txt
        COMMAND.COM opens the file foo.txt, reads it, and writes it to
        the console driver, which puts it up on the screen.

        Both ansi.sys and nansi.sys use IBM Video BIOS to control the screen.
        However, nansi.sys bypasses BIOS if the screen is in a text mode; this
        allows much faster operation under certain conditions.

        While putting text up on the screen, (n)ansi.sys keeps a lookout for
        the escape character (chr(27), known as ESC); this character signals
        the start of a terminal control sequence.
        Terminal control sequences follow the format
                ESC [ param; param; ...; param cmd
        where
                ESC     is the escape character chr$(27).
                [       is the left bracket character.
                param   is an ASCII decimal number, or a string in quotes.
                cmd     is a case-specific letter identifying the command.
        Usually, zero, one, or two parameters are given.  If parameters
        are omitted, they usually default to 1; however, some commands
        (KKR and DKOCT) treat the no-parameter case specially.
        Spaces are not allowed between parameters.

        For example, both ESC[1;1H and ESC[H send the cursor to the home
        position (1,1), which is the upper left.

        Either single or double quotes may be used to quote a string.
        Each character inside a quoted string is equivalent to one numeric
        parameter.  Quoted strings are normally used only for the Keyboard
        Key Reassignment command.

Control Sequences
        The following table lists the sequences understood by nansi.sys.
        Differences between nansi.sys and the standard ansi.sys are marked
        with a vertical bar (|).

Cursor Positioning
Short   Long name               Format          Notes
CUP     cursor position         ESC[y;xH        Sets cursor position.
HVP     cursor position         ESC[y;xf        Same as CUP; not recommended.
CUU     cursor up               ESC[nA          n = # of lines to move
CUD     cursor down             ESC[nB
CUF     cursor forward          ESC[nC          n = # of columns to move
CUB     cursor backward         ESC[nD
DSR     Device Status, Report!  ESC[6n          Find out cursor position.
CPR     Cursor Position report  ESC[y;xR        Response to DSR, as if typed.
SCP     Save Cursor Position    ESC[s           Not nestable.
RCP     Restore Cursor Position ESC[u

Editing
ED      Erase in Display        ESC[2J  Clears screen.
EL      Erase in Line           ESC[K   Clears to end of line.
IL  |   Insert Lines            ESC[nL  Inserts n blank lines at cursor line.
DL  |   Delete Lines            ESC[nM  Deletes n lines including cursor line.
ICH |   Insert Characters       ESC[n@  Inserts n blank chars at cursor.
DCH |   Delete Characters       ESC[nP  Deletes n chars including cursor char.


Mode-Setting
SGR     Set Graphics Rendition  ESC[n;n;...nm   See character attribute table.
SM      Set Mode                ESC[=nh         See screen mode table.
RM      Reset Mode              ESC[=nl         See screen mode table.
IBMKKR  Keyboard Key Reass.     ESC["string"p
        The first char of the string gives the key to redefine; the rest
        of the string is the key's new value.
        To specify unprintable chars, give the ASCII value of the char
        outside of quotes, as a normal parameter.
        IBM function keys are two byte strings; see the IBM Basic manual.
        For instance, ESC[0;";dir a:";13;p redefines function key 1 to
        have the value "dir a:" followed by the ENTER key.
      | If no parameters given, all keys are reset to their default values.

DKOCT | Output char translate   ESC[n;ny
      | When first char is encountered in output request, it is replaced with
      | the second char.  This might be useful for previewing text before
      | sending it to a printer with a funny print wheel.
      | If no parameters are given, all chars are reset to normal.


Character Attributes
        The Set Graphics Rendition command is used to select foreground
        and background colors or attributes.
        When you use multiple parameters, they are executed in sequence, and
        the effects are cumulative.
           Attrib code          Value
                0               All attributes off (normal white on black)
                1               Bold
                4               Underline
                5               Blink
                7               Reverse Video
                8               Invisible (but why?)
                30-37           foregnd blk/red/grn/yel/blu/magenta/cyan/white
                40-47           background

Screen Modes
        The IBM BIOS supports several video modes; the codes given in the
        BIOS documentation are used as parameters to the Set Mode command.
      | (In bitmap modes, the cursor is simulated with a small blob (^V).)
            Mode Code           Value
                0               text 40x25 Black & White
                1               text 40x25 Color
                2               text 80x25 Black & White
                3               text 80x25 Color
                4               bitmap 320x200 4 bits/pixel
                5               bitmap 320x200 1 bit/pixel
                6               bitmap 640x200 1 bit/pixel
                7               (cursor wrap kludge)
                13 (EGA)        bitmap 320x200 4 bits/pixel ?
                14 (EGA)        bitmap 640x200 4 bits/pixel
                16 (EGA)        bitmap 640x350 4 bits/pixel
        Mode 7 is an unfortunate kludge; Setting mode 7 tells the cursor
        to wrap around to the next line when it passes the end of a line;
        Resetting mode 7 tells the cursor to not wrap, but rather stay put.
      | If your computer has the Enhanced Graphics Adaptor, modes between
      | 8 and 15 are also supported; see the EGA BIOS for info.
      | The EGA also lets you use a shorter character cell in text modes
      | in order to squeeze 43 lines of text out of the 25-line text modes.
      | To enter 43 line mode, set the desired 25-line text mode (0 to 3),
      | then Set Mode 43.  For instance: ESC[=3h ESC[=43h.
      | To exit 43 line mode, set the desired 25-line text mode again.
      | Nansi.sys ignores mode 43 unless there is an EGA on your computer.

Faster Output
      | Any program that sets the console to RAW mode, and buffers its
      | output properly, can achieve extremely high screen update speeds in
      | return for giving up the special functions of the keys ^C, ^S, and ^P.
      | See IOCTL in the MS-DOS 3.x Technical Reference for more info.
        Also, a small improvement in speed may be noticed with some
        programs that use the DOS console in normal mode, as this driver
        efficiently implements the (standard but undocumented) INT 29h
        most-favored-device putchar used by DOS.

EXAMPLES
        See the file setraw.doc for Macro Assembler, Lattice C,
        and Microsoft C routines for entering and leaving raw mode.

BUGS
        Insert and delete character do not work in graphics modes.
        Graphics mode writing is slow.
        The simulated cursor in graphics mode slows down single-char
        writes by a factor of 3; it should be disable-able.
        Does not support erase-to-end-of-screen and other useful functions.

Version
        This version, 2.2, created February 1986.  Problems should
        be reported to Daniel Kegel, 1-60 CIT, Pasadena, CA 91126
        (or, after June 1986, 2648 169th Ave SE, Bellevue, Wa. 98008).
        Your suggestions for improvement would be most welcome.

NOTE
        This program may be distributed for educational and personal use
        only.  Commercial use is verboten; get in touch with the author.

FILES
        nansi.doc       - this file
        nansi.hex       - compiled version  <Not supported by INFO-IBMPC>
                Convert nansi.hex into nansi.sys with the following commands
                (you'll end up with 256 extra bytes at end, but who cares?):
                        debug                   # Run DOS debugger
                        N nansi.hex             # Load the hex file
                        L
                        N nansi.sys             # Write it out
                        W
                        Q                       # Quit- back to DOS.
        nansi.cat       - concatenated sources
                nansi   - makefile- shows how to assemble & link
                nansi.asm       - device driver guts
                nansi_d.asm     - definitions
                nansi_p.asm     - ANSI parameter grabber
                nansi_f.asm     - ANSI function handlers
                nansi_i.asm     - device driver init routine
        setraw.cat      - concatenated examples
                setraw.asm      - for assembly programs
                setraw.msc      - for Microsoft C programs
                setraw.lc       - for Lattice C programs
                rawtest.lc      - example for Lattice C only
-- 

@//E*O*F nansi.doc//
chmod u=rw,g=r,o=r nansi.doc
 
echo x - nansi.mkf
sed 's/^@//' > "nansi.mkf" <<'@//E*O*F nansi.mkf//'
nansi.obj:	nansi.asm nansi_d.asm
	masm nansi,,nansi;

nansi_p.obj:	nansi_p.asm
	masm nansi_p,,nansi_p;

nansi_f.obj:	nansi_f.asm nansi_d.asm
	masm nansi_f,,nansi_f;

nansi_i.obj:	nansi_i.asm nansi_d.asm
	masm nansi_i,,nansi_i;

nansi.sys:	nansi.obj nansi_p.obj nansi_f.obj nansi_i.obj
	link /map nansi nansi_p nansi_f nansi_i;
	exe2bin nansi nansi.sys
	rm nansi.exe

@//E*O*F nansi.mkf//
chmod u=rw,g=r,o=r nansi.mkf
 
echo x - nansi.sup
sed 's/^@//' > "nansi.sup" <<'@//E*O*F nansi.sup//'
Support Routines for nansi.sys
The three files setraw.asm, setraw.lc, and setraw.msc contain routines
to allow use of RAW mode from assembly, Lattice C, and Microsoft C.

Lattice C is a little wierder than most, so rawtest.lc was included
to show how to use setraw.lc; the other languages require no special
setup to use setraw.

;---- setraw.asm ----------------------------------------------
	public	getraw, setraw
;----- dos ----------------------
; Call DOS function # n.
dos	macro	fn
	mov	ah, fn
	int	21h
	endm

code	segment para public 'CODE'
assume cs:code
;----- Getraw ---------------------------------------------
; Returns AX=1 if file BX is a device in raw mode; 0 otherwise.
; Returns Carry set & errorcode in AX if DOS error.

getraw	proc	near
	mov	al, 0
	DOS	44h		; Get attributes
	jc	gr_exit		; bad file handle?
	mov	ax, 20h
	and	al, dl		; get that bit
	mov	cl, 4
	shr	ax, cl
	clc
gr_exit:
	ret
getraw	endp

;----- Setraw -------------------------------------------
; Sets Raw state of file BX to (AX != 0) if file is a device.
; Returns Carry set & errorcode in AX if DOS error.
setraw	proc	near
	mov	cx, ax
	mov	al, 0
	DOS	44h
	jc	sr_exit
	test	al, 80h		; It it a device?
	jz	sr_exit		; nope- do nothing.
	; Current mode in DX; set CX = 20H if CX nonzero.
	or	cx, cx
	jz	sr_ax0
		mov	cx, 20h
sr_ax0: and	dx, 00cfh	; clear old raw bit and hi byte,
	or	dx, cx		; set new value.
	mov	al, 1
	DOS	44h
sr_exit:
	ret
setraw	endp
code	ends
	end
;---- end of setraw.asm ------------------------------------------
/*--- setraw.msc -------------------------------------------------
  Routines to set and reset raw mode on stdin/stdout.
  For Microsoft C.
------------------------------------------------------------------*/
#include <dos.h>
/* Use the IOCTL DOS function call to change stdin and stdout to raw mode.
 * For stdin, this prevents MSDOS from trapping ^P, ^S, ^C, thus freeing us
 * of ^P toggling 'echo to printer'.
 * For stdout, this radically speeds up the output because there is no
 * checking for these special characters in the input buffer whenever
 * screen output is occurring.
 * Note that only the stdin OR stdout ioctl need be changed since
 * apparently they are handled as the same device.
 * Thanks to Mark Zbikowski (markz@microsoft.UUCP) for helping me with
 * this.
 * --- This stolen from sources to the mighty game HACK ---
 */
#define DEVICE		0x80
#define RAW		0x20
#define IOCTL		0x44
#define STDIN		fileno(stdin)
#define STDOUT		fileno(stdout)
#define GETBITS		0
#define SETBITS		1
static unsigned	old_stdin, old_stdout, ioctl();
/*--- set_raw() ----------
  Call this to set raw mode; call restore_raw() later to restore
  console to old rawness state.
--------------------------*/
set_raw()
{
	old_stdin = ioctl(STDIN, GETBITS, 0);
	old_stdout = ioctl(STDOUT, GETBITS, 0);
	if (old_stdin & DEVICE)
		ioctl(STDIN, SETBITS, old_stdin | RAW);
	if (old_stdout & DEVICE)
		ioctl(STDOUT, SETBITS, old_stdout | RAW);
}
restore_raw()
{
	if (old_stdin)
		(void) ioctl(STDIN, SETBITS, old_stdin);
	if (old_stdout)
		(void) ioctl(STDOUT, SETBITS, old_stdout);
}
static unsigned
ioctl(handle, mode, setvalue)
unsigned setvalue;
{
	union REGS regs;

	regs.h.ah = IOCTL;
	regs.h.al = mode;
	regs.x.bx = handle;
	regs.h.dl = setvalue;
	regs.h.dh = 0;			/* Zero out dh */
	intdos(&regs, &regs);
	return (regs.x.dx);
}
/*-- end of setraw.msc --*/
/*------ setraw.lc ----------------------------------------------
Lattice C routines which get and set the current raw/cooked state
of a file, given its Lattice file descriptor.
Useful when trying to obtain high console output speeds.
----------------------------------------------------------------*/

#include "\lc\dos.h"
#define CARRY 0x1
#define ERROR (-1)
#define TRUE 1
#define FALSE 0

extern _oserr;

/*---- getraw --------------------------------------------------
Returns TRUE if file fd is a device in raw mode; FALSE otherwise.
Returns ERROR, puts errorcode in _oserr, if DOS error.
----------------------------------------------------------------*/
getraw(fd)
int fd;
{
	union REGS inregs;
	union REGS outregs;
	int	flags;

	if (fd > 2) fd+=2;		/* convert to DOS fd */
	inregs.x.bx = fd;
	inregs.x.ax = 0x4400;		/* get file attributes */
	flags = intdos(&inregs, &outregs);
	if (flags & CARRY) {
		_oserr = outregs.x.ax;
		return -1;
	}
	return (outregs.x.dx & 0x20) ? TRUE : FALSE;
}

/*---- setraw --------------------------------------------------
Sets Raw state of file fd to raw_on (if file is not a device, does nothing).
Returns zero if successful.
Returns ERROR & errorcode in _oserr if DOS error.
----------------------------------------------------------------*/
setraw(fd, raw_on)
int fd, raw_on;
{
	union REGS inregs;
	union REGS outregs;
	int	flags;

	if (fd > 2) fd+=2;		/* convert to DOS fd */

	inregs.x.ax = 0x4400;		/* get file attributes */
	inregs.x.bx = fd;
	flags = intdos(&inregs, &outregs);
	if (flags & CARRY) {
		_oserr = outregs.x.ax;
		return ERROR;
	}
	if ((outregs.x.ax & 0x80) == 0)	/* return zero if not device */
		return 0;

	outregs.x.ax = 0x4401;		/* set file attributes */
	outregs.x.bx = fd;
	outregs.x.dx &= 0xcf;		/* clear old raw bit & hi byte */
	if (raw_on) outregs.x.dx |= 0x20;	/* maybe set new raw bit */
	flags = intdos(&outregs, &inregs);
	if (flags & CARRY) {
		_oserr = inregs.x.ax;
		return ERROR;
	}
	return 0;
}
/*-- end of setraw.lc --*/
/*------ rawtest.lc -------------------------------------------------
Lattice C program to demonstrate the difference in speed between
DOS's raw and cooked modes when writing to the DOS console.
Requires setraw.c; make the demo as follows:
	lc setraw rawtest
	link \lc\s\c rawtest setraw,rawtest,,\lc\s\lc
and run it by typing
	rawtest

Note- Lattice C's raw mode (i.e. using mode "rb" or "wb" with fopen)
is not the same as DOS's raw mode, and does not affect speed.

What does affect speed is whether output is performed with single-character
DOS calls, which is the default.  To get a speed improvement, you must 
open "con" WITHOUT a trailing colon, and use that file for high-speed output;
see section 5.2 (Device I/O) of the Lattice manual.

When using MS-DOS raw mode, the console is in totally unbuffered mode-
echo is turned off, no printer echoing is done, and no line editing
is done, regardless of which file setraw was applied to.  This means
that the console must be in non-raw ("cooked") mode for line-oriented
console input to work properly.

Note: no speed difference will be noticed when using the standard console
driver ANSI.SYS that comes with DOS; you must be using NANSI.SYS to
get massively fast output.  
To use nansi.sys, insert the following line in \config.sys:
	device = nansi.sys
and put nansi.sys on the top level directory; the system will load
it at boot time.
(If there was already a line invoking plain old ansi.sys, remove it.)
--------------------------------------------------------------------*/

#include "\lc\stdio.h"

char	response[128];

main(argc, argv)
int	argc;
char	**argv;
{
	FILE	*fp;
	int	fd;
	int	old_rawness;
	int	i;

	fp = fopen("con", "w");
	if (fp == NULL) fprintf(stderr, "can't open 'con'!");
	fd = fileno(fp);		/* get Level 1 file descriptor */
	old_rawness = getraw(fd);	/* Save old raw/cooked state */

	setraw(fd, 0);			/* make sure we're in cooked mode */

	puts("Cooked mode test (hit return):");
	gets(response);
	fprintf(fp, "\033[2J");		/* clear screen */
	for (i=0; i<20; i++)
		fprintf(fp, "This is cooked mode!  Why is it so darned slow? %d\n", i);
	fflush(fp);

	puts("Raw mode test (hit return):");
	gets(response);			/* must be in cooked mode to use gets */
	setraw(fd, 1);			/* enter raw mode */
	fprintf(fp, "\033[2J");		/* clear screen */
	for (i=0; i<20; i++)
		fprintf(fp, "-- This is raw mode- it's clearly faster than cooked! %d\n", i);
	fflush(fp);			/* finish writing while in raw mode */
	setraw(fd, old_rawness);	/* go back to old raw/cooked state  */

	fclose(fp);
}
/*--- end of rawtest.lc ---*/
-- 

@//E*O*F nansi.sup//
chmod u=rw,g=r,o=r nansi.sup
 
echo x - demo.uue
sed 's/^@//' > "demo.uue" <<'@//E*O*F demo.uue//'
begin 644 demo.exe
M35HL`!(`!``@`$<!___)`@`(3)N%!P``'@````$`Z`*U`88'``"\&```#AD`
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````%6+[+@,`.@!!%8S]HEV],=&^E``QT;X50#'
M1ORR";@`@%"@OP"84.AO!H/$!+@`@%"@MP"84.A@!H/$!.CL`8-^!`%U`^G$
M`+@"@%"+7@;_=P+H[P2#Q`2)1O9`=1J+7@;_=P*X60!0N,``4.AD`X/$!N@@
M`NF4`+C0!U"XL@E0_W;VZ(<"@\0&HZ``0'4MN'8`4+C``%#H.0.#Q`3KT[A/
M`%#_=OSH:`"#Q`2)1OR#/J8``'02H:8``4;TH:@`_P:H`#T8`'S7N+@`4/]V
M^NA,`X/$!/]V]+BR"5"@OP"84.B-`X/$!HOP0'4*N)@`4.@6!H/$`KBX`%#_
M=OCH'@.#Q`0SP%#H"0B#Q`)>B^5=PU6+[#/`Z/$"5HMV!#/`HZ0`HZ8`@#P`
M=#*`/`IT+?\&I@"#/BP%`'4%@#P<<Q'_-J0`5N@T`(/$!`$&I`#K!/\&I`"A
MI``Y1@9]%X`\"G4(_P:D`/\&I@"`/`!T`4:+QNL#1NNO7HOE7<-5B^RX`@#H
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
M@&<&SUW#58OL5E<&@WX(`'4XOS8#BU8&BT8$2'4'Z%,`<B?K2(LVA@-(=!$[
M]W0-BT0"B48,5N@Z`%YS,(/&!('^A@-S!`O2=0:X__^9ZQV+VH/##]';L0/3
MZ[1(S2%RZ9*)!(E4`HDVA@,SP`=?7HOE7<.+3@R+]SE,`G0,@\8$@?Z&`W7R
M^>L_B]H#''(YB]..P3OW=08Y'C(#<R:#PP_1V]'KT>O1ZSOW=0D#V:&2!"O8
MCL"T2LTA<@T[]W4$B18R`Y*'!(O1PP``````````````````````````````
M`````````$,@3&EB<F%R>2`M("A#*4-O<'ER:6=H="!-:6-R;W-O9G0@0V]R
M<"`Q.3@U``%.=6QL('!O:6YT97(@87-S:6=N;65N=`T*`!M;,DH`&UM!`$-A
M;B=T(&]P96X@(B5S(B!T;R!R96%D(&ET+@H`17)R;W(@<F5A9&EN9R!F:6QE
M("(E<R(*+"!A<F=V6S%=`&1E;6\Z(``````(````````````)A(-"K('``"R
M!P$``````````@$````````&`@```````(0#`````````@0`````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````````!````````````````````````````````
M````````````````````2`$`````````````````````````````````````
M````````````````````````17)R;W(@,```3F\@<W5C:"!F:6QE(&]R(&1I
M<F5C=&]R>0``````07)G(&QI<W0@=&]O(&QO;F<`17AE8R!F;W)M870@97)R
M;W(`0F%D(&9I;&4@;G5M8F5R````3F]T(&5N;W5G:"!C;W)E`%!E<FUI<W-I
M;VX@9&5N:65D`````$9I;&4@97AI<W1S`$-R;W-S+61E=FEC92!L:6YK````
M`$EN=F%L:60@87)G=6UE;G0``%1O;R!M86YY(&]P96X@9FEL97,`````3F\@
M<W!A8V4@;&5F="!O;B!D979I8V4``````$UA=&@@87)G=6UE;G0`4F5S=6QT
M('1O;R!L87)G90``4F5S;W5R8V4@9&5A9&QO8VL@=V]U;&0@;V-C=7(`.B``
M56YK;F]W;B!E<G)O<@`*``"H`;`!L0'+`<P!S0'.`<\!X0'S`0,"!`(%`A4"
M)P(H`BD"*@(V`D@"20)*`DL"7`)=`G$"<@)S`G0"C`*-`HX"CP*0`IX"KP*P
M`B4``````````````+`!````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`#8#`"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0
M$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!
M`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````(&!@0$!````
M````````````````````````````````.T-?1DE,15])3D9/`````````!8"
M`A@-"0P,#`<(____$@T2`O\H;G5L;"D`*RT@(P``````````````````````
2`"``````````````````````
`
end
@//E*O*F demo.uue//
chmod u=rw,g=r,o=r demo.uue
 
echo x - nansi.uue
sed 's/^@//' > "nansi.uue" <<'@//E*O*F nansi.uue//'
begin 644 nansi.sys
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
9JXD^=0`SP*K^P'7[,\#%-EP`B7P.C$P0PP*)
`
end
@//E*O*F nansi.uue//
chmod u=rw,g=r,o=r nansi.uue
 
echo Inspecting for damage in transit...
temp=/tmp/shar$$; dtemp=/tmp/.shar$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
      20     150     941 readme
     196    1285    9811 nansi.doc
      17      35     367 nansi.mkf
     266    1217    7967 nansi.sup
     198     200   12079 demo.uue
      59      61    3474 nansi.uue
     756    2948   34639 total
!!!
wc  readme nansi.doc nansi.mkf nansi.sup demo.uue nansi.uue | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if [ -s $dtemp ]
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0
--
  -----                    Terry Sterkel
-====----              AT&T Bell Laboratories
--------- {clyde|harvard|cbosgd|allegra|ulysses|ihnp4}!whuts!tes
  -----         [opinions are obviously only my own]