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.