[comp.sources.misc] v16i072: ECU 3 log-to-Excel spreadsheet, Part01/02

wht@n4hgf.Mt-Park.GA.US (01/13/91)

Submitted-by: wht@n4hgf.Mt-Park.GA.US
Posting-number: Volume 16, Issue 72
Archive-name: ecu3-excel/part01

This is an ECU 3 log file to Microsoft Excel (tm) spreadsheet
processor.  It reads an ECU logfile and produces two
spreadsheets in the current directory.

To use, unshar the two-part shell archives in your ecu
distribution directory, cd excel and read the README file

#!/bin/sh
# This is ecu3-excel, a shell archive (shar 3.46)
# made 01/10/1991 10:36 UTC by wht@n4hgf
# Source directory /u1/src/ecu
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#    194 -rw-r--r-- excel/Makefile
#    805 -rw-r--r-- excel/README
#  18217 -rw-r--r-- excel/biff.h
#    339 -rw-r--r-- excel/ecuclog.txt
#    730 -rw-r--r-- excel/ecurlog.txt
#  37790 -rw-r--r-- excel/ecuxls.c
#   1563 -rw-r--r-- excel/log
#
# ============= excel/Makefile ==============
if test ! -d 'excel'; then
    echo 'x - creating directory excel'
    mkdir 'excel'
fi
if test -f 'excel/Makefile' -a X"$1" != X"-c"; then
	echo 'x - skipping excel/Makefile (File already exists)'
else
echo 'x - extracting excel/Makefile (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'excel/Makefile' &&
X#+-------------------------------------
X#  ecuxls Makefile
X#--------------------------------------
X#+:EDITS:
X#:01-10-1991-04:36-wht@n4hgf-creation
X
Xecuxls: ecuxls.c biff.h
X	cc -O -o $@ ecuxls.c
SHAR_EOF
chmod 0644 excel/Makefile ||
echo 'restore of excel/Makefile failed'
Wc_c="`wc -c < 'excel/Makefile'`"
test 194 -eq "$Wc_c" ||
	echo 'excel/Makefile: original size 194, current size' "$Wc_c"
fi
# ============= excel/README ==============
if test -f 'excel/README' -a X"$1" != X"-c"; then
	echo 'x - skipping excel/README (File already exists)'
else
echo 'x - extracting excel/README (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'excel/README' &&
XThis is an ECU 3 log file to Microsoft Excel (tm) spreadsheet
Xprocessor.  It reads an ECU logfile and produces two
Xspreadsheets in the current directory.
X
XTo make, just type 'make'
X
Xusage: ecuxls [-l logfile]
Xdefault log file is ~/.ecu/log
X
XProduces
X-------------------------------------------------------------
Xecuclog.xls - connection log (date,system,connect time)
Xecurlog.xls - received file log (date,from,length,name)
X
XFiles in the distribution
X-------------------------------------------------------------
XREADME      - guess
XMakefile    - guess
Xbiff.h      - Excel BIFF file format declarations
Xecuxls.c    - program code
Xlog         - sample log file used for examples below
Xecuclog.txt - sample connection log spreadsheet (ASCII-ized)
Xecurlog.txt - sample received file spreadsheet (ASCII-ized)
SHAR_EOF
chmod 0644 excel/README ||
echo 'restore of excel/README failed'
Wc_c="`wc -c < 'excel/README'`"
test 805 -eq "$Wc_c" ||
	echo 'excel/README: original size 805, current size' "$Wc_c"
fi
# ============= excel/biff.h ==============
if test -f 'excel/biff.h' -a X"$1" != X"-c"; then
	echo 'x - skipping excel/biff.h (File already exists)'
else
echo 'x - extracting excel/biff.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'excel/biff.h' &&
X
X/*+-------------------------------------------------------------------------
X	biff.h
X	wht@n4hgf.Mt-Park.GA.US
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:01-01-1991-15:32-wht@n4hgf-rework earlier effort */
X
X#if !defined(UINT8)
X#define UINT8 unsigned char
X#endif
X#if !defined(UINT16)
X#define UINT16 unsigned short
X#endif
X#if !defined(UINT32)
X#define UINT32 unsigned long
X#endif
X
X#define btDIMENSION             0x00
X#define btBLANK                 0x01
X#define btINTEGER               0x02
X#define btNUMBER                0x03
X#define btLABEL                 0x04
X#define btBOOLERR               0x05
X#define btFORMULA               0x06
X#define btSTRING                0x07
X#define btROW                   0x08
X#define btBOF                   0x09
X#define btEOF                   0x0a
X#define btINDEX                 0x0b
X#define btCALCCOUNT             0x0c
X#define btCALCMODE              0x0d
X#define btPRECISION             0x0e
X#define btREFMODE               0x0f
X#define btDELTA                 0x10
X#define btITERATION             0x11
X#define btPROTECT               0x12
X#define btPASSWORD              0x13
X#define btHEADER                0x14
X#define btFOOTER                0x15
X#define btEXTERNCOUNT           0x16
X#define btEXTERNSHEET           0x17
X#define btNAME                  0x18
X#define btWINDOWPROTECT         0x19
X#define btVERTICALPAGEBREAKS    0x1a
X#define btHORIZONTALPAGEBREAK   0x1b
X#define btNOTE                  0x1c
X#define btSELECTION             0x1d
X#define btFORMAT                0x1e
X#define btFORMATCOUNT           0x1f
X#define btCOLUMNDEFAULT         0x20
X#define btARRAY                 0x21
X#define bt1904                  0x22
X#define btEXTERNNAME            0x23
X#define btCOLWIDTH              0x24
X#define btDEFAULTROWHEIGHT      0x25
X#define btLEFTMARGIN            0x26
X#define btRIGHTMARGIN           0x27
X#define btTOPMARGIN             0x28
X#define btBOTTOMMARGIN          0x29
X#define btPRINTHEADERS          0x2a
X#define btPRINTGRIDLINES        0x2b
X#define btFILEPASS              0x2f
X#define btFONT                  0x31
X#define btFONT2                 0x32
X#define btTABLE                 0x36
X#define btTABLE2                0x37
X#define btCONTINUE              0x3c
X#define btWINDOW1               0x3d
X#define btWINDOW2               0x3e
X#define btBACKUP                0x40
X#define btPANE                  0x41
X#define btXF                    0x43
X#define btIXFE                  0x44
X#define btEFONT                 0x45
X
X/* cell records consist of a BLANK, INTEGER, NUMBER, LABEL, BOOLERR, FORMULA
X * possibly followed by a ARRAY, CONTINUE, TABLE, or TABLE2,
X *
X * NOTE MANY OF THE FOLLOWING ARE NOT SUITABLE FOR USE WITH sizeof()
X * WITHOUT ADDITIONAL CONSIDERATIONS SINCE THE ACTUAL RECORDS MAY BE
X * OF VARIABLE LENGTH
X */
X/*+-------------------------------------------------------------------------
X	header record
X--------------------------------------------------------------------------*/
Xtypedef struct bhdr
X{
X	UINT16 type;
X	UINT16 length;
X} BHDR;
X
X/*+-------------------------------------------------------------------------
X	BOF record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brBOF
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 vers;		/* version number */
X	UINT16 dt;			/* document type */
X} brBOF;
X#pragma pack()
X
X#define versExcel		2	/* Excel */
X#define versMP			3	/* Multiplan */
X
X#define dtWorksheet		0x10
X#define dtChart			0x20
X#define dtMacroSheet	0x40
X
X/*+-------------------------------------------------------------------------
X	INDEX record - optional - must follow FILEPASS (if present),
Xotherwise immediately after BOF
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brINDEX
X{
X	UINT16 type;
X	UINT16 length;
X	long ibRtName;		/* absolute fpos of first NAME record */
X	UINT16 rwMic;		/* first existing row (0-n) */
X	UINT16 rwMac;		/* last existing row (0-n) */
X	long rgibRw[1];		/* array of absolute positions of ROW records */
X} brINDEX;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	PRECISION record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brPRECISION
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fFullPrec;	/* 1=full precision, 0=as displayed */
X} brPRECISION;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	REFMODE record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brREFMODE
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fRefA1;		/* 0 = R1C1 mode */
X} brREFMODE;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	DELTA record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brDELTA
X{
X	UINT16 type;
X	UINT16 length;
X	double numDelta;	/* max change fvor iterative model */
X} brDELTA;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	ITERATION record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brITERATION
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fIter;		/* 1=on, 0=off */
X} brITERATION;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	1904 record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct br1904
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 f1904;		/* 1=uses 1904 date system, 0=otherwise */
X} br1904;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	PRINTHEADERS record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brPRINTHEADERS
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fPrintRwCol;	/* 1=print row/col headers, 0=not */
X} brPRINTHEADERS;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	PRINTGRIDLINES record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brPRINTGRIDLINES
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fPrintGrid;	/* 1= print gridlines, 0=not */
X} brPRINTGRIDLINES;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	DEFAULTROWHEIGHT record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brDEFAULTROWHEIGHT
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 miyRwGhost;	/* height of undefined rows in 1/20 points increments */
X} brDEFAULTROWHEIGHT;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	FONT record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brFONT
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 dy;			/* height of font */
X	UINT16 grbit;		/* font attributes */
X	UINT8 cch;			/* length of font name */
X	UINT8 rgch[1];		/* variable length font name */
X} brFONT;
X#pragma pack()
X
X#define brFONT_rsvd	0xFF00	/* these bits must be zero */
X#define fExtend		0x0080
X#define fCondense	0x0040
X#define fShadow		0x0020
X#define fOutline	0x0010
X#define fStrikeout	0x0008
X#define fUnderline	0x0004
X#define fItalic		0x0002
X#define fBold		0x0001
X
X/*+-------------------------------------------------------------------------
X	EFONT record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brEFONT
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 lcv;				/* index into color table */
X} brEFONT;
X#pragma pack()
X
X#define EFONT_black		0
X#define EFONT_white		1
X#define EFONT_red		2
X#define EFONT_green		3
X#define EFONT_blue		4
X#define EFONT_yellow	5
X#define EFONT_magenta	6
X#define EFONT_cyan		7
X
X/*+-------------------------------------------------------------------------
X	FONT2 record - NOT TO BE WRITTEN BY USER CODE (SEE BOOK)
X--------------------------------------------------------------------------*/
X
X/*+-------------------------------------------------------------------------
X	HEADER record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brHEADER
X{
X	UINT16 type;
X	UINT16 length;
X	UINT8 cch;		/* length of string */
X	UINT8 rgch[1];	/* string */
X} brHEADER;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	FOOTER record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brFOOTER
X{
X	UINT16 type;
X	UINT16 length;
X	UINT8 cch;		/* length of string */
X	UINT8 rgch[1];	/* string */
X} brFOOTER;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	LEFTMARGIN record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brLEFTMARGIN
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 num;
X} brLEFTMARGIN;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	RIGHTMARGIN record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brRIGHTMARGIN
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 num;
X} brRIGHTMARGIN;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	TOPMARGIN record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brTOPMARGIN
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 num;
X} brTOPMARGIN;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	BOTTOMMARGIN record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brBOTTOMMARGIN
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 num;
X} brBOTTOMMARGIN;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	COLWIDTH record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brCOLWIDTH
X{
X	UINT16 type;
X	UINT16 length;
X	UINT8 colFirst;		/* 1st col in range */
X	UINT8 colLast;		/* last col in range */
X	UINT16 dz;			/* column width */
X} brCOLWIDTH;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	BACKUP record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brBACKUP
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 fBackupFile;
X} brBACKUP;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	FORMATCOUNT record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brFORMATCOUNT
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 FmtCount;	/* number of built-in format records */
X} brFORMATCOUNT;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	FORMAT record -see book about ordering of these records
X1. you may add FORMAT records
X2. they should all appear together
X3. don't change order - add new ones to bottom of list
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brFORMAT
X{
X	UINT16 type;
X	UINT16 length;
X	UINT8 cch;		/* count */
X	UINT8 rgch[1];	/* picture */
X} brFORMAT;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	NAME record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brNAME
X{
X	UINT16 type;
X	UINT16 length;
X	UINT8 grbit;		/* attributes (see below) */
X	UINT8 grbitPli;		/* attributes (see below) */
X	UINT8 chKey;		/* keyboard shortcut */
X	UINT8 cch;			/* length of name text */
X	UINT8 cce;			/* length of name's definition */
X	UINT8 rgch[1];		/* this is a gaggle of bytes (see book):
X						 * text of the name
X						 * parsed expression for name definition
X						 * one byte dup of cce
X						 */
X} brNAME;
X#pragma pack()
X
X/* grbit definitions */
X#define NAME_grbit_RSVD		0xF8	/* must be zero */
X#define NAME_grbit_fCalcExp	0x04	/* =1 if complex function */
X#define NAME_grbit_fProc	0x02	/* =1 if function or command name */
X#define NAME_grbit_RSVD2	0x01	/* must be zero */
X
X/* grbitPli definitions - meaningful only if fProc set */
X#define NAME_grbitPli_RSVD	0xFC	/* must be zero */
X#define NAME_grbitPli_fRun	0x02	/* =1 for command names */
X#define NAME_grbitPli_fFunc	0x01	/* =1 for function names */
X
X/* you really need to read the book on all the above; I ain't into
X * copyright infringements and I don't type like I used to anyway;
X * following are the specifiers I needed for names
X */
X
X#define ptgRefN		0x2C		/* cell reference within a name */
X#define ptgAreaN	0x2D		/* area reference within a name */
X
X#pragma pack(1)
Xtypedef struct opRefN
X{
X	UINT8 op;			/* == ptgRefN */
X	UINT16 grbitRw;		/* row - msb can have flags, but I didn't need them */
X	UINT8 col;			/* column */
X}	opRefN;
X#pragma pack()
X
X#pragma pack(1)
Xtypedef struct opAreaN
X{
X	UINT8 op;			/* == ptgAreaN */
X	UINT16 grbitRwFirst;
X	UINT16 grbitRwLast;
X	UINT8 colFirst;
X	UINT8 colLast;
X}	opAreaN;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	DIMENSION record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brDIMENSION
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rwMic;		/* first defined row */
X	UINT16 rwMac;		/* last row + 1 */
X	UINT16 colMic;		/* first col */
X	UINT16 colMac;		/* last row + 1 */
X} brDIMENSION;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	ROW record
Xsee the book (this one has some intense considerations)
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brROW
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row number */
X	UINT16 colMic;		/* first col */
X	UINT16 colMac;		/* last col + 1 */
X	UINT16 miyRw;		/* row height (1/20 point)
X						 * 0x8000 bit may be set to indicate std height, but
X						 * height must still be present
X						 */
X	UINT8 irwMac;		/* reserved - set to 0 */
X	UINT8 fDefault;		/* =1 if row has default attributes */
X	UINT16 dbRtcell;	/* relative file offset to cell records */
X	UINT8 rgbAttr[3];	/* default cell attributes */
X} brROW;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	BLANK record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brBLANK
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X} brBLANK;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	INTEGER record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brINTEGER
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X	UINT16 w;			/* unsigned int value */
X} brINTEGER;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	NUMBER record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brNUMBER
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X	double num;			/* value */
X} brNUMBER;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	BOOLERR record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brBOOLERR
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X	UINT8 bBoolErr;		/* value */
X	UINT8 fError;		/* 1 if error, 0 if boolean */
X} brBOOLERR;
X#pragma pack()
X
X#define ERR_NULL	0
X#define ERR_DIV0	7
X#define ERR_VALUE	15
X#define ERR_REF		23
X#define ERR_NAME	29
X#define ERR_NUM		36
X#define ERR_NA		42
X
X/*+-------------------------------------------------------------------------
X	LABEL record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brLABEL
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X	UINT8 cch;			/* length of string */
X	UINT8 rgch[1];		/* string */
X} brLABEL;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	NOTE record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brNOTE
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 cch;			/* length of string */
X	UINT8 rgch[1];		/* string */
X} brNOTE;
X#pragma pack()
X
X/*+-------------------------------------------------------------------------
X	FORMULA record
X--------------------------------------------------------------------------*/
X#pragma pack(1)
Xtypedef struct brFORMULA
X{
X	UINT16 type;
X	UINT16 length;
X	UINT16 rw;			/* row */
X	UINT16 col;			/* column */
X	UINT8 rgbAttr[3];	/* cell attributes */
X	UINT8 num[8];		/* current value (see book) */
X	UINT8 sbRecalc;		/* recalc flag */
X	UINT8 cce;			/* length of parsed expression */
X	UINT8 rgce[1];		/* parsed expression */
X} brFORMULA;
X#pragma pack()
X
X/*
X * rgbAttr definitions
X */
X#define rgbAttr0_fHidden	0x80
X#define rgbAttr0_fLocked	0x40
X#define rgbAttr1_fnt		0xC0		/* font # (0-3) */
X#define rgbAttr1_ifmt		0x3F		/* format code (0-63) */
X#define rgbAttr2_fShade		0x80
X#define rgbAttr2_fBottom	0x40
X#define rgbAttr2_fTop		0x20
X#define rgbAttr2_fRight		0x10
X#define rgbAttr2_fLeft		0x08
X#define rgbAttr2_alc		0x07		/* alignment code mask */
X
X#define alc_GENERAL			0
X#define alc_LEFT			1
X#define alc_CENTRAL			2
X#define alc_RIGHT			3
X#define alc_FILL			4
X#define alc_DEFAULT			7			/* Multiplan only */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of biff.h */
SHAR_EOF
chmod 0644 excel/biff.h ||
echo 'restore of excel/biff.h failed'
Wc_c="`wc -c < 'excel/biff.h'`"
test 18217 -eq "$Wc_c" ||
	echo 'excel/biff.h: original size 18217, current size' "$Wc_c"
fi
# ============= excel/ecuclog.txt ==============
if test -f 'excel/ecuclog.txt' -a X"$1" != X"-c"; then
	echo 'x - skipping excel/ecuclog.txt (File already exists)'
else
echo 'x - extracting excel/ecuclog.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'excel/ecuclog.txt' &&
XECU Connection Log - created 01-10-1991 05:12:54
XDate              System    Phone       Time
X1991-01-09 16:23  tridom    555-1212    02:02:07
X1991-01-09 19:45  n4vu      555-1212V   00:03:07
X1991-01-09 19:51  n4vu      555-1212V   00:01:53
X1991-01-09 20:21  p1so      555-1212PF  00:00:23
X1991-01-09 20:22  kd4nc     555-1212C   02:00:38
SHAR_EOF
chmod 0644 excel/ecuclog.txt ||
echo 'restore of excel/ecuclog.txt failed'
Wc_c="`wc -c < 'excel/ecuclog.txt'`"
test 339 -eq "$Wc_c" ||
	echo 'excel/ecuclog.txt: original size 339, current size' "$Wc_c"
fi
# ============= excel/ecurlog.txt ==============
if test -f 'excel/ecurlog.txt' -a X"$1" != X"-c"; then
	echo 'x - skipping excel/ecurlog.txt (File already exists)'
else
echo 'x - extracting excel/ecurlog.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'excel/ecurlog.txt' &&
XECU Received File Log - created 01-10-1991 05:12:54 
XDate             From    Length  Name
X1991-01-09 21:46 kd4nc   4060    afterlint.c
X1991-01-09 21:46 kd4nc   9889    ecu.c
X1991-01-09 21:46 kd4nc   4175    ecu.h
X1991-01-09 21:46 kd4nc   12787   ecuicmd.c
X1991-01-09 21:47 kd4nc   23999   eculine.c
X1991-01-09 21:48 kd4nc   48334   ecuphone.c
X1991-01-09 21:48 kd4nc   31419   ecurcvr.c
X1991-01-09 21:48 kd4nc   3040    ecushm.h
X1991-01-09 21:49 kd4nc   585     ecuvmin.h
X1991-01-09 21:49 kd4nc   14172   ecuxenix.c
X1991-01-09 21:49 kd4nc   6599    gint.c
X1991-01-09 21:50 kd4nc   27013   lint_args.h
X1991-01-09 21:50 kd4nc   24245   pcmd.c
X1991-01-09 21:50 kd4nc   3525    pprintf.c
X1991-01-09 21:51 kd4nc   1286    stdio_lint.h
SHAR_EOF
chmod 0644 excel/ecurlog.txt ||
echo 'restore of excel/ecurlog.txt failed'
Wc_c="`wc -c < 'excel/ecurlog.txt'`"
test 730 -eq "$Wc_c" ||
	echo 'excel/ecurlog.txt: original size 730, current size' "$Wc_c"
fi
true || echo 'restore of excel/ecuxls.c failed'
echo End of part 1, continue with part 2
exit 0

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.