#include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "wv.h" /* flt value live/dead field type 1 unknown keyword 2 live possible bookmark (syntax matches bookmark name) 3 live bookmark reference 4 dead index entry 5 live footnote reference 6 live Set command (for Print Merge) 7 live If command (for Print Merge) 8 live create index 9 dead table of contents entry 10 live Style reference 11 dead document reference 12 live sequence mark 13 live create table-of-contents 14 live quote Info variable 15 live quote Title variable 16 live quote Subject variable 17 live quote Author variable 18 live quote Keywords variable 19 live quote Comments variable 20 live quote Last Revised By variable 21 live quote Creation Date variable 22 live quote Revision Date variable 23 live quote Print Date variable 24 live quote Revision Number variable 25 live quote Edit Time variable 26 live quote Number of Pages variable 27 live quote Number of Words variable 28 live quote Number of Characters variable 29 live quote File Name variable 30 live quote Document Template Name variable 31 live quote Current Date variable 32 live quote Current Time variable 33 live quote Current Page variable 34 live evaluate expression 35 live insert literal text 36 live Include command (Print Merge) 37 live page reference 38 live Ask command (Print Merge) 39 live Fill-in command to display prompt (Print Merge) 40 live Data command (Print Merge) 41 live Next command (Print Merge) 42 live NextIf command (Print Merge) 43 live SkipIf (Print Merge) 44 live inserts number of current Print Merge record 45 live DDE reference 46 live DDE automatic reference 47 live Inserts Glossary Entry 48 live sends characters to printer without translation 49 live Formula definition 50 live Goto Button 51 live Macro Button 52 live insert auto numbering field in outline format 53 live insert auto numbering field in legal format 54 live insert auto numbering field in Arabic number format 55 live reads a TIFF file 56 live Link 57 live Symbol 58 live Embedded Object 59 live Merge fields 60 live User Name 61 live User Initial 62 live User Address 63 live Bar code 64 live Document variable 65 live Section 66 live Section pages 67 live Include Picture 68 live Include Text 69 live File Size 70 live Form Text Box 71 live Form Check Box 72 live Note Reference 73 live Create Table of Authorities 74 dead Mark Table of Authorities Entry 75 live Merge record sequence number 76 either Macro 77 dead Private 78 live Insert Database 79 live Autotext 80 live Compare two values 81 live Plug-in module private 82 live Subscriber 83 live Form List Box 84 live Advance 85 live Document property 86 live 87 live OCX 88 live Hyperlink 89 live AutoTextList 90 live List element 91 live HTML control Since dead fields have no entry in the plcffld, the string in the field code must be used to determine the field type. All versions of Word '97 use English field code strings, except French, German, and Spanish versions of Word. The strings for all languages for all possible dead fields are listed below. flt English French German Spanish field type value string string string string 4 XE EX XE E index entry 9 TC TE INHALT TC table of contents entry 11 RD RD RD RD document reference 74 TA TA TA TA Mark Table of Authorities Entry 76 Macro 77 PRIVATE PRIVE PRIVATE PRIVATESPA Private */ void wvGetFLD (FLD * item, wvStream * fd) { U8 temp8; U8 ch; temp8 = read_8ubit (fd); ch = temp8 & 0x1f; if (ch == 19) { item->var1.ch = temp8 & 0x1f; item->var1.reserved = (temp8 & 0xe0) >> 5; item->var1.flt = read_8ubit (fd); } else { item->var2.ch = temp8 & 0x1f; item->var2.reserved = (temp8 & 0xe0) >> 5; temp8 = read_8ubit (fd); item->var2.fDiffer = temp8 & 0x01; item->var2.fZombieEmbed = (temp8 & 0x02) >> 1; item->var2.fResultDirty = (temp8 & 0x04) >> 2; item->var2.fResultEdited = (temp8 & 0x08) >> 3; item->var2.fLocked = (temp8 & 0x10) >> 4; item->var2.fPrivateResult = (temp8 & 0x20) >> 5; item->var2.fNested = (temp8 & 0x40) >> 6; item->var2.fHasSep = (temp8 & 0x80) >> 7; } } int wvGetFLD_PLCF (FLD ** fld, U32 ** pos, U32 * nofld, U32 offset, U32 len, wvStream * fd) { U32 i; if (len == 0) { *fld = NULL; *pos = NULL; *nofld = 0; } else { *nofld = (len - 4) / 6; *pos = (U32 *) malloc ((*nofld + 1) * sizeof (U32)); if (*pos == NULL) { wvError ( ("NO MEM 1, failed to alloc %d bytes\n", (*nofld + 1) * sizeof (U32))); return (1); } *fld = (FLD *) malloc (*nofld * sizeof (FLD)); if (*fld == NULL) { wvError ( ("NO MEM 1, failed to alloc %d bytes\n", *nofld * sizeof (FLD))); wvFree (pos); return (1); } wvStream_goto (fd, offset); for (i = 0; i <= *nofld; i++) (*pos)[i] = read_32ubit (fd); for (i = 0; i < *nofld; i++) wvGetFLD (&((*fld)[i]), fd); } return (0); }