home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume16 / ecu3-excel / part01 next >
Encoding:
Internet Message Format  |  1991-01-13  |  24.4 KB

  1. From: wht@n4hgf.Mt-Park.GA.US
  2. Newsgroups: comp.sources.misc
  3. Subject: v16i072:  ECU 3 log-to-Excel spreadsheet, Part01/02
  4. Message-ID: <1991Jan12.210134.14253@sparky.IMD.Sterling.COM>
  5. Date: 12 Jan 91 21:01:34 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 1eb58332 7be7d4e9 a337d283 32d151b9
  8.  
  9. Submitted-by: wht@n4hgf.Mt-Park.GA.US
  10. Posting-number: Volume 16, Issue 72
  11. Archive-name: ecu3-excel/part01
  12.  
  13. This is an ECU 3 log file to Microsoft Excel (tm) spreadsheet
  14. processor.  It reads an ECU logfile and produces two
  15. spreadsheets in the current directory.
  16.  
  17. To use, unshar the two-part shell archives in your ecu
  18. distribution directory, cd excel and read the README file
  19.  
  20. #!/bin/sh
  21. # This is ecu3-excel, a shell archive (shar 3.46)
  22. # made 01/10/1991 10:36 UTC by wht@n4hgf
  23. # Source directory /u1/src/ecu
  24. #
  25. # existing files will NOT be overwritten unless -c is specified
  26. #
  27. # This shar contains:
  28. # length  mode       name
  29. # ------ ---------- ------------------------------------------
  30. #    194 -rw-r--r-- excel/Makefile
  31. #    805 -rw-r--r-- excel/README
  32. #  18217 -rw-r--r-- excel/biff.h
  33. #    339 -rw-r--r-- excel/ecuclog.txt
  34. #    730 -rw-r--r-- excel/ecurlog.txt
  35. #  37790 -rw-r--r-- excel/ecuxls.c
  36. #   1563 -rw-r--r-- excel/log
  37. #
  38. # ============= excel/Makefile ==============
  39. if test ! -d 'excel'; then
  40.     echo 'x - creating directory excel'
  41.     mkdir 'excel'
  42. fi
  43. if test -f 'excel/Makefile' -a X"$1" != X"-c"; then
  44.     echo 'x - skipping excel/Makefile (File already exists)'
  45. else
  46. echo 'x - extracting excel/Makefile (Text)'
  47. sed 's/^X//' << 'SHAR_EOF' > 'excel/Makefile' &&
  48. X#+-------------------------------------
  49. X#  ecuxls Makefile
  50. X#--------------------------------------
  51. X#+:EDITS:
  52. X#:01-10-1991-04:36-wht@n4hgf-creation
  53. X
  54. Xecuxls: ecuxls.c biff.h
  55. X    cc -O -o $@ ecuxls.c
  56. SHAR_EOF
  57. chmod 0644 excel/Makefile ||
  58. echo 'restore of excel/Makefile failed'
  59. Wc_c="`wc -c < 'excel/Makefile'`"
  60. test 194 -eq "$Wc_c" ||
  61.     echo 'excel/Makefile: original size 194, current size' "$Wc_c"
  62. fi
  63. # ============= excel/README ==============
  64. if test -f 'excel/README' -a X"$1" != X"-c"; then
  65.     echo 'x - skipping excel/README (File already exists)'
  66. else
  67. echo 'x - extracting excel/README (Text)'
  68. sed 's/^X//' << 'SHAR_EOF' > 'excel/README' &&
  69. XThis is an ECU 3 log file to Microsoft Excel (tm) spreadsheet
  70. Xprocessor.  It reads an ECU logfile and produces two
  71. Xspreadsheets in the current directory.
  72. X
  73. XTo make, just type 'make'
  74. X
  75. Xusage: ecuxls [-l logfile]
  76. Xdefault log file is ~/.ecu/log
  77. X
  78. XProduces
  79. X-------------------------------------------------------------
  80. Xecuclog.xls - connection log (date,system,connect time)
  81. Xecurlog.xls - received file log (date,from,length,name)
  82. X
  83. XFiles in the distribution
  84. X-------------------------------------------------------------
  85. XREADME      - guess
  86. XMakefile    - guess
  87. Xbiff.h      - Excel BIFF file format declarations
  88. Xecuxls.c    - program code
  89. Xlog         - sample log file used for examples below
  90. Xecuclog.txt - sample connection log spreadsheet (ASCII-ized)
  91. Xecurlog.txt - sample received file spreadsheet (ASCII-ized)
  92. SHAR_EOF
  93. chmod 0644 excel/README ||
  94. echo 'restore of excel/README failed'
  95. Wc_c="`wc -c < 'excel/README'`"
  96. test 805 -eq "$Wc_c" ||
  97.     echo 'excel/README: original size 805, current size' "$Wc_c"
  98. fi
  99. # ============= excel/biff.h ==============
  100. if test -f 'excel/biff.h' -a X"$1" != X"-c"; then
  101.     echo 'x - skipping excel/biff.h (File already exists)'
  102. else
  103. echo 'x - extracting excel/biff.h (Text)'
  104. sed 's/^X//' << 'SHAR_EOF' > 'excel/biff.h' &&
  105. X
  106. X/*+-------------------------------------------------------------------------
  107. X    biff.h
  108. X    wht@n4hgf.Mt-Park.GA.US
  109. X--------------------------------------------------------------------------*/
  110. X/*+:EDITS:*/
  111. X/*:01-01-1991-15:32-wht@n4hgf-rework earlier effort */
  112. X
  113. X#if !defined(UINT8)
  114. X#define UINT8 unsigned char
  115. X#endif
  116. X#if !defined(UINT16)
  117. X#define UINT16 unsigned short
  118. X#endif
  119. X#if !defined(UINT32)
  120. X#define UINT32 unsigned long
  121. X#endif
  122. X
  123. X#define btDIMENSION             0x00
  124. X#define btBLANK                 0x01
  125. X#define btINTEGER               0x02
  126. X#define btNUMBER                0x03
  127. X#define btLABEL                 0x04
  128. X#define btBOOLERR               0x05
  129. X#define btFORMULA               0x06
  130. X#define btSTRING                0x07
  131. X#define btROW                   0x08
  132. X#define btBOF                   0x09
  133. X#define btEOF                   0x0a
  134. X#define btINDEX                 0x0b
  135. X#define btCALCCOUNT             0x0c
  136. X#define btCALCMODE              0x0d
  137. X#define btPRECISION             0x0e
  138. X#define btREFMODE               0x0f
  139. X#define btDELTA                 0x10
  140. X#define btITERATION             0x11
  141. X#define btPROTECT               0x12
  142. X#define btPASSWORD              0x13
  143. X#define btHEADER                0x14
  144. X#define btFOOTER                0x15
  145. X#define btEXTERNCOUNT           0x16
  146. X#define btEXTERNSHEET           0x17
  147. X#define btNAME                  0x18
  148. X#define btWINDOWPROTECT         0x19
  149. X#define btVERTICALPAGEBREAKS    0x1a
  150. X#define btHORIZONTALPAGEBREAK   0x1b
  151. X#define btNOTE                  0x1c
  152. X#define btSELECTION             0x1d
  153. X#define btFORMAT                0x1e
  154. X#define btFORMATCOUNT           0x1f
  155. X#define btCOLUMNDEFAULT         0x20
  156. X#define btARRAY                 0x21
  157. X#define bt1904                  0x22
  158. X#define btEXTERNNAME            0x23
  159. X#define btCOLWIDTH              0x24
  160. X#define btDEFAULTROWHEIGHT      0x25
  161. X#define btLEFTMARGIN            0x26
  162. X#define btRIGHTMARGIN           0x27
  163. X#define btTOPMARGIN             0x28
  164. X#define btBOTTOMMARGIN          0x29
  165. X#define btPRINTHEADERS          0x2a
  166. X#define btPRINTGRIDLINES        0x2b
  167. X#define btFILEPASS              0x2f
  168. X#define btFONT                  0x31
  169. X#define btFONT2                 0x32
  170. X#define btTABLE                 0x36
  171. X#define btTABLE2                0x37
  172. X#define btCONTINUE              0x3c
  173. X#define btWINDOW1               0x3d
  174. X#define btWINDOW2               0x3e
  175. X#define btBACKUP                0x40
  176. X#define btPANE                  0x41
  177. X#define btXF                    0x43
  178. X#define btIXFE                  0x44
  179. X#define btEFONT                 0x45
  180. X
  181. X/* cell records consist of a BLANK, INTEGER, NUMBER, LABEL, BOOLERR, FORMULA
  182. X * possibly followed by a ARRAY, CONTINUE, TABLE, or TABLE2,
  183. X *
  184. X * NOTE MANY OF THE FOLLOWING ARE NOT SUITABLE FOR USE WITH sizeof()
  185. X * WITHOUT ADDITIONAL CONSIDERATIONS SINCE THE ACTUAL RECORDS MAY BE
  186. X * OF VARIABLE LENGTH
  187. X */
  188. X/*+-------------------------------------------------------------------------
  189. X    header record
  190. X--------------------------------------------------------------------------*/
  191. Xtypedef struct bhdr
  192. X{
  193. X    UINT16 type;
  194. X    UINT16 length;
  195. X} BHDR;
  196. X
  197. X/*+-------------------------------------------------------------------------
  198. X    BOF record
  199. X--------------------------------------------------------------------------*/
  200. X#pragma pack(1)
  201. Xtypedef struct brBOF
  202. X{
  203. X    UINT16 type;
  204. X    UINT16 length;
  205. X    UINT16 vers;        /* version number */
  206. X    UINT16 dt;            /* document type */
  207. X} brBOF;
  208. X#pragma pack()
  209. X
  210. X#define versExcel        2    /* Excel */
  211. X#define versMP            3    /* Multiplan */
  212. X
  213. X#define dtWorksheet        0x10
  214. X#define dtChart            0x20
  215. X#define dtMacroSheet    0x40
  216. X
  217. X/*+-------------------------------------------------------------------------
  218. X    INDEX record - optional - must follow FILEPASS (if present),
  219. Xotherwise immediately after BOF
  220. X--------------------------------------------------------------------------*/
  221. X#pragma pack(1)
  222. Xtypedef struct brINDEX
  223. X{
  224. X    UINT16 type;
  225. X    UINT16 length;
  226. X    long ibRtName;        /* absolute fpos of first NAME record */
  227. X    UINT16 rwMic;        /* first existing row (0-n) */
  228. X    UINT16 rwMac;        /* last existing row (0-n) */
  229. X    long rgibRw[1];        /* array of absolute positions of ROW records */
  230. X} brINDEX;
  231. X#pragma pack()
  232. X
  233. X/*+-------------------------------------------------------------------------
  234. X    PRECISION record
  235. X--------------------------------------------------------------------------*/
  236. X#pragma pack(1)
  237. Xtypedef struct brPRECISION
  238. X{
  239. X    UINT16 type;
  240. X    UINT16 length;
  241. X    UINT16 fFullPrec;    /* 1=full precision, 0=as displayed */
  242. X} brPRECISION;
  243. X#pragma pack()
  244. X
  245. X/*+-------------------------------------------------------------------------
  246. X    REFMODE record
  247. X--------------------------------------------------------------------------*/
  248. X#pragma pack(1)
  249. Xtypedef struct brREFMODE
  250. X{
  251. X    UINT16 type;
  252. X    UINT16 length;
  253. X    UINT16 fRefA1;        /* 0 = R1C1 mode */
  254. X} brREFMODE;
  255. X#pragma pack()
  256. X
  257. X/*+-------------------------------------------------------------------------
  258. X    DELTA record
  259. X--------------------------------------------------------------------------*/
  260. X#pragma pack(1)
  261. Xtypedef struct brDELTA
  262. X{
  263. X    UINT16 type;
  264. X    UINT16 length;
  265. X    double numDelta;    /* max change fvor iterative model */
  266. X} brDELTA;
  267. X#pragma pack()
  268. X
  269. X/*+-------------------------------------------------------------------------
  270. X    ITERATION record
  271. X--------------------------------------------------------------------------*/
  272. X#pragma pack(1)
  273. Xtypedef struct brITERATION
  274. X{
  275. X    UINT16 type;
  276. X    UINT16 length;
  277. X    UINT16 fIter;        /* 1=on, 0=off */
  278. X} brITERATION;
  279. X#pragma pack()
  280. X
  281. X/*+-------------------------------------------------------------------------
  282. X    1904 record
  283. X--------------------------------------------------------------------------*/
  284. X#pragma pack(1)
  285. Xtypedef struct br1904
  286. X{
  287. X    UINT16 type;
  288. X    UINT16 length;
  289. X    UINT16 f1904;        /* 1=uses 1904 date system, 0=otherwise */
  290. X} br1904;
  291. X#pragma pack()
  292. X
  293. X/*+-------------------------------------------------------------------------
  294. X    PRINTHEADERS record
  295. X--------------------------------------------------------------------------*/
  296. X#pragma pack(1)
  297. Xtypedef struct brPRINTHEADERS
  298. X{
  299. X    UINT16 type;
  300. X    UINT16 length;
  301. X    UINT16 fPrintRwCol;    /* 1=print row/col headers, 0=not */
  302. X} brPRINTHEADERS;
  303. X#pragma pack()
  304. X
  305. X/*+-------------------------------------------------------------------------
  306. X    PRINTGRIDLINES record
  307. X--------------------------------------------------------------------------*/
  308. X#pragma pack(1)
  309. Xtypedef struct brPRINTGRIDLINES
  310. X{
  311. X    UINT16 type;
  312. X    UINT16 length;
  313. X    UINT16 fPrintGrid;    /* 1= print gridlines, 0=not */
  314. X} brPRINTGRIDLINES;
  315. X#pragma pack()
  316. X
  317. X/*+-------------------------------------------------------------------------
  318. X    DEFAULTROWHEIGHT record
  319. X--------------------------------------------------------------------------*/
  320. X#pragma pack(1)
  321. Xtypedef struct brDEFAULTROWHEIGHT
  322. X{
  323. X    UINT16 type;
  324. X    UINT16 length;
  325. X    UINT16 miyRwGhost;    /* height of undefined rows in 1/20 points increments */
  326. X} brDEFAULTROWHEIGHT;
  327. X#pragma pack()
  328. X
  329. X/*+-------------------------------------------------------------------------
  330. X    FONT record
  331. X--------------------------------------------------------------------------*/
  332. X#pragma pack(1)
  333. Xtypedef struct brFONT
  334. X{
  335. X    UINT16 type;
  336. X    UINT16 length;
  337. X    UINT16 dy;            /* height of font */
  338. X    UINT16 grbit;        /* font attributes */
  339. X    UINT8 cch;            /* length of font name */
  340. X    UINT8 rgch[1];        /* variable length font name */
  341. X} brFONT;
  342. X#pragma pack()
  343. X
  344. X#define brFONT_rsvd    0xFF00    /* these bits must be zero */
  345. X#define fExtend        0x0080
  346. X#define fCondense    0x0040
  347. X#define fShadow        0x0020
  348. X#define fOutline    0x0010
  349. X#define fStrikeout    0x0008
  350. X#define fUnderline    0x0004
  351. X#define fItalic        0x0002
  352. X#define fBold        0x0001
  353. X
  354. X/*+-------------------------------------------------------------------------
  355. X    EFONT record
  356. X--------------------------------------------------------------------------*/
  357. X#pragma pack(1)
  358. Xtypedef struct brEFONT
  359. X{
  360. X    UINT16 type;
  361. X    UINT16 length;
  362. X    UINT16 lcv;                /* index into color table */
  363. X} brEFONT;
  364. X#pragma pack()
  365. X
  366. X#define EFONT_black        0
  367. X#define EFONT_white        1
  368. X#define EFONT_red        2
  369. X#define EFONT_green        3
  370. X#define EFONT_blue        4
  371. X#define EFONT_yellow    5
  372. X#define EFONT_magenta    6
  373. X#define EFONT_cyan        7
  374. X
  375. X/*+-------------------------------------------------------------------------
  376. X    FONT2 record - NOT TO BE WRITTEN BY USER CODE (SEE BOOK)
  377. X--------------------------------------------------------------------------*/
  378. X
  379. X/*+-------------------------------------------------------------------------
  380. X    HEADER record
  381. X--------------------------------------------------------------------------*/
  382. X#pragma pack(1)
  383. Xtypedef struct brHEADER
  384. X{
  385. X    UINT16 type;
  386. X    UINT16 length;
  387. X    UINT8 cch;        /* length of string */
  388. X    UINT8 rgch[1];    /* string */
  389. X} brHEADER;
  390. X#pragma pack()
  391. X
  392. X/*+-------------------------------------------------------------------------
  393. X    FOOTER record
  394. X--------------------------------------------------------------------------*/
  395. X#pragma pack(1)
  396. Xtypedef struct brFOOTER
  397. X{
  398. X    UINT16 type;
  399. X    UINT16 length;
  400. X    UINT8 cch;        /* length of string */
  401. X    UINT8 rgch[1];    /* string */
  402. X} brFOOTER;
  403. X#pragma pack()
  404. X
  405. X/*+-------------------------------------------------------------------------
  406. X    LEFTMARGIN record
  407. X--------------------------------------------------------------------------*/
  408. X#pragma pack(1)
  409. Xtypedef struct brLEFTMARGIN
  410. X{
  411. X    UINT16 type;
  412. X    UINT16 length;
  413. X    UINT16 num;
  414. X} brLEFTMARGIN;
  415. X#pragma pack()
  416. X
  417. X/*+-------------------------------------------------------------------------
  418. X    RIGHTMARGIN record
  419. X--------------------------------------------------------------------------*/
  420. X#pragma pack(1)
  421. Xtypedef struct brRIGHTMARGIN
  422. X{
  423. X    UINT16 type;
  424. X    UINT16 length;
  425. X    UINT16 num;
  426. X} brRIGHTMARGIN;
  427. X#pragma pack()
  428. X
  429. X/*+-------------------------------------------------------------------------
  430. X    TOPMARGIN record
  431. X--------------------------------------------------------------------------*/
  432. X#pragma pack(1)
  433. Xtypedef struct brTOPMARGIN
  434. X{
  435. X    UINT16 type;
  436. X    UINT16 length;
  437. X    UINT16 num;
  438. X} brTOPMARGIN;
  439. X#pragma pack()
  440. X
  441. X/*+-------------------------------------------------------------------------
  442. X    BOTTOMMARGIN record
  443. X--------------------------------------------------------------------------*/
  444. X#pragma pack(1)
  445. Xtypedef struct brBOTTOMMARGIN
  446. X{
  447. X    UINT16 type;
  448. X    UINT16 length;
  449. X    UINT16 num;
  450. X} brBOTTOMMARGIN;
  451. X#pragma pack()
  452. X
  453. X/*+-------------------------------------------------------------------------
  454. X    COLWIDTH record
  455. X--------------------------------------------------------------------------*/
  456. X#pragma pack(1)
  457. Xtypedef struct brCOLWIDTH
  458. X{
  459. X    UINT16 type;
  460. X    UINT16 length;
  461. X    UINT8 colFirst;        /* 1st col in range */
  462. X    UINT8 colLast;        /* last col in range */
  463. X    UINT16 dz;            /* column width */
  464. X} brCOLWIDTH;
  465. X#pragma pack()
  466. X
  467. X/*+-------------------------------------------------------------------------
  468. X    BACKUP record
  469. X--------------------------------------------------------------------------*/
  470. X#pragma pack(1)
  471. Xtypedef struct brBACKUP
  472. X{
  473. X    UINT16 type;
  474. X    UINT16 length;
  475. X    UINT16 fBackupFile;
  476. X} brBACKUP;
  477. X#pragma pack()
  478. X
  479. X/*+-------------------------------------------------------------------------
  480. X    FORMATCOUNT record
  481. X--------------------------------------------------------------------------*/
  482. X#pragma pack(1)
  483. Xtypedef struct brFORMATCOUNT
  484. X{
  485. X    UINT16 type;
  486. X    UINT16 length;
  487. X    UINT16 FmtCount;    /* number of built-in format records */
  488. X} brFORMATCOUNT;
  489. X#pragma pack()
  490. X
  491. X/*+-------------------------------------------------------------------------
  492. X    FORMAT record -see book about ordering of these records
  493. X1. you may add FORMAT records
  494. X2. they should all appear together
  495. X3. don't change order - add new ones to bottom of list
  496. X--------------------------------------------------------------------------*/
  497. X#pragma pack(1)
  498. Xtypedef struct brFORMAT
  499. X{
  500. X    UINT16 type;
  501. X    UINT16 length;
  502. X    UINT8 cch;        /* count */
  503. X    UINT8 rgch[1];    /* picture */
  504. X} brFORMAT;
  505. X#pragma pack()
  506. X
  507. X/*+-------------------------------------------------------------------------
  508. X    NAME record
  509. X--------------------------------------------------------------------------*/
  510. X#pragma pack(1)
  511. Xtypedef struct brNAME
  512. X{
  513. X    UINT16 type;
  514. X    UINT16 length;
  515. X    UINT8 grbit;        /* attributes (see below) */
  516. X    UINT8 grbitPli;        /* attributes (see below) */
  517. X    UINT8 chKey;        /* keyboard shortcut */
  518. X    UINT8 cch;            /* length of name text */
  519. X    UINT8 cce;            /* length of name's definition */
  520. X    UINT8 rgch[1];        /* this is a gaggle of bytes (see book):
  521. X                         * text of the name
  522. X                         * parsed expression for name definition
  523. X                         * one byte dup of cce
  524. X                         */
  525. X} brNAME;
  526. X#pragma pack()
  527. X
  528. X/* grbit definitions */
  529. X#define NAME_grbit_RSVD        0xF8    /* must be zero */
  530. X#define NAME_grbit_fCalcExp    0x04    /* =1 if complex function */
  531. X#define NAME_grbit_fProc    0x02    /* =1 if function or command name */
  532. X#define NAME_grbit_RSVD2    0x01    /* must be zero */
  533. X
  534. X/* grbitPli definitions - meaningful only if fProc set */
  535. X#define NAME_grbitPli_RSVD    0xFC    /* must be zero */
  536. X#define NAME_grbitPli_fRun    0x02    /* =1 for command names */
  537. X#define NAME_grbitPli_fFunc    0x01    /* =1 for function names */
  538. X
  539. X/* you really need to read the book on all the above; I ain't into
  540. X * copyright infringements and I don't type like I used to anyway;
  541. X * following are the specifiers I needed for names
  542. X */
  543. X
  544. X#define ptgRefN        0x2C        /* cell reference within a name */
  545. X#define ptgAreaN    0x2D        /* area reference within a name */
  546. X
  547. X#pragma pack(1)
  548. Xtypedef struct opRefN
  549. X{
  550. X    UINT8 op;            /* == ptgRefN */
  551. X    UINT16 grbitRw;        /* row - msb can have flags, but I didn't need them */
  552. X    UINT8 col;            /* column */
  553. X}    opRefN;
  554. X#pragma pack()
  555. X
  556. X#pragma pack(1)
  557. Xtypedef struct opAreaN
  558. X{
  559. X    UINT8 op;            /* == ptgAreaN */
  560. X    UINT16 grbitRwFirst;
  561. X    UINT16 grbitRwLast;
  562. X    UINT8 colFirst;
  563. X    UINT8 colLast;
  564. X}    opAreaN;
  565. X#pragma pack()
  566. X
  567. X/*+-------------------------------------------------------------------------
  568. X    DIMENSION record
  569. X--------------------------------------------------------------------------*/
  570. X#pragma pack(1)
  571. Xtypedef struct brDIMENSION
  572. X{
  573. X    UINT16 type;
  574. X    UINT16 length;
  575. X    UINT16 rwMic;        /* first defined row */
  576. X    UINT16 rwMac;        /* last row + 1 */
  577. X    UINT16 colMic;        /* first col */
  578. X    UINT16 colMac;        /* last row + 1 */
  579. X} brDIMENSION;
  580. X#pragma pack()
  581. X
  582. X/*+-------------------------------------------------------------------------
  583. X    ROW record
  584. Xsee the book (this one has some intense considerations)
  585. X--------------------------------------------------------------------------*/
  586. X#pragma pack(1)
  587. Xtypedef struct brROW
  588. X{
  589. X    UINT16 type;
  590. X    UINT16 length;
  591. X    UINT16 rw;            /* row number */
  592. X    UINT16 colMic;        /* first col */
  593. X    UINT16 colMac;        /* last col + 1 */
  594. X    UINT16 miyRw;        /* row height (1/20 point)
  595. X                         * 0x8000 bit may be set to indicate std height, but
  596. X                         * height must still be present
  597. X                         */
  598. X    UINT8 irwMac;        /* reserved - set to 0 */
  599. X    UINT8 fDefault;        /* =1 if row has default attributes */
  600. X    UINT16 dbRtcell;    /* relative file offset to cell records */
  601. X    UINT8 rgbAttr[3];    /* default cell attributes */
  602. X} brROW;
  603. X#pragma pack()
  604. X
  605. X/*+-------------------------------------------------------------------------
  606. X    BLANK record
  607. X--------------------------------------------------------------------------*/
  608. X#pragma pack(1)
  609. Xtypedef struct brBLANK
  610. X{
  611. X    UINT16 type;
  612. X    UINT16 length;
  613. X    UINT16 rw;            /* row */
  614. X    UINT16 col;            /* column */
  615. X    UINT8 rgbAttr[3];    /* cell attributes */
  616. X} brBLANK;
  617. X#pragma pack()
  618. X
  619. X/*+-------------------------------------------------------------------------
  620. X    INTEGER record
  621. X--------------------------------------------------------------------------*/
  622. X#pragma pack(1)
  623. Xtypedef struct brINTEGER
  624. X{
  625. X    UINT16 type;
  626. X    UINT16 length;
  627. X    UINT16 rw;            /* row */
  628. X    UINT16 col;            /* column */
  629. X    UINT8 rgbAttr[3];    /* cell attributes */
  630. X    UINT16 w;            /* unsigned int value */
  631. X} brINTEGER;
  632. X#pragma pack()
  633. X
  634. X/*+-------------------------------------------------------------------------
  635. X    NUMBER record
  636. X--------------------------------------------------------------------------*/
  637. X#pragma pack(1)
  638. Xtypedef struct brNUMBER
  639. X{
  640. X    UINT16 type;
  641. X    UINT16 length;
  642. X    UINT16 rw;            /* row */
  643. X    UINT16 col;            /* column */
  644. X    UINT8 rgbAttr[3];    /* cell attributes */
  645. X    double num;            /* value */
  646. X} brNUMBER;
  647. X#pragma pack()
  648. X
  649. X/*+-------------------------------------------------------------------------
  650. X    BOOLERR record
  651. X--------------------------------------------------------------------------*/
  652. X#pragma pack(1)
  653. Xtypedef struct brBOOLERR
  654. X{
  655. X    UINT16 type;
  656. X    UINT16 length;
  657. X    UINT16 rw;            /* row */
  658. X    UINT16 col;            /* column */
  659. X    UINT8 rgbAttr[3];    /* cell attributes */
  660. X    UINT8 bBoolErr;        /* value */
  661. X    UINT8 fError;        /* 1 if error, 0 if boolean */
  662. X} brBOOLERR;
  663. X#pragma pack()
  664. X
  665. X#define ERR_NULL    0
  666. X#define ERR_DIV0    7
  667. X#define ERR_VALUE    15
  668. X#define ERR_REF        23
  669. X#define ERR_NAME    29
  670. X#define ERR_NUM        36
  671. X#define ERR_NA        42
  672. X
  673. X/*+-------------------------------------------------------------------------
  674. X    LABEL record
  675. X--------------------------------------------------------------------------*/
  676. X#pragma pack(1)
  677. Xtypedef struct brLABEL
  678. X{
  679. X    UINT16 type;
  680. X    UINT16 length;
  681. X    UINT16 rw;            /* row */
  682. X    UINT16 col;            /* column */
  683. X    UINT8 rgbAttr[3];    /* cell attributes */
  684. X    UINT8 cch;            /* length of string */
  685. X    UINT8 rgch[1];        /* string */
  686. X} brLABEL;
  687. X#pragma pack()
  688. X
  689. X/*+-------------------------------------------------------------------------
  690. X    NOTE record
  691. X--------------------------------------------------------------------------*/
  692. X#pragma pack(1)
  693. Xtypedef struct brNOTE
  694. X{
  695. X    UINT16 type;
  696. X    UINT16 length;
  697. X    UINT16 rw;            /* row */
  698. X    UINT16 col;            /* column */
  699. X    UINT8 cch;            /* length of string */
  700. X    UINT8 rgch[1];        /* string */
  701. X} brNOTE;
  702. X#pragma pack()
  703. X
  704. X/*+-------------------------------------------------------------------------
  705. X    FORMULA record
  706. X--------------------------------------------------------------------------*/
  707. X#pragma pack(1)
  708. Xtypedef struct brFORMULA
  709. X{
  710. X    UINT16 type;
  711. X    UINT16 length;
  712. X    UINT16 rw;            /* row */
  713. X    UINT16 col;            /* column */
  714. X    UINT8 rgbAttr[3];    /* cell attributes */
  715. X    UINT8 num[8];        /* current value (see book) */
  716. X    UINT8 sbRecalc;        /* recalc flag */
  717. X    UINT8 cce;            /* length of parsed expression */
  718. X    UINT8 rgce[1];        /* parsed expression */
  719. X} brFORMULA;
  720. X#pragma pack()
  721. X
  722. X/*
  723. X * rgbAttr definitions
  724. X */
  725. X#define rgbAttr0_fHidden    0x80
  726. X#define rgbAttr0_fLocked    0x40
  727. X#define rgbAttr1_fnt        0xC0        /* font # (0-3) */
  728. X#define rgbAttr1_ifmt        0x3F        /* format code (0-63) */
  729. X#define rgbAttr2_fShade        0x80
  730. X#define rgbAttr2_fBottom    0x40
  731. X#define rgbAttr2_fTop        0x20
  732. X#define rgbAttr2_fRight        0x10
  733. X#define rgbAttr2_fLeft        0x08
  734. X#define rgbAttr2_alc        0x07        /* alignment code mask */
  735. X
  736. X#define alc_GENERAL            0
  737. X#define alc_LEFT            1
  738. X#define alc_CENTRAL            2
  739. X#define alc_RIGHT            3
  740. X#define alc_FILL            4
  741. X#define alc_DEFAULT            7            /* Multiplan only */
  742. X
  743. X/* vi: set tabstop=4 shiftwidth=4: */
  744. X/* end of biff.h */
  745. SHAR_EOF
  746. chmod 0644 excel/biff.h ||
  747. echo 'restore of excel/biff.h failed'
  748. Wc_c="`wc -c < 'excel/biff.h'`"
  749. test 18217 -eq "$Wc_c" ||
  750.     echo 'excel/biff.h: original size 18217, current size' "$Wc_c"
  751. fi
  752. # ============= excel/ecuclog.txt ==============
  753. if test -f 'excel/ecuclog.txt' -a X"$1" != X"-c"; then
  754.     echo 'x - skipping excel/ecuclog.txt (File already exists)'
  755. else
  756. echo 'x - extracting excel/ecuclog.txt (Text)'
  757. sed 's/^X//' << 'SHAR_EOF' > 'excel/ecuclog.txt' &&
  758. XECU Connection Log - created 01-10-1991 05:12:54
  759. XDate              System    Phone       Time
  760. X1991-01-09 16:23  tridom    555-1212    02:02:07
  761. X1991-01-09 19:45  n4vu      555-1212V   00:03:07
  762. X1991-01-09 19:51  n4vu      555-1212V   00:01:53
  763. X1991-01-09 20:21  p1so      555-1212PF  00:00:23
  764. X1991-01-09 20:22  kd4nc     555-1212C   02:00:38
  765. SHAR_EOF
  766. chmod 0644 excel/ecuclog.txt ||
  767. echo 'restore of excel/ecuclog.txt failed'
  768. Wc_c="`wc -c < 'excel/ecuclog.txt'`"
  769. test 339 -eq "$Wc_c" ||
  770.     echo 'excel/ecuclog.txt: original size 339, current size' "$Wc_c"
  771. fi
  772. # ============= excel/ecurlog.txt ==============
  773. if test -f 'excel/ecurlog.txt' -a X"$1" != X"-c"; then
  774.     echo 'x - skipping excel/ecurlog.txt (File already exists)'
  775. else
  776. echo 'x - extracting excel/ecurlog.txt (Text)'
  777. sed 's/^X//' << 'SHAR_EOF' > 'excel/ecurlog.txt' &&
  778. XECU Received File Log - created 01-10-1991 05:12:54 
  779. XDate             From    Length  Name
  780. X1991-01-09 21:46 kd4nc   4060    afterlint.c
  781. X1991-01-09 21:46 kd4nc   9889    ecu.c
  782. X1991-01-09 21:46 kd4nc   4175    ecu.h
  783. X1991-01-09 21:46 kd4nc   12787   ecuicmd.c
  784. X1991-01-09 21:47 kd4nc   23999   eculine.c
  785. X1991-01-09 21:48 kd4nc   48334   ecuphone.c
  786. X1991-01-09 21:48 kd4nc   31419   ecurcvr.c
  787. X1991-01-09 21:48 kd4nc   3040    ecushm.h
  788. X1991-01-09 21:49 kd4nc   585     ecuvmin.h
  789. X1991-01-09 21:49 kd4nc   14172   ecuxenix.c
  790. X1991-01-09 21:49 kd4nc   6599    gint.c
  791. X1991-01-09 21:50 kd4nc   27013   lint_args.h
  792. X1991-01-09 21:50 kd4nc   24245   pcmd.c
  793. X1991-01-09 21:50 kd4nc   3525    pprintf.c
  794. X1991-01-09 21:51 kd4nc   1286    stdio_lint.h
  795. SHAR_EOF
  796. chmod 0644 excel/ecurlog.txt ||
  797. echo 'restore of excel/ecurlog.txt failed'
  798. Wc_c="`wc -c < 'excel/ecurlog.txt'`"
  799. test 730 -eq "$Wc_c" ||
  800.     echo 'excel/ecurlog.txt: original size 730, current size' "$Wc_c"
  801. fi
  802. true || echo 'restore of excel/ecuxls.c failed'
  803. echo End of part 1, continue with part 2
  804. exit 0
  805.  
  806. exit 0 # Just in case...
  807. -- 
  808. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  809. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  810. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  811. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  812.