Update antiword (thanks to Steve Simon).
[jmk] --rw-rw-r-- M 499692 jmk sys 27773 Jan 14 12:57 sys/src/cmd/aux/antiword/antiword.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:1,6
/*
* antiword.h
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Generic include file for project 'Antiword'
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:16,26 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:16,27
#include <stdio.h>
#include <limits.h>
#if defined(__riscos)
- #include "wimp.h"
- #include "drawfobj.h"
- #include "font.h"
- #include "werr.h"
- #include "draw.h"
+ #include "DeskLib:Font.h"
+ #include "DeskLib:Wimp.h"
+ #include "Desklib:Window.h"
+ #include "drawfile.h"
+ #define window_ANY event_ANY
+ #define icon_ANY event_ANY
#else
#include <sys/types.h>
#endif /* __riscos */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:66,72 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:67,73
#if defined(__riscos)
#define FILE_SEPARATOR "."
- #elif defined(__dos)
+ #elif defined(__dos) || defined(__CYGMING__)
#define FILE_SEPARATOR "\\"
#else /* All others */
#define FILE_SEPARATOR "/"
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:125,132 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:126,135
#define SCALE_100_PCT 7
#define SCALE_150_PCT 8
- /* New draw objects */
- #define draw_OBJJPEG 16
+ /* Save menu fields */
+ #define SAVEMENU_SCALEVIEW 0
+ #define SAVEMENU_SAVEDRAW 1
+ #define SAVEMENU_SAVETEXT 2
#else
/* Margins for the PostScript version */
#define PS_LEFT_MARGIN (72 * 640L)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:138,148 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:141,151
/* Macros */
#define STREQ(x,y) (*(x) == *(y) && strcmp(x,y) == 0)
#define STRNEQ(x,y,n) (*(x) == *(y) && strncmp(x,y,n) == 0)
- #if defined(__dos)
+ #if defined(__dos) || defined(__EMX__)
#define STRCEQ(x,y) (stricmp(x,y) == 0)
#else
#define STRCEQ(x,y) (strcasecmp(x,y) == 0)
- #endif /* __dos */
+ #endif /* __dos or __EMX__ */
#define elementsof(a) (sizeof(a) / sizeof(a[0]))
#define odd(x) (((x)&0x01)!=0)
#define ROUND4(x) (((x)+3)&~0x03)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:196,201 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:199,208
#define GLOBAL_ANTIWORD_DIR "SYS:.antiword"
#define ANTIWORD_DIR ".antiword"
#define FONTNAMES_FILE "fontnames"
+ #elif defined(N_PLAT_NLM)
+ #define GLOBAL_ANTIWORD_DIR "SYS:/antiword"
+ #define ANTIWORD_DIR "antiword"
+ #define FONTNAMES_FILE "fontname.txt"
#elif defined(__vms)
#define GLOBAL_ANTIWORD_DIR "/usr/share/antiword"
#define ANTIWORD_DIR "antiword"
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:204,222 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:211,252
#define GLOBAL_ANTIWORD_DIR "/boot/home/config/apps/antiword"
#define ANTIWORD_DIR "antiword"
#define FONTNAMES_FILE "fontnames"
+ #elif defined(__CYGMING__)
+ #define GLOBAL_ANTIWORD_DIR "C:\\antiword"
+ #define ANTIWORD_DIR "antiword"
+ #define FONTNAMES_FILE "fontnames"
#elif defined(__Plan9__)
#define GLOBAL_ANTIWORD_DIR "/sys/lib/antiword"
#define ANTIWORD_DIR "lib/antiword"
#define FONTNAMES_FILE "fontnames"
+ #elif defined(__sun__)
+ #define GLOBAL_ANTIWORD_DIR "/usr/local/share/antiword"
+ #define ANTIWORD_DIR ".antiword"
+ #define FONTNAMES_FILE "fontnames"
#else /* All others */
#define GLOBAL_ANTIWORD_DIR "/usr/share/antiword"
#define ANTIWORD_DIR ".antiword"
#define FONTNAMES_FILE "fontnames"
#endif /* __dos */
- /* The name of the default mapping file */
- #define MAPPING_FILE_DEFAULT_1 "8859-1.txt"
- #define MAPPING_FILE_DEFAULT_2 "8859-2.txt"
- #define MAPPING_FILE_DEFAULT_8 "UTF-8.txt"
+ /* The names of grouped mapping files */
+ /* ASCII */
+ #define MAPPING_FILE_CP437 "cp437.txt"
+ /* Latin1 */
+ #define MAPPING_FILE_8859_1 "8859-1.txt"
+ /* Latin2 */
+ #define MAPPING_FILE_8859_2 "8859-2.txt"
+ #define MAPPING_FILE_CP852 "cp852.txt"
+ #define MAPPING_FILE_CP1250 "cp1250.txt"
+ /* Cyrillic */
+ #define MAPPING_FILE_8859_5 "8859-5.txt"
+ #define MAPPING_FILE_KOI8_R "koi8-r.txt"
+ #define MAPPING_FILE_KOI8_U "koi8-u.txt"
+ #define MAPPING_FILE_CP866 "cp866.txt"
+ #define MAPPING_FILE_CP1251 "cp1251.txt"
+ /* Latin9 */
+ #define MAPPING_FILE_8859_15 "8859-15.txt"
+ /* UTF-8 */
+ #define MAPPING_FILE_UTF_8 "UTF-8.txt"
#endif /* __riscos */
/* Prototypes */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:230,246 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:260,282
extern BOOL bAdd2TextBlockList(const text_block_type *);
extern void vSplitBlockList(FILE *, ULONG, ULONG, ULONG, ULONG, ULONG,
ULONG, ULONG, ULONG, BOOL);
+ extern BOOL bExistsHdrFtr(void);
extern BOOL bExistsTextBox(void);
extern BOOL bExistsHdrTextBox(void);
extern USHORT usNextChar(FILE *, list_id_enum, ULONG *, ULONG *, USHORT *);
+ extern USHORT usToHdrFtrPosition(FILE *, ULONG);
+ extern USHORT usToFootnotePosition(FILE *, ULONG);
+ extern ULONG ulCharPos2FileOffsetX(ULONG, list_id_enum *);
extern ULONG ulCharPos2FileOffset(ULONG);
+ extern ULONG ulHdrFtrOffset2CharPos(ULONG);
extern ULONG ulGetSeqNumber(ULONG);
#if defined(__riscos)
extern ULONG ulGetDocumentLength(void);
#endif /* __riscos */
/* chartrans.c */
- extern UCHAR ucGetNbspValue(void);
- extern BOOL bReadCharacterMappingTable(const char *);
+ extern UCHAR ucGetBulletCharacter(conversion_type, encoding_type);
+ extern UCHAR ucGetNbspCharacter(void);
+ extern BOOL bReadCharacterMappingTable(FILE *);
extern ULONG ulTranslateCharacters(USHORT, ULONG, int, conversion_type,
encoding_type, BOOL);
extern ULONG ulToUpper(ULONG);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:263,280 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:299,324
/* dib2eps & dib2sprt.c */
extern BOOL bTranslateDIB(diagram_type *,
FILE *, ULONG, const imagedata_type *);
+ #if defined(__dos)
+ /* dos.c */
+ extern int iGetCodepage(void);
+ #endif /* __dos */
+ /* doclist.c */
+ extern void vDestroyDocumentInfoList(void);
+ extern void vCreateDocumentInfoList(const document_block_type *);
+ extern UCHAR ucGetDopHdrFtrSpecification(void);
/* draw.c & output.c */
extern BOOL bAddDummyImage(diagram_type *, const imagedata_type *);
extern diagram_type *pCreateDiagram(const char *, const char *);
extern void vPrologue2(diagram_type *, int);
- extern void vMove2NextLine(diagram_type *, draw_fontref, USHORT);
+ extern void vMove2NextLine(diagram_type *, drawfile_fontref, USHORT);
extern void vSubstring2Diagram(diagram_type *,
char *, size_t, long, UCHAR, USHORT,
- draw_fontref, USHORT, USHORT);
+ drawfile_fontref, USHORT, USHORT);
extern void vStartOfParagraph1(diagram_type *, long);
extern void vStartOfParagraph2(diagram_type *);
- extern void vEndOfParagraph(diagram_type *, draw_fontref, USHORT, long);
- extern void vEndOfPage(diagram_type *, long);
+ extern void vEndOfParagraph(diagram_type *, drawfile_fontref, USHORT, long);
+ extern void vEndOfPage(diagram_type *, long, BOOL);
extern void vSetHeaders(diagram_type *, USHORT);
extern void vStartOfList(diagram_type *, UCHAR, BOOL);
extern void vEndOfList(diagram_type *);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:283,296 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:327,346
extern BOOL bAddTableRow(diagram_type *, char **, int,
const short *, UCHAR);
#if defined(__riscos)
+ extern BOOL bDestroyDiagram(event_pollblock *, void *);
extern void vImage2Diagram(diagram_type *, const imagedata_type *,
UCHAR *, size_t);
extern BOOL bVerifyDiagram(diagram_type *);
extern void vShowDiagram(diagram_type *);
- extern void vMainEventHandler(wimp_eventstr *, void *);
- extern void vScaleOpenAction(diagram_type *);
+ extern void vMainButtonClick(mouse_block *);
+ extern BOOL bMainKeyPressed(event_pollblock *, void *);
+ extern BOOL bMainEventHandler(event_pollblock *, void *);
+ extern BOOL bRedrawMainWindow(event_pollblock *, void *);
+ extern BOOL bScaleOpenAction(event_pollblock *, void *);
extern void vSetTitle(diagram_type *);
- extern void vScaleEventHandler(wimp_eventstr *, void *);
+ extern void vScaleButtonClick(mouse_block *, diagram_type *);
+ extern BOOL bScaleKeyPressed(event_pollblock *, void *);
+ extern BOOL bScaleEventHandler(event_pollblock *, void *);
#else
extern void vImagePrologue(diagram_type *, const imagedata_type *);
extern void vImageEpilogue(diagram_type *);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:308,313 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:358,367
extern BOOL bGet8DocumentText(FILE *, const pps_info_type *,
const ULONG *, size_t, const ULONG *, size_t,
const UCHAR *);
+ /* fmt_text.c */
+ extern void vPrologueFMT(diagram_type *, const options_type *);
+ extern void vSubstringFMT(diagram_type *, const char *, size_t, long,
+ USHORT);
/* fontlist.c */
extern void vDestroyFontInfoList(void);
extern void vCorrectFontValues(font_block_type *);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:319,325 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:373,379
extern const char *szGetOurFontname(int);
extern int iFontname2Fontnumber(const char *, USHORT);
extern void vCreate0FontTable(void);
- extern void vCreate2FontTable(FILE *, const UCHAR *);
+ extern void vCreate2FontTable(FILE *, int, const UCHAR *);
extern void vCreate6FontTable(FILE *, ULONG,
const ULONG *, size_t, const UCHAR *);
extern void vCreate8FontTable(FILE *, const pps_info_type *,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:329,352 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:383,415
extern const font_table_type *pGetNextFontTableRecord(
const font_table_type *);
extern size_t tGetFontTableLength(void);
+ extern void vCorrectFontTable(conversion_type, encoding_type);
+ extern long lComputeSpaceWidth(drawfile_fontref, USHORT);
/* fonts_r.c & fonts_u.c */
extern FILE *pOpenFontTableFile(void);
extern void vCloseFont(void);
- extern draw_fontref tOpenFont(UCHAR, USHORT, USHORT);
- extern draw_fontref tOpenTableFont(USHORT);
- extern long lComputeStringWidth(const char *, size_t, draw_fontref, USHORT);
+ extern drawfile_fontref tOpenFont(UCHAR, USHORT, USHORT);
+ extern drawfile_fontref tOpenTableFont(USHORT);
+ extern long lComputeStringWidth(const char *, size_t, drawfile_fontref, USHORT);
extern size_t tCountColumns(const char *, size_t);
extern size_t tGetCharacterLength(const char *);
/* fonts_u.c */
#if !defined(__riscos)
- extern const char *szGetFontname(draw_fontref);
+ extern const char *szGetFontname(drawfile_fontref);
#endif /* !__riscos */
+ /* hdrftrlist.c */
+ extern void vDestroyHdrFtrInfoList(void);
+ extern void vCreat8HdrFtrInfoList(const ULONG *, size_t);
+ extern void vCreat6HdrFtrInfoList(const ULONG *, size_t);
+ extern void vCreat2HdrFtrInfoList(const ULONG *, size_t);
+ extern const hdrftr_block_type *pGetHdrFtrInfo(int, BOOL, BOOL, BOOL);
+ extern void vPrepareHdrFtrText(FILE *);
#if defined(__riscos)
/* icons.c */
- extern void vUpdateIcon(wimp_w, wimp_icon *);
- extern void vUpdateRadioButton(wimp_w, wimp_i, BOOL);
- extern void vUpdateWriteable(wimp_w, wimp_i, char *);
- extern void vUpdateWriteableNumber(wimp_w, wimp_i, int);
+ extern void vUpdateIcon(window_handle, icon_block *);
+ extern void vUpdateRadioButton(window_handle, icon_handle, BOOL);
+ extern void vUpdateWriteable(window_handle, icon_handle, const char *);
+ extern void vUpdateWriteableNumber(window_handle, icon_handle, int);
#endif /* __riscos */
/* imgexam.c */
extern image_info_enum eExamineImage(FILE *, ULONG, imagedata_type *);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:388,406 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:451,474
extern size_t tUcs2Utf8(ULONG, char *, size_t);
extern void vGetBulletValue(conversion_type, encoding_type, char *, size_t);
extern BOOL bAllZero(const UCHAR *, size_t);
+ extern BOOL bGetNormalizedCodeset(char *, size_t, BOOL *);
+ extern const char *szGetDefaultMappingFile(void);
+ extern time_t tConvertDTTM(ULONG);
/* notes.c */
extern void vDestroyNotesInfoLists(void);
extern void vGetNotesInfo(FILE *, const pps_info_type *,
const ULONG *, size_t, const ULONG *, size_t,
const UCHAR *, int);
+ extern void vPrepareFootnoteText(FILE *);
+ extern const char *szGetFootnootText(UINT);
extern notetype_enum eGetNotetype(ULONG);
/* options.c */
extern int iReadOptions(int, char **);
extern void vGetOptions(options_type *);
#if defined(__riscos)
- extern void vChoicesOpenAction(wimp_w);
- extern void vChoicesMouseClick(wimp_mousestr *);
- extern void vChoicesKeyPressed(wimp_caretstr *);
+ extern void vChoicesOpenAction(window_handle);
+ extern BOOL bChoicesMouseClick(event_pollblock *, void *);
+ extern BOOL bChoicesKeyPressed(event_pollblock *, void *);
#endif /* __riscos */
/* out2window.c */
extern void vSetLeftIndentation(diagram_type *, long);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:409,418 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:477,502
extern void vJustify2Window(diagram_type *, output_type *,
long, long, UCHAR);
extern void vResetStyles(void);
- extern size_t tStyle2Window(char *, const style_block_type *,
+ extern size_t tStyle2Window(char *, size_t, const style_block_type *,
const section_block_type *);
- extern void vTableRow2Window(diagram_type *,
- output_type *, const row_block_type *);
+ extern void vTableRow2Window(diagram_type *, output_type *,
+ const row_block_type *, conversion_type, int);
+ /* pdf.c */
+ extern void vCreateInfoDictionary(diagram_type *, int);
+ extern void vProloguePDF(diagram_type *,
+ const char *, const options_type *);
+ extern void vEpiloguePDF(diagram_type *);
+ extern void vImageProloguePDF(diagram_type *, const imagedata_type *);
+ extern void vImageEpiloguePDF(diagram_type *);
+ extern BOOL bAddDummyImagePDF(diagram_type *, const imagedata_type *);
+ extern void vAddFontsPDF(diagram_type *);
+ extern void vMove2NextLinePDF(diagram_type *, USHORT);
+ extern void vSubstringPDF(diagram_type *,
+ char *, size_t, long, UCHAR, USHORT,
+ drawfile_fontref, USHORT, USHORT);
+ extern void vStartOfParagraphPDF(diagram_type *, long);
+ extern void vEndOfParagraphPDF(diagram_type *, USHORT, long);
+ extern void vEndOfPagePDF(diagram_type *, BOOL);
/* pictlist.c */
extern void vDestroyPictInfoList(void);
extern void vAdd2PictInfoList(const picture_block_type *);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:431,446 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:515,533
extern void vMove2NextLinePS(diagram_type *, USHORT);
extern void vSubstringPS(diagram_type *,
char *, size_t, long, UCHAR, USHORT,
- draw_fontref, USHORT, USHORT);
+ drawfile_fontref, USHORT, USHORT);
extern void vStartOfParagraphPS(diagram_type *, long);
- extern void vEndOfParagraphPS(diagram_type *, draw_fontref, USHORT, long);
- extern void vEndOfPagePS(diagram_type *);
+ extern void vEndOfParagraphPS(diagram_type *, USHORT, long);
+ extern void vEndOfPagePS(diagram_type *, BOOL);
/* prop0.c */
+ extern void vGet0DopInfo(FILE *, const UCHAR *);
extern void vGet0SepInfo(FILE *, const UCHAR *);
extern void vGet0PapInfo(FILE *, const UCHAR *);
extern void vGet0ChrInfo(FILE *, const UCHAR *);
/* prop2.c */
+ extern void vGet2DopInfo(FILE *, const UCHAR *);
extern void vGet2SepInfo(FILE *, const UCHAR *);
+ extern void vGet2HdrFtrInfo(FILE *, const UCHAR *);
extern row_info_enum eGet2RowInfo(int,
const UCHAR *, int, row_block_type *);
extern void vGet2StyleInfo(int,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:452,459 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:539,550
const UCHAR *, size_t, font_block_type *);
extern void vGet2ChrInfo(FILE *, int, const UCHAR *);
/* prop6.c */
+ extern void vGet6DopInfo(FILE *, ULONG, const ULONG *, size_t,
+ const UCHAR *);
extern void vGet6SepInfo(FILE *, ULONG, const ULONG *, size_t,
const UCHAR *);
+ extern void vGet6HdrFtrInfo(FILE *, ULONG, const ULONG *, size_t,
+ const UCHAR *);
extern row_info_enum eGet6RowInfo(int,
const UCHAR *, int, row_block_type *);
extern void vGet6StyleInfo(int,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:465,473 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:556,570
extern void vGet6ChrInfo(FILE *, ULONG, const ULONG *, size_t,
const UCHAR *);
/* prop8.c */
+ extern void vGet8DopInfo(FILE *, const pps_type *,
+ const ULONG *, size_t, const ULONG *, size_t,
+ const UCHAR *);
extern void vGet8SepInfo(FILE *, const pps_info_type *,
const ULONG *, size_t, const ULONG *, size_t,
const UCHAR *);
+ extern void vGet8HdrFtrInfo(FILE *, const pps_type *,
+ const ULONG *, size_t, const ULONG *, size_t,
+ const UCHAR *);
extern row_info_enum eGet8RowInfo(int,
const UCHAR *, int, row_block_type *);
extern void vGet8StyleInfo(int,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:503,510 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:600,607
extern BOOL bMakeDirectory(const char *);
extern int iReadCurrentAlphabetNumber(void);
extern int iGetRiscOsVersion(void);
- extern BOOL bDrawRenderDiag360(draw_diag *,
- draw_redrawstr *, double, draw_error *);
+ extern BOOL bDrawRenderDiag360(void *, size_t,
+ window_redrawblock *, double, os_error *);
#if defined(DEBUG)
extern BOOL bGetJpegInfo(UCHAR *, size_t);
#endif /* DEBUG */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:511,518 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:608,615
#endif /* __riscos */
/* saveas.c */
#if defined(__riscos)
- extern void vSaveTextfile(diagram_type *);
- extern void vSaveDrawfile(diagram_type *);
+ extern BOOL bSaveTextfile(event_pollblock *, void *);
+ extern BOOL bSaveDrawfile(event_pollblock *, void *);
#endif /* __riscos */
/* sectlist.c */
extern void vDestroySectionInfoList(void);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:521,526 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:618,625
extern void vDefault2SectionInfoList(ULONG);
extern const section_block_type *
pGetSectionInfo(const section_block_type *, ULONG);
+ extern size_t tGetNumberOfSections(void);
+ extern UCHAR ucGetSepHdrFtrSpecification(size_t);
/* stylelist.c */
extern void vDestroyStyleInfoList(void);
extern level_type_enum eGetNumType(UCHAR);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:528,533 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:627,633
extern void vAdd2StyleInfoList(const style_block_type *);
extern const style_block_type *pGetNextStyleInfoListItem(
const style_block_type *);
+ extern const style_block_type *pGetNextTextStyle(const style_block_type *);
extern USHORT usGetIstd(ULONG);
extern BOOL bStyleImpliesList(const style_block_type *, int);
/* stylesheet.c */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:555,560 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:655,662
extern const char *szGetSubject(void);
extern const char *szGetAuthor(void);
extern const char *szGetLastSaveDtm(void);
+ extern const char *szGetModDate(void);
+ extern const char *szGetCreationDate(void);
extern const char *szGetCompany(void);
extern const char *szGetLanguage(void);
/* tabstop.c */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:571,580 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:673,682
extern void vEndOfParagraphTXT(diagram_type *, long);
extern void vEndOfPageTXT(diagram_type *, long);
/* unix.c */
- #if !defined(__riscos)
extern void werr(int, const char *, ...);
- extern void visdelay_begin(void);
- extern void visdelay_end(void);
+ #if !defined(__riscos)
+ extern void Hourglass_On(void);
+ extern void Hourglass_Off(void);
#endif /* !__riscos */
/* utf8.c */
#if !defined(__riscos)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:583,589 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:685,694
extern BOOL is_locale_utf8(void);
#endif /* !__riscos */
/* word2text.c */
+ extern BOOL bOutputContainsText(const output_type *);
extern BOOL bWordDecryptor(FILE *, long, diagram_type *);
+ extern output_type *pHdrFtrDecryptor(FILE *, ULONG, ULONG);
+ extern char *szFootnoteDecryptor(FILE *, ULONG, ULONG);
/* worddos.c */
extern int iInitDocumentDOS(FILE *, long);
/* wordlib.c */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:610,623 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:715,728
extern char *xstrdup(const char *);
extern void *xfree(void *);
/* xml.c */
- extern void vCreateBookIntro(diagram_type *, int, encoding_type);
- extern void vPrologueXML(diagram_type *);
+ extern void vCreateBookIntro(diagram_type *, int);
+ extern void vPrologueXML(diagram_type *, const options_type *);
extern void vEpilogueXML(diagram_type *);
extern void vMove2NextLineXML(diagram_type *);
extern void vSubstringXML(diagram_type *,
const char *, size_t, long, USHORT);
- extern void vStartOfParagraphXML(diagram_type *, int);
- extern void vEndOfParagraphXML(diagram_type *, int);
+ extern void vStartOfParagraphXML(diagram_type *, UINT);
+ extern void vEndOfParagraphXML(diagram_type *, UINT);
extern void vEndOfPageXML(diagram_type *);
extern void vSetHeadersXML(diagram_type *, USHORT);
extern void vStartOfListXML(diagram_type *, UCHAR, BOOL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/antiword.h:626,638 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/antiword.h:731,735
extern void vEndOfTableXML(diagram_type *);
extern void vAddTableRowXML(diagram_type *, char **, int,
const short *, UCHAR);
-
-
- /* For use with Gray Watson dmalloc library */
- #if defined(DMALLOC)
- #include "dmalloc.h"
- /* The xfree in Antiword is incompatible with the one in dmalloc */
- #undef xfree
- #endif /* DMALLOC */
#endif /* __antiword_h */
[jmk] --rw-rw-r-- M 499692 jmk sys 27773 Jan 14 12:57 sys/src/cmd/aux/antiword/antiword.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3910 Jan 14 12:57 sys/src/cmd/aux/antiword/asc85enc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3910 Jan 14 12:57 sys/src/cmd/aux/antiword/asc85enc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22483 Jan 14 12:57 sys/src/cmd/aux/antiword/blocklist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:1,6
/*
* blocklist.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy the lists of Word "text" blocks
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:19,39 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:19,46
struct list_mem_tag *pNext;
} list_mem_type;
+ typedef struct readinfo_tag {
+ list_mem_type *pBlockCurrent;
+ ULONG ulBlockOffset;
+ size_t tByteNext;
+ UCHAR aucBlock[BIG_BLOCK_SIZE];
+ } readinfo_type;
+
/* Variables to describe the start of the block lists */
static list_mem_type *pTextAnchor = NULL;
- static list_mem_type *pFootAnchor = NULL;
+ static list_mem_type *pFootnoteAnchor = NULL;
static list_mem_type *pHdrFtrAnchor = NULL;
static list_mem_type *pMacroAnchor = NULL;
static list_mem_type *pAnnotationAnchor = NULL;
- static list_mem_type *pEndAnchor = NULL;
+ static list_mem_type *pEndnoteAnchor = NULL;
static list_mem_type *pTextBoxAnchor = NULL;
static list_mem_type *pHdrTextBoxAnchor = NULL;
/* Variable needed to build the block list */
static list_mem_type *pBlockLast = NULL;
- /* Variable needed to read a block list */
- static list_mem_type *pBlockCurrent = NULL;
- /* Last block read */
- static UCHAR aucBlock[BIG_BLOCK_SIZE];
+ /* Variable needed to read the block lists */
+ static readinfo_type tOthers = { NULL, 0, 0, };
+ static readinfo_type tHdrFtr = { NULL, 0, 0, };
+ static readinfo_type tFootnote = { NULL, 0, 0, };
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:65,80 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:72,89
/* Free the lists one by one */
pTextAnchor = pFreeOneList(pTextAnchor);
- pFootAnchor = pFreeOneList(pFootAnchor);
+ pFootnoteAnchor = pFreeOneList(pFootnoteAnchor);
pHdrFtrAnchor = pFreeOneList(pHdrFtrAnchor);
pMacroAnchor = pFreeOneList(pMacroAnchor);
pAnnotationAnchor = pFreeOneList(pAnnotationAnchor);
- pEndAnchor = pFreeOneList(pEndAnchor);
+ pEndnoteAnchor = pFreeOneList(pEndnoteAnchor);
pTextBoxAnchor = pFreeOneList(pTextBoxAnchor);
pHdrTextBoxAnchor = pFreeOneList(pHdrTextBoxAnchor);
/* Reset all the controle variables */
pBlockLast = NULL;
- pBlockCurrent = NULL;
+ tOthers.pBlockCurrent = NULL;
+ tHdrFtr.pBlockCurrent = NULL;
+ tFootnote.pBlockCurrent = NULL;
} /* end of vDestroyTextBlockList */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:283,293 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:292,303
for (pCurr = pAnchor; pCurr != NULL; pCurr = pCurr->pNext) {
fail(pCurr->tInfo.ulLength == 0);
tSize = (size_t)pCurr->tInfo.ulLength;
- #if defined(__dos)
+ #if defined(__dos) && !defined(__DJGPP__)
if (pCurr->tInfo.ulLength > 0xffffUL) {
tSize = 0xffff;
}
- #endif /* __dos */
+ #endif /* __dos && !__DJGPP__ */
+ fail(aucBuffer != NULL);
aucBuffer = xmalloc(tSize);
if (!bReadBytes(aucBuffer, tSize,
pCurr->tInfo.ulFileOffset, pFile)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:306,313 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:316,324
return FALSE;
}
}
+ aucBuffer = xfree(aucBuffer);
}
- aucBuffer = xfree(aucBuffer);
+ fail(aucBuffer != NULL);
return TRUE;
} /* end of bIsEmptyBox */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:337,353 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:348,364
pGarbageAnchor = NULL;
DBG_MSG_C(ulTextLen != 0, "Text block list");
- vSpitList(&pTextAnchor, &pFootAnchor, ulTextLen);
+ vSpitList(&pTextAnchor, &pFootnoteAnchor, ulTextLen);
DBG_MSG_C(ulFootnoteLen != 0, "Footnote block list");
- vSpitList(&pFootAnchor, &pHdrFtrAnchor, ulFootnoteLen);
+ vSpitList(&pFootnoteAnchor, &pHdrFtrAnchor, ulFootnoteLen);
DBG_MSG_C(ulHdrFtrLen != 0, "Header/Footer block list");
vSpitList(&pHdrFtrAnchor, &pMacroAnchor, ulHdrFtrLen);
DBG_MSG_C(ulMacroLen != 0, "Macro block list");
vSpitList(&pMacroAnchor, &pAnnotationAnchor, ulMacroLen);
DBG_MSG_C(ulAnnotationLen != 0, "Annotation block list");
- vSpitList(&pAnnotationAnchor, &pEndAnchor, ulAnnotationLen);
+ vSpitList(&pAnnotationAnchor, &pEndnoteAnchor, ulAnnotationLen);
DBG_MSG_C(ulEndnoteLen != 0, "Endnote block list");
- vSpitList(&pEndAnchor, &pTextBoxAnchor, ulEndnoteLen);
+ vSpitList(&pEndnoteAnchor, &pTextBoxAnchor, ulEndnoteLen);
DBG_MSG_C(ulTextBoxLen != 0, "Textbox block list");
vSpitList(&pTextBoxAnchor, &pHdrTextBoxAnchor, ulTextBoxLen);
DBG_MSG_C(ulHdrTextBoxLen != 0, "HeaderTextbox block list");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:359,370 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:370,381
#if defined(DEBUG)
vCheckList(pTextAnchor, ulTextLen, "Software error (Text)");
- vCheckList(pFootAnchor, ulFootnoteLen, "Software error (Footnote)");
+ vCheckList(pFootnoteAnchor, ulFootnoteLen, "Software error (Footnote)");
vCheckList(pHdrFtrAnchor, ulHdrFtrLen, "Software error (Hdr/Ftr)");
vCheckList(pMacroAnchor, ulMacroLen, "Software error (Macro)");
vCheckList(pAnnotationAnchor, ulAnnotationLen,
"Software error (Annotation)");
- vCheckList(pEndAnchor, ulEndnoteLen, "Software error (Endnote)");
+ vCheckList(pEndnoteAnchor, ulEndnoteLen, "Software error (Endnote)");
vCheckList(pTextBoxAnchor, ulTextBoxLen, "Software error (TextBox)");
vCheckList(pHdrTextBoxAnchor, ulHdrTextBoxLen,
"Software error (HdrTextBox)");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:387,397 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:398,408
*/
apAnchors[0] = pTextAnchor;
- apAnchors[1] = pFootAnchor;
+ apAnchors[1] = pFootnoteAnchor;
apAnchors[2] = pHdrFtrAnchor;
apAnchors[3] = pMacroAnchor;
apAnchors[4] = pAnnotationAnchor;
- apAnchors[5] = pEndAnchor;
+ apAnchors[5] = pEndnoteAnchor;
apAnchors[6] = pTextBoxAnchor;
apAnchors[7] = pHdrTextBoxAnchor;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:428,435 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:439,446
DBG_MSG("ulGetDocumentLength");
ulTotal = ulComputeListLength(pTextAnchor);
- ulTotal += ulComputeListLength(pFootAnchor);
- ulTotal += ulComputeListLength(pEndAnchor);
+ ulTotal += ulComputeListLength(pFootnoteAnchor);
+ ulTotal += ulComputeListLength(pEndnoteAnchor);
ulTotal += ulComputeListLength(pTextBoxAnchor);
ulTotal += ulComputeListLength(pHdrTextBoxAnchor);
DBG_DEC(ulTotal);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:437,443 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:448,466
} /* end of ulGetDocumentLength */
#endif /* __riscos */
+ #if 0
/*
+ * bExistsHdrFtr - are there headers and/or footers?
+ */
+ BOOL
+ bExistsHdrFtr(void)
+ {
+ return pHdrFtrAnchor != NULL &&
+ pHdrFtrAnchor->tInfo.ulLength != 0;
+ } /* end of bExistsHdrFtr */
+ #endif
+
+ /*
* bExistsTextBox - is there a text box?
*/
BOOL
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:456,538 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:479,607
return pHdrTextBoxAnchor != NULL &&
pHdrTextBoxAnchor->tInfo.ulLength != 0;
} /* end of bExistsHdrTextBox */
+
/*
* usGetNextByte - get the next byte from the specified block list
*/
static USHORT
- usGetNextByte(FILE *pFile, list_mem_type *pAnchor,
+ usGetNextByte(FILE *pFile, readinfo_type *pInfoCurrent, list_mem_type *pAnchor,
ULONG *pulFileOffset, ULONG *pulCharPos, USHORT *pusPropMod)
{
- static ULONG ulBlockOffset = 0;
- static size_t tByteNext = 0;
ULONG ulReadOff;
size_t tReadLen;
- if (pBlockCurrent == NULL ||
- tByteNext >= sizeof(aucBlock) ||
- ulBlockOffset + tByteNext >= pBlockCurrent->tInfo.ulLength) {
- if (pBlockCurrent == NULL) {
+ fail(pInfoCurrent == NULL);
+
+ if (pInfoCurrent->pBlockCurrent == NULL ||
+ pInfoCurrent->tByteNext >= sizeof(pInfoCurrent->aucBlock) ||
+ pInfoCurrent->ulBlockOffset + pInfoCurrent->tByteNext >=
+ pInfoCurrent->pBlockCurrent->tInfo.ulLength) {
+ if (pInfoCurrent->pBlockCurrent == NULL) {
/* First block, first part */
- pBlockCurrent = pAnchor;
- ulBlockOffset = 0;
- } else if (ulBlockOffset + sizeof(aucBlock) <
- pBlockCurrent->tInfo.ulLength) {
+ pInfoCurrent->pBlockCurrent = pAnchor;
+ pInfoCurrent->ulBlockOffset = 0;
+ } else if (pInfoCurrent->ulBlockOffset +
+ sizeof(pInfoCurrent->aucBlock) <
+ pInfoCurrent->pBlockCurrent->tInfo.ulLength) {
/* Same block, next part */
- ulBlockOffset += sizeof(aucBlock);
+ pInfoCurrent->ulBlockOffset +=
+ sizeof(pInfoCurrent->aucBlock);
} else {
/* Next block, first part */
- pBlockCurrent = pBlockCurrent->pNext;
- ulBlockOffset = 0;
+ pInfoCurrent->pBlockCurrent =
+ pInfoCurrent->pBlockCurrent->pNext;
+ pInfoCurrent->ulBlockOffset = 0;
}
- if (pBlockCurrent == NULL) {
+ if (pInfoCurrent->pBlockCurrent == NULL) {
/* Past the last part of the last block */
return (USHORT)EOF;
}
tReadLen = (size_t)
- (pBlockCurrent->tInfo.ulLength - ulBlockOffset);
- if (tReadLen > sizeof(aucBlock)) {
- tReadLen = sizeof(aucBlock);
+ (pInfoCurrent->pBlockCurrent->tInfo.ulLength -
+ pInfoCurrent->ulBlockOffset);
+ if (tReadLen > sizeof(pInfoCurrent->aucBlock)) {
+ tReadLen = sizeof(pInfoCurrent->aucBlock);
}
- ulReadOff = pBlockCurrent->tInfo.ulFileOffset +
- ulBlockOffset;
- if (!bReadBytes(aucBlock, tReadLen, ulReadOff, pFile)) {
+ ulReadOff = pInfoCurrent->pBlockCurrent->tInfo.ulFileOffset +
+ pInfoCurrent->ulBlockOffset;
+ if (!bReadBytes(pInfoCurrent->aucBlock,
+ tReadLen, ulReadOff, pFile)) {
/* Don't read from this list any longer */
- pBlockCurrent = NULL;
+ pInfoCurrent->pBlockCurrent = NULL;
return (USHORT)EOF;
}
- tByteNext = 0;
+ pInfoCurrent->tByteNext = 0;
}
if (pulFileOffset != NULL) {
- *pulFileOffset = pBlockCurrent->tInfo.ulFileOffset +
- ulBlockOffset + tByteNext;
+ *pulFileOffset =
+ pInfoCurrent->pBlockCurrent->tInfo.ulFileOffset +
+ pInfoCurrent->ulBlockOffset +
+ pInfoCurrent->tByteNext;
}
if (pulCharPos != NULL) {
- *pulCharPos = pBlockCurrent->tInfo.ulCharPos +
- ulBlockOffset + tByteNext;
+ *pulCharPos =
+ pInfoCurrent->pBlockCurrent->tInfo.ulCharPos +
+ pInfoCurrent->ulBlockOffset +
+ pInfoCurrent->tByteNext;
}
if (pusPropMod != NULL) {
- *pusPropMod = pBlockCurrent->tInfo.usPropMod;
+ *pusPropMod = pInfoCurrent->pBlockCurrent->tInfo.usPropMod;
}
- return (USHORT)aucBlock[tByteNext++];
+ return (USHORT)pInfoCurrent->aucBlock[pInfoCurrent->tByteNext++];
} /* end of usGetNextByte */
+
/*
* usGetNextChar - get the next character from the specified block list
*/
static USHORT
- usGetNextChar(FILE *pFile, list_mem_type *pAnchor,
+ usGetNextChar(FILE *pFile, list_id_enum eListID,
ULONG *pulFileOffset, ULONG *pulCharPos, USHORT *pusPropMod)
{
+ readinfo_type *pReadinfo;
+ list_mem_type *pAnchor;
USHORT usLSB, usMSB;
- usLSB = usGetNextByte(pFile, pAnchor,
- pulFileOffset, pulCharPos, pusPropMod);
+ switch (eListID) {
+ case text_list:
+ pReadinfo = &tOthers;
+ pAnchor = pTextAnchor;
+ break;
+ case footnote_list:
+ pReadinfo = &tFootnote;
+ pAnchor = pFootnoteAnchor;
+ break;
+ case hdrftr_list:
+ pReadinfo = &tHdrFtr;
+ pAnchor = pHdrFtrAnchor;
+ break;
+ case endnote_list:
+ pReadinfo = &tOthers;
+ pAnchor = pEndnoteAnchor;
+ break;
+ case textbox_list:
+ pReadinfo = &tOthers;
+ pAnchor = pTextBoxAnchor;
+ break;
+ case hdrtextbox_list:
+ pReadinfo = &tOthers;
+ pAnchor = pHdrTextBoxAnchor;
+ break;
+ default:
+ DBG_DEC(eListID);
+ return (USHORT)EOF;
+ }
+
+ usLSB = usGetNextByte(pFile, pReadinfo, pAnchor,
+ pulFileOffset, pulCharPos, pusPropMod);
if (usLSB == (USHORT)EOF) {
return (USHORT)EOF;
}
- if (pBlockCurrent->tInfo.bUsesUnicode) {
- usMSB = usGetNextByte(pFile, pAnchor,
- NULL, NULL, NULL);
+ fail(pReadinfo->pBlockCurrent == NULL);
+
+ if (pReadinfo->pBlockCurrent->tInfo.bUsesUnicode) {
+ usMSB = usGetNextByte(pFile,
+ pReadinfo, pAnchor, NULL, NULL, NULL);
} else {
usMSB = 0x00;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:556,588 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:625,632
fail(pFile == NULL);
- switch (eListID) {
- case text_list:
- usRetVal = usGetNextChar(pFile, pTextAnchor,
+ usRetVal = usGetNextChar(pFile, eListID,
pulFileOffset, pulCharPos, pusPropMod);
- break;
- case footnote_list:
- usRetVal = usGetNextChar(pFile, pFootAnchor,
- pulFileOffset, pulCharPos, pusPropMod);
- break;
- case endnote_list:
- usRetVal = usGetNextChar(pFile, pEndAnchor,
- pulFileOffset, pulCharPos, pusPropMod);
- break;
- case textbox_list:
- usRetVal = usGetNextChar(pFile, pTextBoxAnchor,
- pulFileOffset, pulCharPos, pusPropMod);
- break;
- case hdrtextbox_list:
- usRetVal = usGetNextChar(pFile, pHdrTextBoxAnchor,
- pulFileOffset, pulCharPos, pusPropMod);
- break;
- default:
- DBG_DEC(eListID);
- usRetVal = (USHORT)EOF;
- break;
- }
-
if (usRetVal == (USHORT)EOF) {
if (pulFileOffset != NULL) {
*pulFileOffset = FC_INVALID;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:598,604 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:642,686
} /* end of usNextChar */
/*
- * Translate a character position to an offset in the file.
+ * usToHdrFtrPosition - Go to a character position in header/foorter list
+ *
+ * Returns the character found on the specified character position
+ */
+ USHORT
+ usToHdrFtrPosition(FILE *pFile, ULONG ulCharPos)
+ {
+ ULONG ulCharPosCurr;
+ USHORT usChar;
+
+ tHdrFtr.pBlockCurrent = NULL; /* To reset the header/footer list */
+ do {
+ usChar = usNextChar(pFile,
+ hdrftr_list, NULL, &ulCharPosCurr, NULL);
+ } while (usChar != (USHORT)EOF && ulCharPosCurr != ulCharPos);
+ return usChar;
+ } /* end of usToHdrFtrPosition */
+
+ /*
+ * usToFootnotePosition - Go to a character position in footnote list
+ *
+ * Returns the character found on the specified character position
+ */
+ USHORT
+ usToFootnotePosition(FILE *pFile, ULONG ulCharPos)
+ {
+ ULONG ulCharPosCurr;
+ USHORT usChar;
+
+ tFootnote.pBlockCurrent = NULL; /* To reset the footnote list */
+ do {
+ usChar = usNextChar(pFile,
+ footnote_list, NULL, &ulCharPosCurr, NULL);
+ } while (usChar != (USHORT)EOF && ulCharPosCurr != ulCharPos);
+ return usChar;
+ } /* end of usToFootnotePosition */
+
+ /*
+ * Convert a character position to an offset in the file.
* Logical to physical offset.
*
* Returns: FC_INVALID: in case of error
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:605,624 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:687,723
* otherwise: the computed file offset
*/
ULONG
- ulCharPos2FileOffset(ULONG ulCharPos)
+ ulCharPos2FileOffsetX(ULONG ulCharPos, list_id_enum *peListID)
{
- list_mem_type *apAnchors[5];
+ static list_id_enum eListIDs[8] = {
+ text_list, footnote_list, hdrftr_list,
+ macro_list, annotation_list, endnote_list,
+ textbox_list, hdrtextbox_list,
+ };
+ list_mem_type *apAnchors[8];
list_mem_type *pCurr;
+ list_id_enum eListGuess;
ULONG ulBestGuess;
size_t tIndex;
+ fail(peListID == NULL);
+
+ if (ulCharPos == CP_INVALID) {
+ *peListID = no_list;
+ return FC_INVALID;
+ }
+
apAnchors[0] = pTextAnchor;
- apAnchors[1] = pFootAnchor;
- apAnchors[2] = pEndAnchor;
- apAnchors[3] = pTextBoxAnchor;
- apAnchors[4] = pHdrTextBoxAnchor;
+ apAnchors[1] = pFootnoteAnchor;
+ apAnchors[2] = pHdrFtrAnchor;
+ apAnchors[3] = pMacroAnchor;
+ apAnchors[4] = pAnnotationAnchor;
+ apAnchors[5] = pEndnoteAnchor;
+ apAnchors[6] = pTextBoxAnchor;
+ apAnchors[7] = pHdrTextBoxAnchor;
- ulBestGuess = FC_INVALID; /* Best guess is "fileoffset not found" */
+ eListGuess = no_list; /* Best guess is no list */
+ ulBestGuess = FC_INVALID; /* Best guess is "file offset not found" */
for (tIndex = 0; tIndex < elementsof(apAnchors); tIndex++) {
for (pCurr = apAnchors[tIndex];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:632,637 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:731,737
* block, so we guess it's the first byte of
* the next block (if there is a next block)
*/
+ eListGuess= eListIDs[tIndex];
ulBestGuess = pCurr->pNext->tInfo.ulFileOffset;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:643,648 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:743,749
}
/* The character position is in the current block */
+ *peListID = eListIDs[tIndex];
return pCurr->tInfo.ulFileOffset +
ulCharPos - pCurr->tInfo.ulCharPos;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/blocklist.c:650,657 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/blocklist.c:751,798
/* Passed beyond the end of the last list */
NO_DBG_HEX(ulCharPos);
NO_DBG_HEX(ulBestGuess);
+ *peListID = eListGuess;
return ulBestGuess;
+ } /* end of ulCharPos2FileOffsetX */
+
+ /*
+ * Convert a character position to an offset in the file.
+ * Logical to physical offset.
+ *
+ * Returns: FC_INVALID: in case of error
+ * otherwise: the computed file offset
+ */
+ ULONG
+ ulCharPos2FileOffset(ULONG ulCharPos)
+ {
+ list_id_enum eListID;
+
+ return ulCharPos2FileOffsetX(ulCharPos, &eListID);
} /* end of ulCharPos2FileOffset */
+
+ /*
+ * Convert an offset in the header/footer list to a character position.
+ *
+ * Returns: CP_INVALID: in case of error
+ * otherwise: the computed character position
+ */
+ ULONG
+ ulHdrFtrOffset2CharPos(ULONG ulHdrFtrOffset)
+ {
+ list_mem_type *pCurr;
+ ULONG ulOffset;
+
+ ulOffset = ulHdrFtrOffset;
+ for (pCurr = pHdrFtrAnchor; pCurr != NULL; pCurr = pCurr->pNext) {
+ if (ulOffset >= pCurr->tInfo.ulLength) {
+ /* The offset is not in this block */
+ ulOffset -= pCurr->tInfo.ulLength;
+ continue;
+ }
+ return pCurr->tInfo.ulCharPos + ulOffset;
+ }
+ return CP_INVALID;
+ } /* end of ulHdrFtrOffset2CharPos */
/*
* Get the sequence number beloning to the given file offset
[jmk] --rw-rw-r-- M 499692 jmk sys 22483 Jan 14 12:57 sys/src/cmd/aux/antiword/blocklist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22456 Jan 14 12:57 sys/src/cmd/aux/antiword/chartrans.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:1,6
/*
* chartrans.c
- * Copyright (C) 1999-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1999-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Translate Word characters to local representation
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:14,20 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:14,20
#endif /* __STDC_ISO_10646__ */
#include "antiword.h"
- static const USHORT usCp850[] = {
+ static const USHORT usCp850[] = { /* DOS implementation of Latin1 */
0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:33,39 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:33,39
0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0,
};
- static const USHORT usCp1250[] = {
+ static const USHORT usCp1250[] = { /* Windows implementation of Latin2 */
0x20ac, 0x003f, 0x201a, 0x003f, 0x201e, 0x2026, 0x2020, 0x2021,
0x003f, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179,
0x003f, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:52,65 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:52,96
0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
};
- static const USHORT usCp1252[] = {
+ static const USHORT usCp1251[] = { /* Windows implementation of Cyrillic */
+ 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
+ 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
+ 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+ 0x00f3, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
+ 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
+ 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
+ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
+ 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ };
+
+ static const USHORT usCp1252[] = { /* Windows implementation of Latin1 */
0x20ac, 0x003f, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x003f, 0x017d, 0x003f,
0x003f, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x003f, 0x017e, 0x0178,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+ 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff,
};
- static const USHORT usMacRoman[] = {
+ static const USHORT usMacRoman[] = { /* Apple implementation of Latin1 */
0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:110,120 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:141,152
};
typedef struct char_table_tag {
- USHORT usLocal;
+ UCHAR ucLocal;
USHORT usUnicode;
} char_table_type;
- static char_table_type atCharTable[128];
+ static char_table_type atCharTable[256];
+ static size_t tNextPosFree = 0;
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:151,181 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:183,253
{
char_table_type tKey;
+ if (tNextPosFree == 0) {
+ return NULL;
+ }
tKey.usUnicode = usUnicode;
- tKey.usLocal = 0;
+ tKey.ucLocal = 0;
return (char_table_type *)bsearch(&tKey,
atCharTable,
- elementsof(atCharTable), sizeof(atCharTable[0]),
+ tNextPosFree, sizeof(atCharTable[0]),
iCompare);
} /* end of pGetCharTableRecord */
/*
- * ucGetNbspValue - get the local representation of the non-breaking space
+ * ucGetBulletCharacter - get the local representation of the bullet
*/
UCHAR
- ucGetNbspValue(void)
+ ucGetBulletCharacter(conversion_type eConversionType, encoding_type eEncoding)
{
+ #if defined(__riscos)
+ return 0x8f;
+ #else
const char_table_type *pRec;
+ fail(eEncoding == encoding_utf_8);
+
+ if (eEncoding == encoding_latin_1 &&
+ (eConversionType == conversion_ps ||
+ eConversionType == conversion_pdf)) {
+ /* Ugly, but it makes the PostScript and PDF look better */
+ return (UCHAR)143;
+ }
+ if (eConversionType != conversion_text &&
+ eConversionType != conversion_fmt_text) {
+ pRec = pGetCharTableRecord(UNICODE_BULLET);
+ if (pRec != NULL) {
+ return pRec->ucLocal;
+ }
+ pRec = pGetCharTableRecord(UNICODE_BULLET_OPERATOR);
+ if (pRec != NULL) {
+ return pRec->ucLocal;
+ }
+ pRec = pGetCharTableRecord(UNICODE_MIDDLE_DOT);
+ if (pRec != NULL) {
+ return pRec->ucLocal;
+ }
+ }
+ return (UCHAR)'.';
+ #endif /* __riscos */
+ } /* end of ucGetBulletCharacter */
+
+ /*
+ * ucGetNbspCharacter - get the local representation of the non-breaking space
+ */
+ UCHAR
+ ucGetNbspCharacter(void)
+ {
+ const char_table_type *pRec;
+
pRec = pGetCharTableRecord(0x00a0); /* Unicode non-breaking space */
- if (pRec == NULL || pRec->usLocal > 0xff) {
- DBG_MSG_C(pRec == NULL, "Non-breaking space record not found");
- DBG_HEX_C(pRec != NULL, pRec->usLocal);
+ if (pRec == NULL) {
+ DBG_MSG("Non-breaking space record not found");
/* No value found, use the best guess */
return (UCHAR)0xa0;
}
- return (UCHAR)pRec->usLocal;
- } /* end of ucGetNbspValue */
+ return pRec->ucLocal;
+ } /* end of ucGetNbspCharacter */
/*
* bReadCharacterMappingTable - read the mapping table
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:185,193 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:257,264
* returns TRUE if successful, otherwise FALSE
*/
BOOL
- bReadCharacterMappingTable(const char *szFilename)
+ bReadCharacterMappingTable(FILE *pFile)
{
- FILE *pFile;
char *pcTmp;
ULONG ulUnicode;
UINT uiLocal;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:194,213 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:265,278
int iFields;
char szLine[81];
- DBG_MSG(szFilename);
-
- fail(szFilename == NULL);
-
- if (szFilename == NULL || szFilename[0] == '\0') {
- return FALSE;
- }
- pFile = fopen(szFilename, "r");
if (pFile == NULL) {
- DBG_MSG(szFilename);
return FALSE;
}
+
+ /* Clean the table first */
(void)memset(atCharTable, 0, sizeof(atCharTable));
+ /* Fill the table */
while (fgets(szLine, (int)sizeof(szLine), pFile)) {
if (szLine[0] == '#' ||
szLine[0] == '\r' ||
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:233,256 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:298,327
uiLocal, ulUnicode);
continue;
}
- if (uiLocal >= 0x80) {
- atCharTable[uiLocal - 0x80].usLocal =
- (USHORT)uiLocal;
- atCharTable[uiLocal - 0x80].usUnicode =
- (USHORT)ulUnicode;
+ /* Store only the relevant entries */
+ if (uiLocal != ulUnicode || uiLocal >= 0x80) {
+ atCharTable[tNextPosFree].ucLocal = (UCHAR)uiLocal;
+ atCharTable[tNextPosFree].usUnicode = (USHORT)ulUnicode;
+ tNextPosFree++;
}
+ if (tNextPosFree >= elementsof(atCharTable)) {
+ werr(0, "Too many entries in the character mapping "
+ "file. Ignoring the rest.");
+ break;
+ }
}
- (void)fclose(pFile);
- DBG_HEX(atCharTable[0].usUnicode);
- DBG_HEX(atCharTable[elementsof(atCharTable)-1].usUnicode);
+ if (tNextPosFree != 0) {
+ DBG_HEX(atCharTable[0].usUnicode);
+ DBG_HEX(atCharTable[tNextPosFree - 1].usUnicode);
- qsort(atCharTable,
- elementsof(atCharTable), sizeof(atCharTable[0]),
- iCompare);
+ qsort(atCharTable,
+ tNextPosFree, sizeof(atCharTable[0]),
+ iCompare);
- DBG_HEX(atCharTable[0].usUnicode);
- DBG_HEX(atCharTable[elementsof(atCharTable)-1].usUnicode);
+ DBG_HEX(atCharTable[0].usUnicode);
+ DBG_HEX(atCharTable[tNextPosFree - 1].usUnicode);
+ }
return TRUE;
} /* end of bReadCharacterMappingTable */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:268,302 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:339,376
BOOL bUseMacCharSet)
{
const char_table_type *pTmp;
+ const USHORT *usCharSet;
+ usCharSet = NULL;
if (bUseMacCharSet) {
- /* Translate special Macintosh characters */
- if (usChar >= 0x80 && usChar <= 0xff) {
- usChar = usMacRoman[usChar - 0x80];
- }
+ /* Macintosh character set */
+ usCharSet = usMacRoman;
} else if (iWordVersion == 0) {
- /* From Code Page 850 to Unicode */
- if (usChar >= 0x80 && usChar <= 0xff) {
- usChar = usCp850[usChar - 0x80];
- }
+ /* DOS character set */
+ usCharSet = usCp850;
} else {
- if (eEncoding == encoding_iso_8859_2) {
- /* Translate implementation defined characters */
- if (usChar >= 0x80 && usChar <= 0x9f) {
- usChar = usCp1250[usChar - 0x80];
- }
- /* From Code Page 1250 to Unicode */
- if (iWordVersion < 8 &&
- usChar >= 0xa0 && usChar <= 0xff) {
- usChar = usCp1250[usChar - 0x80];
- }
- } else {
- /* Translate implementation defined characters */
- if (usChar >= 0x80 && usChar <= 0x9f) {
- usChar = usCp1252[usChar - 0x80];
- }
+ /* Windows character set */
+ switch (eEncoding) {
+ case encoding_latin_2:
+ usCharSet = usCp1250;
+ break;
+ case encoding_cyrillic:
+ usCharSet = usCp1251;
+ break;
+ case encoding_latin_1:
+ default:
+ usCharSet = usCp1252;
+ break;
}
}
+ fail(usCharSet == NULL);
+ if (usChar >= 0x80 && usChar <= 0x9f) {
+ /* Translate implementation defined characters */
+ usChar = usCharSet[usChar - 0x80];
+ } else if (iWordVersion < 8 && usChar >= 0xa0 && usChar <= 0xff) {
+ /* Translate old character set to Unixcode */
+ usChar = usCharSet[usChar - 0x80];
+ }
/* Microsoft Unicode to real Unicode */
if (usChar >= 0xf020 && usChar <= 0xf0ff) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:339,345 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:413,419
break;
}
- if (eEncoding != encoding_utf8) {
+ if (eEncoding != encoding_utf_8) {
/* Latin characters in an oriental text */
if (usChar >= 0xff01 && usChar <= 0xff5e) {
usChar -= 0xfee0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:346,353 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:420,429
}
}
- if (eConversionType == conversion_ps &&
- eEncoding == encoding_iso_8859_1) {
+ if (eEncoding == encoding_latin_1 &&
+ (eConversionType == conversion_ps ||
+ eConversionType == conversion_pdf)) {
+ /* Ugly, but it makes the PostScript and PDF look better */
switch (usChar) {
case UNICODE_ELLIPSIS:
return 140;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:356,363 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:432,440
case UNICODE_PER_MILLE_SIGN:
return 142;
case UNICODE_BULLET:
+ case UNICODE_BULLET_OPERATOR:
case UNICODE_BLACK_CLUB_SUIT:
- return (ULONG)(UCHAR)OUR_BULLET_PS;
+ return 143;
case UNICODE_LEFT_SINGLE_QMARK:
return 144;
case UNICODE_RIGHT_SINGLE_QMARK:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:395,400 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:472,496
}
}
+ if (eConversionType == conversion_pdf) {
+ if (eEncoding == encoding_latin_1) {
+ switch (usChar) {
+ case UNICODE_EURO_SIGN:
+ return 128;
+ default:
+ break;
+ }
+ } else if (eEncoding == encoding_latin_2) {
+ switch (usChar) {
+ case UNICODE_CAPITAL_D_WITH_STROKE:
+ case UNICODE_SMALL_D_WITH_STROKE:
+ return 0x3f;
+ default:
+ break;
+ }
+ }
+ }
+
if (usChar < 0x80) {
/* US ASCII */
if (usChar < 0x20 || usChar == 0x7f) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:406,412 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:502,508
return (ULONG)usChar;
}
- if (eEncoding == encoding_utf8) {
+ if (eEncoding == encoding_utf_8) {
/* No need to convert Unicode characters */
return (ULONG)usChar;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:415,421 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:511,517
pTmp = pGetCharTableRecord(usChar);
if (pTmp != NULL) {
DBG_HEX_C(usChar >= 0x7f && usChar <= 0x9f, usChar);
- return (ULONG)pTmp->usLocal;
+ return (ULONG)pTmp->ucLocal;
}
/* Fancy characters to simple US ASCII */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:442,447 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:538,544
case UNICODE_FIGURE_SPACE:
case UNICODE_PUNCTUATION_SPACE:
case UNICODE_THIN_SPACE:
+ case UNICODE_NARROW_NO_BREAK_SPACE:
case UNICODE_LIGHT_SHADE:
case UNICODE_MEDIUM_SHADE:
case UNICODE_DARK_SHADE:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:479,494 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:576,602
case UNICODE_DOUBLE_DAGGER:
return (ULONG)'#';
case UNICODE_BULLET:
+ case UNICODE_BULLET_OPERATOR:
case UNICODE_BLACK_CLUB_SUIT:
- return (ULONG)OUR_BULLET_TEXT;
+ return (ULONG)ucGetBulletCharacter(eConversionType, eEncoding);
case UNICODE_ONE_DOT_LEADER:
+ case UNICODE_TWO_DOT_LEADER:
return (ULONG)'.';
case UNICODE_ELLIPSIS:
+ #if defined(__riscos)
return (ULONG)OUR_ELLIPSIS;
+ #else
+ if (ulFileOffset == 0) {
+ return (ULONG)OUR_ELLIPSIS;
+ }
+ return UNICODE_ELLIPSIS;
+ #endif /* __riscos */
+ case UNICODE_DOUBLE_LEFT_ANGLE_QMARK:
case UNICODE_TRIANGULAR_BULLET:
case UNICODE_SINGLE_LEFT_ANGLE_QMARK:
case UNICODE_LEFTWARDS_ARROW:
return (ULONG)'<';
+ case UNICODE_DOUBLE_RIGHT_ANGLE_QMARK:
case UNICODE_SINGLE_RIGHT_ANGLE_QMARK:
case UNICODE_RIGHTWARDS_ARROW:
return (ULONG)'>';
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:503,508 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:611,618
return (ULONG)'O';
case UNICODE_DIAMOND:
return (ULONG)OUR_DIAMOND;
+ case UNICODE_NUMERO_SIGN:
+ return (ULONG)'N';
case UNICODE_KELVIN_SIGN:
return (ULONG)'K';
case UNICODE_DOWNWARDS_ARROW:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/chartrans.c:542,547 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/chartrans.c:652,661
case UNICODE_RIGHT_TO_LEFT_MARK:
case UNICODE_LEFT_TO_RIGHT_EMBEDDING:
case UNICODE_RIGHT_TO_LEFT_EMBEDDING:
+ case UNICODE_POP_DIRECTIONAL_FORMATTING:
+ case UNICODE_LEFT_TO_RIGHT_OVERRIDE:
+ case UNICODE_RIGHT_TO_LEFT_OVERRIDE:
+ case UNICODE_ZERO_WIDTH_NO_BREAK_SPACE:
return IGNORE_CHARACTER;
default:
break;
[jmk] --rw-rw-r-- M 499692 jmk sys 22456 Jan 14 12:57 sys/src/cmd/aux/antiword/chartrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8933 Jan 14 12:57 sys/src/cmd/aux/antiword/datalist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8933 Jan 14 12:57 sys/src/cmd/aux/antiword/datalist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3153 Jan 14 12:57 sys/src/cmd/aux/antiword/debug.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/debug.h:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/debug.h:1,6
/*
* debug.h
- * Copyright (C) 1998-2001 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GPL
*
* Description:
* Macro's for debuging.
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/debug.h:98,102 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/debug.h:98,117
#define NO_DBG_DEC_C(c,m) /* EMPTY */
#define NO_DBG_HEX_C(c,m) /* EMPTY */
#define NO_DBG_FLT_C(c,m) /* EMPTY */
+
+ #if defined(TRACE)
+
+ #define TRACE_MSG(t) do {\
+ (void)fprintf(stderr,\
+ "%s[%3d]: TRACE:%.40s\n",\
+ __FILE__, __LINE__, (t));\
+ (void)fflush(stderr);\
+ } while(0)
+
+ #else
+
+ #define TRACE_MSG(t) /* EMPTY */
+
+ #endif /* TRACE */
#endif /* !__debug_h */
[jmk] --rw-rw-r-- M 499692 jmk sys 3153 Jan 14 12:57 sys/src/cmd/aux/antiword/debug.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2724 Jan 14 12:57 sys/src/cmd/aux/antiword/depot.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2724 Jan 14 12:57 sys/src/cmd/aux/antiword/depot.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12146 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12146 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 14486 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2sprt.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:8,14 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:8,15
#include <stdio.h>
#include <string.h>
- #include "wimpt.h"
+ #include "DeskLib:Error.h"
+ #include "DeskLib:Sprite.h"
#include "antiword.h"
#if 0 /* defined(DEBUG) */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:37,72 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:38,75
} /* end of iGetByteWidth */
/*
- * bCreateBlankSprite - Create a blank sprite.
+ * pCreateBlankSprite - Create a blank sprite.
*
* Create a blank sprite and add a palette if needed
*
* returns a pointer to the sprite when successful, otherwise NULL
*/
- static UCHAR *
- pucCreateBlankSprite(const imagedata_type *pImg, size_t *ptSize)
+ static sprite_areainfo *
+ pCreateBlankSprite(const imagedata_type *pImg, size_t *pSize)
{
- sprite_area *pArea;
+ sprite_areainfo *pArea;
UCHAR *pucTmp;
size_t tSize;
- int iIndex, iMode, iPaletteEntries, iByteWidth;
+ screen_modeval uMode;
+ int iIndex, iPaletteEntries;
- DBG_MSG("pCreateBlankSprite");
+ TRACE_MSG("pCreateBlankSprite");
fail(pImg == NULL);
+ fail(pSize == NULL);
switch (pImg->uiBitsPerComponent) {
case 1:
- iMode = 18;
+ uMode.screen_mode = 18;
iPaletteEntries = 2;
break;
case 4:
- iMode = 20;
+ uMode.screen_mode = 20;
iPaletteEntries = 16;
break;
case 8:
case 24:
- iMode = 21;
+ uMode.screen_mode = 21;
iPaletteEntries = 0;
break;
default:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:75,100 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:78,103
}
fail(iPaletteEntries < 0 || iPaletteEntries > 16);
- /* Create the sprite */
-
- iByteWidth = iGetByteWidth(pImg);
-
- tSize = sizeof(sprite_area) +
- sizeof(sprite_header) +
- iPaletteEntries * 8 +
- iByteWidth * pImg->iHeight;
+ /* Get memory for the sprite */
+ tSize = sizeof(sprite_areainfo) +
+ Sprite_MemorySize(pImg->iWidth, pImg->iHeight, uMode,
+ iPaletteEntries > 0 ? sprite_HASPAL : sprite_HASNOMASKPAL);
DBG_DEC(tSize);
pArea = xmalloc(tSize);
- sprite_area_initialise(pArea, tSize);
- wimpt_noerr(sprite_create(pArea, "wordimage",
- iPaletteEntries > 0 ? sprite_haspalette : sprite_nopalette,
- pImg->iWidth, pImg->iHeight, iMode));
+ /* Initialise sprite area */
+ pArea->areasize = tSize;
+ pArea->numsprites = 0;
+ pArea->firstoffset = sizeof(sprite_areainfo);
+ pArea->freeoffset = sizeof(sprite_areainfo);
- /* Add the palette */
+ /* Create a blank sprite */
+ Error_CheckFatal(Sprite_Create(pArea, "wordimage",
+ iPaletteEntries > 0 ? 1 : 0,
+ pImg->iWidth, pImg->iHeight, uMode));
- pucTmp = (UCHAR *)pArea +
- sizeof(sprite_area) + sizeof(sprite_header);
+ /* Add the palette */
+ pucTmp = (UCHAR *)pArea + pArea->firstoffset + sizeof(sprite_header);
for (iIndex = 0; iIndex < iPaletteEntries; iIndex++) {
/* First color */
*pucTmp++ = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:108,118 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:111,119
*pucTmp++ = pImg->aucPalette[iIndex][2];
}
- if (ptSize != NULL) {
- *ptSize = tSize;
- }
- return (UCHAR *)pArea;
- } /* end of pucCreateBlankSprite */
+ *pSize = tSize;
+ return pArea;
+ } /* end of pCreateBlankSprite */
/*
* iReduceColor - reduce from 24 bit to 8 bit color
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:505,511 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:506,513
static void
vDecodeDIB(diagram_type *pDiag, FILE *pFile, const imagedata_type *pImg)
{
- UCHAR *pucSprite, *pucPalette, *pucData;
+ sprite_areainfo *pSprite;
+ UCHAR *pucPalette, *pucData;
size_t tSpriteSize;
int iHeaderSize;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:518,526 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:520,529
pImg->iColorsUsed * ((iHeaderSize > 12) ? 4 : 3));
}
- /* Create an empty sprite */
- pucSprite = pucCreateBlankSprite(pImg, &tSpriteSize);
- pucPalette = pucSprite + sizeof(sprite_area) + sizeof(sprite_header);
+ /* Create an blank sprite */
+ pSprite = pCreateBlankSprite(pImg, &tSpriteSize);
+ pucPalette = (UCHAR *)pSprite +
+ pSprite->firstoffset + sizeof(sprite_header);
/* Add the pixel information */
switch (pImg->uiBitsPerComponent) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:542,548 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:545,551
case 8:
fail(pImg->eCompression != compression_none &&
pImg->eCompression != compression_rle8);
- pucData = pucPalette;
+ pucData = pucPalette + 0 * 8;
if (pImg->eCompression == compression_rle8) {
vDecodeRle8(pFile, pucData, pImg);
} else {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:551,557 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:554,560
break;
case 24:
fail(pImg->eCompression != compression_none);
- pucData = pucPalette;
+ pucData = pucPalette + 0 * 8;
vDecode24bpp(pFile, pucData, pImg);
break;
default:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:560,575 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/dib2sprt.c:563,578
}
#if 0 /* defined(DEBUG) */
- vCopy2File(pucSprite, tSpriteSize);
+ vCopy2File((UCHAR *)pSprite, tSpriteSize);
#endif /* DEBUG */
/* Add the sprite to the Draw file */
vImage2Diagram(pDiag, pImg,
- pucSprite + sizeof(sprite_area),
- tSpriteSize - sizeof(sprite_area));
+ (UCHAR *)pSprite + pSprite->firstoffset,
+ tSpriteSize - pSprite->firstoffset);
/* Clean up before you leave */
- pucSprite = xfree(pucSprite);
+ pSprite = xfree(pSprite);
} /* end of vDecodeDIB */
/*
[jmk] --rw-rw-r-- M 499692 jmk sys 14486 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1610 Jan 14 12:57 sys/src/cmd/aux/antiword/doclist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26682 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:1,6
/*
* draw.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GPL
*
* Description:
* Functions to deal with the Draw format
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:9,23 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:9,24
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
- #include "akbd.h"
- #include "flex.h"
- #include "wimp.h"
- #include "template.h"
- #include "wimpt.h"
- #include "win.h"
+ #include "DeskLib:KeyCodes.h"
+ #include "DeskLib:Error.h"
+ #include "DeskLib:Menu.h"
+ #include "DeskLib:Template.h"
+ #include "DeskLib:Window.h"
+ #include "DeskLib:EventMsg.h"
+ #include "flexlib:flex.h"
+ #include "drawfile.h"
#include "antiword.h"
-
/* The work area must be a little bit larger than the diagram */
#define WORKAREA_EXTENSION 5
/* Diagram memory */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:27,99 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:28,125
#define WINDOW_TITLE_LEN 28
#define FILENAME_TITLE_LEN (WINDOW_TITLE_LEN - 10)
- static BOOL (*bDrawRenderDiag)(draw_diag *,
- draw_redrawstr *, double, draw_error *) = NULL;
- /*
- * vCreateMainWindow - create the Main Window
- *
- * remark: does not return if the Main Window can't be created
- */
- static wimp_w
- tCreateMainWindow(void)
+ #if !defined(__GNUC__)
+ int
+ flex_alloc(flex_ptr anchor, int n)
{
- static int iY = 0;
- template *pTemplate;
- wimp_w tMainWindow;
+ void *pvTmp;
- /* Find and check the template */
- pTemplate = template_find("MainWindow");
- if (pTemplate == NULL) {
- werr(1, "The 'MainWindow' template can't be found");
+ TRACE_MSG("flex_alloc");
+
+ if (anchor == NULL || n < 0) {
+ return 0;
}
- pTemplate = template_copy(pTemplate);
- if (pTemplate == NULL) {
- werr(1, "I can't copy the 'MainWindow' template");
+ if (n == 0) {
+ n = 1;
}
- if ((pTemplate->window.titleflags & wimp_INDIRECT) !=
- wimp_INDIRECT) {
- werr(1,
- "The title of the 'MainWindow' template must be indirected text");
+ pvTmp = malloc(n);
+ if (pvTmp == NULL) {
+ return 0;
}
- if (pTemplate->window.title.indirecttext.bufflen < WINDOW_TITLE_LEN) {
- werr(1, "The 'MainWindow' title needs %d characters",
- WINDOW_TITLE_LEN);
+ *anchor = pvTmp;
+ return 1;
+ } /* end of flex_alloc */
+
+ void
+ flex_free(flex_ptr anchor)
+ {
+ TRACE_MSG("flex_free");
+
+ if (anchor == NULL || *anchor == NULL) {
+ return;
}
+ free(*anchor);
+ *anchor = NULL;
+ } /* end of flex_free */
- /*
- * Leave 48 OS units between two windows, as recommended by the
- * Style guide. And try to stay away from the iconbar.
- */
- if (pTemplate->window.box.y0 < iY + 130) {
- iY = 48;
- } else {
- pTemplate->window.box.y0 -= iY;
- pTemplate->window.box.y1 -= iY;
- iY += 48;
+ int
+ flex_extend(flex_ptr anchor, int newsize)
+ {
+ void *pvTmp;
+
+ TRACE_MSG("flex_extend");
+
+ if (anchor == NULL || newsize < 0) {
+ return 0;
}
+ if (newsize == 0) {
+ newsize = 1;
+ }
+ pvTmp = realloc(*anchor, newsize);
+ if (pvTmp == NULL) {
+ return 0;
+ }
+ *anchor = pvTmp;
+ return 1;
+ } /* end of flex_extend */
+ #endif /* !__GNUC__ */
- /* Create the window */
- wimpt_noerr(wimp_create_wind(&pTemplate->window, &tMainWindow));
+ /*
+ * vCreateMainWindow - create the Main window
+ *
+ * remark: does not return if the Main window can't be created
+ */
+ static window_handle
+ tCreateMainWindow(void)
+ {
+ window_handle tMainWindow;
+
+ TRACE_MSG("tCreateMainWindow");
+
+ tMainWindow = Window_Create("MainWindow", template_TITLEMIN);
+ if (tMainWindow == 0) {
+ werr(1, "I can't find the 'MainWindow' template");
+ }
return tMainWindow;
} /* end of tCreateMainWindow */
/*
- * vCreateScaleWindow - create the Scale view Window
+ * vCreateScaleWindow - create the Scale view window
*
- * remark: does not return if the Scale view Window can't be created
+ * remark: does not return if the Scale view window can't be created
*/
- static wimp_w
+ static window_handle
tCreateScaleWindow(void)
{
- wimp_wind *pw;
- wimp_w tScaleWindow;
+ window_handle tScaleWindow;
- pw = template_syshandle("ScaleView");
- if (pw == NULL) {
- werr(1, "Template 'ScaleView' can't be found");
+ TRACE_MSG("tCreateScaleWindow");
+
+ tScaleWindow = Window_Create("ScaleView", template_TITLEMIN);
+ if (tScaleWindow == 0) {
+ werr(1, "I can't find the 'ScaleView' template");
}
- wimpt_noerr(wimp_create_wind(pw, &tScaleWindow));
return tScaleWindow;
} /* end of tCreateScaleWindow */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:107,121 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:133,148
{
diagram_type *pDiag;
options_type tOptions;
- wimp_w tMainWindow, tScaleWindow;
- draw_box tBox;
+ window_handle tMainWindow, tScaleWindow;
+ wimp_box tBox;
- DBG_MSG("pCreateDiagram");
+ TRACE_MSG("pCreateDiagram");
fail(szTask == NULL || szTask[0] == '\0');
/* Create the main window */
tMainWindow = tCreateMainWindow();
+
/* Create the scale view window */
tScaleWindow = tCreateScaleWindow();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:125,139 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:152,157
werr(1, "Memory allocation failed, unable to continue");
}
- /* Determine which function to use for rendering the diagram */
- if (iGetRiscOsVersion() >= 360) {
- /* Home brew for RISC OS 3.6 functionality */
- bDrawRenderDiag = bDrawRenderDiag360;
- } else {
- /* The function from RISC_OSLib */
- bDrawRenderDiag = draw_render_diag;
- }
-
/* Initialize the diagram */
vGetOptions(&tOptions);
pDiag->tMainWindow = tMainWindow;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:141,151 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:159,170
pDiag->iScaleFactorCurr = tOptions.iScaleFactor;
pDiag->iScaleFactorTemp = tOptions.iScaleFactor;
pDiag->tMemorySize = INITIAL_SIZE;
- tBox.x0 = 0;
- tBox.y0 = -(draw_screenToDraw(32 + 3) * 8 + 1);
- tBox.x1 = draw_screenToDraw(16) * MIN_SCREEN_WIDTH + 1;
- tBox.y1 = 0;
- draw_create_diag(&pDiag->tInfo, (char *)szTask, tBox);
+ tBox.min.x = 0;
+ tBox.min.y = -(Drawfile_ScreenToDraw(32 + 3) * 8 + 1);
+ tBox.max.x = Drawfile_ScreenToDraw(16) * MIN_SCREEN_WIDTH + 1;
+ tBox.max.y = 0;
+ Error_CheckFatal(Drawfile_CreateDiagram(&pDiag->tInfo,
+ pDiag->tMemorySize, szTask, tBox));
DBG_DEC(pDiag->tInfo.length);
pDiag->lXleft = 0;
pDiag->lYtop = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:157,210 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:176,253
} /* end of pCreateDiagram */
/*
- * vDestroyDiagram - remove a diagram by freeing the memory it uses
+ * bDestroyDiagram - remove a diagram by freeing the memory it uses
*/
- static void
- vDestroyDiagram(wimp_w tWindow, diagram_type *pDiag)
+ BOOL
+ bDestroyDiagram(event_pollblock *pEvent, void *pvReference)
{
- DBG_MSG("vDestroyDiagram");
+ diagram_type *pDiag;
+ window_handle tWindow;
- fail(pDiag != NULL && pDiag->tMainWindow != tWindow);
+ TRACE_MSG("bDestroyDiagram");
- wimpt_noerr(wimp_close_wind(tWindow));
- if (pDiag == NULL) {
- return;
+ fail(pEvent == NULL);
+ fail(pvReference == NULL);
+
+ if (pEvent == NULL || pvReference == NULL) {
+ return FALSE;
}
- if (pDiag->tInfo.data != NULL && pDiag->tMemorySize != 0) {
- flex_free((flex_ptr)&pDiag->tInfo.data);
- }
- pDiag = xfree(pDiag);
- } /* end of vDestroyDiagram */
- /*
- * vPrintDrawError - print an error reported by a draw function
- */
- static void
- vPrintDrawError(draw_error *pError)
- {
- DBG_MSG("vPrintDrawError");
+ pDiag = (diagram_type *)pvReference;
- fail(pError == NULL);
-
- switch (pError->type) {
- case DrawOSError:
- DBG_DEC(pError->err.os.errnum);
- DBG_MSG(pError->err.os.errmess);
- werr(1, "DrawOSError: %d: %s",
- pError->err.os.errnum, pError->err.os.errmess);
+ switch (pEvent->type) {
+ case event_CLOSE:
+ tWindow = pEvent->data.openblock.window;
break;
- case DrawOwnError:
- DBG_DEC(pError->err.draw.code);
- DBG_HEX(pError->err.draw.location);
- werr(1, "DrawOwnError: Code %d - Location &%x",
- pError->err.draw.code, pError->err.draw.location);
+ case event_KEY:
+ tWindow = pEvent->data.key.caret.window;
break;
- case None:
default:
- break;
+ DBG_DEC(pEvent->type);
+ return FALSE;
}
- } /* end of vPrintDrawError */
+ if (tWindow != pDiag->tMainWindow) {
+ return FALSE;
+ }
+ /* Delete the main window */
+ Window_Delete(pDiag->tMainWindow);
+ pDiag->tMainWindow = 0;
+
+ /* Delete the scale window */
+ Window_Delete(pDiag->tScaleWindow);
+ pDiag->tScaleWindow = 0;
+
+ #if defined(__GNUC__)
+ /*
+ * Remove all references to the diagram that will be free-ed
+ * by undoing the EventMsg_Claim's from within the Menu_Warn's
+ */
+ while (EventMsg_ReleaseSpecific(message_MENUWARNING, window_ANY,
+ bSaveTextfile, pDiag))
+ ; /* EMPTY */
+ while (EventMsg_ReleaseSpecific(message_MENUWARNING, window_ANY,
+ bSaveDrawfile, pDiag))
+ ; /* EMPTY */
+ while (EventMsg_ReleaseSpecific(message_MENUWARNING, window_ANY,
+ bScaleOpenAction, pDiag))
+ ; /* EMPTY */
+ #endif /* __GNUC__ */
+
+ /* Free the memory */
+ if (pDiag->tInfo.data != NULL && pDiag->tMemorySize != 0) {
+ flex_free((flex_ptr)&pDiag->tInfo.data);
+ }
+ /* Just to be on the save side */
+ pDiag->tInfo.data = NULL;
+ pDiag->tInfo.length = 0;
+ pDiag->tMemorySize = 0;
+
+ /* Destroy the diagram itself */
+ pDiag = xfree(pDiag);
+ return TRUE;
+ } /* end of bDestroyDiagram */
+
/*
* vExtendDiagramSize - make sure the diagram is big enough
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:211,216 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:254,261
static void
vExtendDiagramSize(diagram_type *pDiag, size_t tSize)
{
+ TRACE_MSG("vExtendDiagramSize");
+
fail(pDiag == NULL || tSize % 4 != 0);
while (pDiag->tInfo.length + tSize > pDiag->tMemorySize) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:221,226 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:266,272
pDiag->tMemorySize += EXTENSION_SIZE;
NO_DBG_DEC(pDiag->tMemorySize);
}
+ TRACE_MSG("end of vExtendDiagramSize");
} /* end of vExtendDiagramSize */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:229,258 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:275,306
void
vPrologue2(diagram_type *pDiag, int iWordVersion)
{
- draw_objectType tNew;
- draw_error tError;
- draw_object tHandle;
+ drawfile_object *pNew;
const font_table_type *pTmp;
char *pcTmp;
size_t tRealSize, tSize;
int iCount;
+ TRACE_MSG("vPrologue2");
+
fail(pDiag == NULL);
if (tGetFontTableLength() == 0) {
return;
}
- tRealSize = sizeof(draw_fontliststrhdr);
+ tRealSize = offsetof(drawfile_object, data);
pTmp = NULL;
while ((pTmp = pGetNextFontTableRecord(pTmp)) != NULL) {
tRealSize += 2 + strlen(pTmp->szOurFontname);
}
+ DBG_DEC(tRealSize);
tSize = ROUND4(tRealSize);
vExtendDiagramSize(pDiag, tSize);
- tNew.fontList = xmalloc(tSize);
- tNew.fontList->tag = draw_OBJFONTLIST;
- tNew.fontList->size = tSize;
- pcTmp = (char *)&tNew.fontList->fontref;
+ pNew = xmalloc(tSize);
+ memset(pNew, 0, tSize);
+ pNew->type = drawfile_TYPE_FONT_TABLE;
+ pNew->size = tSize;
+ pcTmp = (char *)&pNew->data.font_table.font_def[0].font_ref;
iCount = 0;
pTmp = NULL;
while ((pTmp = pGetNextFontTableRecord(pTmp)) != NULL) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:261,275 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:309,317
strcpy(pcTmp, pTmp->szOurFontname);
pcTmp += 1 + strlen(pTmp->szOurFontname);
}
- memset((char *)tNew.fontList + tRealSize, 0, tSize - tRealSize);
- if (draw_createObject(&pDiag->tInfo, tNew, draw_LastObject,
- TRUE, &tHandle, &tError)) {
- draw_translateText(&pDiag->tInfo);
- } else {
- DBG_MSG("draw_createObject() failed");
- vPrintDrawError(&tError);
- }
- tNew.fontList = xfree(tNew.fontList);
+ Error_CheckFatal(Drawfile_AppendObject(&pDiag->tInfo,
+ pDiag->tMemorySize, pNew, TRUE));
+ pNew = xfree(pNew);
} /* end of vPrologue2 */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:278,292 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:320,334
void
vSubstring2Diagram(diagram_type *pDiag,
char *szString, size_t tStringLength, long lStringWidth,
- UCHAR ucFontColor, USHORT usFontstyle, draw_fontref tFontRef,
+ UCHAR ucFontColor, USHORT usFontstyle, drawfile_fontref tFontRef,
USHORT usFontSize, USHORT usMaxFontSize)
{
- draw_objectType tNew;
- draw_error tError;
- draw_object tHandle;
+ drawfile_object *pNew;
long lSizeX, lSizeY, lOffset, l20, lYMove;
size_t tRealSize, tSize;
+ TRACE_MSG("vSubstring2Diagram");
+
fail(pDiag == NULL || szString == NULL);
fail(pDiag->lXleft < 0);
fail(tStringLength != strlen(szString));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:299,308 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:341,350
}
if (tFontRef == 0) {
- lOffset = draw_screenToDraw(2);
- l20 = draw_screenToDraw(32 + 3);
- lSizeX = draw_screenToDraw(16);
- lSizeY = draw_screenToDraw(32);
+ lOffset = Drawfile_ScreenToDraw(2);
+ l20 = Drawfile_ScreenToDraw(32 + 3);
+ lSizeX = Drawfile_ScreenToDraw(16);
+ lSizeY = Drawfile_ScreenToDraw(32);
} else {
lOffset = lToBaseLine(usMaxFontSize);
l20 = lWord2DrawUnits20(usMaxFontSize);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:321,356 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:363,398
lYMove = -lMilliPoints2DrawUnits((long)usFontSize * 125);
}
- tRealSize = sizeof(draw_textstr) + tStringLength;
+ tRealSize = offsetof(drawfile_object, data);
+ tRealSize += sizeof(drawfile_text) + tStringLength;
tSize = ROUND4(tRealSize);
vExtendDiagramSize(pDiag, tSize);
- tNew.text = xmalloc(tSize);
- tNew.text->tag = draw_OBJTEXT;
- tNew.text->size = tSize;
- tNew.text->bbox.x0 = (int)pDiag->lXleft;
- tNew.text->bbox.y0 = (int)(pDiag->lYtop + lYMove);
- tNew.text->bbox.x1 = (int)(pDiag->lXleft + lStringWidth);
- tNew.text->bbox.y1 = (int)(pDiag->lYtop + l20 + lYMove);
- tNew.text->textcolour = (draw_coltyp)ulColor2Color(ucFontColor);
- tNew.text->background = 0xffffff00; /* White */
- tNew.text->textstyle.fontref = tFontRef;
- tNew.text->textstyle.reserved8 = 0;
- tNew.text->textstyle.reserved16 = 0;
- tNew.text->fsizex = (int)lSizeX;
- tNew.text->fsizey = (int)lSizeY;
- tNew.text->coord.x = (int)pDiag->lXleft;
- tNew.text->coord.y = (int)(pDiag->lYtop + lOffset + lYMove);
- strncpy(tNew.text->text, szString, tStringLength);
- tNew.text->text[tStringLength] = '\0';
- memset((char *)tNew.text + tRealSize, 0, tSize - tRealSize);
- if (!draw_createObject(&pDiag->tInfo, tNew, draw_LastObject,
- TRUE, &tHandle, &tError)) {
- DBG_MSG("draw_createObject() failed");
- vPrintDrawError(&tError);
- }
- tNew.text = xfree(tNew.text);
- draw_translateText(&pDiag->tInfo);
+ pNew = xmalloc(tSize);
+ memset(pNew, 0, tSize);
+ pNew->type = drawfile_TYPE_TEXT;
+ pNew->size = tSize;
+ pNew->data.text.bbox.min.x = (int)pDiag->lXleft;
+ pNew->data.text.bbox.min.y = (int)(pDiag->lYtop + lYMove);
+ pNew->data.text.bbox.max.x = (int)(pDiag->lXleft + lStringWidth);
+ pNew->data.text.bbox.max.y = (int)(pDiag->lYtop + l20 + lYMove);
+ pNew->data.text.fill.value = (int)ulColor2Color(ucFontColor);
+ pNew->data.text.bg_hint.value = 0xffffff00; /* White */
+ pNew->data.text.style.font_ref = tFontRef;
+ pNew->data.text.style.reserved[0] = 0;
+ pNew->data.text.style.reserved[1] = 0;
+ pNew->data.text.style.reserved[2] = 0;
+ pNew->data.text.xsize = (int)lSizeX;
+ pNew->data.text.ysize = (int)lSizeY;
+ pNew->data.text.base.x = (int)pDiag->lXleft;
+ pNew->data.text.base.y = (int)(pDiag->lYtop + lOffset + lYMove);
+ strncpy(pNew->data.text.text, szString, tStringLength);
+ pNew->data.text.text[tStringLength] = '\0';
+ Error_CheckFatal(Drawfile_AppendObject(&pDiag->tInfo,
+ pDiag->tMemorySize, pNew, TRUE));
+ pNew = xfree(pNew);
+ /*draw_translateText(&pDiag->tInfo);*/
pDiag->lXleft += lStringWidth;
+ TRACE_MSG("leaving vSubstring2Diagram");
} /* end of vSubstring2Diagram */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:360,373 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:402,412
vImage2Diagram(diagram_type *pDiag, const imagedata_type *pImg,
UCHAR *pucImage, size_t tImageSize)
{
- draw_objectType tTmp;
- draw_imageType tNew;
- draw_error tError;
- draw_object tHandle;
+ drawfile_object *pNew;
long lWidth, lHeight;
size_t tRealSize, tSize;
- DBG_MSG("vImage2Diagram");
+ TRACE_MSG("vImage2Diagram");
fail(pDiag == NULL);
fail(pImg == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:384,455 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:423,481
pDiag->lYtop -= lHeight;
+ tRealSize = offsetof(drawfile_object, data);
switch (pImg->eImageType) {
case imagetype_is_dib:
- tRealSize = sizeof(draw_spristrhdr) + tImageSize;
+ tRealSize += sizeof(drawfile_sprite) + tImageSize;
tSize = ROUND4(tRealSize);
vExtendDiagramSize(pDiag, tSize);
- tNew.sprite = xmalloc(tSize);
- tNew.sprite->tag = draw_OBJSPRITE;
- tNew.sprite->size = tSize;
- tNew.sprite->bbox.x0 = (int)pDiag->lXleft;
- tNew.sprite->bbox.y0 = (int)pDiag->lYtop;
- tNew.sprite->bbox.x1 = (int)(pDiag->lXleft + lWidth);
- tNew.sprite->bbox.y1 = (int)(pDiag->lYtop + lHeight);
- memcpy(&tNew.sprite->sprite, pucImage, tImageSize);
- memset((char *)tNew.sprite + tRealSize, 0, tSize - tRealSize);
+ pNew = xmalloc(tSize);
+ memset(pNew, 0, tSize);
+ pNew->type = drawfile_TYPE_SPRITE;
+ pNew->size = tSize;
+ pNew->data.sprite.bbox.min.x = (int)pDiag->lXleft;
+ pNew->data.sprite.bbox.min.y = (int)pDiag->lYtop;
+ pNew->data.sprite.bbox.max.x = (int)(pDiag->lXleft + lWidth);
+ pNew->data.sprite.bbox.max.y = (int)(pDiag->lYtop + lHeight);
+ memcpy(&pNew->data.sprite.header, pucImage, tImageSize);
break;
case imagetype_is_jpeg:
#if defined(DEBUG)
(void)bGetJpegInfo(pucImage, tImageSize);
#endif /* DEBUG */
- tRealSize = sizeof(draw_jpegstrhdr) + tImageSize;
+ tRealSize += sizeof(drawfile_jpeg) + tImageSize;
tSize = ROUND4(tRealSize);
vExtendDiagramSize(pDiag, tSize);
- tNew.jpeg = xmalloc(tSize);
- tNew.jpeg->tag = draw_OBJJPEG;
- tNew.jpeg->size = tSize;
- tNew.jpeg->bbox.x0 = (int)pDiag->lXleft;
- tNew.jpeg->bbox.y0 = (int)pDiag->lYtop;
- tNew.jpeg->bbox.x1 = (int)(pDiag->lXleft + lWidth);
- tNew.jpeg->bbox.y1 = (int)(pDiag->lYtop + lHeight);
- tNew.jpeg->width = (int)lWidth;
- tNew.jpeg->height = (int)lHeight;
- tNew.jpeg->xdpi = 90;
- tNew.jpeg->ydpi = 90;
- tNew.jpeg->trfm[0] = 0x10000;
- tNew.jpeg->trfm[1] = 0;
- tNew.jpeg->trfm[2] = 0;
- tNew.jpeg->trfm[3] = 0x10000;
- tNew.jpeg->trfm[4] = (int)pDiag->lXleft;
- tNew.jpeg->trfm[5] = (int)pDiag->lYtop;
- tNew.jpeg->len = tImageSize;
- memcpy(&tNew.jpeg->jpeg, pucImage, tImageSize);
- memset((char *)tNew.jpeg + tRealSize, 0, tSize - tRealSize);
+ pNew = xmalloc(tSize);
+ memset(pNew, 0, tSize);
+ pNew->type = drawfile_TYPE_JPEG;
+ pNew->size = tSize;
+ pNew->data.jpeg.bbox.min.x = (int)pDiag->lXleft;
+ pNew->data.jpeg.bbox.min.y = (int)pDiag->lYtop;
+ pNew->data.jpeg.bbox.max.x = (int)(pDiag->lXleft + lWidth);
+ pNew->data.jpeg.bbox.max.y = (int)(pDiag->lYtop + lHeight);
+ pNew->data.jpeg.width = (int)lWidth;
+ pNew->data.jpeg.height = (int)lHeight;
+ pNew->data.jpeg.xdpi = 90;
+ pNew->data.jpeg.ydpi = 90;
+ pNew->data.jpeg.trfm.entries[0][0] = 0x10000;
+ pNew->data.jpeg.trfm.entries[0][1] = 0;
+ pNew->data.jpeg.trfm.entries[1][0] = 0;
+ pNew->data.jpeg.trfm.entries[1][1] = 0x10000;
+ pNew->data.jpeg.trfm.entries[2][0] = (int)pDiag->lXleft;
+ pNew->data.jpeg.trfm.entries[2][1] = (int)pDiag->lYtop;
+ pNew->data.jpeg.len = tImageSize;
+ memcpy(pNew->data.jpeg.data, pucImage, tImageSize);
break;
default:
DBG_DEC(pImg->eImageType);
+ pNew = NULL;
break;
}
- tTmp = *(draw_objectType *)&tNew;
- if (!draw_createObject(&pDiag->tInfo, tTmp, draw_LastObject,
- TRUE, &tHandle, &tError)) {
- DBG_MSG("draw_createObject() failed");
- vPrintDrawError(&tError);
- }
-
- switch (pImg->eImageType) {
- case imagetype_is_dib:
- tNew.sprite = xfree(tNew.sprite);
- break;
- case imagetype_is_jpeg:
- tNew.jpeg = xfree(tNew.jpeg);
- break;
- default:
- DBG_DEC(pImg->eImageType);
- break;
- }
+ Error_CheckFatal(Drawfile_AppendObject(&pDiag->tInfo,
+ pDiag->tMemorySize, pNew, TRUE));
+ pNew = xfree(pNew);
pDiag->lXleft = 0;
} /* end of vImage2Diagram */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:461,474 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:487,498
BOOL
bAddDummyImage(diagram_type *pDiag, const imagedata_type *pImg)
{
- draw_objectType tNew;
- draw_error tError;
- draw_object tHandle;
+ drawfile_object *pNew;
int *piTmp;
long lWidth, lHeight;
size_t tRealSize, tSize;
- DBG_MSG("bAddDummyImage");
+ TRACE_MSG("bAddDummyImage");
fail(pDiag == NULL);
fail(pImg == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:485,529 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:509,552
pDiag->lYtop -= lHeight;
- tRealSize = sizeof(draw_pathstrhdr) + 14 * sizeof(int);
+ tRealSize = offsetof(drawfile_object, data);
+ tRealSize += sizeof(drawfile_path) + (14 - 1) * sizeof(int);
tSize = ROUND4(tRealSize);
vExtendDiagramSize(pDiag, tSize);
- tNew.path = xmalloc(tSize);
- tNew.path->tag = draw_OBJPATH;
- tNew.path->size = tSize;
- tNew.path->bbox.x0 = (int)pDiag->lXleft;
- tNew.path->bbox.y0 = (int)pDiag->lYtop;
- tNew.path->bbox.x1 = (int)(pDiag->lXleft + lWidth);
- tNew.path->bbox.y1 = (int)(pDiag->lYtop + lHeight);
- tNew.path->fillcolour = -1;
- tNew.path->pathcolour = 0x4d4d4d00; /* Gray 70 percent */
- tNew.path->pathwidth = (int)lMilliPoints2DrawUnits(500);
- tNew.path->pathstyle.joincapwind = 0;
- tNew.path->pathstyle.reserved8 = 0;
- tNew.path->pathstyle.tricapwid = 0;
- tNew.path->pathstyle.tricaphei = 0;
- piTmp = (int *)((char *)tNew.path + sizeof(draw_pathstrhdr));
- *piTmp++ = draw_PathMOVE;
- *piTmp++ = tNew.path->bbox.x0;
- *piTmp++ = tNew.path->bbox.y0;
- *piTmp++ = draw_PathLINE;
- *piTmp++ = tNew.path->bbox.x0;
- *piTmp++ = tNew.path->bbox.y1;
- *piTmp++ = draw_PathLINE;
- *piTmp++ = tNew.path->bbox.x1;
- *piTmp++ = tNew.path->bbox.y1;
- *piTmp++ = draw_PathLINE;
- *piTmp++ = tNew.path->bbox.x1;
- *piTmp++ = tNew.path->bbox.y0;
- *piTmp++ = draw_PathCLOSE;
- *piTmp++ = draw_PathTERM;
- memset((char *)tNew.path + tRealSize, 0, tSize - tRealSize);
- if (!draw_createObject(&pDiag->tInfo, tNew, draw_LastObject,
- TRUE, &tHandle, &tError)) {
- DBG_MSG("draw_createObject() failed");
- vPrintDrawError(&tError);
- }
- tNew.path = xfree(tNew.path);
+ pNew = xmalloc(tSize);
+ memset(pNew, 0, tSize);
+ pNew->type = drawfile_TYPE_PATH;
+ pNew->size = tSize;
+ pNew->data.path.bbox.min.x = (int)pDiag->lXleft;
+ pNew->data.path.bbox.min.y = (int)pDiag->lYtop;
+ pNew->data.path.bbox.max.x = (int)(pDiag->lXleft + lWidth);
+ pNew->data.path.bbox.max.y = (int)(pDiag->lYtop + lHeight);
+ pNew->data.path.fill.value = -1;
+ pNew->data.path.outline.value = 0x4d4d4d00; /* Gray 70 percent */
+ pNew->data.path.width = (int)lMilliPoints2DrawUnits(500);
+ pNew->data.path.style.flags = 0;
+ pNew->data.path.style.reserved = 0;
+ pNew->data.path.style.cap_width = 0;
+ pNew->data.path.style.cap_length = 0;
+ piTmp = pNew->data.path.path;
+ *piTmp++ = drawfile_PATH_MOVE_TO;
+ *piTmp++ = pNew->data.path.bbox.min.x;
+ *piTmp++ = pNew->data.path.bbox.min.y;
+ *piTmp++ = drawfile_PATH_LINE_TO;
+ *piTmp++ = pNew->data.path.bbox.min.x;
+ *piTmp++ = pNew->data.path.bbox.max.y;
+ *piTmp++ = drawfile_PATH_LINE_TO;
+ *piTmp++ = pNew->data.path.bbox.max.x;
+ *piTmp++ = pNew->data.path.bbox.max.y;
+ *piTmp++ = drawfile_PATH_LINE_TO;
+ *piTmp++ = pNew->data.path.bbox.max.x;
+ *piTmp++ = pNew->data.path.bbox.min.y;
+ *piTmp++ = drawfile_PATH_CLOSE_LINE;
+ *piTmp++ = drawfile_PATH_END_PATH;
+
+ Error_CheckFatal(Drawfile_AppendObject(&pDiag->tInfo,
+ pDiag->tMemorySize, pNew, TRUE));
+ pNew = xfree(pNew);
pDiag->lXleft = 0;
return TRUE;
} /* end of bAddDummyImage */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:532,546 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:555,572
* vMove2NextLine - move to the next line
*/
void
- vMove2NextLine(diagram_type *pDiag, draw_fontref tFontRef, USHORT usFontSize)
+ vMove2NextLine(diagram_type *pDiag, drawfile_fontref tFontRef,
+ USHORT usFontSize)
{
long l20;
+ TRACE_MSG("vMove2NextLine");
+
fail(pDiag == NULL);
fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE);
if (tFontRef == 0) {
- l20 = draw_screenToDraw(32 + 3);
+ l20 = Drawfile_ScreenToDraw(32 + 3);
} else {
l20 = lWord2DrawUnits20(usFontSize);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:553,558 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:579,586
void
vStartOfParagraph1(diagram_type *pDiag, long lBeforeIndentation)
{
+ TRACE_MSG("vStartOfParagraph1");
+
fail(pDiag == NULL);
fail(lBeforeIndentation < 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:562,572 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:590,601
/*
* Create an start of paragraph (Phase 2)
+ * DUMMY function
*/
void
vStartOfParagraph2(diagram_type *pDiag)
{
- /* DUMMY */
+ TRACE_MSG("vStartOfParagraph2");
} /* end of vStartOfParagraph2 */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:574,581 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:603,612
*/
void
vEndOfParagraph(diagram_type *pDiag,
- draw_fontref tFontRef, USHORT usFontSize, long lAfterIndentation)
+ drawfile_fontref tFontRef, USHORT usFontSize, long lAfterIndentation)
{
+ TRACE_MSG("vEndOfParagraph");
+
fail(pDiag == NULL);
fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE);
fail(lAfterIndentation < 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:588,595 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:619,628
* Create an end of page
*/
void
- vEndOfPage(diagram_type *pDiag, long lAfterIndentation)
+ vEndOfPage(diagram_type *pDiag, long lAfterIndentation, BOOL bNewSection)
{
+ TRACE_MSG("vEndOfPage");
+
fail(pDiag == NULL);
fail(lAfterIndentation < 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:599,649 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:632,688
/*
* vSetHeaders - set the headers
+ * DUMMY function
*/
void
vSetHeaders(diagram_type *pDiag, USHORT usIstd)
{
- /* DUMMY */
+ TRACE_MSG("vSetHeaders");
} /* end of vSetHeaders */
/*
* Create a start of list
+ * DUMMY function
*/
void
vStartOfList(diagram_type *pDiag, UCHAR ucNFC, BOOL bIsEndOfTable)
{
- /* DUMMY */
+ TRACE_MSG("vStartOfList");
} /* end of vStartOfList */
/*
* Create an end of list
+ * DUMMY function
*/
void
vEndOfList(diagram_type *pDiag)
{
- /* DUMMY */
+ TRACE_MSG("vEndOfList");
} /* end of vEndOfList */
/*
* Create a start of a list item
+ * DUMMY function
*/
void
vStartOfListItem(diagram_type *pDiag, BOOL bNoMarks)
{
- /* DUMMY */
+ TRACE_MSG("vStartOfListItem");
} /* end of vStartOfListItem */
/*
* Create an end of a table
+ * DUMMY function
*/
void
vEndOfTable(diagram_type *pDiag)
{
- /* DUMMY */
+ TRACE_MSG("vEndOfTable");
} /* end of vEndTable */
/*
* Add a table row
+ * DUMMY function
*
* Returns TRUE when conversion type is XML
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:651,657 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:690,697
bAddTableRow(diagram_type *pDiag, char **aszColTxt,
int iNbrOfColumns, const short *asColumnWidth, UCHAR ucBorderInfo)
{
- /* DUMMY */
+ TRACE_MSG("bAddTableRow");
+
return FALSE;
} /* end of bAddTableRow */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:661,670 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:701,711
static void
vForceRedraw(diagram_type *pDiag)
{
- wimp_wstate tWindowState;
- wimp_redrawstr tRedraw;
+ window_state tWindowState;
+ window_redrawblock tRedraw;
+ int x0, y0, x1, y1;
- DBG_MSG("vForceRedraw");
+ TRACE_MSG("vForceRedraw");
fail(pDiag == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:671,748 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:712,763
DBG_DEC(pDiag->iScaleFactorCurr);
/* Read the size of the current diagram */
- draw_queryBox(&pDiag->tInfo, (draw_box *)&tRedraw.box, TRUE);
- tRedraw.w = pDiag->tMainWindow;
+ Drawfile_QueryBox(&pDiag->tInfo, &tRedraw.rect, TRUE);
/* Adjust the size of the work area */
- tRedraw.box.x0 = tRedraw.box.x0 * pDiag->iScaleFactorCurr / 100 - 1;
- tRedraw.box.y0 = tRedraw.box.y0 * pDiag->iScaleFactorCurr / 100 - 1;
- tRedraw.box.x1 = tRedraw.box.x1 * pDiag->iScaleFactorCurr / 100 + 1;
- tRedraw.box.y1 = tRedraw.box.y1 * pDiag->iScaleFactorCurr / 100 + 1;
+ x0 = tRedraw.rect.min.x * pDiag->iScaleFactorCurr / 100 - 1;
+ y0 = tRedraw.rect.min.y * pDiag->iScaleFactorCurr / 100 - 1;
+ x1 = tRedraw.rect.max.x * pDiag->iScaleFactorCurr / 100 + 1;
+ y1 = tRedraw.rect.max.y * pDiag->iScaleFactorCurr / 100 + 1;
/* Work area extension */
- tRedraw.box.x0 -= WORKAREA_EXTENSION;
- tRedraw.box.y0 -= WORKAREA_EXTENSION;
- tRedraw.box.x1 += WORKAREA_EXTENSION;
- tRedraw.box.y1 += WORKAREA_EXTENSION;
- wimpt_noerr(wimp_set_extent(&tRedraw));
+ x0 -= WORKAREA_EXTENSION;
+ y0 -= WORKAREA_EXTENSION;
+ x1 += WORKAREA_EXTENSION;
+ y1 += WORKAREA_EXTENSION;
+ Window_SetExtent(pDiag->tMainWindow, x0, y0, x1, y1);
/* Widen the box slightly to be sure all the edges are drawn */
- tRedraw.box.x0 -= 5;
- tRedraw.box.y0 -= 5;
- tRedraw.box.x1 += 5;
- tRedraw.box.y1 += 5;
+ x0 -= 5;
+ y0 -= 5;
+ x1 += 5;
+ y1 += 5;
/* Force the redraw */
- wimpt_noerr(wimp_force_redraw(&tRedraw));
+ Window_ForceRedraw(pDiag->tMainWindow, x0, y0, x1, y1);
/* Reopen the window to show the correct size */
- wimpt_noerr(wimp_get_wind_state(pDiag->tMainWindow, &tWindowState));
- tWindowState.o.behind = -1;
- wimpt_noerr(wimp_open_wind(&tWindowState.o));
+ Error_CheckFatal(Wimp_GetWindowState(pDiag->tMainWindow, &tWindowState));
+ tWindowState.openblock.behind = -1;
+ Error_CheckFatal(Wimp_OpenWindow(&tWindowState.openblock));
} /* end of vForceRedraw */
/*
- * bVerifyDiagram - Verify the diagram generated from the Word file
- *
- * returns TRUE if the diagram is correct
- */
- BOOL
- bVerifyDiagram(diagram_type *pDiag)
- {
- draw_error tError;
-
- fail(pDiag == NULL);
- DBG_MSG("bVerifyDiagram");
-
- if (draw_verify_diag(&pDiag->tInfo, &tError)) {
- return TRUE;
- }
- DBG_MSG("draw_verify_diag() failed");
- vPrintDrawError(&tError);
- return FALSE;
- } /* end of bVerifyDiagram */
-
- /*
* vShowDiagram - put the diagram on the screen
*/
void
vShowDiagram(diagram_type *pDiag)
{
- wimp_wstate tWindowState;
- wimp_redrawstr tRedraw;
+ wimp_box tRect;
+ int x0, y0, x1, y1;
+ TRACE_MSG("vShowDiagram");
+
fail(pDiag == NULL);
- DBG_MSG("vShowDiagram");
-
- wimpt_noerr(wimp_get_wind_state(pDiag->tMainWindow, &tWindowState));
- tWindowState.o.behind = -1;
- wimpt_noerr(wimp_open_wind(&tWindowState.o));
-
- draw_queryBox(&pDiag->tInfo, (draw_box *)&tRedraw.box, TRUE);
- tRedraw.w = pDiag->tMainWindow;
+ Window_Show(pDiag->tMainWindow, open_NEARLAST);
+ Drawfile_QueryBox(&pDiag->tInfo, &tRect, TRUE);
/* Work area extension */
- tRedraw.box.x0 -= WORKAREA_EXTENSION;
- tRedraw.box.y0 -= WORKAREA_EXTENSION;
- tRedraw.box.x1 += WORKAREA_EXTENSION;
- tRedraw.box.y1 += WORKAREA_EXTENSION;
- wimpt_noerr(wimp_set_extent(&tRedraw));
+ x0 = tRect.min.x - WORKAREA_EXTENSION;
+ y0 = tRect.min.y - WORKAREA_EXTENSION;
+ x1 = tRect.max.x + WORKAREA_EXTENSION;
+ y1 = tRect.max.y + WORKAREA_EXTENSION;
+ Window_SetExtent(pDiag->tMainWindow, x0, y0, x1, y1);
vForceRedraw(pDiag);
} /* end of vShowDiagram */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:749,917 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:764,915
/*
* vMainButtonClick - handle mouse buttons clicks for the main screen
*/
- static void
- vMainButtonClick(wimp_mousestr *m)
+ void
+ vMainButtonClick(mouse_block *pMouse)
{
- wimp_caretstr c;
- wimp_wstate ws;
+ caret_block tCaret;
+ window_state ws;
- fail(m == NULL);
+ TRACE_MSG("vMainButtonClick");
- NO_DBG_HEX(m->bbits);
- NO_DBG_DEC(m->i);
+ fail(pMouse == NULL);
- if (m->w >= 0 &&
- m->i == -1 &&
- ((m->bbits & wimp_BRIGHT) == wimp_BRIGHT ||
- (m->bbits & wimp_BLEFT) == wimp_BLEFT)) {
+ DBG_DEC(pMouse->button.data.select);
+ DBG_DEC(pMouse->button.data.adjust);
+ DBG_DEC(pMouse->window);
+ DBG_DEC(pMouse->icon);
+
+ if (pMouse->window >= 0 &&
+ pMouse->icon == -1 &&
+ (pMouse->button.data.select || pMouse->button.data.adjust)) {
/* Get the input focus */
- wimpt_noerr(wimp_get_wind_state(m->w, &ws));
- c.w = m->w;
- c.i = -1;
- c.x = m->x - ws.o.box.x0;
- c.y = m->y - ws.o.box.y1;
- c.height = (int)BIT(25);
- c.index = 0;
- wimpt_noerr(wimp_set_caret_pos(&c));
+ Error_CheckFatal(Wimp_GetWindowState(pMouse->window, &ws));
+ tCaret.window = pMouse->window;
+ tCaret.icon = -1;
+ tCaret.offset.x = pMouse->pos.x - ws.openblock.screenrect.min.x;
+ tCaret.offset.y = pMouse->pos.y - ws.openblock.screenrect.max.y;
+ tCaret.height = (int)BIT(25);
+ tCaret.index = 0;
+ Error_CheckFatal(Wimp_SetCaretPosition(&tCaret));
}
} /* end of vMainButtonClick */
/*
- * vMainKeyPressed - handle pressed keys for the main screen
+ * bMainKeyPressed - handle pressed keys for the main window
*/
- static void
- vMainKeyPressed(int chcode, wimp_caretstr *c, diagram_type *pDiag)
+ BOOL
+ bMainKeyPressed(event_pollblock *pEvent, void *pvReference)
{
- fail(c == NULL || pDiag == NULL);
- fail(c->w != pDiag->tMainWindow);
+ diagram_type *pDiag;
- switch (chcode) {
- case akbd_Ctl+akbd_Fn+2: /* Ctrl F2 */
- vDestroyDiagram(c->w, pDiag);
+ TRACE_MSG("bMainKeyPressed");
+
+ fail(pEvent == NULL);
+ fail(pEvent->type != event_KEY);
+ fail(pvReference == NULL);
+
+ pDiag = (diagram_type *)pvReference;
+
+ fail(pEvent->data.key.caret.window != pDiag->tMainWindow);
+
+
+ switch (pEvent->data.key.code) {
+ case keycode_CTRL_F2: /* Ctrl F2 */
+ bDestroyDiagram(pEvent, pvReference);
break;
- case akbd_Fn+3: /* F3 */
- vSaveDrawfile(pDiag);
+ case keycode_F3: /* F3 */
+ bSaveDrawfile(pEvent, pvReference);
break;
- case akbd_Sh+akbd_Fn+3: /* Shift F3 */
- vSaveTextfile(pDiag);
+ case keycode_SHIFT_F3: /* Shift F3 */
+ bSaveTextfile(pEvent, pvReference);
break;
default:
- DBG_DEC(chcode);
- wimpt_noerr(wimp_processkey(chcode));
+ DBG_DEC(pEvent->data.key.code);
+ Error_CheckFatal(Wimp_ProcessKey(pEvent->data.key.code));
}
- } /* end of vMainKeyPressed */
+ return TRUE;
+ } /* end of bMainKeyPressed */
/*
- * vRedrawMainWindow - redraw the main window
+ * bRedrawMainWindow - redraw the main window
*/
- static void
- vRedrawMainWindow(wimp_w tWindow, diagram_type *pDiag)
+ BOOL
+ bRedrawMainWindow(event_pollblock *pEvent, void *pvReference)
{
- wimp_redrawstr r;
- draw_error tError;
+ window_redrawblock tBlock;
+ diagram_type *pDiag;
+ drawfile_info *pInfo;
double dScaleFactor;
- draw_diag *pInfo;
BOOL bMore;
- fail(pDiag == NULL);
- fail(pDiag->tMainWindow != tWindow);
+ TRACE_MSG("bRedrawMainWindow");
+
+ fail(pEvent == NULL);
+ fail(pEvent->type != event_REDRAW);
+ fail(pvReference == NULL);
+
+ pDiag = (diagram_type *)pvReference;
+
+ fail(pDiag->tMainWindow != pEvent->data.openblock.window);
fail(pDiag->iScaleFactorCurr < MIN_SCALE_FACTOR);
fail(pDiag->iScaleFactorCurr > MAX_SCALE_FACTOR);
- fail(bDrawRenderDiag == NULL);
dScaleFactor = (double)pDiag->iScaleFactorCurr / 100.0;
pInfo = &pDiag->tInfo;
- r.w = tWindow;
- wimpt_noerr(wimp_redraw_wind(&r, &bMore));
+ tBlock.window = pEvent->data.openblock.window;
+ Error_CheckFatal(Wimp_RedrawWindow(&tBlock, &bMore));
+ /* If there is no real diagram just go thru the motions */
while (bMore) {
- if (pInfo->data != NULL) {
- if (!bDrawRenderDiag(pInfo,
- (draw_redrawstr *)&r,
- dScaleFactor,
- &tError)) {
- DBG_MSG("bDrawRenderDiag() failed");
- vPrintDrawError(&tError);
- }
+ if (pInfo->data != NULL && pInfo->length != 0) {
+ Error_CheckFatal(Drawfile_RenderDiagram(pInfo,
+ &tBlock, dScaleFactor));
}
- wimp_get_rectangle(&r, &bMore);
+ Error_CheckFatal(Wimp_GetRectangle(&tBlock, &bMore));
}
- } /* end of vRedrawMainWindow */
+ return TRUE;
+ } /* end of bRedrawMainWindow */
/*
- * vMainEventHandler - event handler for the main screen
+ * bScaleOpenAction - action to be taken when the Scale view window opens
*/
- void
- vMainEventHandler(wimp_eventstr *pEvent, void *pvHandle)
+ BOOL
+ bScaleOpenAction(event_pollblock *pEvent, void *pvReference)
{
+ window_state tWindowState;
diagram_type *pDiag;
+ TRACE_MSG("bScaleOpenAction");
+
fail(pEvent == NULL);
+ fail(pEvent->type != event_SEND);
+ fail(pEvent->data.message.header.action != message_MENUWARN);
+ fail(pvReference == NULL);
- pDiag = (diagram_type *)pvHandle;
+ pDiag = (diagram_type *)pvReference;
- switch (pEvent->e) {
- case wimp_ENULL:
- break;
- case wimp_EREDRAW:
- vRedrawMainWindow(pEvent->data.o.w, pDiag);
- break;
- case wimp_EOPEN:
- wimpt_noerr(wimp_open_wind(&pEvent->data.o));
- break;
- case wimp_ECLOSE:
- vDestroyDiagram(pEvent->data.o.w, pDiag);
- break;
- case wimp_EBUT:
- vMainButtonClick(&pEvent->data.but.m);
- break;
- case wimp_EKEY:
- vMainKeyPressed(pEvent->data.key.chcode,
- &pEvent->data.key.c, pDiag);
- break;
- default:
- break;
+ if (menu_currentopen != pDiag->pSaveMenu ||
+ pEvent->data.message.data.menuwarn.selection[0] != SAVEMENU_SCALEVIEW) {
+ return FALSE;
}
- } /* end of vMainEventHandler */
- /*
- * vScaleOpenAction - action to be taken when the Scale view window opens
- */
- void
- vScaleOpenAction(diagram_type *pDiag)
- {
- wimp_wstate tWindowState;
- wimp_mousestr tMouseInfo;
- int iMoveX, iMoveY;
-
- fail(pDiag == NULL);
-
- wimpt_noerr(wimp_get_wind_state(pDiag->tScaleWindow, &tWindowState));
- if ((tWindowState.flags & wimp_WOPEN) == wimp_WOPEN) {
+ Error_CheckFatal(Wimp_GetWindowState(pDiag->tScaleWindow,
+ &tWindowState));
+ if (tWindowState.flags.data.open) {
/* The window is already open */
- return;
+ return TRUE;
}
- DBG_MSG("vScaleOpenAction");
+ DBG_MSG("vScaleOpenAction for real");
- /* Allow the window to move in relation to the mouse position */
- wimpt_noerr(wimp_get_point_info(&tMouseInfo));
- iMoveX = tMouseInfo.x - tWindowState.o.box.x0 + 24;
- iMoveY = tMouseInfo.y - tWindowState.o.box.y1 + 20;
-
pDiag->iScaleFactorTemp = pDiag->iScaleFactorCurr;
vUpdateWriteableNumber(pDiag->tScaleWindow,
SCALE_SCALE_WRITEABLE, pDiag->iScaleFactorTemp);
+ Window_Show(pDiag->tScaleWindow, open_UNDERPOINTER);
+ return TRUE;
+ } /* end of bScaleOpenAction */
- tWindowState.o.box.x0 += iMoveX;
- tWindowState.o.box.x1 += iMoveX;
- tWindowState.o.box.y0 += iMoveY;
- tWindowState.o.box.y1 += iMoveY;
- tWindowState.o.behind = -1;
- wimpt_noerr(wimp_open_wind(&tWindowState.o));
- } /* end of vScaleOpenAction */
-
/*
* vSetTitle - set the title of a window
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:920,925 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:918,925
{
char szTitle[WINDOW_TITLE_LEN];
+ TRACE_MSG("vSetTitle");
+
fail(pDiag == NULL);
fail(pDiag->szFilename[0] == '\0');
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:931,954 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:931,955
szTitle[FILENAME_TITLE_LEN - 1] = OUR_ELLIPSIS;
}
- win_settitle(pDiag->tMainWindow, szTitle);
+ Window_SetTitle(pDiag->tMainWindow, szTitle);
} /* end of vSetTitle */
-
/*
* vScaleButtonClick - handle a mouse button click in the Scale view window
*/
- static void
- vScaleButtonClick(wimp_mousestr *m, diagram_type *pDiag)
+ void
+ vScaleButtonClick(mouse_block *pMouse, diagram_type *pDiag)
{
BOOL bCloseWindow, bRedraw;
- fail(m == NULL || pDiag == NULL);
- fail(m->w != pDiag->tScaleWindow);
+ TRACE_MSG("vScaleButtonClick");
+ fail(pMouse == NULL || pDiag == NULL);
+ fail(pMouse->window != pDiag->tScaleWindow);
+
bCloseWindow = FALSE;
bRedraw = FALSE;
- switch (m->i) {
+ switch (pMouse->icon) {
case SCALE_CANCEL_BUTTON:
bCloseWindow = TRUE;
pDiag->iScaleFactorTemp = pDiag->iScaleFactorCurr;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:971,982 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:972,983
pDiag->iScaleFactorTemp = 150;
break;
default:
- DBG_DEC(m->i);
+ DBG_DEC(pMouse->icon);
break;
}
if (bCloseWindow) {
/* Close the scale window */
- wimpt_noerr(wimp_close_wind(m->w));
+ Error_CheckFatal(Wimp_CloseWindow(pMouse->window));
if (bRedraw) {
/* Redraw the main window */
vSetTitle(pDiag);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:983,1021 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:984,1030
vForceRedraw(pDiag);
}
} else {
- vUpdateWriteableNumber(m->w,
+ vUpdateWriteableNumber(pMouse->window,
SCALE_SCALE_WRITEABLE,
pDiag->iScaleFactorTemp);
}
} /* end of vScaleButtonClick */
- static void
- vScaleKeyPressed(int chcode, wimp_caretstr *c, diagram_type *pDiag)
+ /*
+ * bScaleKeyPressed - handle pressed keys for the scale window
+ */
+ BOOL
+ bScaleKeyPressed(event_pollblock *pEvent, void *pvReference)
{
- wimp_icon tIcon;
+ icon_block tIcon;
+ diagram_type *pDiag;
+ caret_block *pCaret;
char *pcChar;
int iTmp;
- DBG_MSG("vScaleKeyPressed");
+ TRACE_MSG("bScaleKeyPressed");
- fail(c == NULL || pDiag == NULL);
- fail(c->w != pDiag->tScaleWindow);
+ fail(pEvent == NULL);
+ fail(pEvent->type != event_KEY);
+ fail(pvReference == NULL);
- DBG_DEC_C(c->i != SCALE_SCALE_WRITEABLE, c->i);
- DBG_DEC_C(c->i == SCALE_SCALE_WRITEABLE, chcode);
+ pCaret = &pEvent->data.key.caret;
+ pDiag = (diagram_type *)pvReference;
- if (chcode != '\r' ||
- c->w != pDiag->tScaleWindow ||
- c->i != SCALE_SCALE_WRITEABLE) {
- wimpt_noerr(wimp_processkey(chcode));
- return;
+ fail(pEvent->data.key.caret.window != pDiag->tScaleWindow);
+
+ DBG_DEC_C(pCaret->icon != SCALE_SCALE_WRITEABLE, pCaret->icon);
+ DBG_DEC_C(pCaret->icon == SCALE_SCALE_WRITEABLE, pEvent->data.key.code);
+
+ if (pEvent->data.key.code != '\r' ||
+ pCaret->icon != SCALE_SCALE_WRITEABLE) {
+ Error_CheckFatal(Wimp_ProcessKey(pEvent->data.key.code));
+ return TRUE;
}
- wimpt_noerr(wimp_get_icon_info(c->w, c->i, &tIcon));
- if ((tIcon.flags & (wimp_ITEXT|wimp_INDIRECT)) !=
- (wimp_ITEXT|wimp_INDIRECT)) {
- werr(1, "Icon %d must be indirected text", (int)c->i);
- return;
+ Error_CheckFatal(Wimp_GetIconState(pCaret->window, pCaret->icon, &tIcon));
+ if (!tIcon.flags.data.text || !tIcon.flags.data.indirected) {
+ werr(1, "Icon %d must be indirected text", (int)pCaret->icon);
}
iTmp = (int)strtol(tIcon.data.indirecttext.buffer, &pcChar, 10);
if (*pcChar != '\0' && *pcChar != '\r') {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/draw.c:1029,1076 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/draw.c:1038,1047
}
pDiag->iScaleFactorCurr = pDiag->iScaleFactorTemp;
/* Close the scale window */
- wimpt_noerr(wimp_close_wind(c->w));
+ Error_CheckFatal(Wimp_CloseWindow(pCaret->window));
/* Redraw the main window */
vSetTitle(pDiag);
vForceRedraw(pDiag);
- } /* end of vScaleKeyPressed */
+ return TRUE;
+ } /* end of bScaleKeyPressed */
- /*
- * vScaleEventHandler - event handler for the scale view screen
- */
- void
- vScaleEventHandler(wimp_eventstr *pEvent, void *pvHandle)
- {
- diagram_type *pDiag;
-
- DBG_MSG("vScaleEventHandler");
-
- fail(pEvent == NULL);
-
- DBG_DEC(pEvent->e);
-
- pDiag = (diagram_type *)pvHandle;
-
- switch (pEvent->e) {
- case wimp_ENULL:
- break;
- case wimp_EREDRAW:
- /* handled by the WIMP */
- break;
- case wimp_EOPEN:
- wimpt_noerr(wimp_open_wind(&pEvent->data.o));
- break;
- case wimp_ECLOSE:
- wimpt_noerr(wimp_close_wind(pEvent->data.o.w));
- break;
- case wimp_EBUT:
- vScaleButtonClick(&pEvent->data.but.m, pDiag);
- break;
- case wimp_EKEY:
- vScaleKeyPressed(pEvent->data.key.chcode,
- &pEvent->data.key.c, pDiag);
- break;
- default:
- break;
- }
- } /* end of vScaleEventHandler */
[jmk] --rw-rw-r-- M 499692 jmk sys 26682 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1012 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.h
[jmk] --rw-rw-r-- M 499692 jmk sys 1012 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.h
[jmk] --rw-rw-r-- M 499692 jmk sys 10881 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12215 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.h
[jmk] --rw-rw-r-- M 499692 jmk sys 613 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.c
[jmk] --rw-rw-r-- M 499692 jmk sys 613 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.c
[jmk] --rw-rw-r-- M 499692 jmk sys 401 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.h
[jmk] --rw-rw-r-- M 499692 jmk sys 401 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3797 Jan 14 12:57 sys/src/cmd/aux/antiword/finddata.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3797 Jan 14 12:57 sys/src/cmd/aux/antiword/finddata.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7321 Jan 14 12:57 sys/src/cmd/aux/antiword/findtext.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/findtext.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/findtext.c:1,6
/*
* findtext.c
- * Copyright (C) 1998-2001 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Find the blocks that contain the text of MS Word files
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/findtext.c:183,194 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/findtext.c:183,193
UCHAR *aucBuffer;
ULONG ulTextOffset, ulBeginTextInfo;
ULONG ulTotLength, ulLen;
- ULONG ulTableStartBlock, ulTableSize;
long lIndex, lPieces, lOff;
size_t tTextInfoLen, tBlockDepotLen, tBlockSize;
int iType, iLen;
BOOL bUsesUnicode;
- USHORT usDocStatus, usPropMod;
+ USHORT usPropMod;
DBG_MSG("bGet8DocumentText");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/findtext.c:201,222 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/findtext.c:200,212
tTextInfoLen = (size_t)ulGetLong(0x1a6, aucHeader); /* lcbClx */
DBG_DEC(tTextInfoLen);
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_DEC(ulTableStartBlock);
+ DBG_DEC(pPPS->tTable.ulSB);
+ DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
return FALSE;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/findtext.c:228,234 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/findtext.c:218,224
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tTextInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginTextInfo, tTextInfoLen)) {
aucBuffer = xfree(aucBuffer);
[jmk] --rw-rw-r-- M 499692 jmk sys 7321 Jan 14 12:57 sys/src/cmd/aux/antiword/findtext.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3691 Jan 14 12:57 sys/src/cmd/aux/antiword/fmt_text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 126349 Jan 14 12:57 sys/src/cmd/aux/antiword/fontinfo.h
[jmk] --rw-rw-r-- M 499692 jmk sys 126349 Jan 14 12:57 sys/src/cmd/aux/antiword/fontinfo.h
[jmk] --rw-rw-r-- M 499692 jmk sys 4339 Jan 14 12:57 sys/src/cmd/aux/antiword/fontlist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:1,6
/*
* fontlist.c
- * Copyright (C) 1998-2002 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy a list of Word font information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:11,19 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:11,28
#include "antiword.h"
+ /*
+ * Private structure to hide the way the information
+ * is stored from the rest of the program
+ */
+ typedef struct font_desc_tag {
+ font_block_type tInfo;
+ struct font_desc_tag *pNext;
+ } font_mem_type;
+
/* Variables needed to write the Font Information List */
- static font_desc_type *pAnchor = NULL;
- static font_desc_type *pFontLast = NULL;
+ static font_mem_type *pAnchor = NULL;
+ static font_mem_type *pFontLast = NULL;
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:22,28 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:31,37
void
vDestroyFontInfoList(void)
{
- font_desc_type *pCurr, *pNext;
+ font_mem_type *pCurr, *pNext;
DBG_MSG("vDestroyFontInfoList");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:83,89 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:92,98
void
vAdd2FontInfoList(const font_block_type *pFontBlock)
{
- font_desc_type *pListMember;
+ font_mem_type *pListMember;
fail(pFontBlock == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:119,125 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:128,134
}
/* Create list member */
- pListMember = xmalloc(sizeof(font_desc_type));
+ pListMember = xmalloc(sizeof(font_mem_type));
/* Fill the list member */
pListMember->tInfo = *pFontBlock;
pListMember->pNext = NULL;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:141,147 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:150,156
const font_block_type *
pGetNextFontInfoListItem(const font_block_type *pCurr)
{
- const font_desc_type *pRecord;
+ const font_mem_type *pRecord;
size_t tOffset;
if (pCurr == NULL) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fontlist.c:152,160 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fontlist.c:161,169
/* The first record is the only one without a predecessor */
return &pAnchor->tInfo;
}
- tOffset = offsetof(font_desc_type, tInfo);
+ tOffset = offsetof(font_mem_type, tInfo);
/* Many casts to prevent alignment warnings */
- pRecord = (font_desc_type *)(void *)((char *)pCurr - tOffset);
+ pRecord = (font_mem_type *)(void *)((char *)pCurr - tOffset);
fail(pCurr != &pRecord->tInfo);
if (pRecord->pNext == NULL) {
/* The last record has no successor */
[jmk] --rw-rw-r-- M 499692 jmk sys 4339 Jan 14 12:57 sys/src/cmd/aux/antiword/fontlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 27501 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:1,6
/*
* fonts.c
- * Copyright (C) 1998-2002 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to deal with fonts (generic)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:86,91 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:86,140
} /* end of iFontname2Fontnumber */
/*
+ * szGetDefaultFont - get the default font that matches the parameters
+ */
+ static const char *
+ szGetDefaultFont(UCHAR ucFFN, int iEmphasis)
+ {
+ UCHAR ucPrq, ucFf;
+
+ fail(iEmphasis < 0 || iEmphasis > 3);
+
+ ucPrq = ucFFN & 0x03;
+ ucFf = (ucFFN & 0x70) >> 4;
+ NO_DBG_DEC(ucPrq);
+ NO_DBG_DEC(ucFf);
+ if (ucPrq == PITCH_FIXED) {
+ /* Set to the default monospaced font */
+ switch (iEmphasis) {
+ case 1: return FONT_MONOSPACED_BOLD;
+ case 2: return FONT_MONOSPACED_ITALIC;
+ case 3: return FONT_MONOSPACED_BOLDITALIC;
+ default: return FONT_MONOSPACED_PLAIN;
+ }
+ } else if (ucFf == FAMILY_ROMAN) {
+ /* Set to the default serif font */
+ switch (iEmphasis) {
+ case 1: return FONT_SERIF_BOLD;
+ case 2: return FONT_SERIF_ITALIC;
+ case 3: return FONT_SERIF_BOLDITALIC;
+ default: return FONT_SERIF_PLAIN;
+ }
+ } else if (ucFf == FAMILY_SWISS) {
+ /* Set to the default sans serif font */
+ switch (iEmphasis) {
+ case 1: return FONT_SANS_SERIF_BOLD;
+ case 2: return FONT_SANS_SERIF_ITALIC;
+ case 3: return FONT_SANS_SERIF_BOLDITALIC;
+ default: return FONT_SANS_SERIF_PLAIN;
+ }
+ } else {
+ /* Set to the default default font */
+ switch (iEmphasis) {
+ case 1: return FONT_SERIF_BOLD;
+ case 2: return FONT_SERIF_ITALIC;
+ case 3: return FONT_SERIF_BOLDITALIC;
+ default: return FONT_SERIF_PLAIN;
+ }
+ }
+ } /* end of szGetDefaultFont */
+
+ /*
* See if the fontname from the Word file matches the fontname from the
* font translation file.
* If iBytesPerChar is one than aucWord is in ISO-8859-x (Word 2/6/7),
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:112,118 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:161,167
} /* end of bFontEqual */
/*
- *
+ * vFontname2Table - add fontnames to the font table
*/
static void
vFontname2Table(const UCHAR *aucFont, const UCHAR *aucAltFont,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:121,127 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:170,175
font_table_type *pFontTableRecord)
{
BOOL bMatchFound;
- UCHAR ucPrq, ucFf;
fail(aucFont == NULL || aucFont[0] == 0);
fail(aucAltFont != NULL && aucAltFont[0] == 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:145,182 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:193,199
* szWordFont contains a "*", so szOurFont will contain the
* "default default" font. See if we can do better than that.
*/
- ucPrq = ucFFN & 0x03;
- ucFf = (ucFFN & 0x70) >> 4;
- NO_DBG_DEC(ucPrq);
- NO_DBG_DEC(ucFf);
- if (ucPrq == PITCH_FIXED) {
- /* Set to the default monospaced font */
- switch (iEmphasis) {
- case 0: szOurFont = FONT_MONOSPACED_PLAIN; break;
- case 1: szOurFont = FONT_MONOSPACED_BOLD; break;
- case 2: szOurFont = FONT_MONOSPACED_ITALIC; break;
- case 3: szOurFont = FONT_MONOSPACED_BOLDITALIC; break;
- default: break;
- }
- } else if (ucFf == FAMILY_ROMAN) {
- /* Set to the default serif font */
- switch (iEmphasis) {
- case 0: szOurFont = FONT_SERIF_PLAIN; break;
- case 1: szOurFont = FONT_SERIF_BOLD; break;
- case 2: szOurFont = FONT_SERIF_ITALIC; break;
- case 3: szOurFont = FONT_SERIF_BOLDITALIC; break;
- default: break;
- }
- } else if (ucFf == FAMILY_SWISS) {
- /* Set to the default sans serif font */
- switch (iEmphasis) {
- case 0: szOurFont = FONT_SANS_SERIF_PLAIN; break;
- case 1: szOurFont = FONT_SANS_SERIF_BOLD; break;
- case 2: szOurFont = FONT_SANS_SERIF_ITALIC; break;
- case 3: szOurFont = FONT_SANS_SERIF_BOLDITALIC; break;
- default: break;
- }
- }
+ szOurFont = szGetDefaultFont(ucFFN, iEmphasis);
bMatchFound = TRUE;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:205,210 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:222,229
sizeof(pFontTableRecord->szOurFontname) - 1] = '\0';
NO_DBG_MSG(pFontTableRecord->szWordFontname);
NO_DBG_MSG(pFontTableRecord->szOurFontname);
+ pFontTableRecord->ucFFN = ucFFN;
+ pFontTableRecord->ucEmphasis = (UCHAR)iEmphasis;
}
} /* end of vFontname2Table */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:270,275 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:289,297
return;
}
+ /* See if we must add a font for our tables */
+ bMustAddTableFont = TRUE;
+
#if 0
DBG_MSG("Before");
DBG_DEC(tFontTableRecords);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:283,295 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:305,316
}
#endif /* DEBUG */
+ /* See which fonts/styles we really need */
+
/* Default font/style is by definition in use */
pFontTable[0].ucInUse = 1;
- /* See which fonts/styles are really being used */
- bMustAddTableFont = TRUE;
-
- /* The fonts/styles that will be used */
+ /* Make InUse 1 for all the fonts/styles that WILL be used */
pFont = NULL;
while((pFont = pGetNextFontInfoListItem(pFont)) != NULL) {
pTmp = pFontTable + 4 * (int)pFont->ucFontNumber;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:309,315 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:330,336
pTmp->ucInUse = 1;
}
- /* The fonts/styles that might be used */
+ /* Make InUse 1 for all the fonts/styles that MIGHT be used */
pStyle = NULL;
while((pStyle = pGetNextStyleInfoListItem(pStyle)) != NULL) {
vFillFontFromStylesheet(pStyle->usIstdNext, &tFontNext);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:345,355 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:366,378
*(pTmp - iUnUsed) = *pTmp;
}
}
+ fail(iUnUsed < 0);
+ fail(tFontTableRecords <= (size_t)iUnUsed);
tFontTableRecords -= (size_t)iUnUsed;
- fail(tFontTableRecords == 0);
if (bMustAddTableFont) {
pTmp = pFontTable + tFontTableRecords;
+ fail(pTmp <= pFontTable);
pTmp->ucWordFontNumber = (pTmp - 1)->ucWordFontNumber + 1;
pTmp->usFontStyle = FONT_REGULAR;
pTmp->ucInUse = 1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:460,465 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:483,491
vCreateFontTable();
/* Read the font translation file */
+ iItalic = 0;
+ iBold = 0;
+ iSpecial = 0;
while (bReadFontFile(pFontTableFile, szWordFont,
&iItalic, &iBold, szOurFont, &iSpecial)) {
iEmphasis = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:494,500 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:520,526
* vCreate2FontTable - create a font table from WinWord 1/2
*/
void
- vCreate2FontTable(FILE *pFile, const UCHAR *aucHeader)
+ vCreate2FontTable(FILE *pFile, int iWordVersion, const UCHAR *aucHeader)
{
FILE *pFontTableFile;
font_table_type *pTmp;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:502,513 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:528,540
UCHAR *aucBuffer;
ULONG ulBeginFontInfo;
size_t tFontInfoLen;
- int iPos, iRecLen;
+ int iPos, iOff, iRecLen;
int iBold, iItalic, iSpecial, iEmphasis;
UCHAR ucFFN;
char szWordFont[FONT_LINE_LENGTH], szOurFont[FONT_LINE_LENGTH];
fail(pFile == NULL || aucHeader == NULL);
+ fail(iWordVersion != 1 && iWordVersion != 2);
tFontTableRecords = 0;
pFontTable = xfree(pFontTable);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:522,532 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:549,558
DBG_HEX(ulBeginFontInfo);
tFontInfoLen = (size_t)usGetWord(0xb6, aucHeader); /* cbSttbfffn */
DBG_DEC(tFontInfoLen);
- fail(tFontInfoLen < 6);
- if (ulBeginFontInfo > (ULONG)LONG_MAX) {
+ if (ulBeginFontInfo > (ULONG)LONG_MAX || tFontInfoLen == 0) {
/* Don't ask me why this is needed */
- DBG_HEX(ulBeginFontInfo);
+ DBG_HEX_C(tFontInfoLen != 0, ulBeginFontInfo);
(void)fclose(pFontTableFile);
return;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:541,560 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:567,640
DBG_DEC(usGetWord(0, aucBuffer));
/* Compute the maximum number of entries in the font table */
- tFontTableRecords = 0;
+ if (iWordVersion == 1) {
+ fail(tFontInfoLen < 2);
+ /* WinWord 1 has three implicit fonts */
+ tFontTableRecords = 3;
+ iOff = 2;
+ } else {
+ fail(tFontInfoLen < 6);
+ /* WinWord 2 and up have no implicit fonts */
+ tFontTableRecords = 0;
+ iOff = 3;
+ }
iPos = 2;
- while (iPos + 3 < (int)tFontInfoLen) {
+ while (iPos + iOff < (int)tFontInfoLen) {
iRecLen = (int)ucGetByte(iPos, aucBuffer);
NO_DBG_DEC(iRecLen);
- NO_DBG_MSG(aucBuffer + iPos + 3);
+ NO_DBG_MSG(aucBuffer + iPos + iOff);
iPos += iRecLen + 1;
tFontTableRecords++;
}
- tFontTableRecords *= 4; /* Plain, Bold, Italic and Bold/italic */
+ tFontTableRecords *= 4; /* Plain, Bold, Italic and Bold/Italic */
tFontTableRecords++; /* One extra for the table-font */
vCreateFontTable();
+ /* Add the tree implicit fonts (in four variations) */
+ if (iWordVersion == 1) {
+ fail(tFontTableRecords < 13);
+ vFontname2Table((UCHAR *)"Tms Rmn", NULL, 1, 0,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Roman", pFontTable + 0);
+ vFontname2Table((UCHAR *)"Tms Rmn", NULL, 1, 1,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Bold", pFontTable + 1);
+ vFontname2Table((UCHAR *)"Tms Rmn", NULL, 1, 2,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Italic", pFontTable + 2);
+ vFontname2Table((UCHAR *)"Tms Rmn", NULL, 1, 3,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-BoldItalic", pFontTable + 3);
+ vFontname2Table((UCHAR *)"Symbol", NULL, 1, 0,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Roman", pFontTable + 4);
+ vFontname2Table((UCHAR *)"Symbol", NULL, 1, 1,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Bold", pFontTable + 5);
+ vFontname2Table((UCHAR *)"Symbol", NULL, 1, 2,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-Italic", pFontTable + 6);
+ vFontname2Table((UCHAR *)"Symbol", NULL, 1, 3,
+ (UCHAR)((FAMILY_ROMAN << 4) | PITCH_VARIABLE),
+ "*", "Times-BoldItalic", pFontTable + 7);
+ vFontname2Table((UCHAR *)"Helv", NULL, 1, 0,
+ (UCHAR)((FAMILY_SWISS << 4) | PITCH_VARIABLE),
+ "*", "Helvetica", pFontTable + 8);
+ vFontname2Table((UCHAR *)"Helv", NULL, 1, 1,
+ (UCHAR)((FAMILY_SWISS << 4) | PITCH_VARIABLE),
+ "*", "Helvetica-Bold", pFontTable + 9);
+ vFontname2Table((UCHAR *)"Helv", NULL, 1, 2,
+ (UCHAR)((FAMILY_SWISS << 4) | PITCH_VARIABLE),
+ "*", "Helvetica-Oblique", pFontTable + 10);
+ vFontname2Table((UCHAR *)"Helv", NULL, 1, 3,
+ (UCHAR)((FAMILY_SWISS << 4) | PITCH_VARIABLE),
+ "*", "Helvetica-BoldOblique", pFontTable + 11);
+ }
+
/* Read the font translation file */
+ iItalic = 0;
+ iBold = 0;
+ iSpecial = 0;
while (bReadFontFile(pFontTableFile, szWordFont,
&iItalic, &iBold, szOurFont, &iSpecial)) {
iEmphasis = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:566,575 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:646,655
}
pTmp = pFontTable + iEmphasis;
iPos = 2;
- while (iPos + 3 < (int)tFontInfoLen) {
+ while (iPos + iOff < (int)tFontInfoLen) {
iRecLen = (int)ucGetByte(iPos, aucBuffer);
ucFFN = ucGetByte(iPos + 1, aucBuffer);
- aucFont = aucBuffer + iPos + 3;
+ aucFont = aucBuffer + iPos + iOff;
vFontname2Table(aucFont, NULL, 1, iEmphasis,
ucFFN, szWordFont, szOurFont, pTmp);
pTmp += 4;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:647,652 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:727,735
vCreateFontTable();
/* Read the font translation file */
+ iItalic = 0;
+ iBold = 0;
+ iSpecial = 0;
while (bReadFontFile(pFontTableFile, szWordFont,
&iItalic, &iBold, szOurFont, &iSpecial)) {
iEmphasis = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:696,706 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:779,787
UCHAR *aucFont, *aucAltFont;
UCHAR *aucBuffer;
ULONG ulBeginFontInfo;
- ULONG ulTableSize, ulTableStartBlock;
size_t tFontInfoLen, tBlockDepotLen, tBlockSize;
int iPos, iRecLen, iOffsetAltName;
int iBold, iItalic, iSpecial, iEmphasis;
- USHORT usDocStatus;
UCHAR ucFFN;
char szWordFont[FONT_LINE_LENGTH], szOurFont[FONT_LINE_LENGTH];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:722,745 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:803,817
DBG_DEC(tFontInfoLen);
fail(tFontInfoLen < 46);
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_DEC(ulTableStartBlock);
+ DBG_DEC(pPPS->tTable.ulSB);
+ DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
DBG_MSG("No fontname table");
(void)fclose(pFontTableFile);
return;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:751,757 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:823,829
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tFontInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginFontInfo, tFontInfoLen)) {
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:767,772 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:839,847
vCreateFontTable();
/* Read the font translation file */
+ iItalic = 0;
+ iBold = 0;
+ iSpecial = 0;
while (bReadFontFile(pFontTableFile, szWordFont,
&iItalic, &iBold, szOurFont, &iSpecial)) {
iEmphasis = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:821,837 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:896,920
const font_table_type *
pGetNextFontTableRecord(const font_table_type *pRecordCurr)
{
- int iIndexCurr;
+ size_t tIndexCurr;
if (pRecordCurr == NULL) {
- /* No current record, so start with the first */
+ /* No current record, so start with the first one */
return &pFontTable[0];
}
- iIndexCurr = pRecordCurr - pFontTable;
- if (iIndexCurr + 1 < (int)tFontTableRecords) {
+ if (pRecordCurr < pFontTable ||
+ pRecordCurr >= pFontTable + tFontTableRecords) {
+ /* Not a pointer in the array */
+ DBG_HEX(pRecordCurr);
+ DBG_HEX(pFontTable);
+ return NULL;
+ }
+
+ tIndexCurr = (size_t)(pRecordCurr - pFontTable);
+ if (tIndexCurr + 1 < tFontTableRecords) {
/* There is a next record, so return it */
- return &pFontTable[iIndexCurr + 1];
+ return &pFontTable[tIndexCurr + 1];
}
/* There is no next record */
return NULL;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts.c:847,849 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts.c:930,1018
{
return tFontTableRecords;
} /* end of tGetFontTableLength */
+
+ #if !defined(__riscos)
+ /*
+ * vCorrect4PDF - only include PDF default fonts
+ */
+ static void
+ vCorrect4PDF(void)
+ {
+ font_table_type *pTmp;
+ const char *szOurFont;
+
+ for (pTmp = pFontTable; pTmp < pFontTable + tFontTableRecords; pTmp++) {
+ if (STRCEQ(pTmp->szOurFontname, FONT_MONOSPACED_PLAIN) ||
+ STRCEQ(pTmp->szOurFontname, FONT_MONOSPACED_BOLD) ||
+ STRCEQ(pTmp->szOurFontname, FONT_MONOSPACED_ITALIC) ||
+ STRCEQ(pTmp->szOurFontname, FONT_MONOSPACED_BOLDITALIC) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SERIF_PLAIN) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SERIF_BOLD) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SERIF_ITALIC) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SERIF_BOLDITALIC) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SANS_SERIF_PLAIN) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SANS_SERIF_BOLD) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SANS_SERIF_ITALIC) ||
+ STRCEQ(pTmp->szOurFontname, FONT_SANS_SERIF_BOLDITALIC)) {
+ /* Already a default font */
+ continue;
+ }
+ szOurFont =
+ szGetDefaultFont(pTmp->ucFFN, (int)pTmp->ucEmphasis);
+ (void)strncpy(pTmp->szOurFontname, szOurFont,
+ sizeof(pTmp->szOurFontname) - 1);
+ pTmp->szOurFontname[sizeof(pTmp->szOurFontname) - 1] = '\0';
+ }
+ } /* end of vCorrect4PDF */
+
+ /*
+ * vCorrect4CyrPS - only include monospaced fonts
+ */
+ static void
+ vCorrect4CyrPS(void)
+ {
+ font_table_type *pTmp;
+ const char *szOurFont;
+ UCHAR ucFFN;
+
+ ucFFN = (FAMILY_UNKNOWN << 4) | PITCH_FIXED;
+ for (pTmp = pFontTable; pTmp < pFontTable + tFontTableRecords; pTmp++) {
+ szOurFont = szGetDefaultFont(ucFFN, (int)pTmp->ucEmphasis);
+ (void)strncpy(pTmp->szOurFontname, szOurFont,
+ sizeof(pTmp->szOurFontname) - 1);
+ pTmp->szOurFontname[sizeof(pTmp->szOurFontname) - 1] = '\0';
+ }
+ } /* end of vCorrect4CyrPS */
+ #endif /* __riscos */
+
+ /*
+ * vCorrectFontTable - correct the font table in special cases
+ */
+ void
+ vCorrectFontTable(conversion_type eConversionType, encoding_type eEncoding)
+ {
+ #if !defined(__riscos)
+ if (eConversionType == conversion_pdf) {
+ vCorrect4PDF();
+ }
+ if (eConversionType == conversion_ps &&
+ eEncoding == encoding_cyrillic) {
+ vCorrect4CyrPS();
+ }
+ #endif /* __riscos */
+ } /* end of vCorrectFontTable */
+
+ /*
+ * lComputeSpaceWidth - compute the width of a space character
+ *
+ * Returns the space width in millipoints
+ */
+ long
+ lComputeSpaceWidth(drawfile_fontref tFontRef, USHORT usFontSize)
+ {
+ char szSpace[] = " ";
+
+ fail(usFontSize < MIN_FONT_SIZE || usFontSize > MAX_FONT_SIZE);
+
+ return lComputeStringWidth(szSpace, 1, tFontRef, usFontSize);
+ } /* end of lComputeSpaceWidth */
[jmk] --rw-rw-r-- M 499692 jmk sys 27501 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5843 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_r.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:8,16 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:8,18
#include <stdlib.h>
#include <string.h>
+ #include "DeskLib:Font.h"
+ #include "drawfile.h"
#include "antiword.h"
- static font tFontCurr = (font)-1;
+ static font_handle tFontCurr = (font_handle)-1;
/*
* pOpenFontTableFile - open the Font translation file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:97,110 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:99,112
NO_DBG_MSG("vCloseFont");
- if (tFontCurr == (font)-1) {
+ if (tFontCurr == (font_handle)-1) {
return;
}
- e = font_lose(tFontCurr);
+ e = Font_LoseFont(tFontCurr);
if (e != NULL) {
werr(0, "Close font error %d: %s", e->errnum, e->errmess);
}
- tFontCurr = -1;
+ tFontCurr = (font_handle)-1;
} /* end of vCloseFont */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:112,123 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:114,125
*
* Returns the font reference number for use in a draw file
*/
- draw_fontref
+ drawfile_fontref
tOpenFont(UCHAR ucWordFontNumber, USHORT usFontStyle, USHORT usWordFontSize)
{
os_error *e;
const char *szOurFontname;
- font tFont;
+ font_handle tFont;
int iFontnumber;
NO_DBG_MSG("tOpenFont");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:132,144 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:134,146
iFontnumber = iGetFontByNumber(ucWordFontNumber, usFontStyle);
szOurFontname = szGetOurFontname(iFontnumber);
if (szOurFontname == NULL || szOurFontname[0] == '\0') {
- tFontCurr = (font)-1;
- return (draw_fontref)0;
+ tFontCurr = (font_handle)-1;
+ return (byte)0;
}
NO_DBG_MSG(szOurFontname);
- e = font_find((char *)szOurFontname,
+ e = Font_FindFont(&tFont, (char *)szOurFontname,
(int)usWordFontSize * 8, (int)usWordFontSize * 8,
- 0, 0, &tFont);
+ 0, 0);
if (e != NULL) {
switch (e->errnum) {
case 523:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:149,160 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:151,162
e->errnum, e->errmess);
break;
}
- tFontCurr = (font)-1;
- return (draw_fontref)0;
+ tFontCurr = (font_handle)-1;
+ return (drawfile_fontref)0;
}
tFontCurr = tFont;
NO_DBG_DEC(tFontCurr);
- return (draw_fontref)(iFontnumber + 1);
+ return (drawfile_fontref)(iFontnumber + 1);
} /* end of tOpenFont */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:162,168 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:164,170
*
* Returns the font reference number for use in a draw file
*/
- draw_fontref
+ drawfile_fontref
tOpenTableFont(USHORT usWordFontSize)
{
int iWordFontnumber;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:172,179 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:174,181
iWordFontnumber = iFontname2Fontnumber(TABLE_FONT, FONT_REGULAR);
if (iWordFontnumber < 0 || iWordFontnumber > (int)UCHAR_MAX) {
DBG_DEC(iWordFontnumber);
- tFontCurr = (font)-1;
- return (draw_fontref)0;
+ tFontCurr = (font_handle)-1;
+ return (drawfile_fontref)0;
}
return tOpenFont((UCHAR)iWordFontnumber, FONT_REGULAR, usWordFontSize);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:186,192 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:188,194
*/
long
lComputeStringWidth(const char *szString, size_t tStringLength,
- draw_fontref tFontRef, USHORT usFontSize)
+ drawfile_fontref tFontRef, USHORT usFontSize)
{
font_string tStr;
os_error *e;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:202,208 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:204,210
/* Font_strwidth doesn't like control characters */
return 0;
}
- if (tFontCurr == (font)-1) {
+ if (tFontCurr == (font_handle)-1) {
/* No current font, use systemfont */
return lChar2MilliPoints(tStringLength);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_r.c:211,217 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_r.c:213,219
tStr.y = INT_MAX;
tStr.split = -1;
tStr.term = tStringLength;
- e = font_strwidth(&tStr);
+ e = Font_StringWidth(&tStr);
if (e == NULL) {
return (long)tStr.x;
}
[jmk] --rw-rw-r-- M 499692 jmk sys 5843 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_r.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7542 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_u.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:1,6
/*
* fonts_u.c
- * Copyright (C) 1999-2002 A.J. van Os; Released under GPL
+ * Copyright (C) 1999-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to deal with fonts (Unix version)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:27,37 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:27,39
pOpenFontTableFile(void)
{
FILE *pFile;
- const char *szHome, *szAntiword;
- const char *szGlobalFile;
+ const char *szHome, *szAntiword, *szGlobalFile;
char szEnvironmentFile[PATH_MAX+1];
char szLocalFile[PATH_MAX+1];
+ szEnvironmentFile[0] = '\0';
+ szLocalFile[0] = '\0';
+
/* Try the environment version of the fontnames file */
szAntiword = szGetAntiwordDirectory();
if (szAntiword != NULL && szAntiword[0] != '\0') {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:47,53 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:49,55
FILE_SEPARATOR FONTNAMES_FILE);
DBG_MSG(szEnvironmentFile);
- pFile = fopen(szLocalFile, "r");
+ pFile = fopen(szEnvironmentFile, "r");
if (pFile != NULL) {
return pFile;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:81,90 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:83,100
return pFile;
}
- werr(0, "I can not open your fontnames file.\n"
- "Neither '%s' nor\n"
- "'%s' can be opened for reading.",
- szLocalFile, szGlobalFile);
+ if (szEnvironmentFile[0] != '\0') {
+ werr(0, "I can not open your fontnames file.\n"
+ "Neither '%s' nor\n"
+ "'%s' nor\n"
+ "'%s' can be opened for reading.",
+ szEnvironmentFile, szLocalFile, szGlobalFile);
+ } else {
+ werr(0, "I can not open your fontnames file.\n"
+ "Neither '%s' nor\n"
+ "'%s' can be opened for reading.",
+ szLocalFile, szGlobalFile);
+ }
return NULL;
} /* end of pOpenFontTableFile */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:96,103 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:106,113
{
NO_DBG_MSG("vCloseFont");
/* For safety: to be overwritten at the next call of tOpenfont() */
- bUsePlainText = TRUE;
eEncoding = encoding_neutral;
+ bUsePlainText = TRUE;
} /* end of vCloseFont */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:105,116 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:115,127
*
* Returns the font reference number
*/
- draw_fontref
+ drawfile_fontref
tOpenFont(UCHAR ucWordFontNumber, USHORT usFontStyle, USHORT usWordFontSize)
{
options_type tOptions;
const char *szOurFontname;
- int iIndex, iFontnumber;
+ size_t tIndex;
+ int iFontnumber;
NO_DBG_MSG("tOpenFont");
NO_DBG_DEC(ucWordFontNumber);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:122,134 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:133,146
NO_DBG_HEX(usFontStyle);
vGetOptions(&tOptions);
- bUsePlainText = tOptions.eConversionType != conversion_draw &&
- tOptions.eConversionType != conversion_ps;
eEncoding = tOptions.eEncoding;
+ bUsePlainText = tOptions.eConversionType != conversion_draw &&
+ tOptions.eConversionType != conversion_ps &&
+ tOptions.eConversionType != conversion_pdf;
if (bUsePlainText) {
/* Plain text, no fonts */
- return (draw_fontref)0;
+ return (drawfile_fontref)0;
}
iFontnumber = iGetFontByNumber(ucWordFontNumber, usFontStyle);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:135,151 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:147,163
szOurFontname = szGetOurFontname(iFontnumber);
if (szOurFontname == NULL || szOurFontname[0] == '\0') {
DBG_DEC(iFontnumber);
- return (draw_fontref)0;
+ return (drawfile_fontref)0;
}
NO_DBG_MSG(szOurFontname);
- for (iIndex = 0; iIndex < (int)elementsof(szFontnames); iIndex++) {
- if (STREQ(szFontnames[iIndex], szOurFontname)) {
- NO_DBG_DEC(iIndex);
- return (draw_fontref)iIndex;
+ for (tIndex = 0; tIndex < elementsof(szFontnames); tIndex++) {
+ if (STREQ(szFontnames[tIndex], szOurFontname)) {
+ NO_DBG_DEC(tIndex);
+ return (drawfile_fontref)tIndex;
}
}
- return (draw_fontref)0;
+ return (drawfile_fontref)0;
} /* end of tOpenFont */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:153,159 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:165,171
*
* Returns the font reference number
*/
- draw_fontref
+ drawfile_fontref
tOpenTableFont(USHORT usWordFontSize)
{
options_type tOptions;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:162,180 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:174,193
NO_DBG_MSG("tOpenTableFont");
vGetOptions(&tOptions);
- bUsePlainText = tOptions.eConversionType != conversion_draw &&
- tOptions.eConversionType != conversion_ps;
eEncoding = tOptions.eEncoding;
+ bUsePlainText = tOptions.eConversionType != conversion_draw &&
+ tOptions.eConversionType != conversion_ps &&
+ tOptions.eConversionType != conversion_pdf;
if (bUsePlainText) {
/* Plain text, no fonts */
- return (draw_fontref)0;
+ return (drawfile_fontref)0;
}
iWordFontnumber = iFontname2Fontnumber(TABLE_FONT, FONT_REGULAR);
if (iWordFontnumber < 0 || iWordFontnumber > (int)UCHAR_MAX) {
DBG_DEC(iWordFontnumber);
- return (draw_fontref)0;
+ return (drawfile_fontref)0;
}
return tOpenFont((UCHAR)iWordFontnumber, FONT_REGULAR, usWordFontSize);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:184,190 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:197,203
* szGetFontname - get the fontname
*/
const char *
- szGetFontname(draw_fontref tFontRef)
+ szGetFontname(drawfile_fontref tFontRef)
{
fail((size_t)(UCHAR)tFontRef >= elementsof(szFontnames));
return szFontnames[(int)(UCHAR)tFontRef];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:200,206 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:213,219
*/
long
lComputeStringWidth(const char *szString, size_t tStringLength,
- draw_fontref tFontRef, USHORT usFontSize)
+ drawfile_fontref tFontRef, USHORT usFontSize)
{
USHORT *ausCharWidths;
UCHAR *pucChar;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:216,222 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:229,235
return 0;
}
- if (eEncoding == encoding_utf8) {
+ if (eEncoding == encoding_utf_8) {
fail(!bUsePlainText);
return lChar2MilliPoints(
utf8_strwidth(szString, tStringLength));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:227,240 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:240,258
return lChar2MilliPoints(tStringLength);
}
- DBG_DEC_C(eEncoding != encoding_iso_8859_1 &&
- eEncoding != encoding_iso_8859_2, eEncoding);
- fail(eEncoding != encoding_iso_8859_1 &&
- eEncoding != encoding_iso_8859_2);
+ if (eEncoding == encoding_cyrillic) {
+ /* FIXME: until the character tables are available */
+ return (tStringLength * 600L * (long)usFontSize + 1) / 2;
+ }
+ DBG_DEC_C(eEncoding != encoding_latin_1 &&
+ eEncoding != encoding_latin_2, eEncoding);
+ fail(eEncoding != encoding_latin_1 &&
+ eEncoding != encoding_latin_2);
+
/* Compute the relative string width */
iFontRef = (int)(UCHAR)tFontRef;
- if (eEncoding == encoding_iso_8859_2) {
+ if (eEncoding == encoding_latin_2) {
ausCharWidths = ausCharacterWidths2[iFontRef];
} else {
ausCharWidths = ausCharacterWidths1[iFontRef];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:247,253 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:265,271
}
/* Compute the absolute string width */
- return (lRelWidth * usFontSize + 1) / 2;
+ return (lRelWidth * (long)usFontSize + 1) / 2;
} /* end of lComputeStringWidth */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:263,269 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:281,287
{
fail(szString == NULL);
- if (eEncoding != encoding_utf8) {
+ if (eEncoding != encoding_utf_8) {
/* One byte, one character, one column */
return tLength;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/fonts_u.c:280,286 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/fonts_u.c:298,304
{
fail(szString == NULL);
- if (eEncoding != encoding_utf8) {
+ if (eEncoding != encoding_utf_8) {
return 1;
}
return (size_t)utf8_chrlength(szString);
[jmk] --rw-rw-r-- M 499692 jmk sys 7542 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9314 Jan 14 12:57 sys/src/cmd/aux/antiword/hdrftrlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2504 Jan 14 12:57 sys/src/cmd/aux/antiword/icons.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/icons.c:7,45 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/icons.c:7,46
*/
#include <string.h>
- #include "wimpt.h"
+ #include "DeskLib:Error.h"
+ #include "DeskLib:WimpSWIs.h"
#include "antiword.h"
void
- vUpdateIcon(wimp_w tWindow, wimp_icon *pIcon)
+ vUpdateIcon(window_handle tWindow, icon_block *pIcon)
{
- wimp_redrawstr r;
+ window_redrawblock tRedraw;
BOOL bMore;
- r.w = tWindow;
- r.box = pIcon->box;
- wimpt_noerr(wimp_update_wind(&r, &bMore));
+ tRedraw.window = tWindow;
+ tRedraw.rect = pIcon->workarearect;
+ Error_CheckFatal(Wimp_UpdateWindow(&tRedraw, &bMore));
while (bMore) {
- (void)wimp_ploticon(pIcon);
- wimpt_noerr(wimp_get_rectangle(&r, &bMore));
+ Error_CheckFatal(Wimp_PlotIcon(pIcon));
+ Error_CheckFatal(Wimp_GetRectangle(&tRedraw, &bMore));
}
} /* end of vUpdateIcon */
void
- vUpdateRadioButton(wimp_w tWindow, wimp_i tIconNumber, BOOL bSelected)
+ vUpdateRadioButton(window_handle tWindow, icon_handle tIconNumber,
+ BOOL bSelected)
{
- wimp_icon tIcon;
+ icon_block tIcon;
- wimpt_noerr(wimp_get_icon_info(tWindow, tIconNumber, &tIcon));
+ Error_CheckFatal(Wimp_GetIconState(tWindow, tIconNumber, &tIcon));
DBG_DEC(tIconNumber);
- DBG_HEX(tIcon.flags);
- if (bSelected ==
- ((tIcon.flags & wimp_ISELECTED) == wimp_ISELECTED)) {
+ DBG_HEX(tIcon.flags.data.selected);
+ if (bSelected == (tIcon.flags.data.selected == 1)) {
/* No update needed */
return;
}
- wimpt_noerr(wimp_set_icon_state(tWindow, tIconNumber,
- bSelected ? wimp_ISELECTED : 0, wimp_ISELECTED));
+ Error_CheckFatal(Wimp_SetIconState(tWindow, tIconNumber,
+ bSelected ? 0x00200000 : 0, 0x00200000));
vUpdateIcon(tWindow, &tIcon);
} /* end of vUpdateRadioButton */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/icons.c:47,56 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/icons.c:48,58
* vUpdateWriteable - update a writeable icon with a string
*/
void
- vUpdateWriteable(wimp_w tWindow, wimp_i tIconNumber, char *szString)
+ vUpdateWriteable(window_handle tWindow, icon_handle tIconNumber,
+ const char *szString)
{
- wimp_icon tIcon;
- wimp_caretstr tCaret;
+ icon_block tIcon;
+ caret_block tCaret;
int iLen;
fail(szString == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/icons.c:58,67 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/icons.c:60,68
NO_DBG_DEC(tIconNumber);
NO_DBG_MSG(szString);
- wimpt_noerr(wimp_get_icon_info(tWindow, tIconNumber, &tIcon));
+ Error_CheckFatal(Wimp_GetIconState(tWindow, tIconNumber, &tIcon));
NO_DBG_HEX(tIcon.flags);
- if ((tIcon.flags & (wimp_ITEXT|wimp_INDIRECT)) !=
- (wimp_ITEXT|wimp_INDIRECT)) {
+ if (!tIcon.flags.data.text || !tIcon.flags.data.indirected) {
werr(1, "Icon %d must be indirected text", (int)tIconNumber);
return;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/icons.c:69,83 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/icons.c:70,84
szString,
tIcon.data.indirecttext.bufflen - 1);
/* Ensure the caret is behind the last character of the text */
- wimpt_noerr(wimp_get_caret_pos(&tCaret));
- if (tCaret.w == tWindow && tCaret.i == tIconNumber) {
+ Error_CheckFatal(Wimp_GetCaretPosition(&tCaret));
+ if (tCaret.window == tWindow && tCaret.icon == tIconNumber) {
iLen = strlen(tIcon.data.indirecttext.buffer);
if (tCaret.index != iLen) {
tCaret.index = iLen;
- wimpt_noerr(wimp_set_caret_pos(&tCaret));
+ Error_CheckFatal(Wimp_SetCaretPosition(&tCaret));
}
}
- wimpt_noerr(wimp_set_icon_state(tWindow, tIconNumber, 0,0));
+ Error_CheckFatal(Wimp_SetIconState(tWindow, tIconNumber, 0, 0));
vUpdateIcon(tWindow, &tIcon);
} /* end of vUpdateWriteable */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/icons.c:85,93 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/icons.c:86,95
* vUpdateWriteableNumber - update a writeable icon with a number
*/
void
- vUpdateWriteableNumber(wimp_w tWindow, wimp_i tIconNumber, int iNumber)
+ vUpdateWriteableNumber(window_handle tWindow, icon_handle tIconNumber,
+ int iNumber)
{
- char szTmp[12];
+ char szTmp[1+3*sizeof(int)+1];
(void)sprintf(szTmp, "%d", iNumber);
vUpdateWriteable(tWindow, tIconNumber, szTmp);
[jmk] --rw-rw-r-- M 499692 jmk sys 2504 Jan 14 12:57 sys/src/cmd/aux/antiword/icons.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26488 Jan 14 12:57 sys/src/cmd/aux/antiword/imgexam.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:1,6
/*
* imgexam.c
- * Copyright (C) 2000-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2000-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to examine image headers
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:28,33 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:28,41
#define PNG_CB_COLOR 0x02
#define PNG_CB_ALPHA 0x04
+ /* Instance signature */
+ #define MSOBI_WMF 0x0216
+ #define MSOBI_EMF 0x03d4
+ #define MSOBI_PICT 0x0542
+ #define MSOBI_PNG 0x06e0
+ #define MSOBI_JPEG 0x046a
+ #define MSOBI_DIB 0x07a8
+
/* The following enum is stolen from the IJG JPEG library */
typedef enum { /* JPEG marker codes */
M_SOF0 = 0xc0, /* baseline DCT */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:687,693 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:695,701
imagetype_enum *peImageType)
{
ULONG ulMarker;
- size_t tElementLen, tToSkip;
+ size_t tRecordLength, tToSkip;
USHORT usMarker;
fail(pFile == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:717,726 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:725,734
tPosition += 18;
while (tPosition + 6 <= tLength) {
- tElementLen = (size_t)ulNextLong(pFile);
+ tRecordLength = (size_t)ulNextLong(pFile);
usMarker = usNextWord(pFile);
tPosition += 6;
- NO_DBG_DEC(tElementLen);
+ NO_DBG_DEC(tRecordLength);
NO_DBG_HEX(usMarker);
switch (usMarker) {
case 0x0000:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:737,756 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:745,764
tPosition += tSkipBytes(pFile, 22);
return tPosition;
default:
- if (tElementLen < 3) {
+ if (tRecordLength < 3) {
break;
}
- if (tElementLen > SIZE_T_MAX / 2) {
+ if (tRecordLength > SIZE_T_MAX / 2) {
/*
* No need to compute the number of bytes
* to skip
*/
- DBG_DEC(tElementLen);
- DBG_HEX(tElementLen);
+ DBG_DEC(tRecordLength);
+ DBG_HEX(tRecordLength);
DBG_FIXME();
return (size_t)-1;
}
- tToSkip = tElementLen * 2 - 6;
+ tToSkip = tRecordLength * 2 - 6;
if (tToSkip > tLength - tPosition) {
/* You can't skip this number of bytes */
DBG_DEC(tToSkip);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:776,783 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:784,792
tFind8Image(FILE *pFile, size_t tPosition, size_t tLength,
imagetype_enum *peImageType)
{
- size_t tElementLen, tNameLen;
- USHORT usID, usElementTag;
+ size_t tRecordLength, tNameLen;
+ USHORT usRecordVersion, usRecordType, usRecordInstance;
+ USHORT usTmp;
fail(pFile == NULL);
fail(peImageType == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:784,797 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:793,809
*peImageType = imagetype_is_unknown;
while (tPosition + 8 <= tLength) {
- usID = usNextWord(pFile) >> 4;
- usElementTag = usNextWord(pFile);
- tElementLen = (size_t)ulNextLong(pFile);
+ usTmp = usNextWord(pFile);
+ usRecordVersion = usTmp & 0x000f;
+ usRecordInstance = usTmp >> 4;
+ usRecordType = usNextWord(pFile);
+ tRecordLength = (size_t)ulNextLong(pFile);
tPosition += 8;
- NO_DBG_HEX(usID);
- NO_DBG_HEX(usElementTag);
- NO_DBG_DEC(tElementLen);
- switch (usElementTag) {
+ NO_DBG_HEX(usRecordVersion);
+ NO_DBG_HEX(usRecordInstance);
+ NO_DBG_HEX(usRecordType);
+ NO_DBG_DEC(tRecordLength);
+ switch (usRecordType) {
case 0xf000: case 0xf001: case 0xf002: case 0xf003:
case 0xf004: case 0xf005:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/imgexam.c:811,853 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/imgexam.c:823,883
case 0xf006: case 0xf00a: case 0xf00b: case 0xf00d:
case 0xf00e: case 0xf00f: case 0xf010: case 0xf011:
case 0xf122:
- tPosition += tSkipBytes(pFile, tElementLen);
+ tPosition += tSkipBytes(pFile, tRecordLength);
break;
case 0xf01a:
DBG_MSG("EMF");
*peImageType = imagetype_is_emf;
- tPosition += tSkipBytes(pFile, usID == 0x3d4 ? 50 : 66);
+ tPosition += tSkipBytes(pFile, 50);
+ if ((usRecordInstance ^ MSOBI_EMF) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf01b:
DBG_MSG("WMF");
*peImageType = imagetype_is_wmf;
- tPosition += tSkipBytes(pFile, usID == 0x216 ? 50 : 66);
+ tPosition += tSkipBytes(pFile, 50);
+ if ((usRecordInstance ^ MSOBI_WMF) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf01c:
DBG_MSG("PICT");
*peImageType = imagetype_is_pict;
- tPosition += tSkipBytes(pFile, usID == 0x542 ? 17 : 33);
+ tPosition += tSkipBytes(pFile, 50);
+ if ((usRecordInstance ^ MSOBI_PICT) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf01d:
DBG_MSG("JPEG");
*peImageType = imagetype_is_jpeg;
- tPosition += tSkipBytes(pFile, usID == 0x46a ? 17 : 33);
+ tPosition += tSkipBytes(pFile, 17);
+ if ((usRecordInstance ^ MSOBI_JPEG) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf01e:
DBG_MSG("PNG");
*peImageType = imagetype_is_png;
- tPosition += tSkipBytes(pFile, usID == 0x6e0 ? 17 : 33);
+ tPosition += tSkipBytes(pFile, 17);
+ if ((usRecordInstance ^ MSOBI_PNG) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf01f:
DBG_MSG("DIB");
/* DIB is a BMP minus its 14 byte header */
*peImageType = imagetype_is_dib;
- tPosition += tSkipBytes(pFile, usID == 0x7a8 ? 17 : 33);
+ tPosition += tSkipBytes(pFile, 17);
+ if ((usRecordInstance ^ MSOBI_DIB) == 1) {
+ tPosition += tSkipBytes(pFile, 16);
+ }
return tPosition;
case 0xf00c:
default:
- DBG_HEX(usElementTag);
- DBG_DEC_C(tElementLen % 4 != 0, tElementLen);
+ DBG_HEX(usRecordType);
+ DBG_DEC_C(tRecordLength % 4 != 0, tRecordLength);
DBG_FIXME();
return (size_t)-1;
}
[jmk] --rw-rw-r-- M 499692 jmk sys 26488 Jan 14 12:57 sys/src/cmd/aux/antiword/imgexam.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1703 Jan 14 12:57 sys/src/cmd/aux/antiword/imgtrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1703 Jan 14 12:57 sys/src/cmd/aux/antiword/imgtrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1482 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1482 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2159 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2159 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7855 Jan 14 12:57 sys/src/cmd/aux/antiword/listlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7855 Jan 14 12:57 sys/src/cmd/aux/antiword/listlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 13140 Jan 14 12:57 sys/src/cmd/aux/antiword/main_ros.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8171 Jan 14 12:57 sys/src/cmd/aux/antiword/main_u.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/main_u.c:3,9 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/main_u.c:3,9
*
* Released under GPL
*
- * Copyright (C) 1998-2003 A.J. van Os
+ * Copyright (C) 1998-2004 A.J. van Os
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/main_u.c:29,37 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/main_u.c:29,49
#include <fcntl.h>
#include <io.h>
#endif /* __dos */
- #if defined(__STDC_ISO_10646__)
+ #if defined(__CYGWIN__) || defined(__CYGMING__)
+ # ifdef X_LOCALE
+ # include <X11/Xlocale.h>
+ # else
+ # include <locale.h>
+ # endif
+ #else
#include <locale.h>
- #endif /* __STDC_ISO_10646__ */
+ #endif /* __CYGWIN__ || __CYGMING__ */
+ #if defined(N_PLAT_NLM)
+ #if !defined(_VA_LIST)
+ #include "NW-only/nw_os.h"
+ #endif /* !_VA_LIST */
+ #include "getopt.h"
+ #endif /* N_PLAT_NLM */
#include "version.h"
#include "antiword.h"
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/main_u.c:45,60 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/main_u.c:57,78
fprintf(stderr, "\tName: %s\n", szTask);
fprintf(stderr, "\tPurpose: "PURPOSESTRING"\n");
fprintf(stderr, "\tAuthor: "AUTHORSTRING"\n");
- fprintf(stderr, "\tVersion: "VERSIONSTRING"\n");
+ fprintf(stderr, "\tVersion: "VERSIONSTRING);
+ #if defined(__dos)
+ fprintf(stderr, VERSIONSTRING2);
+ #endif /* __dos */
+ fprintf(stderr, "\n");
fprintf(stderr, "\tStatus: "STATUSSTRING"\n");
fprintf(stderr,
"\tUsage: %s [switches] wordfile1 [wordfile2 ...]\n", szTask);
fprintf(stderr,
- "\tSwitches: [-t|-p papersize|-x dtd][-m mapping][-w #][-i #]"
- "[-Ls]\n");
+ "\tSwitches: [-f|-t|-a papersize|-p papersize|-x dtd]"
+ "[-m mapping][-w #][-i #][-Ls]\n");
+ fprintf(stderr, "\t\t-f formatted text output\n");
fprintf(stderr, "\t\t-t text output (default)\n");
+ fprintf(stderr, "\t\t-a <paper size name> Adobe PDF output\n");
fprintf(stderr, "\t\t-p <paper size name> PostScript output\n");
- fprintf(stderr, "\t\t like: a4, letter or legal\n");
+ fprintf(stderr, "\t\t paper size like: a4, letter or legal\n");
fprintf(stderr, "\t\t-x <dtd> XML output\n");
fprintf(stderr, "\t\t like: db (DocBook)\n");
fprintf(stderr, "\t\t-m <mapping> character mapping file\n");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/main_u.c:61,66 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/main_u.c:79,85
fprintf(stderr, "\t\t-w <width> in characters of text output\n");
fprintf(stderr, "\t\t-i <level> image level (PostScript only)\n");
fprintf(stderr, "\t\t-L use landscape mode (PostScript only)\n");
+ fprintf(stderr, "\t\t-r Show removed text\n");
fprintf(stderr, "\t\t-s Show hidden (by Word) text\n");
} /* end of vUsage */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/main_u.c:225,250 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/main_u.c:244,293
return iFirst < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
+ #if defined(N_PLAT_NLM) && !defined(_VA_LIST)
+ nwinit();
+ #endif /* N_PLAT_NLM && !_VA_LIST */
+
vGetOptions(&tOptions);
+ #if !defined(__dos)
+ if (is_locale_utf8()) {
#if defined(__STDC_ISO_10646__)
- /*
- * If the user wants UTF-8 and the envirionment variables support
- * UTF-8, than set the locale accordingly
- */
- if (tOptions.eEncoding == encoding_utf8 && is_locale_utf8()) {
+ /*
+ * If the user wants UTF-8 and the envirionment variables
+ * support UTF-8, than set the locale accordingly
+ */
+ if (tOptions.eEncoding == encoding_utf_8) {
+ if (setlocale(LC_CTYPE, "") == NULL) {
+ werr(1, "Can't set the UTF-8 locale! "
+ "Check LANG, LC_CTYPE, LC_ALL.");
+ }
+ DBG_MSG("The UTF-8 locale has been set");
+ } else {
+ (void)setlocale(LC_CTYPE, "C");
+ }
+ #endif /* __STDC_ISO_10646__ */
+ } else {
if (setlocale(LC_CTYPE, "") == NULL) {
- werr(1, "Can't set the UTF-8 locale! "
- "Check LANG, LC_CTYPE, LC_ALL.");
+ werr(0, "Can't set the locale! Will use defaults");
+ (void)setlocale(LC_CTYPE, "C");
}
- DBG_MSG("The UTF-8 locale has been set");
+ DBG_MSG("The locale has been set");
}
- #endif /* __STDC_ISO_10646__ */
+ #endif /* !__dos */
bMultiple = argc - iFirst > 1;
- bUseTXT = tOptions.eConversionType == conversion_text;
+ bUseTXT = tOptions.eConversionType == conversion_text ||
+ tOptions.eConversionType == conversion_fmt_text;
bUseXML = tOptions.eConversionType == conversion_xml;
iGoodCount = 0;
+
+ #if defined(__dos)
+ if (tOptions.eConversionType == conversion_pdf) {
+ /* PDF must be written as a binary stream */
+ setmode(fileno(stdout), O_BINARY);
+ }
+ #endif /* __dos */
if (bUseXML) {
fprintf(stdout,
[jmk] --rw-rw-r-- M 499692 jmk sys 8171 Jan 14 12:57 sys/src/cmd/aux/antiword/main_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 21663 Jan 14 12:57 sys/src/cmd/aux/antiword/misc.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:1,6
/*
* misc.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Miscellaneous functions
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:12,31 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:12,31
#include <ctype.h>
#include <time.h>
#if defined(__riscos)
- #include "kernel.h"
- #include "swis.h"
+ #include "DeskLib:SWI.h"
#else
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif /* __riscos */
- #if defined(__dos)
- #define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
+ #if !defined(S_ISREG)
#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
- #endif /* __dos */
+ #endif /* !S_ISREG */
#include "antiword.h"
+ #if defined(__vms)
+ #include <unixlib.h>
+ #endif
-
#if !defined(__riscos)
/*
* szGetHomeDirectory - get the name of the home directory
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:36,51 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:36,52
const char *szHome;
#if defined(__vms)
- #include <unixlib.h>
szHome = decc$translate_vms(getenv("HOME"));
#elif defined(__Plan9__)
szHome = getenv("home");
- #else
+ #else
szHome = getenv("HOME");
- #endif
+ #endif /* __vms */
if (szHome == NULL || szHome[0] == '\0') {
- #if defined(__dos)
+ #if defined(N_PLAT_NLM)
+ szHome = "SYS:";
+ #elif defined(__dos)
szHome = "C:";
#else
werr(0, "I can't find the name of your HOME directory");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:62,73 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:63,73
szGetAntiwordDirectory(void)
{
#if defined(__vms)
- #include <unixlib.h>
return decc$translate_vms(getenv("ANTIWORDHOME"));
#else
return getenv("ANTIWORDHOME");
#endif /* __vms */
- } /* end of szGetHomeDirectory */
+ } /* end of szGetAntiwordDirectory */
#endif /* !__riscos */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:78,103 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:78,103
lGetFilesize(const char *szFilename)
{
#if defined(__riscos)
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
+ int iType, iSize;
- (void)memset(®s, 0, sizeof(regs));
- regs.r[0] = 17;
- regs.r[1] = (int)szFilename;
- e = _kernel_swi(OS_File, ®s, ®s);
+ e = SWI(2, 5, SWI_OS_File | XOS_Bit,
+ 17, szFilename,
+ &iType, NULL, NULL, NULL, &iSize);
if (e != NULL) {
werr(0, "Get Filesize error %d: %s",
e->errnum, e->errmess);
return -1;
}
- if (regs.r[0] != 1) {
+ if (iType != 1) {
/* It's not a proper file or the file does not exist */
return -1;
}
- return (long)regs.r[4];
+ return (long)iSize;
#else
struct stat tBuffer;
+ errno = 0;
if (stat(szFilename, &tBuffer) != 0) {
werr(0, "Get Filesize error %d", errno);
return -1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:136,142 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:136,142
} /* end of vPrintBlock */
void
- vPrintUnicode(const char *szFile, int iLine, const UCHAR *aucUni, size_t tLen)
+ vPrintUnicode(const char *szFile, int iLine, const UCHAR *aucUni, size_t tLen)
{
char *szASCII;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:249,255 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:249,255
} /* end of bReadBuffer */
/*
- * Translate a Word colornumber into a true color for use in a drawfile
+ * Convert a Word colornumber into a true color for use in a drawfile
*
* Returns the true color
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:469,480 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:469,480
char *
unincpy(char *s1, const UCHAR *s2, size_t n)
{
- char *dest;
+ char *pcDest;
ULONG ulChar;
size_t tLen;
USHORT usUni;
- for (dest = s1, tLen = 0; tLen < n; dest++, tLen++) {
+ for (pcDest = s1, tLen = 0; tLen < n; pcDest++, tLen++) {
usUni = usGetWord(tLen * 2, s2);
if (usUni == 0) {
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:484,493 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:484,493
if (ulChar == IGNORE_CHARACTER) {
ulChar = (ULONG)'?';
}
- *dest = (char)ulChar;
+ *pcDest = (char)ulChar;
}
for (; tLen < n; tLen++) {
- *dest++ = '\0';
+ *pcDest++ = '\0';
}
return s1;
} /* end of unincpy */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:614,627 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:614,624
fail(szResult == NULL);
fail(tMaxResultLen < 2);
- if (eEncoding == encoding_utf8) {
+ if (eEncoding == encoding_utf_8) {
(void)tUcs2Utf8(UNICODE_BULLET, szResult, tMaxResultLen);
- } else if (eEncoding == encoding_iso_8859_1 &&
- eConversionType == conversion_ps) {
- szResult[0] = OUR_BULLET_PS;
- szResult[1] = '\0';
} else {
- szResult[0] = OUR_BULLET_TEXT;
+ szResult[0] = (char)ucGetBulletCharacter(eConversionType,
+ eEncoding);
szResult[1] = '\0';
}
} /* end of vGetBulletValue */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/misc.c:645,647 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/misc.c:642,894
}
return TRUE;
} /* end of bAllZero */
+
+ #if !defined(__riscos)
+ /*
+ * GetCodesetFromLocale - get the codeset from the current locale
+ *
+ * Original version: Copyright (C) 1999 Bruno Haible
+ * Syntax:
+ * language[_territory][.codeset][@modifier][+special][,[sponsor][_revision]]
+ *
+ * Returns TRUE when sucessful, otherwise FALSE
+ */
+ static BOOL
+ bGetCodesetFromLocale(char *szCodeset, size_t tMaxCodesetLength, BOOL *pbEuro)
+ {
+ #if !defined(__dos)
+ const char *szLocale;
+ const char *pcTmp;
+ size_t tIndex;
+ char szModifier[6];
+ #endif /* __dos */
+
+ if (pbEuro != NULL) {
+ *pbEuro = FALSE; /* Until proven otherwise */
+ }
+ if (szCodeset == NULL || tMaxCodesetLength == 0) {
+ return FALSE;
+ }
+
+ #if defined(__dos)
+ if (tMaxCodesetLength < 2 + sizeof(int) * 3 + 1) {
+ DBG_DEC(tMaxCodesetLength);
+ DBG_DEC(2 + sizeof(int) * 3 + 1);
+ return FALSE;
+ }
+ /* Get the active codepage from DOS */
+ sprintf(szCodeset, "cp%d", iGetCodepage());
+ DBG_MSG(szCodeset);
+ #else
+ /* Get the locale from the environment */
+ szLocale = getenv("LC_ALL");
+ if (szLocale == NULL || szLocale[0] == '\0') {
+ szLocale = getenv("LC_CTYPE");
+ if (szLocale == NULL || szLocale[0] == '\0') {
+ szLocale = getenv("LANG");
+ }
+ }
+ if (szLocale == NULL || szLocale[0] == '\0') {
+ /* No locale, so no codeset name and no modifier */
+ return FALSE;
+ }
+ DBG_MSG(szLocale);
+ pcTmp = strchr(szLocale, '.');
+ if (pcTmp == NULL) {
+ /* No codeset name */
+ szCodeset[0] = '\0';
+ } else {
+ /* Copy the codeset name */
+ pcTmp++;
+ for (tIndex = 0; tIndex < tMaxCodesetLength; tIndex++) {
+ if (*pcTmp == '@' || *pcTmp == '+' ||
+ *pcTmp == ',' || *pcTmp == '_' ||
+ *pcTmp == '\0') {
+ szCodeset[tIndex] = '\0';
+ break;
+ }
+ szCodeset[tIndex] = *pcTmp;
+ pcTmp++;
+ }
+ szCodeset[tMaxCodesetLength - 1] = '\0';
+ }
+ if (pbEuro == NULL) {
+ /* No need to get the modifier */
+ return TRUE;
+ }
+ pcTmp = strchr(szLocale, '@');
+ if (pcTmp != NULL) {
+ /* Copy the modifier */
+ pcTmp++;
+ for (tIndex = 0; tIndex < sizeof(szModifier); tIndex++) {
+ if (*pcTmp == '+' || *pcTmp == ',' ||
+ *pcTmp == '_' || *pcTmp == '\0') {
+ szModifier[tIndex] = '\0';
+ break;
+ }
+ szModifier[tIndex] = *pcTmp;
+ pcTmp++;
+ }
+ szModifier[sizeof(szModifier) - 1] = '\0';
+ *pbEuro = STRCEQ(szModifier, "Euro");
+ }
+ #endif /* __dos */
+ return TRUE;
+ } /* end of bGetCodesetFromLocale */
+
+ /*
+ * GetNormalizedCodeset - get the normalized codeset from the current locale
+ *
+ * Returns TRUE when sucessful, otherwise FALSE
+ */
+ BOOL
+ bGetNormalizedCodeset(char *szCodeset, size_t tMaxCodesetLength, BOOL *pbEuro)
+ {
+ BOOL bOnlyDigits;
+ const char *pcSrc;
+ char *pcDest;
+ char *szTmp, *szCodesetNorm;
+
+ if (pbEuro != NULL) {
+ *pbEuro = FALSE; /* Until proven otherwise */
+ }
+ if (szCodeset == NULL || tMaxCodesetLength < 4) {
+ return FALSE;
+ }
+
+ /* Get the codeset name */
+ szTmp = xmalloc(tMaxCodesetLength - 3);
+ if (!bGetCodesetFromLocale(szTmp, tMaxCodesetLength - 3, pbEuro)) {
+ szTmp = xfree(szTmp);
+ return FALSE;
+ }
+ /* Normalize the codeset name */
+ szCodesetNorm = xmalloc(tMaxCodesetLength - 3);
+ bOnlyDigits = TRUE;
+ pcDest = szCodesetNorm;
+ for (pcSrc = szTmp; *pcSrc != '\0'; pcSrc++) {
+ if (isalnum(*pcSrc)) {
+ *pcDest = tolower(*pcSrc);
+ if (!isdigit(*pcDest)) {
+ bOnlyDigits = FALSE;
+ }
+ pcDest++;
+ }
+ }
+ *pcDest = '\0';
+ DBG_MSG(szCodesetNorm);
+ /* Add "iso" when szCodesetNorm contains all digits */
+ if (bOnlyDigits && szCodesetNorm[0] != '\0') {
+ fail(strlen(szCodesetNorm) + 3 >= tMaxCodesetLength);
+ sprintf(szCodeset, "iso%s", szCodesetNorm);
+ } else {
+ fail(strlen(szCodesetNorm) >= tMaxCodesetLength);
+ strncpy(szCodeset, szCodesetNorm, pcDest - szCodesetNorm + 1);
+ szCodeset[tMaxCodesetLength - 1] = '\0';
+ }
+ DBG_MSG(szCodeset);
+ /* Clean up and leave */
+ szCodesetNorm = xfree(szCodesetNorm);
+ szTmp = xfree(szTmp);
+ return TRUE;
+ } /* end of bGetNormalizedCodeset */
+
+ /*
+ * szGetDefaultMappingFile - get the default mapping file
+ *
+ * Returns the basename of the default mapping file
+ */
+ const char *
+ szGetDefaultMappingFile(void)
+ {
+ static const struct {
+ const char *szCodeset;
+ const char *szMappingFile;
+ } atMappingFile[] = {
+ { "iso88591", MAPPING_FILE_8859_1 },
+ { "iso88592", MAPPING_FILE_8859_2 },
+ { "iso88593", "8859-3.txt" },
+ { "iso88594", "8859-4.txt" },
+ { "iso88595", "8859-5.txt" },
+ { "iso88596", MAPPING_FILE_8859_5 },
+ { "iso88597", "8859-7.txt" },
+ { "iso88598", "8859-8.txt" },
+ { "iso88599", "8859-9.txt" },
+ { "iso885910", "8859-10.txt" },
+ { "iso885913", "8859-13.txt" },
+ { "iso885914", "8859-14.txt" },
+ { "iso885915", MAPPING_FILE_8859_15 },
+ { "iso885916", "8859-16.txt" },
+ { "koi8r", MAPPING_FILE_KOI8_R },
+ { "koi8u", MAPPING_FILE_KOI8_U },
+ { "utf8", MAPPING_FILE_UTF_8 },
+ { "cp437", MAPPING_FILE_CP437 },
+ { "cp850", "cp850.txt" },
+ { "cp852", MAPPING_FILE_CP852 },
+ { "cp862", "cp862.txt" },
+ { "cp864", "cp864.txt" },
+ { "cp866", MAPPING_FILE_CP866 },
+ { "cp1250", MAPPING_FILE_CP1250 },
+ { "cp1251", MAPPING_FILE_CP1251 },
+ { "cp1252", "cp1252.txt" },
+ };
+ size_t tIndex;
+ BOOL bEuro;
+ char szCodeset[20];
+
+ szCodeset[0] = '\0';
+ bEuro = FALSE;
+ /* Get the normalized codeset name */
+ if (!bGetNormalizedCodeset(szCodeset, sizeof(szCodeset), &bEuro)) {
+ return MAPPING_FILE_8859_1;
+ }
+ if (szCodeset[0] == '\0') {
+ if (bEuro) {
+ /* Default mapping file (with Euro sign) */
+ return MAPPING_FILE_8859_15;
+ } else {
+ /* Default mapping file (without Euro sign) */
+ return MAPPING_FILE_8859_1;
+ }
+ }
+ /* Find the name in the table */
+ for (tIndex = 0; tIndex < elementsof(atMappingFile); tIndex++) {
+ if (STREQ(atMappingFile[tIndex].szCodeset, szCodeset)) {
+ return atMappingFile[tIndex].szMappingFile;
+ }
+ }
+ /* Default default mapping file */
+ #if defined(__dos)
+ return MAPPING_FILE_CP437;
+ #else
+ return MAPPING_FILE_8859_1;
+ #endif /* __dos */
+ } /* end of szGetDefaultMappingFile */
+ #endif /* !__riscos */
+
+ /*
+ * tConvertDTTM - convert Windows Date and Time format
+ *
+ * returns Unix time_t or -1
+ */
+ time_t
+ tConvertDTTM(ULONG ulDTTM)
+ {
+ struct tm tTime;
+ time_t tResult;
+
+ if (ulDTTM == 0) {
+ return (time_t)-1;
+ }
+ memset(&tTime, 0, sizeof(tTime));
+ tTime.tm_min = (int)(ulDTTM & 0x0000003f);
+ tTime.tm_hour = (int)((ulDTTM & 0x000007c0) >> 6);
+ tTime.tm_mday = (int)((ulDTTM & 0x0000f800) >> 11);
+ tTime.tm_mon = (int)((ulDTTM & 0x000f0000) >> 16);
+ tTime.tm_year = (int)((ulDTTM & 0x1ff00000) >> 20);
+ tTime.tm_isdst = -1;
+ tTime.tm_mon--; /* From 01-12 to 00-11 */
+ tResult = mktime(&tTime);
+ NO_DBG_MSG(ctime(&tResult));
+ return tResult;
+ } /* end of tConvertDTTM */
[jmk] --rw-rw-r-- M 499692 jmk sys 21663 Jan 14 12:57 sys/src/cmd/aux/antiword/misc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1007 Jan 14 12:57 sys/src/cmd/aux/antiword/mkfile
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/mkfile:6,17 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/mkfile:6,18
TARG=antiword
OFILES= main_u.$O asc85enc.$O blocklist.$O chartrans.$O datalist.$O depot.$O\
- dib2eps.$O fail.$O finddata.$O findtext.$O fontlist.$O fonts.$O fonts_u.$O\
- imgexam.$O imgtrans.$O jpeg2eps.$O listlist.$O misc.$O notes.$O options.$O\
- out2window.$O output.$O pictlist.$O png2eps.$O postscript.$O prop0.$O prop2.$O\
- prop6.$O prop8.$O properties.$O propmod.$O rowlist.$O sectlist.$O stylelist.$O\
- stylesheet.$O summary.$O tabstop.$O text.$O unix.$O utf8.$O word2text.$O\
- worddos.$O wordlib.$O wordmac.$O wordole.$O wordwin.$O xmalloc.$O xml.$O
+ dib2eps.$O doclist.$O fail.$O finddata.$O findtext.$O fmt_text.$O fontlist.$O\
+ fonts.$O fonts_u.$O hdrftrlist.$O imgexam.$O imgtrans.$O jpeg2eps.$O\
+ listlist.$O misc.$O notes.$O options.$O out2window.$O output.$O pdf.$O\
+ pictlist.$O png2eps.$O postscript.$O prop0.$O prop2.$O prop6.$O prop8.$O\
+ properties.$O propmod.$O rowlist.$O sectlist.$O stylelist.$O stylesheet.$O\
+ summary.$O tabstop.$O text.$O unix.$O utf8.$O word2text.$O worddos.$O\
+ wordlib.$O wordmac.$O wordole.$O wordwin.$O xmalloc.$O xml.$O
HFILES=antiword.h debug.h draw.h fail.h fontinfo.h version.h wordconst.h wordtypes.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/mkfile:21,26 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/mkfile:22,28
main_u.$O: version.h
postscript.$O: version.h
+ pdf.$O: version.h
fonts_u.$O: fontinfo.h
# fontinfo.h: Unix-fontinfo.pl
[jmk] --rw-rw-r-- M 499692 jmk sys 1007 Jan 14 12:57 sys/src/cmd/aux/antiword/mkfile
[jmk] --rw-rw-r-- M 499692 jmk sys 24813 Jan 14 12:57 sys/src/cmd/aux/antiword/notes.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:1,6
/*
* notes.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to tell the difference between footnotes and endnotes
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:8,18 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:8,32
#include "antiword.h"
- /* Variables needed to write the Footnote and Endnote Lists */
+ /*
+ * Private structures to hide the way the information
+ * is stored from the rest of the program
+ */
+ typedef struct footnote_local_tag {
+ footnote_block_type tInfo;
+ ULONG ulCharPosStart;
+ ULONG ulCharPosNext;
+ BOOL bUseful;
+ } footnote_local_type;
+
+ /* Variables needed to write the Footnote and Endnote information */
static ULONG *aulFootnoteList = NULL;
static size_t tFootnoteListLength = 0;
static ULONG *aulEndnoteList = NULL;
static size_t tEndnoteListLength = 0;
+ /* Variables needed to write the Footnote Text */
+ static footnote_local_type *pFootnoteText = NULL;
+ static size_t tFootnoteTextLength = 0;
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:21,36 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:35,297
void
vDestroyNotesInfoLists(void)
{
- DBG_MSG("vDestroyNotesInfoLists");
+ footnote_local_type *pRecord;
+ size_t tFootnote;
+ TRACE_MSG("vDestroyNotesInfoLists");
+
/* Free the lists and reset all control variables */
aulEndnoteList = xfree(aulEndnoteList);
aulFootnoteList = xfree(aulFootnoteList);
tEndnoteListLength = 0;
tFootnoteListLength = 0;
+ for (tFootnote = 0; tFootnote < tFootnoteTextLength; tFootnote++) {
+ pRecord = pFootnoteText + tFootnote;
+ pRecord->tInfo.szText = xfree(pRecord->tInfo.szText);
+ }
+ pFootnoteText = xfree(pFootnoteText);
+ tFootnoteTextLength = 0;
} /* end of vDestroyNotesInfoLists */
/*
+ * Build the list with footnote information for Word for DOS files
+ */
+ static void
+ vGet0FootnotesInfoAndText(FILE *pFile, const UCHAR *aucHeader)
+ {
+ footnote_local_type *pCurr;
+ UCHAR *aucBuffer;
+ ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginFootnoteInfo;
+ ULONG ulCharPos, ulBeginNextBlock;
+ size_t tFootnotes, tFootnoteInfoLen;
+ size_t tIndex;
+ UCHAR aucTmp[2];
+
+ TRACE_MSG("vGet0FootnotesInfoAndText");
+
+ fail(pFile == NULL || aucHeader == NULL);
+
+ ulBeginOfText = 128;
+ NO_DBG_HEX(ulBeginOfText);
+ ulBeginFootnoteInfo = 128 * (ULONG)usGetWord(0x14, aucHeader);
+ DBG_HEX(ulBeginFootnoteInfo);
+ ulBeginNextBlock = 128 * (ULONG)usGetWord(0x16, aucHeader);
+ DBG_HEX(ulBeginNextBlock);
+
+ if (ulBeginFootnoteInfo == ulBeginNextBlock) {
+ DBG_MSG("No Footnotes in this document");
+ return;
+ }
+
+ /* Read the the number of footnotes + 1 */
+ if (!bReadBytes(aucTmp, 2, ulBeginFootnoteInfo, pFile)) {
+ return;
+ }
+ tFootnotes = (size_t)usGetWord(0, aucTmp);
+ if (tFootnotes < 2) {
+ DBG_MSG("No Footnotes in this document (2)");
+ }
+ DBG_DEC(tFootnotes);
+ tFootnoteInfoLen = 8 * tFootnotes;
+
+ aucBuffer = xmalloc(tFootnoteInfoLen);
+ if (!bReadBytes(aucBuffer,
+ tFootnoteInfoLen, ulBeginFootnoteInfo + 4, pFile)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ DBG_PRINT_BLOCK(aucBuffer, tFootnoteInfoLen);
+
+ /* Get footnote information */
+ fail(tFootnoteListLength != 0);
+ tFootnoteListLength = tFootnotes - 1;
+ fail(tFootnoteListLength == 0);
+
+ fail(aulFootnoteList != NULL);
+ aulFootnoteList = xcalloc(tFootnoteListLength, sizeof(ULONG));
+
+ for (tIndex = 0; tIndex < tFootnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 8, aucBuffer);
+ DBG_HEX(ulOffset);
+ ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
+ DBG_HEX(ulFileOffset);
+ aulFootnoteList[tIndex] = ulFileOffset;
+ }
+
+ /* Get footnote text */
+ fail(tFootnoteTextLength != 0);
+ tFootnoteTextLength = tFootnotes - 1;
+ fail(tFootnoteTextLength == 0);
+
+ fail(pFootnoteText != NULL);
+ pFootnoteText = xcalloc(tFootnoteTextLength,
+ sizeof(footnote_local_type));
+
+ for (tIndex = 0; tIndex < tFootnoteTextLength; tIndex++) {
+ pCurr = pFootnoteText + tIndex;
+ pCurr->tInfo.szText = NULL;
+ ulOffset = ulGetLong(tIndex * 8 + 4, aucBuffer);
+ DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfText + ulOffset;
+ DBG_HEX(ulCharPos);
+ DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosStart = ulCharPos;
+ ulOffset = ulGetLong((tIndex + 1) * 8 + 4, aucBuffer);
+ DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfText + ulOffset;
+ DBG_HEX(ulCharPos);
+ DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosNext = ulCharPos;
+ pCurr->bUseful = pCurr->ulCharPosStart != pCurr->ulCharPosNext;
+ }
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet0FootnotesInfoAndText */
+
+ /*
+ * Build the lists note information for Word for DOS files
+ */
+ static void
+ vGet0NotesInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ TRACE_MSG("vGet0NotesInfo");
+
+ vGet0FootnotesInfoAndText(pFile, aucHeader);
+ /* There are no endnotes in a Word for DOS file */
+ } /* end of vGet0NotesInfo */
+
+ /*
+ * Build the list with footnote information for WinWord 1/2 files
+ */
+ static void
+ vGet2FootnotesInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ UCHAR *aucBuffer;
+ ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginFootnoteInfo;
+ size_t tFootnoteInfoLen;
+ size_t tIndex;
+
+ TRACE_MSG("vGet2FootnotesInfo");
+
+ fail(pFile == NULL || aucHeader == NULL);
+
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
+ NO_DBG_HEX(ulBeginOfText);
+ ulBeginFootnoteInfo = ulGetLong(0x64, aucHeader); /* fcPlcffndRef */
+ NO_DBG_HEX(ulBeginFootnoteInfo);
+ tFootnoteInfoLen = (size_t)usGetWord(0x68, aucHeader); /* cbPlcffndRef */
+ NO_DBG_DEC(tFootnoteInfoLen);
+
+ if (tFootnoteInfoLen < 10) {
+ DBG_MSG("No Footnotes in this document");
+ return;
+ }
+
+ aucBuffer = xmalloc(tFootnoteInfoLen);
+ if (!bReadBytes(aucBuffer,
+ tFootnoteInfoLen, ulBeginFootnoteInfo, pFile)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tFootnoteInfoLen);
+
+ fail(tFootnoteListLength != 0);
+ tFootnoteListLength = (tFootnoteInfoLen - 4) / 6;
+ fail(tFootnoteListLength == 0);
+
+ fail(aulFootnoteList != NULL);
+ aulFootnoteList = xcalloc(tFootnoteListLength, sizeof(ULONG));
+
+ for (tIndex = 0; tIndex < tFootnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
+ NO_DBG_HEX(ulFileOffset);
+ aulFootnoteList[tIndex] = ulFileOffset;
+ }
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet2FootnotesInfo */
+
+ /*
+ * Build the list with footnote text information for WinWord 1/2 files
+ */
+ static void
+ vGet2FootnotesText(FILE *pFile, const UCHAR *aucHeader)
+ {
+ footnote_local_type *pCurr;
+ UCHAR *aucBuffer;
+ ULONG ulCharPos, ulBeginOfFootnotes, ulOffset, ulBeginFootnoteText;
+ size_t tFootnoteTextLen;
+ size_t tIndex;
+
+ TRACE_MSG("vGet2FootnotesText");
+
+ fail(pFile == NULL || aucHeader == NULL);
+
+ ulBeginOfFootnotes = ulGetLong(0x18, aucHeader); /* fcMin */
+ ulBeginOfFootnotes += ulGetLong(0x34, aucHeader); /* ccpText */
+ NO_DBG_HEX(ulBeginOfFootnotes);
+
+ ulBeginFootnoteText = ulGetLong(0x6a, aucHeader); /* fcPlcffndTxt */
+ NO_DBG_HEX(ulBeginFootnoteText);
+ tFootnoteTextLen =
+ (size_t)usGetWord(0x6e, aucHeader); /* cbPlcffndTxt */
+ NO_DBG_DEC(tFootnoteTextLen);
+
+ if (tFootnoteTextLen < 12) {
+ DBG_MSG("No Footnote text in this document");
+ return;
+ }
+
+ aucBuffer = xmalloc(tFootnoteTextLen);
+ if (!bReadBytes(aucBuffer,
+ tFootnoteTextLen, ulBeginFootnoteText, pFile)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tFootnoteTextLen);
+
+ fail(tFootnoteTextLength != 0);
+ tFootnoteTextLength = tFootnoteTextLen / 4 - 2;
+ fail(tFootnoteTextLength == 0);
+
+ fail(pFootnoteText != NULL);
+ pFootnoteText = xcalloc(tFootnoteTextLength,
+ sizeof(footnote_local_type));
+
+ for (tIndex = 0; tIndex < tFootnoteTextLength; tIndex++) {
+ pCurr = pFootnoteText + tIndex;
+ pCurr->tInfo.szText = NULL;
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosStart = ulCharPos;
+ ulOffset = ulGetLong(tIndex * 4 + 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosNext = ulCharPos;
+ pCurr->bUseful = pCurr->ulCharPosStart != pCurr->ulCharPosNext;
+ }
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet2FootnotesText */
+
+ /*
+ * Build the lists note information for WinWord 1/2 files
+ */
+ static void
+ vGet2NotesInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ TRACE_MSG("vGet2NotesInfo");
+
+ vGet2FootnotesInfo(pFile, aucHeader);
+ vGet2FootnotesText(pFile, aucHeader);
+ /* There are no endnotes in a WinWord 1/2 file */
+ } /* end of vGet2NotesInfo */
+
+ /*
* Build the list with footnote information for Word 6/7 files
*/
static void
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:41,57 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:302,321
UCHAR *aucBuffer;
ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginFootnoteInfo;
size_t tFootnoteInfoLen;
- int iIndex;
+ size_t tIndex;
+ TRACE_MSG("vGet6FootnotesInfo");
+
fail(pFile == NULL || aucHeader == NULL);
fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
fail(aulBBD == NULL);
- ulBeginOfText = ulGetLong(0x18, aucHeader);
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
NO_DBG_HEX(ulBeginOfText);
- ulBeginFootnoteInfo = ulGetLong(0x68, aucHeader);
+ ulBeginFootnoteInfo = ulGetLong(0x68, aucHeader); /* fcPlcffndRef */
NO_DBG_HEX(ulBeginFootnoteInfo);
- tFootnoteInfoLen = (size_t)ulGetLong(0x6c, aucHeader);
+ tFootnoteInfoLen =
+ (size_t)ulGetLong(0x6c, aucHeader); /* lcbPlcffndRef */
NO_DBG_DEC(tFootnoteInfoLen);
if (tFootnoteInfoLen < 10) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:75,91 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:339,427
fail(aulFootnoteList != NULL);
aulFootnoteList = xcalloc(tFootnoteListLength, sizeof(ULONG));
- for (iIndex = 0; iIndex < (int)tFootnoteListLength; iIndex++) {
- ulOffset = ulGetLong(iIndex * 4, aucBuffer);
+ for (tIndex = 0; tIndex < tFootnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
NO_DBG_HEX(ulOffset);
ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
NO_DBG_HEX(ulFileOffset);
- aulFootnoteList[iIndex] = ulFileOffset;
+ aulFootnoteList[tIndex] = ulFileOffset;
}
aucBuffer = xfree(aucBuffer);
} /* end of vGet6FootnotesInfo */
/*
+ * Build the list with footnote text information for Word 6/7 files
+ */
+ static void
+ vGet6FootnotesText(FILE *pFile, ULONG ulStartBlock,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const UCHAR *aucHeader)
+ {
+ footnote_local_type *pCurr;
+ UCHAR *aucBuffer;
+ ULONG ulCharPos, ulBeginOfFootnotes, ulOffset, ulBeginFootnoteText;
+ size_t tFootnoteTextLen;
+ size_t tIndex;
+
+ TRACE_MSG("vGet6FootnotesText");
+
+ fail(pFile == NULL || aucHeader == NULL);
+ fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
+ fail(aulBBD == NULL);
+
+ ulBeginOfFootnotes = ulGetLong(0x18, aucHeader); /* fcMin */
+ ulBeginOfFootnotes += ulGetLong(0x34, aucHeader); /* ccpText */
+ NO_DBG_HEX(ulBeginOfFootnotes);
+
+ ulBeginFootnoteText = ulGetLong(0x70, aucHeader); /* fcPlcffndTxt */
+ NO_DBG_HEX(ulBeginFootnoteText);
+ tFootnoteTextLen =
+ (size_t)ulGetLong(0x74, aucHeader); /* lcbPlcffndTxt */
+ NO_DBG_DEC(tFootnoteTextLen);
+
+ if (tFootnoteTextLen < 12) {
+ DBG_MSG("No Footnote text in this document");
+ return;
+ }
+
+ aucBuffer = xmalloc(tFootnoteTextLen);
+ if (!bReadBuffer(pFile, ulStartBlock,
+ aulBBD, tBBDLen, BIG_BLOCK_SIZE,
+ aucBuffer, ulBeginFootnoteText, tFootnoteTextLen)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tFootnoteTextLen);
+
+ fail(tFootnoteTextLength != 0);
+ tFootnoteTextLength = tFootnoteTextLen / 4 - 2;
+ fail(tFootnoteTextLength == 0);
+
+ fail(pFootnoteText != NULL);
+ pFootnoteText = xcalloc(tFootnoteTextLength,
+ sizeof(footnote_local_type));
+
+ for (tIndex = 0; tIndex < tFootnoteTextLength; tIndex++) {
+ pCurr = pFootnoteText + tIndex;
+ pCurr->tInfo.szText = NULL;
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosStart = ulCharPos;
+ ulOffset = ulGetLong(tIndex * 4 + 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosNext = ulCharPos;
+ pCurr->bUseful = pCurr->ulCharPosStart != pCurr->ulCharPosNext;
+ }
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet6FootnotesText */
+
+ /*
* Build the list with endnote information for Word 6/7 files
*/
static void
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:96,112 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:432,451
UCHAR *aucBuffer;
ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginEndnoteInfo;
size_t tEndnoteInfoLen;
- int iIndex;
+ size_t tIndex;
+ TRACE_MSG("vGet6EndnotesInfo");
+
fail(pFile == NULL || aucHeader == NULL);
fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
fail(aulBBD == NULL);
- ulBeginOfText = ulGetLong(0x18, aucHeader);
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
NO_DBG_HEX(ulBeginOfText);
- ulBeginEndnoteInfo = ulGetLong(0x1d2, aucHeader);
+ ulBeginEndnoteInfo = ulGetLong(0x1d2, aucHeader); /* fcPlcfendRef */
NO_DBG_HEX(ulBeginEndnoteInfo);
- tEndnoteInfoLen = (size_t)ulGetLong(0x1d6, aucHeader);
+ tEndnoteInfoLen =
+ (size_t)ulGetLong(0x1d6, aucHeader); /* lcbPlcfendRef */
NO_DBG_DEC(tEndnoteInfoLen);
if (tEndnoteInfoLen < 10) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:130,141 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:469,480
fail(aulEndnoteList != NULL);
aulEndnoteList = xcalloc(tEndnoteListLength, sizeof(ULONG));
- for (iIndex = 0; iIndex < (int)tEndnoteListLength; iIndex++) {
- ulOffset = ulGetLong(iIndex * 4, aucBuffer);
+ for (tIndex = 0; tIndex < tEndnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
NO_DBG_HEX(ulOffset);
ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
NO_DBG_HEX(ulFileOffset);
- aulEndnoteList[iIndex] = ulFileOffset;
+ aulEndnoteList[tIndex] = ulFileOffset;
}
aucBuffer = xfree(aucBuffer);
} /* end of vGet6EndnotesInfo */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:148,155 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:487,498
const ULONG *aulBBD, size_t tBBDLen,
const UCHAR *aucHeader)
{
+ TRACE_MSG("vGet6NotesInfo");
+
vGet6FootnotesInfo(pFile, ulStartBlock,
aulBBD, tBBDLen, aucHeader);
+ vGet6FootnotesText(pFile, ulStartBlock,
+ aulBBD, tBBDLen, aucHeader);
vGet6EndnotesInfo(pFile, ulStartBlock,
aulBBD, tBBDLen, aucHeader);
} /* end of vGet6NotesInfo */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:166,181 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:509,525
const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginFootnoteInfo;
- ULONG ulTableSize, ulTableStartBlock;
size_t tFootnoteInfoLen, tBlockDepotLen, tBlockSize;
- int iIndex;
- USHORT usDocStatus;
+ size_t tIndex;
- ulBeginOfText = ulGetLong(0x18, aucHeader);
+ TRACE_MSG("vGet8FootnotesInfo");
+
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
NO_DBG_HEX(ulBeginOfText);
- ulBeginFootnoteInfo = ulGetLong(0xaa, aucHeader);
+ ulBeginFootnoteInfo = ulGetLong(0xaa, aucHeader); /* fcPlcffndRef */
NO_DBG_HEX(ulBeginFootnoteInfo);
- tFootnoteInfoLen = (size_t)ulGetLong(0xae, aucHeader);
+ tFootnoteInfoLen =
+ (size_t)ulGetLong(0xae, aucHeader); /* lcbPlcffndRef */
NO_DBG_DEC(tFootnoteInfoLen);
if (tFootnoteInfoLen < 10) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:183,204 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:527,540
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- NO_DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_MSG("No notes information");
+ NO_DBG_DEC(pPPS->tTable.ulSB);
+ NO_DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
+ DBG_MSG("No footnotes information");
return;
}
- NO_DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:210,216 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:546,552
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tFootnoteInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginFootnoteInfo, tFootnoteInfoLen)) {
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:225,241 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:561,665
fail(aulFootnoteList != NULL);
aulFootnoteList = xcalloc(tFootnoteListLength, sizeof(ULONG));
- for (iIndex = 0; iIndex < (int)tFootnoteListLength; iIndex++) {
- ulOffset = ulGetLong(iIndex * 4, aucBuffer);
+ for (tIndex = 0; tIndex < tFootnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
NO_DBG_HEX(ulOffset);
ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
NO_DBG_HEX(ulFileOffset);
- aulFootnoteList[iIndex] = ulFileOffset;
+ aulFootnoteList[tIndex] = ulFileOffset;
}
aucBuffer = xfree(aucBuffer);
} /* end of vGet8FootnotesInfo */
/*
+ * Build the list with footnote text information for Word 8/9/10 files
+ */
+ static void
+ vGet8FootnotesText(FILE *pFile, const pps_info_type *pPPS,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const ULONG *aulSBD, size_t tSBDLen,
+ const UCHAR *aucHeader)
+ {
+ footnote_local_type *pCurr;
+ const ULONG *aulBlockDepot;
+ UCHAR *aucBuffer;
+ ULONG ulCharPos, ulBeginOfFootnotes, ulOffset, ulBeginFootnoteText;
+ size_t tFootnoteTextLen, tBlockDepotLen, tBlockSize;
+ size_t tIndex;
+
+ TRACE_MSG("vGet8FootnotesText");
+
+ ulBeginOfFootnotes = ulGetLong(0x18, aucHeader); /* fcMin */
+ ulBeginOfFootnotes += ulGetLong(0x4c, aucHeader); /* ccpText */
+ NO_DBG_HEX(ulBeginOfFootnotes);
+
+ ulBeginFootnoteText = ulGetLong(0xb2, aucHeader); /* fcPlcffndTxt */
+ NO_DBG_HEX(ulBeginFootnoteText);
+ tFootnoteTextLen =
+ (size_t)ulGetLong(0xb6, aucHeader); /* lcbPlcffndTxt */
+ NO_DBG_DEC(tFootnoteTextLen);
+
+ if (tFootnoteTextLen < 12) {
+ DBG_MSG("No Footnote text in this document");
+ return;
+ }
+
+ NO_DBG_DEC(pPPS->tTable.ulSB);
+ NO_DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
+ DBG_MSG("No footnote text information");
+ return;
+ }
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
+ /* Use the Small Block Depot */
+ aulBlockDepot = aulSBD;
+ tBlockDepotLen = tSBDLen;
+ tBlockSize = SMALL_BLOCK_SIZE;
+ } else {
+ /* Use the Big Block Depot */
+ aulBlockDepot = aulBBD;
+ tBlockDepotLen = tBBDLen;
+ tBlockSize = BIG_BLOCK_SIZE;
+ }
+ aucBuffer = xmalloc(tFootnoteTextLen);
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
+ aulBlockDepot, tBlockDepotLen, tBlockSize,
+ aucBuffer, ulBeginFootnoteText, tFootnoteTextLen)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tFootnoteTextLen);
+
+ fail(tFootnoteTextLength != 0);
+ tFootnoteTextLength = tFootnoteTextLen / 4 - 2;
+ fail(tFootnoteTextLength == 0);
+
+ fail(pFootnoteText != NULL);
+ pFootnoteText = xcalloc(tFootnoteTextLength,
+ sizeof(footnote_local_type));
+
+ for (tIndex = 0; tIndex < tFootnoteTextLength; tIndex++) {
+ pCurr = pFootnoteText + tIndex;
+ pCurr->tInfo.szText = NULL;
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosStart = ulCharPos;
+ ulOffset = ulGetLong(tIndex * 4 + 4, aucBuffer);
+ NO_DBG_HEX(ulOffset);
+ ulCharPos = ulBeginOfFootnotes + ulOffset;
+ NO_DBG_HEX(ulCharPos);
+ NO_DBG_HEX(ulCharPos2FileOffset(ulCharPos));
+ pCurr->ulCharPosNext = ulCharPos;
+ pCurr->bUseful = pCurr->ulCharPosStart != pCurr->ulCharPosNext;
+ }
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet8FootnotesText */
+
+ /*
* Build the list with endnote information for Word 8/9/10 files
*/
static void
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:247,285 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:671,701
const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulFileOffset, ulBeginOfText, ulOffset, ulBeginEndnoteInfo;
- ULONG ulTableSize, ulTableStartBlock;
size_t tEndnoteInfoLen, tBlockDepotLen, tBlockSize;
- int iIndex;
- USHORT usDocStatus;
+ size_t tIndex;
- ulBeginOfText = ulGetLong(0x18, aucHeader);
+ TRACE_MSG("vGet8EndnotesInfo");
+
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
NO_DBG_HEX(ulBeginOfText);
- ulBeginEndnoteInfo = ulGetLong(0x20a, aucHeader);
+ ulBeginEndnoteInfo = ulGetLong(0x20a, aucHeader); /* fcPlcfendRef */
NO_DBG_HEX(ulBeginEndnoteInfo);
- tEndnoteInfoLen = (size_t)ulGetLong(0x20e, aucHeader);
+ tEndnoteInfoLen = (size_t)ulGetLong(0x20e, aucHeader); /* lcbPlcfendRef */
NO_DBG_DEC(tEndnoteInfoLen);
if (tEndnoteInfoLen < 10) {
- DBG_MSG("No Endnotes in this document");
+ DBG_MSG("No endnotes in this document");
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- NO_DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_MSG("No notes information");
+ NO_DBG_DEC(pPPS->tTable.ulSB);
+ NO_DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
+ DBG_MSG("No endnotes information");
return;
}
- NO_DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:291,297 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:707,713
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tEndnoteInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginEndnoteInfo, tEndnoteInfoLen)) {
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:306,317 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:722,733
fail(aulEndnoteList != NULL);
aulEndnoteList = xcalloc(tEndnoteListLength, sizeof(ULONG));
- for (iIndex = 0; iIndex < (int)tEndnoteListLength; iIndex++) {
- ulOffset = ulGetLong(iIndex * 4, aucBuffer);
+ for (tIndex = 0; tIndex < tEndnoteListLength; tIndex++) {
+ ulOffset = ulGetLong(tIndex * 4, aucBuffer);
NO_DBG_HEX(ulOffset);
ulFileOffset = ulCharPos2FileOffset(ulBeginOfText + ulOffset);
NO_DBG_HEX(ulFileOffset);
- aulEndnoteList[iIndex] = ulFileOffset;
+ aulEndnoteList[tIndex] = ulFileOffset;
}
aucBuffer = xfree(aucBuffer);
} /* end of vGet8EndnotesInfo */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:325,332 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:741,752
const ULONG *aulSBD, size_t tSBDLen,
const UCHAR *aucHeader)
{
+ TRACE_MSG("vGet8NotesInfo");
+
vGet8FootnotesInfo(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
+ vGet8FootnotesText(pFile, pPPS,
+ aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
vGet8EndnotesInfo(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
} /* end of vGet8NotesInfo */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:340,350 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:760,784
const ULONG *aulSBD, size_t tSBDLen,
const UCHAR *aucHeader, int iWordVersion)
{
- fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
- fail(iWordVersion < 6 || iWordVersion > 8);
- fail(aulBBD == NULL || aulSBD == NULL);
+ TRACE_MSG("vGetNotesInfo");
+ fail(pFile == NULL);
+ fail(pPPS == NULL && iWordVersion >= 6);
+ fail(aulBBD == NULL && tBBDLen != 0);
+ fail(aulSBD == NULL && tSBDLen != 0);
+ fail(aucHeader == NULL);
+
switch (iWordVersion) {
+ case 0:
+ vGet0NotesInfo(pFile, aucHeader);
+ break;
+ case 1:
+ case 2:
+ vGet2NotesInfo(pFile, aucHeader);
+ break;
+ case 4:
+ case 5:
+ break;
case 6:
case 7:
vGet6NotesInfo(pFile, pPPS->tWordDocument.ulSB,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:361,366 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:795,843
} /* end of vGetNotesInfo */
/*
+ * vPrepareFootnoteText - prepare the footnote text
+ */
+ void
+ vPrepareFootnoteText(FILE *pFile)
+ {
+ footnote_local_type *pCurr;
+ size_t tFootnote;
+
+ fail(pFile == NULL);
+ fail(pFootnoteText == NULL && tFootnoteTextLength != 0);
+
+ if (pFootnoteText == NULL || tFootnoteTextLength == 0) {
+ /* No information */
+ return;
+ }
+
+ /* Fill text and useful-ness */
+ for (tFootnote = 0; tFootnote < tFootnoteTextLength; tFootnote++) {
+ pCurr = pFootnoteText + tFootnote;
+ pCurr->bUseful = pCurr->ulCharPosStart != pCurr->ulCharPosNext;
+ if (pCurr->bUseful) {
+ pCurr->tInfo.szText = szFootnoteDecryptor(pFile,
+ pCurr->ulCharPosStart,
+ pCurr->ulCharPosNext);
+ } else {
+ pCurr->tInfo.szText = NULL;
+ }
+ }
+ } /* end of vPrepareFootnoteText */
+
+ /*
+ * szGetFootnootText - get the text of the spefified footnote
+ */
+ const char *
+ szGetFootnootText(UINT uiFootnoteIndex)
+ {
+ if ((size_t)uiFootnoteIndex >= tFootnoteTextLength) {
+ return NULL;
+ }
+ return pFootnoteText[uiFootnoteIndex].tInfo.szText;
+ } /* end of szGetFootnootText */
+
+ /*
* Get the notetype of the note at the given fileoffset
*/
notetype_enum
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/notes.c:367,372 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/notes.c:844,851
eGetNotetype(ULONG ulFileOffset)
{
size_t tIndex;
+
+ TRACE_MSG("eGetNotetype");
fail(aulFootnoteList == NULL && tFootnoteListLength != 0);
fail(aulEndnoteList == NULL && tEndnoteListLength != 0);
[jmk] --rw-rw-r-- M 499692 jmk sys 24813 Jan 14 12:57 sys/src/cmd/aux/antiword/notes.c
[jmk] --rw-rw-r-- M 499692 jmk sys 24707 Jan 14 12:57 sys/src/cmd/aux/antiword/options.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:1,6
/*
* options.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Read and write the options
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:10,19 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:10,20
#include <stdlib.h>
#include <string.h>
#if defined(__riscos)
- #include "wimpt.h"
+ #include "DeskLib:Error.h"
+ #include "DeskLib:Wimp.h"
#else
#include <stdlib.h>
- #if defined(__dos)
+ #if defined(__dos) || defined(N_PLAT_NLM)
extern int getopt(int, char **, const char *);
#else
#include <unistd.h>
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:28,33 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:29,36
#define SHOW_IMAGES "set show_images=%d"
#define HIDE_HIDDEN_TEXT "set hide_hidden_text=%d"
#define SCALE_FACTOR_START "set scale_factor_start=%d"
+ #else
+ #define LEAFNAME_SIZE (32+1)
#endif /* __riscos */
/* Current values for options */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:69,76 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:72,80
conversion_text,
#endif /* __riscos */
TRUE,
+ TRUE,
FALSE,
- encoding_iso_8859_1,
+ encoding_latin_1,
INT_MAX,
INT_MAX,
level_default,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:81,87 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:85,274
};
+ #if !defined(__riscos)
/*
+ * bCorrectPapersize - see if the papersize is correct
+ *
+ * TRUE if the papersize is correct, otherwise FALSE
+ */
+ static BOOL
+ bCorrectPapersize(const char *szName, conversion_type eConversionType)
+ {
+ const papersize_type *pPaperSize;
+
+ for (pPaperSize = atPaperSizes;
+ pPaperSize->szName[0] != '\0';
+ pPaperSize++) {
+ if (!STRCEQ(pPaperSize->szName, szName)) {
+ continue;
+ }
+ DBG_DEC(pPaperSize->usWidth);
+ DBG_DEC(pPaperSize->usHeight);
+ tOptionsCurr.eConversionType = eConversionType;
+ tOptionsCurr.iPageHeight = (int)pPaperSize->usHeight;
+ tOptionsCurr.iPageWidth = (int)pPaperSize->usWidth;
+ return TRUE;
+ }
+ return FALSE;
+ } /* end of bCorrectPapersize */
+
+ /*
+ * szCreateSuffix - create a suffix for the file
+ *
+ * Returns the suffix
+ */
+ static const char *
+ szCreateSuffix(const char *szLeafname)
+ {
+ const char *pcDot;
+
+ pcDot = strrchr(szLeafname, '.');
+ if (pcDot != NULL && STRCEQ(pcDot, ".txt")) {
+ /* There is already a .txt suffix, no need for another one */
+ return "";
+ }
+ return ".txt";
+ } /* end of szCreateSuffix */
+
+ /*
+ * eMappingFile2Encoding - convert the mapping file to an encoding
+ */
+ static encoding_type
+ eMappingFile2Encoding(const char *szLeafname)
+ {
+ char szMappingFile[LEAFNAME_SIZE+4];
+
+ fail(szLeafname == NULL);
+
+ if (strlen(szLeafname) + 4 >= sizeof(szMappingFile)) {
+ DBG_MSG(szLeafname);
+ return encoding_latin_1;
+ }
+
+ sprintf(szMappingFile, "%s%s", szLeafname, szCreateSuffix(szLeafname));
+
+ DBG_MSG(szMappingFile);
+
+ if (STRCEQ(szMappingFile, MAPPING_FILE_UTF_8)) {
+ return encoding_utf_8;
+ }
+ if (STRCEQ(szMappingFile, MAPPING_FILE_CP852) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_CP1250) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_8859_2)) {
+ return encoding_latin_2;
+ }
+ if (STRCEQ(szMappingFile, MAPPING_FILE_KOI8_R) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_KOI8_U) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_CP866) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_CP1251) ||
+ STRCEQ(szMappingFile, MAPPING_FILE_8859_5)) {
+ return encoding_cyrillic;
+ }
+ return encoding_latin_1;
+ } /* end of eMappingFile2Encoding */
+ #endif /* !__riscos */
+
+ /*
+ * pOpenCharacterMappingFile - open the mapping file
+ *
+ * Returns the file pointer or NULL
+ */
+ static FILE *
+ pOpenCharacterMappingFile(const char *szLeafname)
+ {
+ #if !defined(__riscos)
+ FILE *pFile;
+ const char *szHome, *szAntiword, *szSuffix;
+ size_t tFilenameLen;
+ char szMappingFile[PATH_MAX+1];
+ #endif /* !__riscos */
+
+ if (szLeafname == NULL || szLeafname[0] == '\0') {
+ return NULL;
+ }
+
+ DBG_MSG(szLeafname);
+
+ #if defined(__riscos)
+ return fopen(szLeafname, "r");
+ #else
+ /* Set the suffix */
+ szSuffix = szCreateSuffix(szLeafname);
+
+ /* Set length */
+ tFilenameLen = strlen(szLeafname) + strlen(szSuffix);
+
+ /* Try the environment version of the mapping file */
+ szAntiword = szGetAntiwordDirectory();
+ if (szAntiword != NULL && szAntiword[0] != '\0') {
+ if (strlen(szAntiword) + tFilenameLen <
+ sizeof(szMappingFile) -
+ sizeof(FILE_SEPARATOR)) {
+ sprintf(szMappingFile,
+ "%s" FILE_SEPARATOR "%s%s",
+ szAntiword, szLeafname, szSuffix);
+ DBG_MSG(szMappingFile);
+ pFile = fopen(szMappingFile, "r");
+ if (pFile != NULL) {
+ return pFile;
+ }
+ } else {
+ werr(0, "Environment mappingfilename ignored");
+ }
+ }
+
+ /* Try the local version of the mapping file */
+ szHome = szGetHomeDirectory();
+ if (strlen(szHome) + tFilenameLen <
+ sizeof(szMappingFile) -
+ sizeof(ANTIWORD_DIR) -
+ 2 * sizeof(FILE_SEPARATOR)) {
+ sprintf(szMappingFile,
+ "%s" FILE_SEPARATOR ANTIWORD_DIR FILE_SEPARATOR "%s%s",
+ szHome, szLeafname, szSuffix);
+ DBG_MSG(szMappingFile);
+ pFile = fopen(szMappingFile, "r");
+ if (pFile != NULL) {
+ return pFile;
+ }
+ } else {
+ werr(0, "Local mappingfilename too long, ignored");
+ }
+
+ /* Try the global version of the mapping file */
+ if (tFilenameLen <
+ sizeof(szMappingFile) -
+ sizeof(GLOBAL_ANTIWORD_DIR) -
+ sizeof(FILE_SEPARATOR)) {
+ sprintf(szMappingFile,
+ GLOBAL_ANTIWORD_DIR FILE_SEPARATOR "%s%s",
+ szLeafname, szSuffix);
+ DBG_MSG(szMappingFile);
+ pFile = fopen(szMappingFile, "r");
+ if (pFile != NULL) {
+ return pFile;
+ }
+ } else {
+ werr(0, "Global mappingfilename too long, ignored");
+ }
+ werr(0, "I can't open your mapping file (%s%s)\n"
+ "It is not in '%s" FILE_SEPARATOR ANTIWORD_DIR "' nor in '"
+ GLOBAL_ANTIWORD_DIR "'.", szLeafname, szSuffix, szHome);
+ return NULL;
+ #endif /* __riscos */
+ } /* end of pOpenCharacterMappingFile */
+
+ /*
+ * vCloseCharacterMappingFile - close the mapping file
+ */
+ static void
+ vCloseCharacterMappingFile(FILE *pFile)
+ {
+ (void)fclose(pFile);
+ } /* end of pCloseCharacterMappingFile */
+
+
+ /*
* iReadOptions - read options
*
* returns: -1: error
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:99,113 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:286,298
#else
extern char *optarg;
extern int optind;
- const papersize_type *pPaperSize;
- const char *szHome, *szAntiword;
char *pcChar, *szTmp;
int iChar;
- BOOL bFound;
- char szLeafname[32+1];
- char szMappingFile[PATH_MAX+1];
+ char szLeafname[LEAFNAME_SIZE];
#endif /* __riscos */
+ FILE *pCharacterMappingFile;
int iTmp;
+ BOOL bSuccess;
DBG_MSG("iReadOptions");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:175,184 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:360,373
werr(0, "Alphabet '%d' is not supported", iAlphabet);
return -1;
}
- if (bReadCharacterMappingTable(szAlphabet)) {
- return 1;
+ pCharacterMappingFile = pOpenCharacterMappingFile(szAlphabet);
+ if (pCharacterMappingFile != NULL) {
+ bSuccess = bReadCharacterMappingTable(pCharacterMappingFile);
+ vCloseCharacterMappingFile(pCharacterMappingFile);
+ } else {
+ bSuccess = FALSE;
}
- return -1;
+ return bSuccess ? 1 : -1;
#else
/* Environment */
szTmp = getenv("COLUMNS");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:196,214 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:385,407
DBG_DEC(tOptionsCurr.iParagraphBreak);
}
}
- if (is_locale_utf8()) {
- tOptionsCurr.eEncoding = encoding_utf8;
- strcpy(szLeafname, MAPPING_FILE_DEFAULT_8);
- } else {
- tOptionsCurr.eEncoding = encoding_iso_8859_1;
- strcpy(szLeafname, MAPPING_FILE_DEFAULT_1);
- }
+ strncpy(szLeafname, szGetDefaultMappingFile(), sizeof(szLeafname) - 1);
+ szLeafname[sizeof(szLeafname) - 1] = '\0';
/* Command line */
- while ((iChar = getopt(argc, argv, "Lhi:m:p:stw:x:")) != -1) {
+ while ((iChar = getopt(argc, argv, "La:fhi:m:p:rstw:x:")) != -1) {
switch (iChar) {
case 'L':
tOptionsCurr.bUseLandscape = TRUE;
break;
+ case 'a':
+ if (!bCorrectPapersize(optarg, conversion_pdf)) {
+ werr(0, "-a without a valid papersize");
+ return -1;
+ }
+ break;
+ case 'f':
+ tOptionsCurr.eConversionType = conversion_fmt_text;
+ break;
case 'h':
return 0;
case 'i':
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:243,280 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:436,451
strncpy(szLeafname, optarg, sizeof(szLeafname) - 1);
szLeafname[sizeof(szLeafname) - 1] = '\0';
DBG_MSG(szLeafname);
- if (STRCEQ(szLeafname, MAPPING_FILE_DEFAULT_8)) {
- tOptionsCurr.eEncoding = encoding_utf8;
- } else if (STRCEQ(szLeafname, MAPPING_FILE_DEFAULT_2)) {
- tOptionsCurr.eEncoding = encoding_iso_8859_2;
- } else {
- tOptionsCurr.eEncoding = encoding_iso_8859_1;
- }
- DBG_DEC(tOptionsCurr.eEncoding);
break;
case 'p':
- bFound = FALSE;
- for (pPaperSize = atPaperSizes;
- pPaperSize->szName[0] != '\0';
- pPaperSize++) {
- if (!STREQ(pPaperSize->szName, optarg)) {
- continue;
- }
- DBG_DEC(pPaperSize->usWidth);
- DBG_DEC(pPaperSize->usHeight);
- tOptionsCurr.eConversionType = conversion_ps;
- tOptionsCurr.iPageHeight =
- (int)pPaperSize->usHeight;
- tOptionsCurr.iPageWidth =
- (int)pPaperSize->usWidth;
- bFound = TRUE;
- break;
- }
- if (!bFound) {
+ if (!bCorrectPapersize(optarg, conversion_ps)) {
werr(0, "-p without a valid papersize");
return -1;
}
break;
+ case 'r':
+ tOptionsCurr.bRemoveRemovedText = FALSE;
+ break;
case 's':
tOptionsCurr.bHideHiddenText = FALSE;
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:297,303 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:468,474
if (STREQ(optarg, "db")) {
tOptionsCurr.iParagraphBreak = 0;
tOptionsCurr.eConversionType = conversion_xml;
- tOptionsCurr.eEncoding = encoding_utf8;
+ strcpy(szLeafname, MAPPING_FILE_UTF_8);
} else {
werr(0, "-x %s is not supported", optarg);
return -1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:308,322 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:479,511
}
}
+ tOptionsCurr.eEncoding = eMappingFile2Encoding(szLeafname);
+ DBG_DEC(tOptionsCurr.eEncoding);
+
if (tOptionsCurr.eConversionType == conversion_ps &&
- tOptionsCurr.eEncoding == encoding_utf8) {
+ tOptionsCurr.eEncoding == encoding_utf_8) {
werr(0,
"The combination PostScript and UTF-8 is not supported");
return -1;
}
- if (tOptionsCurr.eConversionType == conversion_ps) {
- /* PostScript mode */
+ if (tOptionsCurr.eConversionType == conversion_pdf &&
+ tOptionsCurr.eEncoding == encoding_utf_8) {
+ werr(0,
+ "The combination PDF and UTF-8 is not supported");
+ return -1;
+ }
+
+ if (tOptionsCurr.eConversionType == conversion_pdf &&
+ tOptionsCurr.eEncoding == encoding_cyrillic) {
+ werr(0,
+ "The combination PDF and Cyrillic is not supported");
+ return -1;
+ }
+
+ if (tOptionsCurr.eConversionType == conversion_ps ||
+ tOptionsCurr.eConversionType == conversion_pdf) {
+ /* PostScript or PDF mode */
if (tOptionsCurr.bUseLandscape) {
/* Swap the page height and width */
iTmp = tOptionsCurr.iPageHeight;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:331,388 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:520,533
DBG_DEC(tOptionsCurr.iParagraphBreak);
}
- /* Try the environment version of the mapping file */
- szAntiword = szGetAntiwordDirectory();
- if (szAntiword != NULL && szAntiword[0] != '\0') {
- if (strlen(szAntiword) + strlen(szLeafname) <
- sizeof(szMappingFile) -
- sizeof(FILE_SEPARATOR)) {
- sprintf(szMappingFile,
- "%s" FILE_SEPARATOR "%s",
- szAntiword, szLeafname);
- DBG_MSG(szMappingFile);
- if (bReadCharacterMappingTable(szMappingFile)) {
- return optind;
- }
- } else {
- werr(0, "Environment mappingfilename ignored");
- }
- }
- /* Try the local version of the mapping file */
- szHome = szGetHomeDirectory();
- if (strlen(szHome) + strlen(szLeafname) <
- sizeof(szMappingFile) -
- sizeof(ANTIWORD_DIR) -
- 2 * sizeof(FILE_SEPARATOR)) {
- sprintf(szMappingFile,
- "%s" FILE_SEPARATOR ANTIWORD_DIR FILE_SEPARATOR "%s",
- szHome, szLeafname);
- DBG_MSG(szMappingFile);
- if (bReadCharacterMappingTable(szMappingFile)) {
- return optind;
- }
+ pCharacterMappingFile = pOpenCharacterMappingFile(szLeafname);
+ if (pCharacterMappingFile != NULL) {
+ bSuccess = bReadCharacterMappingTable(pCharacterMappingFile);
+ vCloseCharacterMappingFile(pCharacterMappingFile);
} else {
- werr(0, "Local mappingfilename too long, ignored");
+ bSuccess = FALSE;
}
- /* Try the global version of the mapping file */
- if (strlen(szLeafname) <
- sizeof(szMappingFile) -
- sizeof(GLOBAL_ANTIWORD_DIR) -
- sizeof(FILE_SEPARATOR)) {
- sprintf(szMappingFile,
- GLOBAL_ANTIWORD_DIR FILE_SEPARATOR "%s",
- szLeafname);
- DBG_MSG(szMappingFile);
- if (bReadCharacterMappingTable(szMappingFile)) {
- return optind;
- }
- } else {
- werr(0, "Global mappingfilename too long, ignored");
- }
- werr(0, "I can't open your mapping file (%s)\n"
- "It is not in '%s" FILE_SEPARATOR ANTIWORD_DIR "' nor in '"
- GLOBAL_ANTIWORD_DIR "'.", szLeafname, szHome);
- return -1;
+ return bSuccess ? optind : -1;
#endif /* __riscos */
} /* end of iReadOptions */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:407,413 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:552,558
FILE *pFile;
char *szOptionsFile;
- DBG_MSG("vWriteOptions");
+ TRACE_MSG("vWriteOptions");
szOptionsFile = getenv("AntiWord$ChoicesSave");
if (szOptionsFile == NULL) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:443,451 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:588,596
* vChoicesOpenAction - action to be taken when the Choices window opens
*/
void
- vChoicesOpenAction(wimp_w tWindow)
+ vChoicesOpenAction(window_handle tWindow)
{
- DBG_MSG("vChoicesOpenAction");
+ TRACE_MSG("vChoicesOpenAction");
tOptionsTemp = tOptionsCurr;
if (tOptionsTemp.iParagraphBreak == 0) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:483,488 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:628,634
}
vUpdateWriteableNumber(tWindow,
CHOICES_SCALE_WRITEABLE, tOptionsTemp.iScaleFactor);
+ TRACE_MSG("end of vChoicesOpenAction");
} /* end of vChoicesOpenAction */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:489,497 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:635,643
* vDefaultButtonAction - action when the default button is clicked
*/
static void
- vDefaultButtonAction(wimp_w tWindow)
+ vDefaultButtonAction(window_handle tWindow)
{
- DBG_MSG("vDefaultButtonAction");
+ TRACE_MSG("vDefaultButtonAction");
tOptionsTemp = tOptionsDefault;
vUpdateRadioButton(tWindow, CHOICES_BREAK_BUTTON, TRUE);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:520,526 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:666,672
static void
vApplyButtonAction(void)
{
- DBG_MSG("vApplyButtonAction");
+ TRACE_MSG("vApplyButtonAction");
tOptionsCurr = tOptionsTemp;
} /* end of vApplyButtonAction */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:531,537 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:677,683
static void
vSaveButtonAction(void)
{
- DBG_MSG("vSaveButtonAction");
+ TRACE_MSG("vSaveButtonAction");
vApplyButtonAction();
vWriteOptions();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:541,547 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:687,693
* vSetParagraphBreak - set the paragraph break to the given number
*/
static void
- vSetParagraphBreak(wimp_w tWindow, int iNumber)
+ vSetParagraphBreak(window_handle tWindow, int iNumber)
{
tOptionsTemp.iParagraphBreak = iNumber;
if (tOptionsTemp.iParagraphBreak == 0) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:556,562 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:702,708
* vChangeParagraphBreak - change the paragraph break with the given number
*/
static void
- vChangeParagraphBreak(wimp_w tWindow, int iNumber)
+ vChangeParagraphBreak(window_handle tWindow, int iNumber)
{
int iTmp;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:575,581 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:721,727
* vChangeAutofiletype - invert the permission to autofiletype
*/
static void
- vChangeAutofiletype(wimp_w tWindow)
+ vChangeAutofiletype(window_handle tWindow)
{
tOptionsTemp.bAutofiletypeAllowed =
!tOptionsTemp.bAutofiletypeAllowed;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:588,594 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:734,740
* vChangeHiddenText - invert the hide/show hidden text
*/
static void
- vChangeHiddenText(wimp_w tWindow)
+ vChangeHiddenText(window_handle tWindow)
{
tOptionsTemp.bHideHiddenText = !tOptionsTemp.bHideHiddenText;
vUpdateRadioButton(tWindow,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:613,619 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:759,765
* vSetScaleFactor - set the scale factor to the given number
*/
static void
- vSetScaleFactor(wimp_w tWindow, int iNumber)
+ vSetScaleFactor(window_handle tWindow, int iNumber)
{
tOptionsTemp.iScaleFactor = iNumber;
vUpdateWriteableNumber(tWindow,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:625,631 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:771,777
* vChangeScaleFactor - change the scale factor with the given number
*/
static void
- vChangeScaleFactor(wimp_w tWindow, int iNumber)
+ vChangeScaleFactor(window_handle tWindow, int iNumber)
{
int iTmp;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:643,666 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:789,818
/*
* bChoicesMouseClick - handle a mouse click in the Choices window
*/
- void
- vChoicesMouseClick(wimp_mousestr *m)
+ BOOL
+ bChoicesMouseClick(event_pollblock *pEvent, void *pvReference)
{
- wimp_i tAction;
- BOOL bCloseWindow, bLeft, bRight;
+ icon_handle tAction;
+ mouse_block *pMouse;
+ BOOL bCloseWindow;
- bLeft = (m->bbits & wimp_BLEFT) == wimp_BLEFT;
- bRight = (m->bbits & wimp_BRIGHT) == wimp_BRIGHT;
- if (!bLeft && !bRight) {
- DBG_HEX(m->bbits);
- return;
+ TRACE_MSG("bChoicesMouseClick");
+
+ fail(pEvent == NULL);
+ fail(pEvent->type != event_CLICK);
+
+ pMouse = &pEvent->data.mouse;
+ if (!pMouse->button.data.select && !pMouse->button.data.adjust) {
+ /* Not handled here */
+ DBG_HEX(pMouse->button.value);
+ return FALSE;
}
/* Which action should be taken */
- tAction = m->i;
- if (bRight) {
- /* The right button reverses the direction */
- switch (m->i) {
+ tAction = pMouse->icon;
+ if (pMouse->button.data.adjust) {
+ /* The adjust button reverses the direction */
+ switch (pMouse->icon) {
case CHOICES_BREAK_UP_BUTTON:
tAction = CHOICES_BREAK_DOWN_BUTTON;
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:682,688 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:834,840
bCloseWindow = FALSE;
switch (tAction) {
case CHOICES_DEFAULT_BUTTON:
- vDefaultButtonAction(m->w);
+ vDefaultButtonAction(pMouse->window);
break;
case CHOICES_SAVE_BUTTON:
vSaveButtonAction();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:695,716 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:847,868
bCloseWindow = TRUE;
break;
case CHOICES_BREAK_BUTTON:
- vSetParagraphBreak(m->w, DEFAULT_SCREEN_WIDTH);
+ vSetParagraphBreak(pMouse->window, DEFAULT_SCREEN_WIDTH);
break;
case CHOICES_BREAK_UP_BUTTON:
- vChangeParagraphBreak(m->w, 1);
+ vChangeParagraphBreak(pMouse->window, 1);
break;
case CHOICES_BREAK_DOWN_BUTTON:
- vChangeParagraphBreak(m->w, -1);
+ vChangeParagraphBreak(pMouse->window, -1);
break;
case CHOICES_NO_BREAK_BUTTON:
- vSetParagraphBreak(m->w, 0);
+ vSetParagraphBreak(pMouse->window, 0);
break;
case CHOICES_AUTOFILETYPE_BUTTON:
- vChangeAutofiletype(m->w);
+ vChangeAutofiletype(pMouse->window);
break;
case CHOICES_HIDDEN_TEXT_BUTTON:
- vChangeHiddenText(m->w);
+ vChangeHiddenText(pMouse->window);
break;
case CHOICES_WITH_IMAGES_BUTTON:
vUseFontsImages(TRUE, TRUE);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:722,761 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:874,924
vUseFontsImages(FALSE, FALSE);
break;
case CHOICES_SCALE_UP_BUTTON:
- vChangeScaleFactor(m->w, 5);
+ vChangeScaleFactor(pMouse->window, 5);
break;
case CHOICES_SCALE_DOWN_BUTTON:
- vChangeScaleFactor(m->w, -5);
+ vChangeScaleFactor(pMouse->window, -5);
break;
default:
- DBG_DEC(m->i);
+ DBG_DEC(pMouse->icon);
break;
}
if (bCloseWindow) {
- wimpt_noerr(wimp_close_wind(m->w));
+ Error_CheckFatal(Wimp_CloseWindow(pMouse->window));
}
- } /* end of vChoicesMouseClick */
+ return TRUE;
+ } /* end of bChoicesMouseClick */
- void
- vChoicesKeyPressed(wimp_caretstr *c)
+ /*
+ * bChoicesKeyPressed - handle a key in the Choices window
+ */
+ BOOL
+ bChoicesKeyPressed(event_pollblock *pEvent, void *pvReference)
{
- wimp_icon tIcon;
+ icon_block tIcon;
+ caret_block *pCaret;
char *pcChar;
int iNumber;
- DBG_MSG("vChoicesKeyPressed");
+ DBG_MSG("bChoicesKeyPressed");
- fail(c == NULL);
+ fail(pEvent == NULL);
+ fail(pEvent->type != event_KEY);
- wimpt_noerr(wimp_get_icon_info(c->w, c->i, &tIcon));
- if ((tIcon.flags & (wimp_ITEXT|wimp_INDIRECT)) !=
- (wimp_ITEXT|wimp_INDIRECT)) {
- werr(1, "Icon %d must be indirected text", (int)c->i);
- return;
+ if (pEvent->data.key.code != '\r') {
+ Error_CheckFatal(Wimp_ProcessKey(pEvent->data.key.code));
+ return TRUE;
}
+
+ pCaret = &pEvent->data.key.caret;
+
+ Error_CheckFatal(Wimp_GetIconState(pCaret->window, pCaret->icon, &tIcon));
+ if (!tIcon.flags.data.text || !tIcon.flags.data.indirected) {
+ werr(1, "Icon %d must be indirected text", (int)pCaret->icon);
+ }
iNumber = (int)strtol(tIcon.data.indirecttext.buffer, &pcChar, 10);
- switch(c->i) {
+ switch(pCaret->icon) {
case CHOICES_BREAK_WRITEABLE:
if (*pcChar != '\0' && *pcChar != '\r') {
DBG_DEC(*pcChar);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:765,771 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:928,934
} else if (iNumber > MAX_SCREEN_WIDTH) {
iNumber = MAX_SCREEN_WIDTH;
}
- vSetParagraphBreak(c->w, iNumber);
+ vSetParagraphBreak(pCaret->window, iNumber);
break;
case CHOICES_SCALE_WRITEABLE:
if (*pcChar != '\0' && *pcChar != '\r') {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/options.c:776,786 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/options.c:939,950
} else if (iNumber > MAX_SCALE_FACTOR) {
iNumber = MAX_SCALE_FACTOR;
}
- vSetScaleFactor(c->w, iNumber);
+ vSetScaleFactor(pCaret->window, iNumber);
break;
default:
- DBG_DEC(c->i);
+ DBG_DEC(pCaret->icon);
break;
}
- } /* end of vChoicesKeyPressed */
+ return TRUE;
+ } /* end of bChoicesKeyPressed */
#endif /* __riscos */
[jmk] --rw-rw-r-- M 499692 jmk sys 24707 Jan 14 12:57 sys/src/cmd/aux/antiword/options.c
[jmk] --rw-rw-r-- M 499692 jmk sys 19601 Jan 14 12:57 sys/src/cmd/aux/antiword/out2window.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:1,6
/*
* out2window.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GPL
*
* Description:
* Output to a text window
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:11,17 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:11,16
#include <ctype.h>
#include "antiword.h"
-
/* Used for numbering the chapters */
static unsigned int auiHdrCounter[9];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:26,31 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:25,32
long lWidth;
USHORT usMaxFontSize;
+ TRACE_MSG("vString2Diagram");
+
fail(pDiag == NULL);
fail(pAnchor == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:51,56 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:52,58
/* Goto the start of the line */
pDiag->lXleft = 0;
+ TRACE_MSG("leaving vString2Diagram");
} /* end of vString2Diagram */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:61,66 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:63,70
{
long lX;
+ TRACE_MSG("vSetLeftIndentation");
+
fail(pDiag == NULL);
fail(lLeftIndentation < 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:81,86 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:85,92
output_type *pTmp;
long lNetWidth;
+ TRACE_MSG("lComputeNetWidth");
+
fail(pAnchor == NULL);
/* Step 1: Count all but the last sub-string */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:124,129 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:130,137
int iCounter;
BOOL bWasSpace, bIsSpace;
+ TRACE_MSG("iComputeHoles");
+
fail(pAnchor == NULL);
iCounter = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:143,149 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:151,157
} /* end of iComputeHoles */
/*
- * Align a string and insert it into the text
+ * vAlign2Window - Align a string and insert it into the text
*/
void
vAlign2Window(diagram_type *pDiag, output_type *pAnchor,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:151,161 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:159,169
{
long lNetWidth, lLeftIndentation;
+ TRACE_MSG("vAlign2Window");
+
fail(pDiag == NULL || pAnchor == NULL);
fail(lScreenWidth < lChar2MilliPoints(MIN_SCREEN_WIDTH));
- NO_DBG_MSG("vAlign2Window");
-
lNetWidth = lComputeNetWidth(pAnchor);
if (lScreenWidth > lChar2MilliPoints(MAX_SCREEN_WIDTH) ||
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:165,170 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:173,179
* Don't bother to align an empty line
*/
vString2Diagram(pDiag, pAnchor);
+ TRACE_MSG("leaving vAlign2Window #1");
return;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:189,198 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:198,208
break;
}
vString2Diagram(pDiag, pAnchor);
+ TRACE_MSG("leaving vAlign2Window #2");
} /* end of vAlign2Window */
/*
- * vJustify2Window
+ * vJustify2Window - Justify a string and insert it into the text
*/
void
vJustify2Window(diagram_type *pDiag, output_type *pAnchor,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:203,214 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:213,224
long lNetWidth, lSpaceWidth, lToAdd;
int iFillerLen, iHoles;
+ TRACE_MSG("vJustify2Window");
+
fail(pDiag == NULL || pAnchor == NULL);
fail(lScreenWidth < MIN_SCREEN_WIDTH);
fail(lRightIndentation > 0);
- NO_DBG_MSG("vJustify2Window");
-
if (ucAlignment != ALIGNMENT_JUSTIFY) {
vAlign2Window(pDiag, pAnchor, lScreenWidth, ucAlignment);
return;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:220,228 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:230,239
lNetWidth <= 0) {
/*
* Screenwidth is "infinite", so justify is not possible
- * Don't bother to align an empty line
+ * Don't bother to justify an empty line
*/
vString2Diagram(pDiag, pAnchor);
+ TRACE_MSG("leaving vJustify2Window #1");
return;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:249,259 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:260,271
DBG_DEC_C(lToAdd < 0, lToAdd);
if (lToAdd <= 0) {
vString2Diagram(pDiag, pAnchor);
+ TRACE_MSG("leaving vJustify2Window #2");
return;
}
- iHoles = iComputeHoles(pAnchor);
/* Justify by adding spaces */
+ iHoles = iComputeHoles(pAnchor);
for (pTmp = pAnchor; pTmp != NULL; pTmp = pTmp->pNext) {
fail(pTmp->tNextFree != strlen(pTmp->szStorage));
fail(lToAdd < 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:285,290 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:297,303
}
DBG_DEC_C(lToAdd != 0, lToAdd);
vString2Diagram(pDiag, pAnchor);
+ TRACE_MSG("leaving vJustify2Window #3");
} /* end of vJustify2Window */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:293,317 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:306,333
void
vResetStyles(void)
{
+ TRACE_MSG("vResetStyles");
+
(void)memset(auiHdrCounter, 0, sizeof(auiHdrCounter));
} /* end of vResetStyles */
/*
- * Add the style characters to the line
+ * tStyle2Window - Add the style characters to the line
*
* Returns the length of the resulting string
*/
size_t
- tStyle2Window(char *szLine, const style_block_type *pStyle,
+ tStyle2Window(char *szLine, size_t tLineSize, const style_block_type *pStyle,
const section_block_type *pSection)
{
char *pcTxt;
- int iIndex;
+ size_t tIndex, tStyleIndex;
BOOL bNeedPrevLvl;
level_type_enum eNumType;
- USHORT usStyleIndex;
UCHAR ucNFC;
+ TRACE_MSG("tStyle2Window");
+
fail(szLine == NULL || pStyle == NULL || pSection == NULL);
if (pStyle->usIstd == 0 || pStyle->usIstd > 9) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:319,333 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:335,349
return 0;
}
- usStyleIndex = pStyle->usIstd - 1;
/* Set the numbers */
- for (iIndex = 0; iIndex < 9; iIndex++) {
- if (iIndex == (int)usStyleIndex) {
- auiHdrCounter[iIndex]++;
- } else if (iIndex > (int)usStyleIndex) {
- auiHdrCounter[iIndex] = 0;
- } else if (auiHdrCounter[iIndex] == 0) {
- auiHdrCounter[iIndex] = 1;
+ tStyleIndex = (size_t)pStyle->usIstd - 1;
+ for (tIndex = 0; tIndex < 9; tIndex++) {
+ if (tIndex == tStyleIndex) {
+ auiHdrCounter[tIndex]++;
+ } else if (tIndex > tStyleIndex) {
+ auiHdrCounter[tIndex] = 0;
+ } else if (auiHdrCounter[tIndex] == 0) {
+ auiHdrCounter[tIndex] = 1;
}
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:337,358 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:353,384
return 0;
}
- pcTxt = szLine;
- bNeedPrevLvl = (pSection->usNeedPrevLvl & BIT(usStyleIndex)) != 0;
/* Print the numbers */
- for (iIndex = 0; iIndex <= (int)usStyleIndex; iIndex++) {
- if (iIndex == (int)usStyleIndex ||
- (bNeedPrevLvl && iIndex < (int)usStyleIndex)) {
- ucNFC = pSection->aucNFC[iIndex];
+ pcTxt = szLine;
+ bNeedPrevLvl = (pSection->usNeedPrevLvl & BIT(tStyleIndex)) != 0;
+ for (tIndex = 0; tIndex <= tStyleIndex; tIndex++) {
+ if (tIndex == tStyleIndex ||
+ (bNeedPrevLvl && tIndex < tStyleIndex)) {
+ if (pcTxt - szLine >= tLineSize - 25) {
+ /* Prevent a possible buffer overflow */
+ DBG_DEC(pcTxt - szLine);
+ DBG_DEC(tLineSize - 25);
+ DBG_FIXME();
+ szLine[0] = '\0';
+ return 0;
+ }
+ ucNFC = pSection->aucNFC[tIndex];
switch(ucNFC) {
case LIST_ARABIC_NUM:
+ case LIST_NUMBER_TXT:
+ case LIST_ORDINAL_TXT:
pcTxt += sprintf(pcTxt, "%u",
- auiHdrCounter[iIndex]);
+ auiHdrCounter[tIndex]);
break;
case LIST_UPPER_ROMAN:
case LIST_LOWER_ROMAN:
pcTxt += tNumber2Roman(
- auiHdrCounter[iIndex],
+ auiHdrCounter[tIndex],
ucNFC == LIST_UPPER_ROMAN,
pcTxt);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:359,378 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:385,408
case LIST_UPPER_ALPHA:
case LIST_LOWER_ALPHA:
pcTxt += tNumber2Alpha(
- auiHdrCounter[iIndex],
+ auiHdrCounter[tIndex],
ucNFC == LIST_UPPER_ALPHA,
pcTxt);
break;
+ case LIST_OUTLINE_NUM:
+ pcTxt += sprintf(pcTxt, "%02u",
+ auiHdrCounter[tIndex]);
+ break;
default:
DBG_DEC(ucNFC);
DBG_FIXME();
pcTxt += sprintf(pcTxt, "%u",
- auiHdrCounter[iIndex]);
+ auiHdrCounter[tIndex]);
break;
}
- if (iIndex < (int)usStyleIndex) {
+ if (tIndex < tStyleIndex) {
*pcTxt++ = '.';
- } else if (iIndex == (int)usStyleIndex) {
+ } else if (tIndex == tStyleIndex) {
*pcTxt++ = ' ';
}
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:398,409 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:428,441
{
int iLastIndex;
+ TRACE_MSG("vRemoveRowEnd");
+
fail(szRowTxt == NULL || szRowTxt[0] == '\0');
iLastIndex = (int)strlen(szRowTxt) - 1;
if (szRowTxt[iLastIndex] == TABLE_SEPARATOR ||
- szRowTxt[iLastIndex] == '\n') {
+ szRowTxt[iLastIndex] == (char)0x0a) {
szRowTxt[iLastIndex] = '\0';
iLastIndex--;
} else {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:410,416 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:442,448
DBG_HEX(szRowTxt[iLastIndex]);
}
- if (iLastIndex >= 0 && szRowTxt[iLastIndex] == '\n') {
+ if (iLastIndex >= 0 && szRowTxt[iLastIndex] == (char)0x0a) {
szRowTxt[iLastIndex] = '\0';
iLastIndex--;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:436,441 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:468,475
const char *pcTmp;
size_t tLengthMax, tLenPrev, tLen, tWidth;
+ TRACE_MSG("tComputeStringLengthMax");
+
fail(szString == NULL);
fail(tColumnWidthMax == 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:478,483 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:512,519
{
int iIndex;
+ TRACE_MSG("tGetBreakingPoint");
+
fail(szString == NULL);
fail(tLen > strlen(szString));
fail(tWidth > tColumnWidthMax);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:501,523 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:537,594
} /* end of tGetBreakingPoint */
/*
+ * tComputeColumnWidthMax - compute the maximum column width
+ */
+ static size_t
+ tComputeColumnWidthMax(short sWidth, long lCharWidth, double dFactor)
+ {
+ size_t tColumnWidthMax;
+
+ TRACE_MSG("tComputeColumnWidthMax");
+
+ fail(sWidth < 0);
+ fail(lCharWidth <= 0);
+ fail(dFactor <= 0.0);
+
+ tColumnWidthMax = (size_t)(
+ (lTwips2MilliPoints(sWidth) * dFactor + lCharWidth / 2.0) /
+ lCharWidth);
+ if (tColumnWidthMax == 0) {
+ /* Minimum column width */
+ return 1;
+ }
+ if (tColumnWidthMax > 1) {
+ /* Make room for the TABLE_SEPARATOR_CHAR */
+ tColumnWidthMax--;
+ }
+ NO_DBG_DEC(tColumnWidthMax);
+ return tColumnWidthMax;
+ } /* end of tComputeColumnWidthMax */
+
+ /*
* vTableRow2Window - put a table row into a diagram
*/
void
vTableRow2Window(diagram_type *pDiag, output_type *pOutput,
- const row_block_type *pRowInfo)
+ const row_block_type *pRowInfo,
+ conversion_type eConversionType, int iParagraphBreak)
{
output_type tRow;
char *aszColTxt[TABLE_COLUMN_MAX];
char *szLine, *pcTxt;
+ double dMagnify;
long lCharWidthLarge, lCharWidthSmall;
+ size_t tColumnWidthTotal, atColumnWidthMax[TABLE_COLUMN_MAX];
size_t tSize, tColumnWidthMax, tWidth, tLen;
int iIndex, iNbrOfColumns, iTmp;
BOOL bNotReady;
+ TRACE_MSG("vTableRow2Window");
+
fail(pDiag == NULL || pOutput == NULL || pRowInfo == NULL);
fail(pOutput->szStorage == NULL);
fail(pOutput->pNext != NULL);
+ fail(iParagraphBreak < 0);
/* Character sizes */
lCharWidthLarge = lComputeStringWidth("W", 1,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:548,553 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:619,630
NO_DBG_MSG(aszColTxt[iNbrOfColumns]);
}
+ /* Work around a bug in Word */
+ while (iNbrOfColumns > (int)pRowInfo->ucNumberOfColumns &&
+ pRowInfo->asColumnWidth[iNbrOfColumns] == 0) {
+ iNbrOfColumns--;
+ }
+
DBG_DEC_C(iNbrOfColumns != (int)pRowInfo->ucNumberOfColumns,
iNbrOfColumns);
DBG_DEC_C(iNbrOfColumns != (int)pRowInfo->ucNumberOfColumns,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:557,562 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:634,645
return;
}
+ #if defined(__FULL_TEXT_SEARCH)
+ /* No table formatting: use for full-text search (untested) */
+ for (iIndex = 0; iIndex < iNbrOfColumns; iIndex++) {
+ fprintf(pDiag->pOutFile, "%s\n" , aszColTxt[iIndex]);
+ }
+ #else
if (bAddTableRow(pDiag, aszColTxt, iNbrOfColumns,
pRowInfo->asColumnWidth, pRowInfo->ucBorderInfo)) {
/* All work has been done */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:563,575 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:646,681
return;
}
+ /* Fill the table with maximum column widths */
+ if (eConversionType == conversion_text ||
+ eConversionType == conversion_fmt_text) {
+ if (iParagraphBreak == 0 ||
+ iParagraphBreak >= MAX_SCREEN_WIDTH) {
+ dMagnify = (double)MAX_SCREEN_WIDTH;
+ } else if (iParagraphBreak <= MIN_SCREEN_WIDTH) {
+ dMagnify = (double)MIN_SCREEN_WIDTH;
+ } else {
+ dMagnify = (double)iParagraphBreak;
+ }
+ dMagnify /= (double)DEFAULT_SCREEN_WIDTH;
+ DBG_FLT_C(dMagnify < 0.99 || dMagnify > 1.01, dMagnify);
+ } else {
+ dMagnify = 1.0;
+ }
+ tColumnWidthTotal = 0;
+ for (iIndex = 0; iIndex < iNbrOfColumns; iIndex++) {
+ atColumnWidthMax[iIndex] = tComputeColumnWidthMax(
+ pRowInfo->asColumnWidth[iIndex],
+ lCharWidthLarge,
+ dMagnify);
+ tColumnWidthTotal += atColumnWidthMax[iIndex];
+ }
+
/*
* Get enough space for the row.
* Worst case: three bytes per UTF-8 character
*/
- tSize = 3 * (size_t)(lTwips2MilliPoints(pRowInfo->iColumnWidthSum) /
- lCharWidthSmall +
- (long)pRowInfo->ucNumberOfColumns + 3);
+ tSize = 3 * (1 + tColumnWidthTotal + (size_t)iNbrOfColumns + 3);
szLine = xmalloc(tSize);
do {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:578,595 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:684,690
pcTxt = szLine;
*pcTxt++ = TABLE_SEPARATOR_CHAR;
for (iIndex = 0; iIndex < iNbrOfColumns; iIndex++) {
- tColumnWidthMax =
- (size_t)(lTwips2MilliPoints(
- pRowInfo->asColumnWidth[iIndex]) /
- lCharWidthLarge);
- if (tColumnWidthMax == 0) {
- /* Minimum column width */
- tColumnWidthMax = 1;
- } else if (tColumnWidthMax > 1) {
- /* Make room for the TABLE_SEPARATOR_CHAR */
- tColumnWidthMax--;
- }
- NO_DBG_DEC(tColumnWidthMax);
+ tColumnWidthMax = atColumnWidthMax[iIndex];
if (aszColTxt[iIndex] == NULL) {
/* Add an empty column */
for (iTmp = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/out2window.c:664,670 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/out2window.c:759,768
tRow.tFontRef,
tRow.usFontSize);
vString2Diagram(pDiag, &tRow);
+ TRACE_MSG("after vString2Diagram in vTableRow2Window");
} while (bNotReady);
/* Clean up before you leave */
szLine = xfree(szLine);
+ TRACE_MSG("leaving vTableRow2Window");
+ #endif /* __FULL_TEXT_SEARCH */
} /* end of vTableRow2Window */
[jmk] --rw-rw-r-- M 499692 jmk sys 19601 Jan 14 12:57 sys/src/cmd/aux/antiword/out2window.c
[jmk] --rw-rw-r-- M 499692 jmk sys 10773 Jan 14 12:57 sys/src/cmd/aux/antiword/output.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:1,6
/*
* output.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Generic output generating functions
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:31,42 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:31,48
case conversion_text:
vPrologueTXT(pDiag, &tOptions);
break;
+ case conversion_fmt_text:
+ vPrologueFMT(pDiag, &tOptions);
+ break;
case conversion_ps:
vProloguePS(pDiag, szTask, szFilename, &tOptions);
break;
case conversion_xml:
- vPrologueXML(pDiag);
+ vPrologueXML(pDiag, &tOptions);
break;
+ case conversion_pdf:
+ vProloguePDF(pDiag, szTask, &tOptions);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:51,56 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:57,63
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
vEpilogueTXT(pDiag->pOutFile);
break;
case conversion_ps:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:59,64 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:66,74
case conversion_xml:
vEpilogueXML(pDiag);
break;
+ case conversion_pdf:
+ vEpiloguePDF(pDiag);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:73,78 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:83,89
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
vImageProloguePS(pDiag, pImg);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:79,84 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:90,98
break;
case conversion_xml:
break;
+ case conversion_pdf:
+ vImageProloguePDF(pDiag, pImg);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:93,98 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:107,113
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
vImageEpiloguePS(pDiag);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:99,104 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:114,122
break;
case conversion_xml:
break;
+ case conversion_pdf:
+ vImageEpiloguePDF(pDiag);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:115,125 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:133,146
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
return FALSE;
case conversion_ps:
return bAddDummyImagePS(pDiag, pImg);
case conversion_xml:
return FALSE;
+ case conversion_pdf:
+ return bAddDummyImagePDF(pDiag, pImg);
default:
DBG_DEC(eConversionType);
return FALSE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:173,185 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:194,211
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
vAddFontsPS(pDiag);
break;
case conversion_xml:
- vCreateBookIntro(pDiag, iWordVersion, eEncoding);
+ vCreateBookIntro(pDiag, iWordVersion);
break;
+ case conversion_pdf:
+ vCreateInfoDictionary(pDiag, iWordVersion);
+ vAddFontsPDF(pDiag);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:190,196 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:216,223
* vMove2NextLine - move to the next line
*/
void
- vMove2NextLine(diagram_type *pDiag, draw_fontref tFontRef, USHORT usFontSize)
+ vMove2NextLine(diagram_type *pDiag, drawfile_fontref tFontRef,
+ USHORT usFontSize)
{
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:198,203 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:225,231
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
vMove2NextLineTXT(pDiag);
break;
case conversion_ps:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:206,211 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:234,242
case conversion_xml:
vMove2NextLineXML(pDiag);
break;
+ case conversion_pdf:
+ vMove2NextLinePDF(pDiag, usFontSize);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:218,224 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:249,255
void
vSubstring2Diagram(diagram_type *pDiag,
char *szString, size_t tStringLength, long lStringWidth,
- UCHAR ucFontColor, USHORT usFontstyle, draw_fontref tFontRef,
+ UCHAR ucFontColor, USHORT usFontstyle, drawfile_fontref tFontRef,
USHORT usFontSize, USHORT usMaxFontSize)
{
switch (eConversionType) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:225,230 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:256,265
case conversion_text:
vSubstringTXT(pDiag, szString, tStringLength, lStringWidth);
break;
+ case conversion_fmt_text:
+ vSubstringFMT(pDiag, szString, tStringLength, lStringWidth,
+ usFontstyle);
+ break;
case conversion_ps:
vSubstringPS(pDiag, szString, tStringLength, lStringWidth,
ucFontColor, usFontstyle, tFontRef,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:234,239 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:269,279
vSubstringXML(pDiag, szString, tStringLength, lStringWidth,
usFontstyle);
break;
+ case conversion_pdf:
+ vSubstringPDF(pDiag, szString, tStringLength, lStringWidth,
+ ucFontColor, usFontstyle, tFontRef,
+ usFontSize, usMaxFontSize);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:252,257 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:292,298
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
vStartOfParagraphTXT(pDiag, lBeforeIndentation);
break;
case conversion_ps:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:259,264 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:300,308
break;
case conversion_xml:
break;
+ case conversion_pdf:
+ vStartOfParagraphPDF(pDiag, lBeforeIndentation);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:276,281 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:320,326
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:282,287 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:327,334
case conversion_xml:
vStartOfParagraphXML(pDiag, 1);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:293,299 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:340,346
*/
void
vEndOfParagraph(diagram_type *pDiag,
- draw_fontref tFontRef, USHORT usFontSize, long lAfterIndentation)
+ drawfile_fontref tFontRef, USHORT usFontSize, long lAfterIndentation)
{
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:302,316 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:349,366
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
vEndOfParagraphTXT(pDiag, lAfterIndentation);
break;
case conversion_ps:
- vEndOfParagraphPS(pDiag,
- tFontRef, usFontSize, lAfterIndentation);
+ vEndOfParagraphPS(pDiag, usFontSize, lAfterIndentation);
break;
case conversion_xml:
vEndOfParagraphXML(pDiag, 1);
break;
+ case conversion_pdf:
+ vEndOfParagraphPDF(pDiag, usFontSize, lAfterIndentation);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:321,338 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:371,392
* Create an end of page
*/
void
- vEndOfPage(diagram_type *pDiag, long lAfterIndentation)
+ vEndOfPage(diagram_type *pDiag, long lAfterIndentation, BOOL bNewSection)
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
vEndOfPageTXT(pDiag, lAfterIndentation);
break;
case conversion_ps:
- vEndOfPagePS(pDiag);
+ vEndOfPagePS(pDiag, bNewSection);
break;
case conversion_xml:
vEndOfPageXML(pDiag);
break;
+ case conversion_pdf:
+ vEndOfPagePDF(pDiag, bNewSection);
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:347,352 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:401,407
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:353,358 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:408,415
case conversion_xml:
vSetHeadersXML(pDiag, usIstd);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:367,372 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:424,430
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:373,378 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:431,438
case conversion_xml:
vStartOfListXML(pDiag, ucNFC, bIsEndOfTable);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:387,392 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:447,453
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:393,398 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:454,461
case conversion_xml:
vEndOfListXML(pDiag);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:407,412 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:470,476
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:413,418 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:477,484
case conversion_xml:
vStartOfListItemXML(pDiag, bNoMarks);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:427,432 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:493,499
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:433,438 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:500,507
case conversion_xml:
vEndOfTableXML(pDiag);
break;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:450,455 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:519,525
{
switch (eConversionType) {
case conversion_text:
+ case conversion_fmt_text:
break;
case conversion_ps:
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/output.c:458,463 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/output.c:528,535
iNbrOfColumns, asColumnWidth,
ucBorderInfo);
return TRUE;
+ case conversion_pdf:
+ break;
default:
DBG_DEC(eConversionType);
break;
[jmk] --rw-rw-r-- M 499692 jmk sys 10773 Jan 14 12:57 sys/src/cmd/aux/antiword/output.c
[jmk] --rw-rw-r-- M 499692 jmk sys 31661 Jan 14 12:57 sys/src/cmd/aux/antiword/pdf.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2512 Jan 14 12:57 sys/src/cmd/aux/antiword/pictlist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:1,6
/*
* pictlist.c
- * Copyright (C) 2000,2001 A.J. van Os; Released under GPL
+ * Copyright (C) 2000-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy a list of Word picture information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:10,18 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:10,27
#include "antiword.h"
+ /*
+ * Private structure to hide the way the information
+ * is stored from the rest of the program
+ */
+ typedef struct picture_mem_tag {
+ picture_block_type tInfo;
+ struct picture_mem_tag *pNext;
+ } picture_mem_type;
+
/* Variables needed to write the Picture Information List */
- static picture_desc_type *pAnchor = NULL;
- static picture_desc_type *pPictureLast = NULL;
+ static picture_mem_type *pAnchor = NULL;
+ static picture_mem_type *pPictureLast = NULL;
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:21,27 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:30,36
void
vDestroyPictInfoList(void)
{
- picture_desc_type *pCurr, *pNext;
+ picture_mem_type *pCurr, *pNext;
DBG_MSG("vDestroyPictInfoList");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:43,49 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:52,58
void
vAdd2PictInfoList(const picture_block_type *pPictureBlock)
{
- picture_desc_type *pListMember;
+ picture_mem_type *pListMember;
fail(pPictureBlock == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:69,75 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:78,84
NO_DBG_HEX(pPictureBlock->ulPictureOffset);
/* Create list member */
- pListMember = xmalloc(sizeof(picture_desc_type));
+ pListMember = xmalloc(sizeof(picture_mem_type));
/* Fill the list member */
pListMember->tInfo = *pPictureBlock;
pListMember->pNext = NULL;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/pictlist.c:89,95 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/pictlist.c:98,104
ULONG
ulGetPictInfoListItem(ULONG ulFileOffset)
{
- picture_desc_type *pCurr;
+ picture_mem_type *pCurr;
for (pCurr = pAnchor; pCurr != NULL; pCurr = pCurr->pNext) {
if (pCurr->tInfo.ulFileOffset == ulFileOffset) {
[jmk] --rw-rw-r-- M 499692 jmk sys 2512 Jan 14 12:57 sys/src/cmd/aux/antiword/pictlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 4032 Jan 14 12:57 sys/src/cmd/aux/antiword/png2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 4032 Jan 14 12:57 sys/src/cmd/aux/antiword/png2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 572 Jan 14 12:57 sys/src/cmd/aux/antiword/png2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 572 Jan 14 12:57 sys/src/cmd/aux/antiword/png2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 33883 Jan 14 12:57 sys/src/cmd/aux/antiword/postscript.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1,6
/*
* postscript.c
- * Copyright (C) 1999-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1999-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to deal with the PostScript format
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:29,40 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:29,44
/* The height and width of a PostScript page (in DrawUnits) */
static long lPageHeight = LONG_MAX;
static long lPageWidth = LONG_MAX;
+ /* The height of the footer on the current page (in DrawUnits) */
+ static long lFooterHeight = 0;
+ /* Inside a footer (to prevent an infinite loop when the footer is too big) */
+ static BOOL bInFtrSpace = FALSE;
/* Current time for a PS header */
static const char *szCreationDate = NULL;
/* Current creator for a PS header */
static const char *szCreator = NULL;
/* Current font information */
- static draw_fontref tFontRefCurr = (draw_fontref)-1;
+ static drawfile_fontref tFontRefCurr = (drawfile_fontref)-1;
static USHORT usFontSizeCurr = 0;
static int iFontColorCurr = -1;
/* Current vertical position information */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:43,49 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:47,59
static int iPageCount = 0;
/* Image counter */
static int iImageCount = 0;
+ /* Section index */
+ static int iSectionIndex = 0;
+ /* Are we on the first page of the section? */
+ static BOOL bFirstInSection = TRUE;
+ static void vMoveTo(diagram_type *, long);
+
static const char *iso_8859_1_data[] = {
"/newcodes % ISO-8859-1 character encodings",
"[",
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:103,108 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:113,147
"",
};
+ static const char *iso_8859_5_data[] = {
+ "/newcodes % ISO-8859-5 character encodings",
+ "[",
+ "160/space 161/afii10023 162/afii10051 163/afii10052 164/afii10053",
+ "165/afii10054 166/afii10055 167/afii10056 168/afii10057 169/afii10058",
+ "170/afii10059 171/afii10060 172/afii10061 173/hyphen 174/afii10062",
+ "175/afii10145 176/afii10017 177/afii10018 178/afii10019 179/afii10020",
+ "180/afii10021 181/afii10022 182/afii10024 183/afii10025 184/afii10026",
+ "185/afii10027 186/afii10028 187/afii10029 188/afii10030 189/afii10031",
+ "190/afii10032 191/afii10033 192/afii10034 193/afii10035 194/afii10036",
+ "195/afii10037 196/afii10038 197/afii10039 198/afii10040 199/afii10041",
+ "200/afii10042 201/afii10043 202/afii10044 203/afii10045 204/afii10046",
+ "205/afii10047 206/afii10048 207/afii10049 208/afii10065 209/afii10066",
+ "210/afii10067 211/afii10068 212/afii10069 213/afii10070 214/afii10072",
+ "215/afii10073 216/afii10074 217/afii10075 218/afii10076 219/afii10077",
+ "220/afii10078 221/afii10079 222/afii10080 223/afii10081 224/afii10082",
+ "225/afii10083 226/afii10084 227/afii10085 228/afii10086 229/afii10087",
+ "230/afii10088 231/afii10089 232/afii10090 233/afii10091 234/afii10092",
+ "235/afii10093 236/afii10094 237/afii10095 238/afii10096 239/afii10097",
+ "240/afii61352 241/afii10071 242/afii10099 243/afii10100 244/afii10101",
+ "245/afii10102 246/afii10103 247/afii10104 248/afii10105 249/afii10106",
+ "250/afii10107 251/afii10108 252/afii10109 253/section 254/afii10110",
+ "255/afii10193",
+ "] bind def",
+ "",
+ "/reencdict 12 dict def",
+ "",
+ };
+
static const char *iso_8859_x_func[] = {
"% change fonts using ISO-8859-x characters",
"/ChgFnt % size psname natname => font",
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:191,230 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:230,451
} /* end of vAddPageSetup */
/*
+ * vAddHdrFtr - add a header or footer
+ */
+ static void
+ vAddHdrFtr(diagram_type *pDiag, const hdrftr_block_type *pHdrFtrInfo)
+ {
+ output_type *pStart, *pPrev, *pNext;
+
+ fail(pDiag == NULL);
+ fail(pHdrFtrInfo == NULL);
+
+ vStartOfParagraphPS(pDiag, 0);
+ pStart = pHdrFtrInfo->pText;
+ while (pStart != NULL) {
+ pNext = pStart;
+ while (pNext != NULL &&
+ (pNext->tNextFree != 1 ||
+ (pNext->szStorage[0] != PAR_END &&
+ pNext->szStorage[0] != HARD_RETURN))) {
+ pNext = pNext->pNext;
+ }
+ if (pNext == NULL) {
+ if (bOutputContainsText(pStart)) {
+ vAlign2Window(pDiag, pStart,
+ lChar2MilliPoints(DEFAULT_SCREEN_WIDTH),
+ ALIGNMENT_LEFT);
+ } else {
+ vMove2NextLinePS(pDiag, pStart->usFontSize);
+ }
+ break;
+ }
+ fail(pNext->tNextFree != 1);
+ fail(pNext->szStorage[0] != PAR_END &&
+ pNext->szStorage[0] != HARD_RETURN);
+
+ if (pStart != pNext) {
+ /* There is something to print */
+ pPrev = pNext->pPrev;
+ fail(pPrev->pNext != pNext);
+ /* Cut the chain */
+ pPrev->pNext = NULL;
+ if (bOutputContainsText(pStart)) {
+ /* Print it */
+ vAlign2Window(pDiag, pStart,
+ lChar2MilliPoints(DEFAULT_SCREEN_WIDTH),
+ ALIGNMENT_LEFT);
+ } else {
+ /* Just an empty line */
+ vMove2NextLinePS(pDiag, pStart->usFontSize);
+ }
+ /* Repair the chain */
+ pPrev->pNext = pNext;
+ }
+ if (pNext->szStorage[0] == PAR_END) {
+ vEndOfParagraphPS(pDiag, pNext->usFontSize,
+ (long)pNext->usFontSize * 200);
+ }
+ pStart = pNext->pNext;
+ }
+ } /* end of vAddHdrFtr */
+
+ /*
+ * vAddHeader - add a page header
+ */
+ static void
+ vAddHeader(diagram_type *pDiag)
+ {
+ const hdrftr_block_type *pHdrInfo;
+ const hdrftr_block_type *pFtrInfo;
+
+ fail(pDiag == NULL);
+
+ NO_DBG_MSG("vAddHeader");
+
+ pHdrInfo = pGetHdrFtrInfo(iSectionIndex, TRUE,
+ odd(iPageCount), bFirstInSection);
+ pFtrInfo = pGetHdrFtrInfo(iSectionIndex, FALSE,
+ odd(iPageCount), bFirstInSection);
+ /* Set the height of the footer of this page */
+ lFooterHeight = pFtrInfo == NULL ? 0 : pFtrInfo->lHeight;
+ fail(lFooterHeight < 0);
+
+ if (pHdrInfo == NULL ||
+ pHdrInfo->pText == NULL ||
+ pHdrInfo->lHeight <= 0) {
+ fail(pHdrInfo != NULL && pHdrInfo->lHeight < 0);
+ fail(pHdrInfo != NULL &&
+ pHdrInfo->pText != NULL &&
+ pHdrInfo->lHeight == 0);
+ return;
+ }
+
+ vAddHdrFtr(pDiag, pHdrInfo);
+
+ DBG_DEC_C(pHdrInfo->lHeight !=
+ lPageHeight - PS_TOP_MARGIN - pDiag->lYtop,
+ pHdrInfo->lHeight);
+ DBG_DEC_C(pHdrInfo->lHeight !=
+ lPageHeight - PS_TOP_MARGIN - pDiag->lYtop,
+ lPageHeight - PS_TOP_MARGIN - pDiag->lYtop);
+
+ #if 0 /* defined(DEBUG) */
+ fprintf(pDiag->pOutFile,
+ "(HEADER: FileOffset 0x%04lx-0x%04lx; Height %ld-%ld) show\n",
+ ulCharPos2FileOffset(pHdrInfo->ulCharPosStart),
+ ulCharPos2FileOffset(pHdrInfo->ulCharPosNext),
+ pHdrInfo->lHeight,
+ lPageHeight - PS_TOP_MARGIN - pDiag->lYtop);
+ #endif
+ } /* end of vAddHeader */
+
+ /*
+ * vAddFooter - add a page footer
+ */
+ static void
+ vAddFooter(diagram_type *pDiag)
+ {
+ const hdrftr_block_type *pFtrInfo;
+
+ fail(pDiag == NULL);
+
+ NO_DBG_MSG("vAddFooter");
+ pFtrInfo = pGetHdrFtrInfo(iSectionIndex, FALSE,
+ odd(iPageCount), bFirstInSection);
+ bFirstInSection = FALSE;
+ if (pFtrInfo == NULL ||
+ pFtrInfo->pText == NULL ||
+ pFtrInfo->lHeight <= 0) {
+ fail(pFtrInfo != NULL && pFtrInfo->lHeight < 0);
+ fail(pFtrInfo != NULL &&
+ pFtrInfo->pText != NULL &&
+ pFtrInfo->lHeight == 0);
+ return;
+ }
+
+ bInFtrSpace = TRUE;
+
+ DBG_DEC_C(pFtrInfo->lHeight != lFooterHeight, pFtrInfo->lHeight);
+ DBG_DEC_C(pFtrInfo->lHeight != lFooterHeight, lFooterHeight);
+ DBG_DEC_C(pDiag->lYtop < lFooterHeight + PS_BOTTOM_MARGIN,
+ pDiag->lYtop);
+ DBG_DEC_C(pDiag->lYtop < lFooterHeight + PS_BOTTOM_MARGIN,
+ lFooterHeight + PS_BOTTOM_MARGIN);
+
+ if (pDiag->lYtop > lFooterHeight + PS_BOTTOM_MARGIN) {
+ /* Move down to the start of the footer */
+ pDiag->lYtop = lFooterHeight + PS_BOTTOM_MARGIN;
+ vMoveTo(pDiag, 0);
+ } else if (pDiag->lYtop < lFooterHeight + PS_BOTTOM_MARGIN / 2) {
+ DBG_FIXME();
+ /*
+ * Move up to the start of the footer, to prevent moving
+ * of the bottom edge of the paper
+ */
+ pDiag->lYtop = lFooterHeight + PS_BOTTOM_MARGIN;
+ vMoveTo(pDiag, 0);
+ }
+
+ DBG_FLT_C(pDiag->lYtop < lFooterHeight + PS_BOTTOM_MARGIN,
+ dDrawUnits2Points(lFooterHeight + PS_BOTTOM_MARGIN - pDiag->lYtop));
+
+ #if 0 /* defined(DEBUG) */
+ fprintf(pDiag->pOutFile,
+ "(FOOTER: FileOffset 0x%04lx-0x%04lx; Bottom %ld-%ld) show\n",
+ ulCharPos2FileOffset(pFtrInfo->ulCharPosStart),
+ ulCharPos2FileOffset(pFtrInfo->ulCharPosNext),
+ pDiag->lYtop,
+ pFtrInfo->lHeight + PS_BOTTOM_MARGIN);
+ #endif
+ vAddHdrFtr(pDiag, pFtrInfo);
+ bInFtrSpace = FALSE;
+ } /* end of vAddFooter */
+
+ /*
* vMove2NextPage - move to the start of the next page
*/
static void
- vMove2NextPage(diagram_type *pDiag)
+ vMove2NextPage(diagram_type *pDiag, BOOL bNewSection)
{
fail(pDiag == NULL);
+ vAddFooter(pDiag);
fprintf(pDiag->pOutFile, "showpage\n");
iPageCount++;
fprintf(pDiag->pOutFile, "%%%%Page: %d %d\n", iPageCount, iPageCount);
+ if (bNewSection) {
+ iSectionIndex++;
+ bFirstInSection = TRUE;
+ }
vAddPageSetup(pDiag->pOutFile);
pDiag->lYtop = lPageHeight - PS_TOP_MARGIN;
lYtopCurr = -1;
+ vAddHeader(pDiag);
} /* end of vMove2NextPage */
/*
- * vMoveToPS - move to the specified X,Y coordinates
+ * vMoveTo - move to the specified X,Y coordinates
*
* Move the current position of the specified diagram to its X,Y coordinates,
* start on a new page if needed
*/
static void
- vMoveToPS(diagram_type *pDiag, long lLastVerticalMovement)
+ vMoveTo(diagram_type *pDiag, long lLastVerticalMovement)
{
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
- if (pDiag->lYtop < PS_BOTTOM_MARGIN) {
- vMove2NextPage(pDiag);
+ if (pDiag->lYtop <= lFooterHeight + PS_BOTTOM_MARGIN && !bInFtrSpace) {
+ vMove2NextPage(pDiag, FALSE);
/* Repeat the last vertical movement on the new page */
pDiag->lYtop -= lLastVerticalMovement;
}
- fail(pDiag->lYtop < PS_BOTTOM_MARGIN);
+ fail(pDiag->lYtop < lFooterHeight + PS_BOTTOM_MARGIN && !bInFtrSpace);
+ DBG_DEC_C(pDiag->lYtop < PS_BOTTOM_MARGIN, pDiag->lYtop);
+ fail(pDiag->lYtop < PS_BOTTOM_MARGIN / 3);
+
if (pDiag->lYtop != lYtopCurr) {
fprintf(pDiag->pOutFile, "%.2f %.2f moveto\n",
dDrawUnits2Points(pDiag->lXleft + PS_LEFT_MARGIN),
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:231,237 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:452,458
dDrawUnits2Points(pDiag->lYtop));
lYtopCurr = pDiag->lYtop;
}
- } /* end of vMoveToPS */
+ } /* end of vMoveTo */
/*
* vProloguePS - set options and perform the PostScript initialization
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:268,279 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:489,505
lPageWidth = lPoints2DrawUnits(pOptions->iPageWidth);
}
DBG_DEC(lPageWidth);
- tFontRefCurr = (draw_fontref)-1;
+ lFooterHeight = 0;
+ bInFtrSpace = FALSE;
+
+ tFontRefCurr = (drawfile_fontref)-1;
usFontSizeCurr = 0;
iFontColorCurr = -1;
lYtopCurr = -1;
- iImageCount = 0;
iPageCount = 0;
+ iImageCount = 0;
+ iSectionIndex = 0;
+ bFirstInSection = TRUE;
pDiag->lXleft = 0;
pDiag->lYtop = lPageHeight - PS_TOP_MARGIN;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:324,329 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:550,556
fail(pDiag->pOutFile == NULL);
if (pDiag->lYtop < lPageHeight - PS_TOP_MARGIN) {
+ vAddFooter(pDiag);
fprintf(pDiag->pOutFile, "showpage\n");
}
fprintf(pDiag->pOutFile, "%%%%Trailer\n");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:393,399 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:620,626
DBG_DEC_C(pDiag->lXleft != 0, pDiag->lXleft);
pDiag->lYtop -= lPoints2DrawUnits(pImg->iVerSizeScaled);
- vMoveToPS(pDiag, lPoints2DrawUnits(pImg->iVerSizeScaled));
+ vMoveTo(pDiag, lPoints2DrawUnits(pImg->iVerSizeScaled));
pOutFile = pDiag->pOutFile;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:454,460 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:681,687
fprintf(pOutFile,
"/Data Data1 << >> /FlateDecode filter def\n");
}
- if (pImg->iComponents == 3) {
+ if (pImg->iComponents == 3 || pImg->iComponents == 4) {
fprintf(pOutFile, "/DeviceRGB setcolorspace\n");
} else if (pImg->iColorsUsed > 0) {
vPrintPalette(pOutFile, pImg);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:613,619 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:840,846
DBG_DEC_C(pDiag->lXleft != 0, pDiag->lXleft);
pDiag->lYtop -= lPoints2DrawUnits(pImg->iVerSizeScaled);
- vMoveToPS(pDiag, lPoints2DrawUnits(pImg->iVerSizeScaled));
+ vMoveTo(pDiag, lPoints2DrawUnits(pImg->iVerSizeScaled));
pOutFile = pDiag->pOutFile;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:645,651 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:872,878
FILE *pOutFile;
const font_table_type *pTmp, *pTmp2;
size_t tIndex;
- int iLineLen;
+ int iLineLen, iOurFontnameLen;
BOOL bFound;
fail(pDiag == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:670,679 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:897,907
break;
}
}
- if (bFound) {
+ iOurFontnameLen = (int)strlen(pTmp->szOurFontname);
+ if (bFound || iOurFontnameLen <= 0) {
continue;
}
- if (iLineLen + (int)strlen(pTmp->szOurFontname) > 78) {
+ if (iLineLen + iOurFontnameLen > 76) {
fprintf(pOutFile, "\n%%%%+");
iLineLen = 3;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:687,693 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:915,921
fprintf(pOutFile, "%%%%BeginProlog\n");
switch (eEncoding) {
- case encoding_iso_8859_1:
+ case encoding_latin_1:
for (tIndex = 0;
tIndex < elementsof(iso_8859_1_data);
tIndex++) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:700,706 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:928,934
fprintf(pOutFile, "%s\n", iso_8859_x_func[tIndex]);
}
break;
- case encoding_iso_8859_2:
+ case encoding_latin_2:
for (tIndex = 0;
tIndex < elementsof(iso_8859_2_data);
tIndex++) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:713,719 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:941,960
fprintf(pOutFile, "%s\n", iso_8859_x_func[tIndex]);
}
break;
- case encoding_utf8:
+ case encoding_cyrillic:
+ for (tIndex = 0;
+ tIndex < elementsof(iso_8859_5_data);
+ tIndex++) {
+ fprintf(pOutFile, "%s\n", iso_8859_5_data[tIndex]);
+ }
+ fprintf(pOutFile, "\n");
+ for (tIndex = 0;
+ tIndex < elementsof(iso_8859_x_func);
+ tIndex++) {
+ fprintf(pOutFile, "%s\n", iso_8859_x_func[tIndex]);
+ }
+ break;
+ case encoding_utf_8:
werr(1,
"The combination PostScript and UTF-8 is not supported");
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:730,735 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:971,977
iPageCount = 1;
fprintf(pDiag->pOutFile, "%%%%Page: %d %d\n", iPageCount, iPageCount);
vAddPageSetup(pDiag->pOutFile);
+ vAddHeader(pDiag);
} /* end of vAddFontsPS */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:849,855 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1091,1097
void
vSubstringPS(diagram_type *pDiag,
char *szString, size_t tStringLength, long lStringWidth,
- UCHAR ucFontColor, USHORT usFontstyle, draw_fontref tFontRef,
+ UCHAR ucFontColor, USHORT usFontstyle, drawfile_fontref tFontRef,
USHORT usFontSize, USHORT usMaxFontSize)
{
const char *szOurFontname;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:880,886 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1122,1128
vSetColor(pDiag->pOutFile, ucFontColor);
iFontColorCurr = (int)ucFontColor;
}
- vMoveToPS(pDiag, lComputeLeading(usMaxFontSize));
+ vMoveTo(pDiag, lComputeLeading(usMaxFontSize));
vPrintPS(pDiag->pOutFile, szString, tStringLength, usFontstyle);
pDiag->lXleft += lStringWidth;
} /* end of vSubstringPS */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:903,909 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1145,1151
*/
void
vEndOfParagraphPS(diagram_type *pDiag,
- draw_fontref tFontRef, USHORT usFontSize, long lAfterIndentation)
+ USHORT usFontSize, long lAfterIndentation)
{
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:912,918 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1154,1160
if (pDiag->lXleft > 0) {
/* To the start of the line */
- vMove2NextLine(pDiag, tFontRef, usFontSize);
+ vMove2NextLinePS(pDiag, usFontSize);
}
pDiag->lXleft = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/postscript.c:923,929 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/postscript.c:1165,1171
* Create an end of page
*/
void
- vEndOfPagePS(diagram_type *pDiag)
+ vEndOfPagePS(diagram_type *pDiag, BOOL bNewSection)
{
- vMove2NextPage(pDiag);
+ vMove2NextPage(pDiag, bNewSection);
} /* end of vEndOfPagePS */
[jmk] --rw-rw-r-- M 499692 jmk sys 33883 Jan 14 12:57 sys/src/cmd/aux/antiword/postscript.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12600 Jan 14 12:57 sys/src/cmd/aux/antiword/prop0.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:1,6
/*
* prop0.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Read the property information from a Word for DOS file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:7,16 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:7,135
*/
#include <string.h>
+ #include <time.h>
#include "antiword.h"
/*
+ * tConvertDosDate - convert DOS date format
+ *
+ * returns Unix time_t or -1
+ */
+ static time_t
+ tConvertDosDate(const char *szDosDate)
+ {
+ struct tm tTime;
+ const char *pcTmp;
+ time_t tResult;
+
+ memset(&tTime, 0, sizeof(tTime));
+ pcTmp = szDosDate;
+ /* Get the month */
+ if (!isdigit(*pcTmp)) {
+ return (time_t)-1;
+ }
+ tTime.tm_mon = (int)(*pcTmp - '0');
+ pcTmp++;
+ if (isdigit(*pcTmp)) {
+ tTime.tm_mon *= 10;
+ tTime.tm_mon += (int)(*pcTmp - '0');
+ pcTmp++;
+ }
+ /* Get the first separater */
+ if (isalnum(*pcTmp)) {
+ return (time_t)-1;
+ }
+ pcTmp++;
+ /* Get the day */
+ if (!isdigit(*pcTmp)) {
+ return (time_t)-1;
+ }
+ tTime.tm_mday = (int)(*pcTmp - '0');
+ pcTmp++;
+ if (isdigit(*pcTmp)) {
+ tTime.tm_mday *= 10;
+ tTime.tm_mday += (int)(*pcTmp - '0');
+ pcTmp++;
+ }
+ /* Get the second separater */
+ if (isalnum(*pcTmp)) {
+ return (time_t)-1;
+ }
+ pcTmp++;
+ /* Get the year */
+ if (!isdigit(*pcTmp)) {
+ return (time_t)-1;
+ }
+ tTime.tm_year = (int)(*pcTmp - '0');
+ pcTmp++;
+ if (isdigit(*pcTmp)) {
+ tTime.tm_year *= 10;
+ tTime.tm_year += (int)(*pcTmp - '0');
+ pcTmp++;
+ }
+ /* Check the values */
+ if (tTime.tm_mon == 0 || tTime.tm_mday == 0 || tTime.tm_mday > 31) {
+ return (time_t)-1;
+ }
+ /* Correct the values */
+ tTime.tm_mon--; /* From 01-12 to 00-11 */
+ if (tTime.tm_year < 80) {
+ tTime.tm_year += 100; /* 00 means 2000 is 100 */
+ }
+ tTime.tm_isdst = -1;
+ tResult = mktime(&tTime);
+ NO_DBG_MSG(ctime(&tResult));
+ return tResult;
+ } /* end of tConvertDosDate */
+
+ /*
+ * Build the lists with Document Property Information for Word for DOS files
+ */
+ void
+ vGet0DopInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ document_block_type tDocument;
+ UCHAR *aucBuffer;
+ ULONG ulBeginSumdInfo, ulBeginNextBlock;
+ size_t tLen;
+ USHORT usOffset;
+
+ tDocument.ucHdrFtrSpecification = 0;
+ tDocument.usDefaultTabWidth = usGetWord(0x70, aucHeader); /* dxaTab */
+ tDocument.tCreateDate = (time_t)-1;
+ tDocument.tRevisedDate = (time_t)-1;
+
+ ulBeginSumdInfo = 128 * (ULONG)usGetWord(0x1c, aucHeader);
+ DBG_HEX(ulBeginSumdInfo);
+ ulBeginNextBlock = 128 * (ULONG)usGetWord(0x6a, aucHeader);
+ DBG_HEX(ulBeginNextBlock);
+
+ if (ulBeginSumdInfo < ulBeginNextBlock && ulBeginNextBlock != 0) {
+ /* There is a summary information block */
+ tLen = (size_t)(ulBeginNextBlock - ulBeginSumdInfo);
+ aucBuffer = xmalloc(tLen);
+ /* Read the summary information block */
+ if (bReadBytes(aucBuffer, tLen, ulBeginSumdInfo, pFile)) {
+ usOffset = usGetWord(12, aucBuffer);
+ if (aucBuffer[usOffset] != 0) {
+ NO_DBG_STRN(aucBuffer + usOffset, 8);
+ tDocument.tRevisedDate =
+ tConvertDosDate((char *)aucBuffer + usOffset);
+ }
+ usOffset = usGetWord(14, aucBuffer);
+ if (aucBuffer[usOffset] != 0) {
+ NO_DBG_STRN(aucBuffer + usOffset, 8);
+ tDocument.tCreateDate =
+ tConvertDosDate((char *)aucBuffer + usOffset);
+ }
+ }
+ aucBuffer = xfree(aucBuffer);
+ }
+ vCreateDocumentInfoList(&tDocument);
+ } /* end of vGet0DopInfo */
+
+ /*
* Fill the section information block with information
* from a Word for DOS file.
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:48,61 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:167,181
{
section_block_type tSection;
UCHAR *aucBuffer;
- ULONG ulBeginSectInfo, ulBeginNextBlock;
- ULONG ulSectPage, ulTextOffset;
- size_t tSectInfoLen, tBytes;
- int iIndex, iSections;
+ ULONG ulBeginOfText, ulTextOffset, ulBeginSectInfo;
+ ULONG ulCharPos, ulSectPage, ulBeginNextBlock;
+ size_t tSectInfoLen, tIndex, tSections, tBytes;
UCHAR aucTmp[2], aucFpage[35];
fail(pFile == NULL || aucHeader == NULL);
+ ulBeginOfText = 128;
+ NO_DBG_HEX(ulBeginOfText);
ulBeginSectInfo = 128 * (ULONG)usGetWord(0x18, aucHeader);
DBG_HEX(ulBeginSectInfo);
ulBeginNextBlock = 128 * (ULONG)usGetWord(0x1a, aucHeader);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:69,79 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:189,199
if (!bReadBytes(aucTmp, 2, ulBeginSectInfo, pFile)) {
return;
}
- iSections = (int)usGetWord(0, aucTmp);
- NO_DBG_DEC(iSections);
+ tSections = (size_t)usGetWord(0, aucTmp);
+ NO_DBG_DEC(tSections);
/* Read the Section Descriptors */
- tSectInfoLen = 10 * (size_t)iSections;
+ tSectInfoLen = 10 * tSections;
NO_DBG_DEC(tSectInfoLen);
aucBuffer = xmalloc(tSectInfoLen);
if (!bReadBytes(aucBuffer, tSectInfoLen, ulBeginSectInfo + 4, pFile)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:83,98 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:203,220
NO_DBG_PRINT_BLOCK(aucBuffer, tSectInfoLen);
/* Read the Section Properties */
- for (iIndex = 0; iIndex < iSections; iIndex++) {
- ulTextOffset = ulGetLong(10 * iIndex, aucBuffer);
+ for (tIndex = 0; tIndex < tSections; tIndex++) {
+ ulTextOffset = ulGetLong(10 * tIndex, aucBuffer);
NO_DBG_HEX(ulTextOffset);
- ulSectPage = ulGetLong(10 * iIndex + 6, aucBuffer);
+ ulCharPos = ulBeginOfText + ulTextOffset;
+ NO_DBG_HEX(ulTextOffset);
+ ulSectPage = ulGetLong(10 * tIndex + 6, aucBuffer);
NO_DBG_HEX(ulSectPage);
if (ulSectPage == FC_INVALID || /* Must use defaults */
ulSectPage < 128 || /* Should not happen */
ulSectPage >= ulBeginSectInfo) { /* Should not happen */
DBG_HEX_C(ulSectPage != FC_INVALID, ulSectPage);
- vDefault2SectionInfoList(ulTextOffset);
+ vDefault2SectionInfoList(ulCharPos);
continue;
}
/* Get the number of bytes to read */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:101,107 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:223,228
}
tBytes = 1 + (size_t)ucGetByte(0, aucTmp);
NO_DBG_DEC(tBytes);
- fail(tBytes > sizeof(aucFpage));
if (tBytes > sizeof(aucFpage)) {
DBG_DEC(tBytes);
tBytes = sizeof(aucFpage);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:114,120 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:235,241
/* Process the bytes */
vGetDefaultSection(&tSection);
vGet0SectionInfo(aucFpage + 1, tBytes - 1, &tSection);
- vAdd2SectionInfoList(&tSection, ulTextOffset);
+ vAdd2SectionInfoList(&tSection, ulCharPos);
}
/* Clean up before you leave */
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop0.c:268,274 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop0.c:389,395
return;
}
/* cHps */
- pFont->usFontSize = ucGetByte(iFodo + 3, aucGrpprl);
+ pFont->usFontSize = (USHORT)ucGetByte(iFodo + 3, aucGrpprl);
NO_DBG_DEC(pFont->usFontSize);
if (iBytes < 4) {
return;
[jmk] --rw-rw-r-- M 499692 jmk sys 12600 Jan 14 12:57 sys/src/cmd/aux/antiword/prop0.c
[jmk] --rw-rw-r-- M 499692 jmk sys 28409 Jan 14 12:57 sys/src/cmd/aux/antiword/prop2.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:1,6
/*
* prop2.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2005 A.J. van Os; Released under GPL
*
* Description:
* Read the property information from a WinWord 1 or 2 file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:10,15 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:10,17
#include "antiword.h"
+ #define MAX_FILESIZE 0x2000000UL /* 32 Mb */
+
/*
* iGet2InfoLength - the length of the information for WinWord 1/2 files
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:54,59 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:56,100
} /* end of iGet2InfoLength */
/*
+ * Build the lists with Document Property Information for WinWord 1/2 files
+ */
+ void
+ vGet2DopInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ document_block_type tDocument;
+ UCHAR *aucBuffer;
+ ULONG ulBeginDocpInfo, ulTmp;
+ size_t tDocpInfoLen;
+ USHORT usTmp;
+
+ ulBeginDocpInfo = ulGetLong(0x112, aucHeader); /* fcDop */
+ DBG_HEX(ulBeginDocpInfo);
+ tDocpInfoLen = (size_t)usGetWord(0x116, aucHeader); /* cbDop */
+ DBG_DEC(tDocpInfoLen);
+ if (tDocpInfoLen < 28) {
+ DBG_MSG("No Document information");
+ return;
+ }
+
+ aucBuffer = xmalloc(tDocpInfoLen);
+ if (!bReadBytes(aucBuffer, tDocpInfoLen, ulBeginDocpInfo, pFile)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+
+ usTmp = usGetWord(0x00, aucBuffer);
+ tDocument.ucHdrFtrSpecification = (UCHAR)(usTmp >> 8); /* grpfIhdt */
+ tDocument.usDefaultTabWidth = usGetWord(0x0a, aucBuffer); /* dxaTab */
+ ulTmp = ulGetLong(0x14, aucBuffer); /* dttmCreated */
+ tDocument.tCreateDate = tConvertDTTM(ulTmp);
+ ulTmp = ulGetLong(0x18, aucBuffer); /* dttmRevised */
+ tDocument.tRevisedDate = tConvertDTTM(ulTmp);
+ vCreateDocumentInfoList(&tDocument);
+
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet2DopInfo */
+
+ /*
* Fill the section information block with information
* from a WinWord 1/2 file.
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:79,84 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:120,129
usCcol = 1 + usGetWord(iFodoOff + 1, aucGrpprl);
DBG_DEC(usCcol);
break;
+ case 128: /* grpfIhdt */
+ pSection->ucHdrFtrSpecification =
+ ucGetByte(iFodoOff + 1, aucGrpprl);
+ break;
default:
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:95,109 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:140,155
vGet2SepInfo(FILE *pFile, const UCHAR *aucHeader)
{
section_block_type tSection;
- ULONG *aulSectPage, *aulTextOffset;
+ ULONG *aulSectPage, *aulCharPos;
UCHAR *aucBuffer, *aucFpage;
- ULONG ulBeginSectInfo;
- size_t tSectInfoLen, tOffset, tLen, tBytes;
- int iIndex;
+ ULONG ulBeginOfText, ulTextOffset, ulBeginSectInfo;
+ size_t tSectInfoLen, tIndex, tOffset, tLen, tBytes;
UCHAR aucTmp[1];
fail(pFile == NULL || aucHeader == NULL);
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
+ NO_DBG_HEX(ulBeginOfText);
ulBeginSectInfo = ulGetLong(0x7c, aucHeader); /* fcPlcfsed */
DBG_HEX(ulBeginSectInfo);
tSectInfoLen = (size_t)usGetWord(0x80, aucHeader); /* cbPlcfsed */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:123,152 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:169,201
/* Read the Section Descriptors */
tLen = (tSectInfoLen - 4) / 10;
/* Save the section offsets */
- aulTextOffset = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = 0;
- iIndex < (int)tLen;
- iIndex++, tOffset += 4) {
- aulTextOffset[iIndex] = ulGetLong(tOffset, aucBuffer);
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0;
+ tIndex < tLen;
+ tIndex++, tOffset += 4) {
+ ulTextOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulTextOffset);
+ aulCharPos[tIndex] = ulBeginOfText + ulTextOffset;
+ NO_DBG_HEX(aulCharPos[tIndex]);
}
/* Save the Sepx offsets */
aulSectPage = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = (tLen + 1) * 4;
- iIndex < (int)tLen;
- iIndex++, tOffset += 6) {
- aulSectPage[iIndex] = ulGetLong(tOffset + 2, aucBuffer);
- NO_DBG_HEX(aulSectPage[iIndex]); /* fcSepx */
+ for (tIndex = 0, tOffset = (tLen + 1) * 4;
+ tIndex < tLen;
+ tIndex++, tOffset += 6) {
+ aulSectPage[tIndex] = ulGetLong(tOffset + 2, aucBuffer);
+ NO_DBG_HEX(aulSectPage[tIndex]); /* fcSepx */
}
aucBuffer = xfree(aucBuffer);
/* Read the Section Properties */
- for (iIndex = 0; iIndex < (int)tLen; iIndex++) {
- if (aulSectPage[iIndex] == FC_INVALID) {
- vDefault2SectionInfoList(aulTextOffset[iIndex]);
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
+ if (aulSectPage[tIndex] == FC_INVALID) {
+ vDefault2SectionInfoList(aulCharPos[tIndex]);
continue;
}
/* Get the number of bytes to read */
- if (!bReadBytes(aucTmp, 1, aulSectPage[iIndex], pFile)) {
+ if (!bReadBytes(aucTmp, 1, aulSectPage[tIndex], pFile)) {
continue;
}
tBytes = 1 + (size_t)ucGetByte(0, aucTmp);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:153,159 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:202,208
NO_DBG_DEC(tBytes);
/* Read the bytes */
aucFpage = xmalloc(tBytes);
- if (!bReadBytes(aucFpage, tBytes, aulSectPage[iIndex], pFile)) {
+ if (!bReadBytes(aucFpage, tBytes, aulSectPage[tIndex], pFile)) {
aucFpage = xfree(aucFpage);
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:161,174 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:210,268
/* Process the bytes */
vGetDefaultSection(&tSection);
vGet2SectionInfo(aucFpage + 1, tBytes - 1, &tSection);
- vAdd2SectionInfoList(&tSection, aulTextOffset[iIndex]);
+ vAdd2SectionInfoList(&tSection, aulCharPos[tIndex]);
aucFpage = xfree(aucFpage);
}
- aulTextOffset = xfree(aulTextOffset);
+ aulCharPos = xfree(aulCharPos);
aulSectPage = xfree(aulSectPage);
} /* end of vGet2SepInfo */
/*
+ * Build the list with Header/Footer Information for WinWord 1/2 files
+ */
+ void
+ vGet2HdrFtrInfo(FILE *pFile, const UCHAR *aucHeader)
+ {
+ ULONG *aulCharPos;
+ UCHAR *aucBuffer;
+ ULONG ulHdrFtrOffset, ulBeginHdrFtrInfo;
+ size_t tHdrFtrInfoLen, tIndex, tOffset, tLen;
+
+ fail(pFile == NULL || aucHeader == NULL);
+
+ ulBeginHdrFtrInfo = ulGetLong(0x9a, aucHeader); /* fcPlcfhdd */
+ NO_DBG_HEX(ulBeginHdrFtrInfo);
+ tHdrFtrInfoLen = (size_t)usGetWord(0x9e, aucHeader); /* cbPlcfhdd */
+ NO_DBG_DEC(tHdrFtrInfoLen);
+ if (tHdrFtrInfoLen < 8) {
+ DBG_DEC_C(tHdrFtrInfoLen != 0, tHdrFtrInfoLen);
+ return;
+ }
+
+ aucBuffer = xmalloc(tHdrFtrInfoLen);
+ if (!bReadBytes(aucBuffer, tHdrFtrInfoLen, ulBeginHdrFtrInfo, pFile)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tHdrFtrInfoLen);
+
+ tLen = tHdrFtrInfoLen / 4 - 1;
+ /* Save the header/footer offsets */
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0;
+ tIndex < tLen;
+ tIndex++, tOffset += 4) {
+ ulHdrFtrOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulHdrFtrOffset);
+ aulCharPos[tIndex] = ulHdrFtrOffset2CharPos(ulHdrFtrOffset);
+ NO_DBG_HEX(aulCharPos[tIndex]);
+ }
+ vCreat2HdrFtrInfoList(aulCharPos, tLen);
+ aulCharPos = xfree(aulCharPos);
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet2HdrFtrInfo */
+
+ /*
* Translate the rowinfo to a member of the row_info enumeration
*/
row_info_enum
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:311,317 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:405,410
werr(1, "The number of columns is corrupt");
}
pRow->ucNumberOfColumns = (UCHAR)iCol;
- pRow->iColumnWidthSum = 0;
iPosPrev = (int)(short)usGetWord(
iFodo + iFodoOff + 4,
aucGrpprl);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:321,328 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:414,419
aucGrpprl);
pRow->asColumnWidth[iIndex] =
(short)(iPosCurr - iPosPrev);
- pRow->iColumnWidthSum +=
- pRow->asColumnWidth[iIndex];
iPosPrev = iPosCurr;
}
bFound154 = TRUE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:393,398 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:484,490
eGetNumType(ucTmp) == level_type_pause;
break;
case 15: /* ChgTabsPapx */
+ case 23: /* ChgTabs */
iTmp = (int)ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
if (iTmp < 2) {
iInfoLen = 1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:804,810 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:896,902
if (tBytes > sizeof(aucChpx)) {
NO_DBG_PRINT_BLOCK(aucGrpprl + iFodo, tBytes);
- return FALSE;
+ tBytes = sizeof(aucChpx);
}
/* Build the CHPX structure */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:812,818 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:904,910
(void)memcpy(aucChpx, aucGrpprl + iFodo, min(tBytes, sizeof(aucChpx)));
ulTmp = ulGetLong(8, aucChpx);
- if (ulTmp != 0) {
+ if (ulTmp != 0 && ulTmp < MAX_FILESIZE) {
pPicture->ulPictureOffset = ulTmp;
DBG_HEX(pPicture->ulPictureOffset);
return TRUE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:835,841 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:927,933
if (tBytes > sizeof(aucChpx)) {
NO_DBG_PRINT_BLOCK(aucGrpprl + iFodo, tBytes);
- return FALSE;
+ tBytes = sizeof(aucChpx);
}
/* Build the CHPX structure */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:843,849 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:935,941
(void)memcpy(aucChpx, aucGrpprl + iFodo, min(tBytes, sizeof(aucChpx)));
ulTmp = ulGetLong(14, aucChpx);
- if (ulTmp != 0) {
+ if (ulTmp != 0 && ulTmp < MAX_FILESIZE) {
pPicture->ulPictureOffset = ulTmp;
DBG_HEX(pPicture->ulPictureOffset);
DBG_DEC(tBytes);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop2.c:879,884 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop2.c:971,977
DBG_DEC(tCharInfoLen);
if (tCharInfoLen < 4) {
DBG_DEC(tCharInfoLen);
+ return;
}
aucBuffer = xmalloc(tCharInfoLen);
[jmk] --rw-rw-r-- M 499692 jmk sys 28409 Jan 14 12:57 sys/src/cmd/aux/antiword/prop2.c
[jmk] --rw-rw-r-- M 499692 jmk sys 30660 Jan 14 12:57 sys/src/cmd/aux/antiword/prop6.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:1,6
/*
* prop6.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GPL
*
* Description:
* Read the property information from a MS Word 6 or 7 file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:50,58 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:50,56
return 1 + 5;
case 73: case 95: case 136: case 137:
return 1 + 3;
- case 120:
- return 1 + 13;
- case 187:
+ case 120: case 187:
return 1 + 12;
default:
return 1 + 1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:60,65 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:58,106
} /* end of iGet6InfoLength */
/*
+ * Build the lists with Document Property Information for Word 6/7 files
+ */
+ void
+ vGet6DopInfo(FILE *pFile, ULONG ulStartBlock,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const UCHAR *aucHeader)
+ {
+ document_block_type tDocument;
+ UCHAR *aucBuffer;
+ ULONG ulBeginDocpInfo, ulTmp;
+ size_t tDocpInfoLen;
+ USHORT usTmp;
+
+ ulBeginDocpInfo = ulGetLong(0x150, aucHeader); /* fcDop */
+ DBG_HEX(ulBeginDocpInfo);
+ tDocpInfoLen = (size_t)ulGetLong(0x154, aucHeader); /* lcbDop */
+ DBG_DEC(tDocpInfoLen);
+ if (tDocpInfoLen < 28) {
+ DBG_MSG("No Document information");
+ return;
+ }
+
+ aucBuffer = xmalloc(tDocpInfoLen);
+ if (!bReadBuffer(pFile, ulStartBlock,
+ aulBBD, tBBDLen, BIG_BLOCK_SIZE,
+ aucBuffer, ulBeginDocpInfo, tDocpInfoLen)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+
+ usTmp = usGetWord(0x00, aucBuffer);
+ tDocument.ucHdrFtrSpecification = (UCHAR)(usTmp >> 8); /* grpfIhdt */
+ tDocument.usDefaultTabWidth = usGetWord(0x0a, aucBuffer); /* dxaTab */
+ ulTmp = ulGetLong(0x14, aucBuffer); /* dttmCreated */
+ tDocument.tCreateDate = tConvertDTTM(ulTmp);
+ ulTmp = ulGetLong(0x18, aucBuffer); /* dttmRevised */
+ tDocument.tRevisedDate = tConvertDTTM(ulTmp);
+ vCreateDocumentInfoList(&tDocument);
+
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet6DopInfo */
+
+ /*
* Fill the section information block with information
* from a Word 6/7 file.
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:110,115 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:151,160
usCcol = 1 + usGetWord(iFodoOff + 1, aucGrpprl);
DBG_DEC(usCcol);
break;
+ case 153: /* grpfIhdt */
+ pSection->ucHdrFtrSpecification =
+ ucGetByte(iFodoOff + 1, aucGrpprl);
+ break;
default:
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:130,140 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:175,184
const UCHAR *aucHeader)
{
section_block_type tSection;
- ULONG *aulSectPage, *aulTextOffset;
+ ULONG *aulSectPage, *aulCharPos;
UCHAR *aucBuffer, *aucFpage;
- ULONG ulBeginSectInfo;
- size_t tSectInfoLen, tOffset, tLen, tBytes;
- int iIndex;
+ ULONG ulBeginOfText, ulTextOffset, ulBeginSectInfo;
+ size_t tSectInfoLen, tIndex, tOffset, tLen, tBytes;
UCHAR aucTmp[2];
fail(pFile == NULL || aucHeader == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:141,146 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:185,192
fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
fail(aulBBD == NULL);
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
+ NO_DBG_HEX(ulBeginOfText);
ulBeginSectInfo = ulGetLong(0x88, aucHeader); /* fcPlcfsed */
DBG_HEX(ulBeginSectInfo);
tSectInfoLen = (size_t)ulGetLong(0x8c, aucHeader); /* lcbPlcfsed */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:162,193 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:208,240
/* Read the Section Descriptors */
tLen = (tSectInfoLen - 4) / 16;
/* Save the section offsets */
- aulTextOffset = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = 0;
- iIndex < (int)tLen;
- iIndex++, tOffset += 4) {
- aulTextOffset[iIndex] = ulGetLong(tOffset, aucBuffer);
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0; tIndex < tLen; tIndex++, tOffset += 4) {
+ ulTextOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulTextOffset);
+ aulCharPos[tIndex] = ulBeginOfText + ulTextOffset;
+ NO_DBG_HEX(aulCharPos[tIndex]);
}
/* Save the Sepx offsets */
aulSectPage = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = (tLen + 1) * 4;
- iIndex < (int)tLen;
- iIndex++, tOffset += 12) {
- aulSectPage[iIndex] = ulGetLong(tOffset + 2, aucBuffer);
- NO_DBG_HEX(aulSectPage[iIndex]); /* fcSepx */
+ for (tIndex = 0, tOffset = (tLen + 1) * 4;
+ tIndex < tLen;
+ tIndex++, tOffset += 12) {
+ aulSectPage[tIndex] = ulGetLong(tOffset + 2, aucBuffer);
+ NO_DBG_HEX(aulSectPage[tIndex]); /* fcSepx */
}
aucBuffer = xfree(aucBuffer);
/* Read the Section Properties */
- for (iIndex = 0; iIndex < (int)tLen; iIndex++) {
- if (aulSectPage[iIndex] == FC_INVALID) {
- vDefault2SectionInfoList(aulTextOffset[iIndex]);
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
+ if (aulSectPage[tIndex] == FC_INVALID) {
+ vDefault2SectionInfoList(aulCharPos[tIndex]);
continue;
}
/* Get the number of bytes to read */
if (!bReadBuffer(pFile, ulStartBlock,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
- aucTmp, aulSectPage[iIndex], 2)) {
+ aucTmp, aulSectPage[tIndex], 2)) {
continue;
}
tBytes = 2 + (size_t)usGetWord(0, aucTmp);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:196,202 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:243,249
aucFpage = xmalloc(tBytes);
if (!bReadBuffer(pFile, ulStartBlock,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
- aucFpage, aulSectPage[iIndex], tBytes)) {
+ aucFpage, aulSectPage[tIndex], tBytes)) {
aucFpage = xfree(aucFpage);
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:204,217 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:251,315
/* Process the bytes */
vGetDefaultSection(&tSection);
vGet6SectionInfo(aucFpage + 2, tBytes - 2, &tSection);
- vAdd2SectionInfoList(&tSection, aulTextOffset[iIndex]);
+ vAdd2SectionInfoList(&tSection, aulCharPos[tIndex]);
aucFpage = xfree(aucFpage);
}
- aulTextOffset = xfree(aulTextOffset);
+ aulCharPos = xfree(aulCharPos);
aulSectPage = xfree(aulSectPage);
} /* end of vGet6SepInfo */
/*
+ * Build the list with Header/Footer Information for Word 6/7 files
+ */
+ void
+ vGet6HdrFtrInfo(FILE *pFile, ULONG ulStartBlock,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const UCHAR *aucHeader)
+ {
+ ULONG *aulCharPos;
+ UCHAR *aucBuffer;
+ ULONG ulHdrFtrOffset, ulBeginHdrFtrInfo;
+ size_t tHdrFtrInfoLen, tIndex, tOffset, tLen;
+
+ fail(pFile == NULL || aucHeader == NULL);
+ fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
+ fail(aulBBD == NULL);
+
+ ulBeginHdrFtrInfo = ulGetLong(0xb0, aucHeader); /* fcPlcfhdd */
+ NO_DBG_HEX(ulBeginHdrFtrInfo);
+ tHdrFtrInfoLen = (size_t)ulGetLong(0xb4, aucHeader); /* lcbPlcfhdd */
+ NO_DBG_DEC(tHdrFtrInfoLen);
+ if (tHdrFtrInfoLen < 8) {
+ DBG_DEC_C(tHdrFtrInfoLen != 0, tHdrFtrInfoLen);
+ return;
+ }
+
+ aucBuffer = xmalloc(tHdrFtrInfoLen);
+ if (!bReadBuffer(pFile, ulStartBlock,
+ aulBBD, tBBDLen, BIG_BLOCK_SIZE,
+ aucBuffer, ulBeginHdrFtrInfo, tHdrFtrInfoLen)) {
+ aucBuffer = xfree(aucBuffer);
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tHdrFtrInfoLen);
+
+ tLen = tHdrFtrInfoLen / 4 - 1;
+ /* Save the header/footer offsets */
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0;
+ tIndex < tLen;
+ tIndex++, tOffset += 4) {
+ ulHdrFtrOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulHdrFtrOffset);
+ aulCharPos[tIndex] = ulHdrFtrOffset2CharPos(ulHdrFtrOffset);
+ NO_DBG_HEX(aulCharPos[tIndex]);
+ }
+ vCreat6HdrFtrInfoList(aulCharPos, tLen);
+ aulCharPos = xfree(aulCharPos);
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet6HdrFtrInfo */
+
+ /*
* Translate the rowinfo to a member of the row_info enumeration
*/
row_info_enum
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:235,241 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:333,339
while (iBytes >= iFodoOff + 1) {
iInfoLen = 0;
switch (ucGetByte(iFodo + iFodoOff, aucGrpprl)) {
- case 24: /* fIntable */
+ case 24: /* fInTable */
if (odd(ucGetByte(iFodo + iFodoOff + 1, aucGrpprl))) {
bFound24_1 = TRUE;
} else {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:289,294 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:387,397
pRow->ucBorderInfo |= TABLE_BORDER_RIGHT;
}
break;
+ case 188: /* cDefTable10 */
+ DBG_MSG("188: sprmTDefTable10");
+ iSize = (int)usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
+ DBG_DEC(iSize);
+ break;
case 190: /* cDefTable */
iSize = (int)usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
if (iSize < 6 || iBytes < iFodoOff + 7) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:310,316 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:413,418
werr(1, "The number of columns is corrupt");
}
pRow->ucNumberOfColumns = (UCHAR)iCol;
- pRow->iColumnWidthSum = 0;
iPosPrev = (int)(short)usGetWord(
iFodo + iFodoOff + 4,
aucGrpprl);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:320,327 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:422,427
aucGrpprl);
pRow->asColumnWidth[iIndex] =
(short)(iPosCurr - iPosPrev);
- pRow->iColumnWidthSum +=
- pRow->asColumnWidth[iIndex];
iPosPrev = iPosCurr;
}
bFound190 = TRUE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:336,345 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:436,446
}
iFodoOff += iInfoLen;
}
- if (bFound24_1 && bFound25_1 && bFound190) {
+
+ if (bFound25_1 && bFound190) {
return found_end_of_row;
}
- if (bFound24_0 && bFound25_0 && !bFound190) {
+ if (bFound25_0 && !bFound190) {
return found_not_end_of_row;
}
if (bFound24_1) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:413,418 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:514,520
eGetNumType(ucTmp) == level_type_pause;
break;
case 15: /* ChgTabsPapx */
+ case 23: /* ChgTabs */
iTmp = (int)ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
if (iTmp < 2) {
iInfoLen = 1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:495,501 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:597,604
ULONG ulCharPos, ulCharPosFirst, ulCharPosLast;
ULONG ulBeginParfInfo;
size_t tParfInfoLen, tParfPageNum, tOffset, tSize, tLenOld, tLen;
- int iIndex, iIndex2, iRun, iFodo, iLen;
+ size_t tIndex, tIndex2, tRun;
+ int iFodo, iLen;
row_info_enum eRowInfo;
USHORT usParfFirstPage, usCount, usIstd;
UCHAR aucFpage[BIG_BLOCK_SIZE];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:524,534 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:627,637
tLen = (tParfInfoLen - 4) / 6;
ausParfPage = xcalloc(tLen, sizeof(USHORT));
- for (iIndex = 0, tOffset = (tLen + 1) * 4;
- iIndex < (int)tLen;
- iIndex++, tOffset += 2) {
- ausParfPage[iIndex] = usGetWord(tOffset, aucBuffer);
- NO_DBG_DEC(ausParfPage[iIndex]);
+ for (tIndex = 0, tOffset = (tLen + 1) * 4;
+ tIndex < tLen;
+ tIndex++, tOffset += 2) {
+ ausParfPage[tIndex] = usGetWord(tOffset, aucBuffer);
+ NO_DBG_DEC(ausParfPage[tIndex]);
}
DBG_HEX(ulGetLong(0, aucBuffer));
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:544,552 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:647,655
ausParfPage = xrealloc(ausParfPage, tSize);
/* Add new values */
usCount = usParfFirstPage + 1;
- for (iIndex = (int)tLenOld; iIndex < (int)tLen; iIndex++) {
- ausParfPage[iIndex] = usCount;
- NO_DBG_DEC(ausParfPage[iIndex]);
+ for (tIndex = tLenOld; tIndex < tLen; tIndex++) {
+ ausParfPage[tIndex] = usCount;
+ NO_DBG_DEC(ausParfPage[tIndex]);
usCount++;
}
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:553,572 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:656,675
(void)memset(&tRow, 0, sizeof(tRow));
ulCharPosFirst = CP_INVALID;
- for (iIndex = 0; iIndex < (int)tLen; iIndex++) {
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
if (!bReadBuffer(pFile, ulStartBlock,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
aucFpage,
- (ULONG)ausParfPage[iIndex] * BIG_BLOCK_SIZE,
+ (ULONG)ausParfPage[tIndex] * BIG_BLOCK_SIZE,
BIG_BLOCK_SIZE)) {
break;
}
- iRun = (int)ucGetByte(0x1ff, aucFpage);
- NO_DBG_DEC(iRun);
- for (iIndex2 = 0; iIndex2 < iRun; iIndex2++) {
- NO_DBG_HEX(ulGetLong(iIndex2 * 4, aucFpage));
+ tRun = (size_t)ucGetByte(0x1ff, aucFpage);
+ NO_DBG_DEC(tRun);
+ for (tIndex2 = 0; tIndex2 < tRun; tIndex2++) {
+ NO_DBG_HEX(ulGetLong(tIndex2 * 4, aucFpage));
iFodo = 2 * (int)ucGetByte(
- (iRun + 1) * 4 + iIndex2 * 7, aucFpage);
+ (tRun + 1) * 4 + tIndex2 * 7, aucFpage);
if (iFodo <= 0) {
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:576,584 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:679,688
usIstd = (USHORT)ucGetByte(iFodo + 1, aucFpage);
vFillStyleFromStylesheet(usIstd, &tStyle);
vGet6StyleInfo(iFodo, aucFpage + 3, iLen - 3, &tStyle);
- ulCharPos = ulGetLong(iIndex2 * 4, aucFpage);
+ ulCharPos = ulGetLong(tIndex2 * 4, aucFpage);
NO_DBG_HEX(ulCharPos);
- tStyle.ulFileOffset = ulCharPos2FileOffset(ulCharPos);
+ tStyle.ulFileOffset = ulCharPos2FileOffsetX(
+ ulCharPos, &tStyle.eListID);
vAdd2StyleInfoList(&tStyle);
eRowInfo = eGet6RowInfo(iFodo,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:589,595 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:693,699
break;
}
ulCharPosFirst = ulGetLong(
- iIndex2 * 4, aucFpage);
+ tIndex2 * 4, aucFpage);
NO_DBG_HEX(ulCharPosFirst);
tRow.ulCharPosStart = ulCharPosFirst;
tRow.ulFileOffsetStart =
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:599,609 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:703,713
break;
case found_end_of_row:
ulCharPosLast = ulGetLong(
- iIndex2 * 4, aucFpage);
+ tIndex2 * 4, aucFpage);
NO_DBG_HEX(ulCharPosLast);
tRow.ulCharPosEnd = ulCharPosLast;
- tRow.ulFileOffsetEnd = ulCharPos2FileOffset(
- ulCharPosLast);
+ tRow.ulFileOffsetEnd =
+ ulCharPos2FileOffset(ulCharPosLast);
DBG_HEX_C(tRow.ulFileOffsetEnd == FC_INVALID,
ulCharPosLast);
vAdd2RowInfoList(&tRow);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:635,640 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:739,746
USHORT usTmp;
UCHAR ucTmp;
+ TRACE_MSG("vGet6FontInfo");
+
fail(iFodo < 0 || aucGrpprl == NULL || pFont == NULL);
iFodoOff = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:651,657 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:757,763
case 80: /* cIstd */
usTmp = usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
NO_DBG_DEC(usTmp);
- break;
+ break;
case 82: /* cDefault */
pFont->usFontStyle &= FONT_HIDDEN;
pFont->ucFontColor = FONT_COLOR_DEFAULT;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:785,790 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:891,898
if (usTmp <= (USHORT)UCHAR_MAX) {
pFont->ucFontNumber = (UCHAR)usTmp;
} else {
+ DBG_DEC(usTmp);
+ DBG_FIXME();
pFont->ucFontNumber = 0;
}
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:803,811 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:911,921
break;
case 95: /* cHps, cHpsPos */
ucTmp = ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
+ DBG_DEC(ucTmp);
if (ucTmp != 0) {
pFont->usFontSize = (USHORT)ucTmp;
}
+ ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
DBG_DEC(ucTmp);
break;
case 98: /* cIco */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:816,821 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:926,939
pFont->usFontSize =
usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
break;
+ case 100: /* cHpsInc */
+ DBG_MSG("100: sprmCHpsInc");
+ ucTmp = ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
+ DBG_DEC(ucTmp);
+ break;
+ case 103: /* cMajority */
+ DBG_MSG("103: sprmCMajority");
+ break;
case 104: /* cIss */
ucTmp = ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
ucTmp &= 0x07;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:827,833 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:945,951
NO_DBG_MSG("Subscript");
}
break;
- case 106: /* cHps */
+ case 106: /* cHpsInc1 */
usTmp = usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
lTmp = (long)pFont->usFontSize + (long)usTmp;
if (lTmp < 8) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:838,843 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:956,969
pFont->usFontSize = (USHORT)lTmp;
}
break;
+ case 108: /* cMajority50 */
+ DBG_MSG("108: sprmCMajority50");
+ break;
+ case 109: /* cHpsMul */
+ DBG_MSG("109: sprmCHpsMul");
+ usTmp = usGetWord(iFodo + iFodoOff + 1, aucGrpprl);
+ DBG_DEC(usTmp);
+ break;
default:
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:860,865 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:986,993
BOOL bFound;
UCHAR ucTmp;
+ TRACE_MSG("vGet6PicInfo");
+
fail(iFodo < 0 || aucGrpprl == NULL || pPicture == NULL);
iFodoOff = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:871,877 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:999,1006
iFodo + iFodoOff + 2, aucGrpprl);
bFound = TRUE;
break;
- case 71: /* dttm */
+ #if 0
+ case 71: /* fData */
ucTmp = ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
if (ucTmp == 0x01) {
/* Not a picture, but a form field */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:879,884 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:1008,1014
}
DBG_DEC_C(ucTmp != 0, ucTmp);
break;
+ #endif
case 75: /* fOle2 */
ucTmp = ucGetByte(iFodo + iFodoOff + 1, aucGrpprl);
if (ucTmp == 0x01) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:910,916 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:1040,1047
UCHAR *aucBuffer;
ULONG ulFileOffset, ulCharPos, ulBeginCharInfo;
size_t tCharInfoLen, tOffset, tSize, tLenOld, tLen, tCharPageNum;
- int iIndex, iIndex2, iRun, iFodo, iLen;
+ size_t tIndex, tIndex2, tRun;
+ int iFodo, iLen;
USHORT usCharFirstPage, usCount, usIstd;
UCHAR aucFpage[BIG_BLOCK_SIZE];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:937,947 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:1068,1078
tLen = (tCharInfoLen - 4) / 6;
ausCharPage = xcalloc(tLen, sizeof(USHORT));
- for (iIndex = 0, tOffset = (tLen + 1) * 4;
- iIndex < (int)tLen;
- iIndex++, tOffset += 2) {
- ausCharPage[iIndex] = usGetWord(tOffset, aucBuffer);
- NO_DBG_DEC(ausCharPage[iIndex]);
+ for (tIndex = 0, tOffset = (tLen + 1) * 4;
+ tIndex < tLen;
+ tIndex++, tOffset += 2) {
+ ausCharPage[tIndex] = usGetWord(tOffset, aucBuffer);
+ NO_DBG_DEC(ausCharPage[tIndex]);
}
DBG_HEX(ulGetLong(0, aucBuffer));
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop6.c:957,984 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop6.c:1088,1115
ausCharPage = xrealloc(ausCharPage, tSize);
/* Add new values */
usCount = usCharFirstPage + 1;
- for (iIndex = (int)tLenOld; iIndex < (int)tLen; iIndex++) {
- ausCharPage[iIndex] = usCount;
- NO_DBG_DEC(ausCharPage[iIndex]);
+ for (tIndex = tLenOld; tIndex < tLen; tIndex++) {
+ ausCharPage[tIndex] = usCount;
+ NO_DBG_DEC(ausCharPage[tIndex]);
usCount++;
}
}
- for (iIndex = 0; iIndex < (int)tLen; iIndex++) {
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
if (!bReadBuffer(pFile, ulStartBlock,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
aucFpage,
- (ULONG)ausCharPage[iIndex] * BIG_BLOCK_SIZE,
+ (ULONG)ausCharPage[tIndex] * BIG_BLOCK_SIZE,
BIG_BLOCK_SIZE)) {
break;
}
- iRun = (int)ucGetByte(0x1ff, aucFpage);
- NO_DBG_DEC(iRun);
- for (iIndex2 = 0; iIndex2 < iRun; iIndex2++) {
- ulCharPos = ulGetLong(iIndex2 * 4, aucFpage);
+ tRun = (size_t)ucGetByte(0x1ff, aucFpage);
+ NO_DBG_DEC(tRun);
+ for (tIndex2 = 0; tIndex2 < tRun; tIndex2++) {
+ ulCharPos = ulGetLong(tIndex2 * 4, aucFpage);
ulFileOffset = ulCharPos2FileOffset(ulCharPos);
iFodo = 2 * (int)ucGetByte(
- (iRun + 1) * 4 + iIndex2, aucFpage);
+ (tRun + 1) * 4 + tIndex2, aucFpage);
iLen = (int)ucGetByte(iFodo, aucFpage);
[jmk] --rw-rw-r-- M 499692 jmk sys 30660 Jan 14 12:57 sys/src/cmd/aux/antiword/prop6.c
[jmk] --rw-rw-r-- M 499692 jmk sys 40247 Jan 14 12:57 sys/src/cmd/aux/antiword/prop8.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1,13 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1,14
/*
* prop8.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
- * Read the property information from a MS Word 8, 9 or 10 file
+ * Read the property information from a MS Word 8, 9,10 or 11 file
*
* Word 8 is better known as Word 97 or as Word 98 for Mac
* Word 9 is better known as Word 2000 or as Word 2001 for Mac
* Word 10 is better known as Word 2002 or as Word XP
+ * Word 11 is better known as Word 2003
*/
#include <stdlib.h>
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:18,24 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:19,25
/*
- * iGet8InfoLength - the length of the information for Word 8/9/10 files
+ * iGet8InfoLength - the length of the information for Word 8/9/10/11 files
*/
static int
iGet8InfoLength(int iByteNbr, const UCHAR *aucGrpprl)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:54,61 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:55,155
} /* end of iGet8InfoLength */
/*
+ * aucFillInfoBuffer - fill the information buffer
+ *
+ * Returns the information buffer when successful, otherwise NULL
+ */
+ static UCHAR *
+ aucFillInfoBuffer(FILE *pFile, const pps_type *pTable,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const ULONG *aulSBD, size_t tSBDLen,
+ ULONG ulBeginInfo, size_t tInfoLen)
+ {
+ const ULONG *aulBlockDepot;
+ UCHAR *aucBuffer;
+ size_t tBlockDepotLen, tBlockSize;
+
+ fail(pFile == NULL || pTable == NULL);
+ fail(aulBBD == NULL || aulSBD == NULL);
+ fail(tInfoLen == 0);
+
+ NO_DBG_DEC(pTable->ulSB);
+ NO_DBG_HEX(pTable->ulSize);
+ if (pTable->ulSize == 0) {
+ DBG_MSG("No information");
+ return NULL;
+ }
+
+ if (pTable->ulSize < MIN_SIZE_FOR_BBD_USE) {
+ /* Use the Small Block Depot */
+ aulBlockDepot = aulSBD;
+ tBlockDepotLen = tSBDLen;
+ tBlockSize = SMALL_BLOCK_SIZE;
+ } else {
+ /* Use the Big Block Depot */
+ aulBlockDepot = aulBBD;
+ tBlockDepotLen = tBBDLen;
+ tBlockSize = BIG_BLOCK_SIZE;
+ }
+ aucBuffer = xmalloc(tInfoLen);
+ if (!bReadBuffer(pFile, pTable->ulSB,
+ aulBlockDepot, tBlockDepotLen, tBlockSize,
+ aucBuffer, ulBeginInfo, tInfoLen)) {
+ aucBuffer = xfree(aucBuffer);
+ return NULL;
+ }
+ return aucBuffer;
+ } /* end of aucFillInfoBuffer */
+
+ /*
+ * Build the lists with Document Property Information for Word 8/9/10/11 files
+ */
+ void
+ vGet8DopInfo(FILE *pFile, const pps_type *pTable,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const ULONG *aulSBD, size_t tSBDLen,
+ const UCHAR *aucHeader)
+ {
+ document_block_type tDocument;
+ UCHAR *aucBuffer;
+ ULONG ulBeginDocpInfo, ulTmp;
+ size_t tDocpInfoLen;
+ USHORT usTmp;
+
+ fail(pFile == NULL || pTable == NULL || aucHeader == NULL);
+ fail(aulBBD == NULL || aulSBD == NULL);
+
+ ulBeginDocpInfo = ulGetLong(0x192, aucHeader); /* fcDop */
+ NO_DBG_HEX(ulBeginSectInfo);
+ tDocpInfoLen = (size_t)ulGetLong(0x196, aucHeader); /* lcbDop */
+ NO_DBG_DEC(tSectInfoLen);
+ if (tDocpInfoLen < 28) {
+ DBG_MSG("No Document information");
+ return;
+ }
+
+ aucBuffer = aucFillInfoBuffer(pFile, pTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen,
+ ulBeginDocpInfo, tDocpInfoLen);
+ if (aucBuffer == NULL) {
+ return;
+ }
+
+ usTmp = usGetWord(0x00, aucBuffer);
+ tDocument.ucHdrFtrSpecification = (UCHAR)(usTmp >> 8); /* grpfIhdt */
+ tDocument.usDefaultTabWidth = usGetWord(0x0a, aucBuffer); /* dxaTab */
+ ulTmp = ulGetLong(0x14, aucBuffer); /* dttmCreated */
+ tDocument.tCreateDate = tConvertDTTM(ulTmp);
+ ulTmp = ulGetLong(0x18, aucBuffer); /* dttmRevised */
+ tDocument.tRevisedDate = tConvertDTTM(ulTmp);
+ vCreateDocumentInfoList(&tDocument);
+
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet8DopInfo */
+
+ /*
* Fill the section information block with information
- * from a Word 8/9/10 file.
+ * from a Word 8/9/10/11 file.
*/
static void
vGet8SectionInfo(const UCHAR *aucGrpprl, size_t tBytes,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:77,82 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:171,180
DBG_DEC(ucTmp);
pSection->bNewPage = ucTmp != 0 && ucTmp != 1;
break;
+ case 0x3014: /* grpfIhdt */
+ pSection->ucHdrFtrSpecification =
+ ucGetByte(iFodoOff + 2, aucGrpprl);
+ break;
case 0x500b: /* ccolM1 */
usCcol = 1 + usGetWord(iFodoOff + 2, aucGrpprl);
DBG_DEC(usCcol);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:116,122 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:214,220
} /* end of vGet8SectionInfo */
/*
- * Build the lists with Section Property Information for Word 8/9/10 files
+ * Build the lists with Section Property Information for Word 8/9/10/11 files
*/
void
vGet8SepInfo(FILE *pFile, const pps_info_type *pPPS,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:125,144 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:223,239
const UCHAR *aucHeader)
{
section_block_type tSection;
- ULONG *aulSectPage, *aulTextOffset;
- const ULONG *aulBlockDepot;
+ ULONG *aulSectPage, *aulCharPos;
UCHAR *aucBuffer, *aucFpage;
- ULONG ulBeginSectInfo;
- ULONG ulTableSize, ulTableStartBlock;
- size_t tSectInfoLen, tBlockDepotLen;
- size_t tBlockSize, tOffset, tLen, tBytes;
- int iIndex;
- USHORT usDocStatus;
+ ULONG ulBeginOfText, ulTextOffset, ulBeginSectInfo;
+ size_t tSectInfoLen, tIndex, tOffset, tLen, tBytes;
UCHAR aucTmp[2];
fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
fail(aulBBD == NULL || aulSBD == NULL);
+ ulBeginOfText = ulGetLong(0x18, aucHeader); /* fcMin */
+ NO_DBG_HEX(ulBeginOfText);
ulBeginSectInfo = ulGetLong(0xca, aucHeader); /* fcPlcfsed */
NO_DBG_HEX(ulBeginSectInfo);
tSectInfoLen = (size_t)ulGetLong(0xce, aucHeader); /* lcbPlcfsed */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:148,217 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:243,288
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_MSG("No section information");
+ aucBuffer = aucFillInfoBuffer(pFile, &pPPS->tTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen,
+ ulBeginSectInfo, tSectInfoLen);
+ if (aucBuffer == NULL) {
return;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
- /* Use the Small Block Depot */
- aulBlockDepot = aulSBD;
- tBlockDepotLen = tSBDLen;
- tBlockSize = SMALL_BLOCK_SIZE;
- } else {
- /* Use the Big Block Depot */
- aulBlockDepot = aulBBD;
- tBlockDepotLen = tBBDLen;
- tBlockSize = BIG_BLOCK_SIZE;
- }
- aucBuffer = xmalloc(tSectInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
- aulBlockDepot, tBlockDepotLen, tBlockSize,
- aucBuffer, ulBeginSectInfo, tSectInfoLen)) {
- aucBuffer = xfree(aucBuffer);
- return;
- }
NO_DBG_PRINT_BLOCK(aucBuffer, tSectInfoLen);
/* Read the Section Descriptors */
tLen = (tSectInfoLen - 4) / 16;
/* Save the section offsets */
- aulTextOffset = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = 0;
- iIndex < (int)tLen;
- iIndex++, tOffset += 4) {
- aulTextOffset[iIndex] = ulGetLong(tOffset, aucBuffer);
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0;
+ tIndex < tLen;
+ tIndex++, tOffset += 4) {
+ ulTextOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulTextOffset);
+ aulCharPos[tIndex] = ulBeginOfText + ulTextOffset;
+ NO_DBG_HEX(aulCharPos[tIndex]);
}
/* Save the Sepx offsets */
aulSectPage = xcalloc(tLen, sizeof(ULONG));
- for (iIndex = 0, tOffset = (tLen + 1) * 4;
- iIndex < (int)tLen;
- iIndex++, tOffset += 12) {
- aulSectPage[iIndex] = ulGetLong(tOffset + 2, aucBuffer);
- NO_DBG_HEX(aulSectPage[iIndex]); /* fcSepx */
+ for (tIndex = 0, tOffset = (tLen + 1) * 4;
+ tIndex < tLen;
+ tIndex++, tOffset += 12) {
+ aulSectPage[tIndex] = ulGetLong(tOffset + 2, aucBuffer);
+ NO_DBG_HEX(aulSectPage[tIndex]); /* fcSepx */
}
aucBuffer = xfree(aucBuffer);
/* Read the Section Properties */
- for (iIndex = 0; iIndex < (int)tLen; iIndex++) {
- if (aulSectPage[iIndex] == FC_INVALID) {
- vDefault2SectionInfoList(aulTextOffset[iIndex]);
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
+ if (aulSectPage[tIndex] == FC_INVALID) {
+ vDefault2SectionInfoList(aulCharPos[tIndex]);
continue;
}
/* Get the number of bytes to read */
if (!bReadBuffer(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
- aucTmp, aulSectPage[iIndex], 2)) {
+ aucTmp, aulSectPage[tIndex], 2)) {
continue;
}
tBytes = 2 + (size_t)usGetWord(0, aucTmp);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:220,226 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:291,297
aucFpage = xmalloc(tBytes);
if (!bReadBuffer(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, BIG_BLOCK_SIZE,
- aucFpage, aulSectPage[iIndex], tBytes)) {
+ aucFpage, aulSectPage[tIndex], tBytes)) {
aucFpage = xfree(aucFpage);
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:228,241 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:299,364
/* Process the bytes */
vGetDefaultSection(&tSection);
vGet8SectionInfo(aucFpage + 2, tBytes - 2, &tSection);
- vAdd2SectionInfoList(&tSection, aulTextOffset[iIndex]);
+ vAdd2SectionInfoList(&tSection, aulCharPos[tIndex]);
aucFpage = xfree(aucFpage);
}
- aulTextOffset = xfree(aulTextOffset);
+ aulCharPos = xfree(aulCharPos);
aulSectPage = xfree(aulSectPage);
} /* end of vGet8SepInfo */
/*
+ * Build the list with Header/Footer Information for Word 8/9/10/11 files
+ */
+ void
+ vGet8HdrFtrInfo(FILE *pFile, const pps_type *pTable,
+ const ULONG *aulBBD, size_t tBBDLen,
+ const ULONG *aulSBD, size_t tSBDLen,
+ const UCHAR *aucHeader)
+ {
+ ULONG *aulCharPos;
+ UCHAR *aucBuffer;
+ ULONG ulHdrFtrOffset, ulBeginHdrFtrInfo;
+ size_t tHdrFtrInfoLen, tIndex, tOffset, tLen;
+
+ fail(pFile == NULL || pTable == NULL || aucHeader == NULL);
+ fail(aulBBD == NULL || aulSBD == NULL);
+
+ ulBeginHdrFtrInfo = ulGetLong(0xf2, aucHeader); /* fcPlcfhdd */
+ NO_DBG_HEX(ulBeginHdrFtrInfo);
+ tHdrFtrInfoLen = (size_t)ulGetLong(0xf6, aucHeader); /* lcbPlcfhdd */
+ NO_DBG_DEC(tHdrFtrInfoLen);
+ if (tHdrFtrInfoLen < 8) {
+ DBG_DEC_C(tHdrFtrInfoLen != 0, tHdrFtrInfoLen);
+ return;
+ }
+
+ aucBuffer = aucFillInfoBuffer(pFile, pTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen,
+ ulBeginHdrFtrInfo, tHdrFtrInfoLen);
+ if (aucBuffer == NULL) {
+ return;
+ }
+ NO_DBG_PRINT_BLOCK(aucBuffer, tHdrFtrInfoLen);
+
+ tLen = tHdrFtrInfoLen / 4 - 1;
+ DBG_DEC_C(tLen % 12 != 1 && tLen % 12 != 7, tLen);
+ /* Save the header/footer offsets */
+ aulCharPos = xcalloc(tLen, sizeof(ULONG));
+ for (tIndex = 0, tOffset = 0;
+ tIndex < tLen;
+ tIndex++, tOffset += 4) {
+ ulHdrFtrOffset = ulGetLong(tOffset, aucBuffer);
+ NO_DBG_HEX(ulHdrFtrOffset);
+ aulCharPos[tIndex] = ulHdrFtrOffset2CharPos(ulHdrFtrOffset);
+ NO_DBG_HEX(aulCharPos[tIndex]);
+ }
+ vCreat8HdrFtrInfoList(aulCharPos, tLen);
+ /* Clean up and leave */
+ aulCharPos = xfree(aulCharPos);
+ aucBuffer = xfree(aucBuffer);
+ } /* end of vGet8HdrFtrInfo */
+
+ /*
* Translate the rowinfo to a member of the row_info enumeration
*/
row_info_enum
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:247,252 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:370,376
int iPosCurr, iPosPrev;
USHORT usTmp;
BOOL bFound2416_0, bFound2416_1, bFound2417_0, bFound2417_1;
+ BOOL bFound244b_0, bFound244b_1, bFound244c_0, bFound244c_1;
BOOL bFoundd608;
fail(iFodo < 0 || aucGrpprl == NULL || pRow == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:256,266 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:380,394
bFound2416_1 = FALSE;
bFound2417_0 = FALSE;
bFound2417_1 = FALSE;
+ bFound244b_0 = FALSE;
+ bFound244b_1 = FALSE;
+ bFound244c_0 = FALSE;
+ bFound244c_1 = FALSE;
bFoundd608 = FALSE;
while (iBytes >= iFodoOff + 2) {
iInfoLen = 0;
switch (usGetWord(iFodo + iFodoOff, aucGrpprl)) {
- case 0x2416: /* fIntable */
+ case 0x2416: /* fInTable */
if (odd(ucGetByte(iFodo + iFodoOff + 2, aucGrpprl))) {
bFound2416_1 = TRUE;
} else {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:274,279 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:402,421
bFound2417_0 = TRUE;
}
break;
+ case 0x244b: /* sub-table fInTable */
+ if (odd(ucGetByte(iFodo + iFodoOff + 2, aucGrpprl))) {
+ bFound244b_1 = TRUE;
+ } else {
+ bFound244b_0 = TRUE;
+ }
+ break;
+ case 0x244c: /* sub-table fTtp */
+ if (odd(ucGetByte(iFodo + iFodoOff + 2, aucGrpprl))) {
+ bFound244c_1 = TRUE;
+ } else {
+ bFound244c_0 = TRUE;
+ }
+ break;
case 0x6424: /* brcTop */
usTmp = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
usTmp &= 0xff00;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:314,319 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:456,466
pRow->ucBorderInfo |= TABLE_BORDER_RIGHT;
}
break;
+ case 0xd606: /* cDefTable10 */
+ DBG_MSG("0xd606: sprmTDefTable10");
+ iSize = (int)usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
+ DBG_DEC(iSize);
+ break;
case 0xd608: /* cDefTable */
iSize = (int)usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
if (iSize < 6 || iBytes < iFodoOff + 8) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:335,341 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:482,487
werr(1, "The number of columns is corrupt");
}
pRow->ucNumberOfColumns = (UCHAR)iCol;
- pRow->iColumnWidthSum = 0;
iPosPrev = (int)(short)usGetWord(
iFodo + iFodoOff + 5,
aucGrpprl);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:345,352 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:491,496
aucGrpprl);
pRow->asColumnWidth[iIndex] =
(short)(iPosCurr - iPosPrev);
- pRow->iColumnWidthSum +=
- pRow->asColumnWidth[iIndex];
iPosPrev = iPosCurr;
}
bFoundd608 = TRUE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:361,376 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:505,521
}
iFodoOff += iInfoLen;
}
- if (bFound2416_1 && bFound2417_1 && bFoundd608) {
+
+ if (bFound2417_1 && bFoundd608) {
return found_end_of_row;
}
- if (bFound2416_0 && bFound2417_0 && !bFoundd608) {
+ if (bFound2417_0 && !bFoundd608) {
return found_not_end_of_row;
}
- if (bFound2416_1) {
+ if (bFound2416_1 || bFound244b_1) {
return found_a_cell;
}
- if (bFound2416_0) {
+ if (bFound2416_0 || bFound244b_0) {
return found_not_a_cell;
}
return found_nothing;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:378,384 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:523,529
/*
* Fill the style information block with information
- * from a Word 8/9/10 file.
+ * from a Word 8/9/10/11 file.
*/
void
vGet8StyleInfo(int iFodo,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:432,450 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:577,596
DBG_DEC(sTmp);
DBG_DEC(pStyle->sLeftIndent);
break;
- case 0x6c0d: /* ChgTabsPapx */
+ case 0xc60d: /* ChgTabsPapx */
+ case 0xc615: /* ChgTabs */
iTmp = (int)ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
if (iTmp < 2) {
iInfoLen = 1;
break;
}
- DBG_DEC(iTmp);
+ NO_DBG_DEC(iTmp);
iDel = (int)ucGetByte(iFodo + iFodoOff + 3, aucGrpprl);
if (iTmp < 2 + 2 * iDel) {
iInfoLen = 1;
break;
}
- DBG_DEC(iDel);
+ NO_DBG_DEC(iDel);
iAdd = (int)ucGetByte(
iFodo + iFodoOff + 4 + 2 * iDel, aucGrpprl);
if (iTmp < 2 + 2 * iDel + 2 * iAdd) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:451,457 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:597,603
iInfoLen = 1;
break;
}
- DBG_DEC(iAdd);
+ NO_DBG_DEC(iAdd);
break;
case 0x840e: /* dxaRight */
pStyle->sRightIndent = (short)usGetWord(
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:567,573 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:713,719
} /* end of sGetLeftIndent */
/*
- * Build the list with List Information for Word 8/9/10 files
+ * Build the list with List Information for Word 8/9/10/11 files
*/
void
vGet8LstInfo(FILE *pFile, const pps_info_type *pPPS,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:578,584 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:724,729
list_block_type tList;
const ULONG *aulBlockDepot;
UCHAR *aucLfoInfo, *aucLstfInfo, *aucPapx, *aucXString;
- ULONG ulTableStartBlock, ulTableSize;
ULONG ulBeginLfoInfo, ulBeginLstfInfo, ulBeginLvlfInfo;
ULONG ulListID, ulStart;
size_t tBlockDepotLen, tBlockSize;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:585,591 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:730,736
size_t tLfoInfoLen, tLstfInfoLen, tPapxLen, tXstLen, tOff;
size_t tLstfRecords, tStart, tIndex;
int iNums;
- USHORT usDocStatus, usIstd;
+ USHORT usIstd;
UCHAR ucTmp, ucListLevel, ucMaxLevel, ucChpxLen;
UCHAR aucLvlfInfo[28], aucXst[2];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:592,613 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:737,750
fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
fail(aulBBD == NULL || aulSBD == NULL);
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
+ NO_DBG_DEC(pPPS->tTable.ulSB);
+ NO_DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
DBG_MSG("No list information");
return;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:630,636 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:767,773
}
aucLfoInfo = xmalloc(tLfoInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucLfoInfo, ulBeginLfoInfo, tLfoInfoLen)) {
aucLfoInfo = xfree(aucLfoInfo);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:651,657 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:788,794
}
aucLstfInfo = xmalloc(tLstfInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucLstfInfo, ulBeginLstfInfo, tLstfInfoLen)) {
aucLstfInfo = xfree(aucLstfInfo);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:690,696 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:827,833
NO_DBG_HEX(ulStart);
(void)memset(&tList, 0, sizeof(tList));
/* Read the lvlf (List leVeL on File) */
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen,
tBlockSize, aucLvlfInfo,
ulStart, sizeof(aucLvlfInfo))) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:707,712 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:844,851
tList.ucNFC = ucGetByte(4, aucLvlfInfo);
ucTmp = ucGetByte(5, aucLvlfInfo);
tList.bNoRestart = (ucTmp & BIT(3)) != 0;
+ DBG_MSG_C((ucTmp & BIT(4)) != 0 &&
+ (ucTmp & BIT(6)) != 0, "Found one");
}
ulStart += sizeof(aucLvlfInfo);
tPapxLen = (size_t)ucGetByte(25, aucLvlfInfo);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:713,719 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:852,858
if (tPapxLen != 0) {
aucPapx = xmalloc(tPapxLen);
/* Read the Papx */
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen,
tBlockSize, aucPapx,
ulStart, tPapxLen)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:730,736 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:869,875
ucChpxLen = ucGetByte(24, aucLvlfInfo);
ulStart += (ULONG)ucChpxLen;
/* Read the length of the XString */
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen,
tBlockSize, aucXst,
ulStart, sizeof(aucXst))) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:751,757 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:890,896
tXstLen *= 2; /* Length in chars to length in bytes */
aucXString = xmalloc(tXstLen);
/* Read the XString */
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen,
tBlockSize, aucXString,
ulStart, tXstLen)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:771,776 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:910,916
tOff *= 2; /* Offset in chars to offset in bytes */
NO_DBG_DEC(tOff);
if (tList.ucNFC == LIST_SPECIAL ||
+ tList.ucNFC == LIST_SPECIAL2 ||
tList.ucNFC == LIST_BULLETS) {
tList.usListChar = usGetWord(0, aucXString);
} else if (tOff != 0 && tOff < tXstLen) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:790,796 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:930,936
} /* end of vGet8LstInfo */
/*
- * Build the lists with Paragraph Information for Word 8/9/10 files
+ * Build the lists with Paragraph Information for Word 8/9/10/11 files
*/
void
vGet8PapInfo(FILE *pFile, const pps_info_type *pPPS,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:801,816 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:941,953
row_block_type tRow;
style_block_type tStyle;
ULONG *aulParfPage;
- const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulCharPos, ulCharPosFirst, ulCharPosLast;
ULONG ulBeginParfInfo;
- ULONG ulTableSize, ulTableStartBlock;
- size_t tParfInfoLen, tBlockDepotLen;
- size_t tBlockSize, tOffset, tLen;
+ size_t tParfInfoLen, tOffset, tLen;
int iIndex, iIndex2, iRun, iFodo, iLen;
row_info_enum eRowInfo;
- USHORT usDocStatus, usIstd;
+ USHORT usIstd;
UCHAR aucFpage[BIG_BLOCK_SIZE];
fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:825,864 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:962,973
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_MSG("No paragraph information");
+ aucBuffer = aucFillInfoBuffer(pFile, &pPPS->tTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen,
+ ulBeginParfInfo, tParfInfoLen);
+ if (aucBuffer == NULL) {
return;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
- /* Use the Small Block Depot */
- aulBlockDepot = aulSBD;
- tBlockDepotLen = tSBDLen;
- tBlockSize = SMALL_BLOCK_SIZE;
- } else {
- /* Use the Big Block Depot */
- aulBlockDepot = aulBBD;
- tBlockDepotLen = tBBDLen;
- tBlockSize = BIG_BLOCK_SIZE;
- }
-
- aucBuffer = xmalloc(tParfInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
- aulBlockDepot, tBlockDepotLen, tBlockSize,
- aucBuffer, ulBeginParfInfo, tParfInfoLen)) {
- aucBuffer = xfree(aucBuffer);
- return;
- }
NO_DBG_PRINT_BLOCK(aucBuffer, tParfInfoLen);
tLen = (tParfInfoLen / 4 - 1) / 2;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:906,912 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1015,1022
vGet8StyleInfo(iFodo, aucFpage + 3, iLen - 3, &tStyle);
ulCharPos = ulGetLong(iIndex2 * 4, aucFpage);
NO_DBG_HEX(ulCharPos);
- tStyle.ulFileOffset = ulCharPos2FileOffset(ulCharPos);
+ tStyle.ulFileOffset = ulCharPos2FileOffsetX(
+ ulCharPos, &tStyle.eListID);
vAdd2StyleInfoList(&tStyle);
eRowInfo = eGet8RowInfo(iFodo,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:952,958 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1062,1068
/*
* Fill the font information block with information
- * from a Word 8/9/10 file.
+ * from a Word 8/9/10/11 file.
*/
void
vGet8FontInfo(int iFodo, USHORT usIstd,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:960,970 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1070,1084
{
long lTmp;
int iFodoOff, iInfoLen;
- USHORT usTmp;
+ USHORT usFtc0, usFtc1, usFtc2, usTmp;
UCHAR ucTmp;
fail(iFodo < 0 || aucGrpprl == NULL || pFont == NULL);
+ usFtc0 = USHRT_MAX;
+ usFtc1 = USHRT_MAX;
+ usFtc2 = USHRT_MAX;
+
iFodoOff = 0;
while (iBytes >= iFodoOff + 2) {
switch (usGetWord(iFodo + iFodoOff, aucGrpprl)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1122,1127 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1236,1246
ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
NO_DBG_DEC(pFont->ucFontColor);
break;
+ case 0x2a44: /* cHpsInc */
+ DBG_MSG("0x2a44: sprmCHpsInc");
+ ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
+ DBG_DEC(ucTmp);
+ break;
case 0x2a48: /* cIss */
ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
ucTmp &= 0x07;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1142,1156 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1261,1284
usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
NO_DBG_DEC(pFont->usFontSize);
break;
- case 0x4a51: /* cFtc */
+ case 0x4a4d: /* cHpsMul */
+ DBG_MSG("0x4a4d: sprmCHpsMul");
usTmp = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
- if (usTmp <= (USHORT)UCHAR_MAX) {
- pFont->ucFontNumber = (UCHAR)usTmp;
- } else {
- pFont->ucFontNumber = 0;
- }
+ DBG_DEC(usTmp);
break;
- case 0xca4a: /* cHps */
+ case 0x4a4f: /* cFtc0 */
+ usFtc0 = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
+ break;
+ case 0x4a50: /* cFtc1 */
+ usFtc1 = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
+ break;
+ case 0x4a51: /* cFtc2 */
+ usFtc2 = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
+ break;
+ case 0xca47: /* cMajority */
+ DBG_MSG("0xca47: sprmCMajority");
+ break;
+ case 0xca4a: /* cHpsInc1 */
usTmp = usGetWord(iFodo + iFodoOff + 2, aucGrpprl);
lTmp = (long)pFont->usFontSize + (long)usTmp;
if (lTmp < 8) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1161,1171 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1289,1304
pFont->usFontSize = (USHORT)lTmp;
}
break;
+ case 0xca4c: /* cMajority50 */
+ DBG_MSG("0xca4c: sprmCMajority50");
+ break;
case 0xea3f: /* cHps, cHpsPos */
ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
+ DBG_DEC(ucTmp);
if (ucTmp != 0) {
pFont->usFontSize = (USHORT)ucTmp;
}
+ ucTmp = ucGetByte(iFodo + iFodoOff + 3, aucGrpprl);
DBG_DEC(ucTmp);
break;
default:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1175,1185 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1308,1348
fail(iInfoLen <= 0);
iFodoOff += iInfoLen;
}
+
+ /* Combine the Ftc's to a FontNumber */
+ NO_DBG_DEC_C(usFtc0 != USHRT_MAX, usFtc0);
+ NO_DBG_DEC_C(usFtc2 != USHRT_MAX, usFtc2);
+ NO_DBG_DEC_C(usFtc1 != USHRT_MAX, usFtc1);
+ if (usFtc0 <= 0x7fff) {
+ if (usFtc0 <= (USHORT)UCHAR_MAX) {
+ pFont->ucFontNumber = (UCHAR)usFtc0;
+ } else {
+ DBG_DEC(usFtc0);
+ DBG_FIXME();
+ pFont->ucFontNumber = 0;
+ }
+ } else if (usFtc2 <= 0x7fff) {
+ if (usFtc2 <= (USHORT)UCHAR_MAX) {
+ pFont->ucFontNumber = (UCHAR)usFtc2;
+ } else {
+ DBG_DEC(usFtc2);
+ DBG_FIXME();
+ pFont->ucFontNumber = 0;
+ }
+ } else if (usFtc1 <= 0x7fff) {
+ if (usFtc1 <= (USHORT)UCHAR_MAX) {
+ pFont->ucFontNumber = (UCHAR)usFtc1;
+ } else {
+ DBG_DEC(usFtc1);
+ DBG_FIXME();
+ pFont->ucFontNumber = 0;
+ }
+ }
} /* end of vGet8FontInfo */
/*
* Fill the picture information block with information
- * from a Word 8/9/10 file.
+ * from a Word 8/9/10/11 file.
* Returns TRUE when successful, otherwise FALSE
*/
static BOOL
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1186,1191 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1349,1355
bGet8PicInfo(int iFodo,
const UCHAR *aucGrpprl, int iBytes, picture_block_type *pPicture)
{
+ ULONG ulTmp;
int iFodoOff, iInfoLen;
BOOL bFound;
UCHAR ucTmp;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1196,1201 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1360,1366
bFound = FALSE;
while (iBytes >= iFodoOff + 2) {
switch (usGetWord(iFodo + iFodoOff, aucGrpprl)) {
+ #if 0
case 0x0806: /* fData */
ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
if (ucTmp == 0x01) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1204,1209 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1369,1375
}
DBG_DEC_C(ucTmp != 0, ucTmp);
break;
+ #endif
case 0x080a: /* fOle2 */
ucTmp = ucGetByte(iFodo + iFodoOff + 2, aucGrpprl);
if (ucTmp == 0x01) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1212,1217 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1378,1387
}
DBG_DEC_C(ucTmp != 0, ucTmp);
break;
+ case 0x680e: /* fcObj */
+ ulTmp = ulGetLong(iFodo + iFodoOff + 2, aucGrpprl);
+ DBG_HEX(ulTmp);
+ break;
case 0x6a03: /* fcPic */
pPicture->ulPictureOffset = ulGetLong(
iFodo + iFodoOff + 2, aucGrpprl);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1228,1234 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1398,1404
} /* end of bGet8PicInfo */
/*
- * Build the lists with Character Information for Word 8/9/10 files
+ * Build the lists with Character Information for Word 8/9/10/11 files
*/
void
vGet8ChrInfo(FILE *pFile, const pps_info_type *pPPS,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1239,1252 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1409,1419
font_block_type tFont;
picture_block_type tPicture;
ULONG *aulCharPage;
- const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulFileOffset, ulCharPos, ulBeginCharInfo;
- ULONG ulTableSize, ulTableStartBlock;
- size_t tCharInfoLen, tBlockDepotLen;
- size_t tOffset, tBlockSize, tLen;
+ size_t tCharInfoLen, tOffset, tLen;
int iIndex, iIndex2, iRun, iFodo, iLen;
- USHORT usDocStatus, usIstd;
+ USHORT usIstd;
UCHAR aucFpage[BIG_BLOCK_SIZE];
fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/prop8.c:1261,1297 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/prop8.c:1428,1437
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_MSG("No character information");
- return;
- }
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
- /* Use the Small Block Depot */
- aulBlockDepot = aulSBD;
- tBlockDepotLen = tSBDLen;
- tBlockSize = SMALL_BLOCK_SIZE;
- } else {
- /* Use the Big Block Depot */
- aulBlockDepot = aulBBD;
- tBlockDepotLen = tBBDLen;
- tBlockSize = BIG_BLOCK_SIZE;
- }
- aucBuffer = xmalloc(tCharInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
- aulBlockDepot, tBlockDepotLen, tBlockSize,
- aucBuffer, ulBeginCharInfo, tCharInfoLen)) {
- aucBuffer = xfree(aucBuffer);
+ aucBuffer = aucFillInfoBuffer(pFile, &pPPS->tTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen,
+ ulBeginCharInfo, tCharInfoLen);
+ if (aucBuffer == NULL) {
return;
}
NO_DBG_PRINT_BLOCK(aucBuffer, tCharInfoLen);
[jmk] --rw-rw-r-- M 499692 jmk sys 40247 Jan 14 12:57 sys/src/cmd/aux/antiword/prop8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5989 Jan 14 12:57 sys/src/cmd/aux/antiword/properties.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:1,6
/*
* properties.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Read the properties information from a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:22,27 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:22,29
{
options_type tOptions;
+ TRACE_MSG("vGetPropertyInfo");
+
fail(pFile == NULL);
fail(pPPS == NULL && iWordVersion >= 6);
fail(aulBBD == NULL && tBBDLen != 0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:28,43 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:30,54
fail(aulSBD == NULL && tSBDLen != 0);
fail(aucHeader == NULL);
+ /* Get the options */
vGetOptions(&tOptions);
+ /* Get the property information per Word version */
switch (iWordVersion) {
case 0:
+ vGet0DopInfo(pFile, aucHeader);
vGet0SepInfo(pFile, aucHeader);
vGet0PapInfo(pFile, aucHeader);
if (tOptions.eConversionType == conversion_draw ||
tOptions.eConversionType == conversion_ps ||
- tOptions.eConversionType == conversion_xml) {
+ tOptions.eConversionType == conversion_xml ||
+ tOptions.eConversionType == conversion_fmt_text ||
+ tOptions.eConversionType == conversion_pdf) {
vGet0ChrInfo(pFile, aucHeader);
+ }
+ if (tOptions.eConversionType == conversion_draw ||
+ tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
vCreate0FontTable();
}
vSet0SummaryInfo(pFile, aucHeader);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:45,58 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:56,80
case 1:
case 2:
vGet2Stylesheet(pFile, iWordVersion, aucHeader);
+ vGet2DopInfo(pFile, aucHeader);
vGet2SepInfo(pFile, aucHeader);
vGet2PapInfo(pFile, aucHeader);
+ if (tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
+ vGet2HdrFtrInfo(pFile, aucHeader);
+ }
if (tOptions.eConversionType == conversion_draw ||
tOptions.eConversionType == conversion_ps ||
- tOptions.eConversionType == conversion_xml) {
+ tOptions.eConversionType == conversion_xml ||
+ tOptions.eConversionType == conversion_fmt_text ||
+ tOptions.eConversionType == conversion_pdf) {
vGet2ChrInfo(pFile, iWordVersion, aucHeader);
- vCreate2FontTable(pFile, aucHeader);
}
+ if (tOptions.eConversionType == conversion_draw ||
+ tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
+ vCreate2FontTable(pFile, iWordVersion, aucHeader);
+ }
vSet2SummaryInfo(pFile, iWordVersion, aucHeader);
break;
case 4:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:62,76 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:84,111
case 7:
vGet6Stylesheet(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, aucHeader);
+ vGet6DopInfo(pFile, pPPS->tWordDocument.ulSB,
+ aulBBD, tBBDLen, aucHeader);
vGet6SepInfo(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, aucHeader);
vGet6PapInfo(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, aucHeader);
+ if (tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
+ vGet6HdrFtrInfo(pFile, pPPS->tWordDocument.ulSB,
+ aulBBD, tBBDLen, aucHeader);
+ }
if (tOptions.eConversionType == conversion_draw ||
tOptions.eConversionType == conversion_ps ||
- tOptions.eConversionType == conversion_xml) {
+ tOptions.eConversionType == conversion_xml ||
+ tOptions.eConversionType == conversion_fmt_text ||
+ tOptions.eConversionType == conversion_pdf) {
vGet6ChrInfo(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, aucHeader);
+ }
+ if (tOptions.eConversionType == conversion_draw ||
+ tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
vCreate6FontTable(pFile, pPPS->tWordDocument.ulSB,
aulBBD, tBBDLen, aucHeader);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:82,96 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:117,144
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
vGet8Stylesheet(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
+ vGet8DopInfo(pFile, &pPPS->tTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
vGet8SepInfo(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
vGet8PapInfo(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
+ if (tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
+ vGet8HdrFtrInfo(pFile, &pPPS->tTable,
+ aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
+ }
if (tOptions.eConversionType == conversion_draw ||
tOptions.eConversionType == conversion_ps ||
- tOptions.eConversionType == conversion_xml) {
+ tOptions.eConversionType == conversion_xml ||
+ tOptions.eConversionType == conversion_fmt_text ||
+ tOptions.eConversionType == conversion_pdf) {
vGet8ChrInfo(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
+ }
+ if (tOptions.eConversionType == conversion_draw ||
+ tOptions.eConversionType == conversion_ps ||
+ tOptions.eConversionType == conversion_pdf) {
vCreate8FontTable(pFile, pPPS,
aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:103,108 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:151,159
werr(0, "Sorry, no property information");
break;
}
+
+ /* Temporarily: Correct the font table */
+ vCorrectFontTable(tOptions.eConversionType, tOptions.eEncoding);
} /* end of vGetPropertyInfo */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/properties.c:116,121 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/properties.c:167,174
row_block_type tRow;
const UCHAR *aucPropMod;
int iLen;
+
+ TRACE_MSG("ePropMod2RowInfo");
aucPropMod = aucReadPropModListItem(usPropMod);
if (aucPropMod == NULL) {
[jmk] --rw-rw-r-- M 499692 jmk sys 5989 Jan 14 12:57 sys/src/cmd/aux/antiword/properties.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2427 Jan 14 12:57 sys/src/cmd/aux/antiword/propmod.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2427 Jan 14 12:57 sys/src/cmd/aux/antiword/propmod.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5517 Jan 14 12:57 sys/src/cmd/aux/antiword/riscos.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:7,14 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:7,16
*/
#include <string.h>
- #include "kernel.h"
- #include "swis.h"
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include "DeskLib:Error.h"
+ #include "DeskLib:SWI.h"
#include "antiword.h"
#if !defined(DrawFile_Render)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:18,24 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:20,46
#define JPEG_Info 0x049980
#endif /* !JPEG_Info */
+ /*
+ * werr - write an error message and exit if needed
+ */
+ void
+ werr(int iFatal, const char *szFormat, ...)
+ {
+ va_list tArg;
+ va_start(tArg, szFormat);
+ Error_Report(iFatal, (char *)szFormat, tArg);
+ va_end(tArg);
+ switch (iFatal) {
+ case 0: /* The message is just a warning, so no exit */
+ return;
+ case 1: /* Fatal error with a standard exit */
+ exit(EXIT_FAILURE);
+ default: /* Fatal error with a non-standard exit */
+ exit(iFatal);
+ }
+ } /* end of werr */
+
/*
* iGetFiletype
* This function will get the filetype of the given file.
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:27,43 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:49,64
int
iGetFiletype(const char *szFilename)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
+ int iType;
fail(szFilename == NULL || szFilename[0] == '\0');
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 23;
- regs.r[1] = (int)szFilename;
- e = _kernel_swi(OS_File, ®s, ®s);
+ e = SWI(2, 7, SWI_OS_File | XOS_Bit,
+ 23, szFilename,
+ NULL, NULL, NULL, NULL, NULL, NULL, &iType);
if (e == NULL) {
- return regs.r[6];
+ return iType;
}
werr(0, "Get Filetype error %d: %s", e->errnum, e->errmess);
return -1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:51,58 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:72,78
void
vSetFiletype(const char *szFilename, int iFiletype)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
fail(szFilename == NULL || szFilename[0] == '\0');
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:59,69 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:79,86
if (iFiletype < 0x000 || iFiletype > 0xfff) {
return;
}
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 18;
- regs.r[1] = (int)szFilename;
- regs.r[2] = iFiletype;
- e = _kernel_swi(OS_File, ®s, ®s);
+ e = SWI(3, 0, SWI_OS_File | XOS_Bit,
+ 18, szFilename, iFiletype);
if (e != NULL) {
switch (e->errnum) {
case 0x000113: /* ROM */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:88,96 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:105,113
BOOL
bMakeDirectory(const char *szFilename)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
char *pcLastDot;
+ int iObjectType;
char szDirectory[PATH_MAX+1];
DBG_MSG("bMakeDirectory");
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:111,140 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:128,153
*pcLastDot = '\0';
DBG_MSG(szDirectory);
/* Check if the name exists */
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 17;
- regs.r[1] = (int)szDirectory;
- e = _kernel_swi(OS_File, ®s, ®s);
+ e = SWI(2, 1, SWI_OS_File | XOS_Bit,
+ 17, szDirectory,
+ &iObjectType);
if (e != NULL) {
werr(0, "Directory check %d: %s", e->errnum, e->errmess);
return FALSE;
}
- if (regs.r[0] == 2) {
+ if (iObjectType == 2) {
/* The name exists and it is a directory */
DBG_MSG("The directory already exists");
return TRUE;
}
- if (regs.r[0] != 0) {
+ if (iObjectType != 0) {
/* The name exists and it is not a directory */
- DBG_DEC(regs.r[0]);
+ DBG_DEC(iObjectType);
return FALSE;
}
/* The name does not exist, make the directory */
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 8;
- regs.r[1] = (int)szDirectory;
- regs.r[4] = 0;
- e = _kernel_swi(OS_File, ®s, ®s);
+ e = SWI(5, 0, SWI_OS_File | XOS_Bit,
+ 8, szDirectory, 0, 0, 0);
if (e != NULL) {
werr(0, "I can't make a directory %d: %s",
e->errnum, e->errmess);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:151,165 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:164,177
int
iReadCurrentAlphabetNumber(void)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
+ int iAlphabetNumber;
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 71;
- regs.r[1] = 127;
- e = _kernel_swi(OS_Byte, ®s, ®s);
+ e = SWI(2, 2, SWI_OS_Byte | XOS_Bit,
+ 71, 127,
+ NULL, &iAlphabetNumber);
if (e == NULL) {
- return regs.r[1];
+ return iAlphabetNumber;
}
werr(0, "Read alphabet error %d: %s", e->errnum, e->errmess);
return -1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:173,192 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:185,202
int
iGetRiscOsVersion(void)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
+ int iVersion;
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 129;
- regs.r[1] = 0;
- regs.r[2] = 0xff;
- e = _kernel_swi(OS_Byte, ®s, ®s);
+ e = SWI(3, 2, SWI_OS_Byte | XOS_Bit,
+ 129, 0, 0xff,
+ NULL, &iVersion);
if (e != NULL) {
werr(0, "Read RISC OS version error %d: %s",
e->errnum, e->errmess);
return 0;
}
- switch (regs.r[1]) {
+ switch (iVersion) {
case 0xa0: /* Arthur 1.20 */
return 120;
case 0xa1: /* RISC OS 2.00 */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:206,212 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:216,222
case 0xa8: /* RISC OS 4.0x */
return 400;
default:
- if (regs.r[1] >= 0xa9 && regs.r[1] <= 0xaf) {
+ if (iVersion >= 0xa9 && iVersion <= 0xaf) {
/* RISC OS 4.10 and up */
return 410;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/riscos.c:215,287 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/riscos.c:225,248
}
} /* end of iGetRiscOsVersion */
- /*
- * Replaces the draw_render_diag function from RISC_OSLib when using
- * RISC OS version 3.60 or higher
- * This function calls a SWI that does not exist in earlier versions
- */
- BOOL
- bDrawRenderDiag360(draw_diag *pInfo,
- draw_redrawstr *pRedraw, double dScale, draw_error *pError)
- {
- _kernel_swi_regs regs;
- _kernel_oserror *e;
- int aiTransform[6];
-
- fail(pInfo == NULL);
- fail(pRedraw == NULL);
- fail(dScale < 0.01);
- fail(pError == NULL);
- fail(iGetRiscOsVersion() < 360);
-
- aiTransform[0] = (int)(dScale * 0x10000);
- aiTransform[1] = 0;
- aiTransform[2] = 0;
- aiTransform[3] = (int)(dScale * 0x10000);
- aiTransform[4] = (pRedraw->box.x0 - pRedraw->scx) * 256;
- aiTransform[5] = (pRedraw->box.y1 - pRedraw->scy) * 256;
-
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 0;
- regs.r[1] = (int)pInfo->data;
- regs.r[2] = pInfo->length;
- regs.r[3] = (int)aiTransform;
- regs.r[4] = (int)&pRedraw->box;
- regs.r[5] = 0;
- e = _kernel_swi(DrawFile_Render, ®s, ®s);
- if (e == NULL) {
- return TRUE;
- }
- werr(0, "DrawFile render error %d: %s", e->errnum, e->errmess);
- pError->type = DrawOSError;
- pError->err.os.errnum = e->errnum;
- strncpy(pError->err.os.errmess,
- e->errmess,
- sizeof(pError->err.os.errmess) - 1);
- pError->err.os.errmess[sizeof(pError->err.os.errmess) - 1] = '\0';
- return FALSE;
- } /* end of bDrawRenderDiag360 */
-
#if defined(DEBUG)
BOOL
bGetJpegInfo(UCHAR *pucJpeg, size_t tJpegSize)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
+ os_error *e;
+ int iReg0, iReg4, iReg5;
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 0x00;
- regs.r[1] = (int)pucJpeg;
- regs.r[2] = (int)tJpegSize;
- e = _kernel_swi(JPEG_Info, ®s, ®s);
+ e = SWI(3, 6, JPEG_Info | XOS_Bit,
+ 0x00, pucJpeg, tJpegSize,
+ &iReg0, NULL, NULL, NULL, &iReg4, &iReg5);
if (e == NULL) {
- if (regs.r[0] & BIT(2)) {
+ if (iReg0 & BIT(2)) {
DBG_MSG("Pixel density is a simple ratio");
} else {
DBG_MSG("Pixel density is in dpi");
}
- DBG_DEC(regs.r[4]);
- DBG_DEC(regs.r[5]);
+ DBG_DEC(iReg4);
+ DBG_DEC(iReg5);
return TRUE;
}
werr(0, "JPEG Info error %d: %s", e->errnum, e->errmess);
[jmk] --rw-rw-r-- M 499692 jmk sys 5517 Jan 14 12:57 sys/src/cmd/aux/antiword/riscos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2801 Jan 14 12:57 sys/src/cmd/aux/antiword/rowlist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/rowlist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/rowlist.c:1,6
/*
* rowlist.c
- * Copyright (C) 1998-2001 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GPL
*
* Description:
* Build, read and destroy a list of Word table-row information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/rowlist.c:74,80 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/rowlist.c:74,79
NO_DBG_HEX(pRowBlock->ulFileOffsetStart);
NO_DBG_HEX(pRowBlock->ulFileOffsetEnd);
NO_DBG_DEC(pRowBlock->ucNumberOfColumns);
- NO_DBG_DEC(pRowBlock->iColumnWidthSum);
/* Create the new list member */
pListMember = xmalloc(sizeof(row_desc_type));
[jmk] --rw-rw-r-- M 499692 jmk sys 2801 Jan 14 12:57 sys/src/cmd/aux/antiword/rowlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9851 Jan 14 12:57 sys/src/cmd/aux/antiword/saveas.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:8,17 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:8,49
#include <stdio.h>
#include <string.h>
- #include "saveas.h"
- #include "event.h"
+ #include "DeskLib:Menu.h"
+ #include "DeskLib:Save.h"
+ #include "DeskLib:Template.h"
+ #include "DeskLib:Window.h"
+ #include "drawfile.h"
#include "antiword.h"
+ /* The window handle of the save window */
+ static window_handle tSaveWindow = 0;
+
+ /* Xfer_send box fields */
+ #define DRAG_SPRITE 3
+ #define OK_BUTTON 0
+ #define CANCEL_BUTTON (-1)
+ #define FILENAME_ICON 2
+
+
+ /*
+ * saveas - a wrapper around Save_InitSaveWindowhandler
+ */
+ static void
+ saveas(int iFileType, char *szOutfile, size_t tEstSize,
+ save_filesaver save_function, void *pvReference)
+ {
+ TRACE_MSG("saveas");
+
+ if (tSaveWindow == 0) {
+ tSaveWindow = Window_Create("xfer_send", template_TITLEMIN);
+ }
+ Icon_SetText(tSaveWindow, FILENAME_ICON, szOutfile);
+ Window_Show(tSaveWindow, open_UNDERPOINTER);
+ (void)Save_InitSaveWindowHandler(tSaveWindow, FALSE, TRUE, TRUE,
+ DRAG_SPRITE, OK_BUTTON, CANCEL_BUTTON, FILENAME_ICON,
+ save_function, NULL, NULL, tEstSize, iFileType, pvReference);
+ } /* end of saveas */
+
static BOOL
bWrite2File(void *pvBytes, size_t tSize, FILE *pFile, const char *szFilename)
{
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:30,44 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:62,78
{
FILE *pFile;
diagram_type *pDiag;
- draw_textstrhdr tText;
- char *pcTmp;
- int iToGo, iSize, iX, iYtopPrev, iHeight, iLines;
+ drawfile_object *pObj;
+ drawfile_text *pText;
+ const char *pcTmp;
+ int iToGo, iX, iYtopPrev, iHeight, iLines;
BOOL bFirst, bIndent, bSuccess;
+ TRACE_MSG("bText2File");
+
fail(szFilename == NULL || szFilename[0] == '\0');
fail(pvHandle == NULL);
- DBG_MSG("bText2File");
DBG_MSG(szFilename);
pDiag = (diagram_type *)pvHandle;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:51,72 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:85,105
iYtopPrev = 0;
iHeight = (int)lWord2DrawUnits20(DEFAULT_FONT_SIZE);
bSuccess = TRUE;
- iToGo = pDiag->tInfo.length - sizeof(draw_fileheader);
+ fail(pDiag->tInfo.length < offsetof(drawfile_diagram, objects));
+ iToGo = pDiag->tInfo.length - offsetof(drawfile_diagram, objects);
DBG_DEC(iToGo);
- pcTmp = pDiag->tInfo.data + sizeof(draw_fileheader);
+ pcTmp = (const char *)pDiag->tInfo.data +
+ offsetof(drawfile_diagram, objects);
while (iToGo > 0 && bSuccess) {
- tText = *(draw_textstrhdr *)pcTmp;
- switch (tText.tag) {
- case draw_OBJFONTLIST:
- /* These are not relevant in a textfile */
- iSize = ((draw_fontliststrhdr *)pcTmp)->size;
- pcTmp += iSize;
- iToGo -= iSize;
- break;
- case draw_OBJTEXT:
+ pObj = (drawfile_object *)pcTmp;
+ switch (pObj->type) {
+ case drawfile_TYPE_TEXT:
+ pText = &pObj->data.text;
/* Compute the number of lines */
- iLines =
- (iYtopPrev - tText.bbox.y1 + iHeight / 2) / iHeight;
+ iLines = (iYtopPrev - pText->bbox.max.y +
+ iHeight / 2) / iHeight;
+ DBG_DEC_C(iLines < 0, iYtopPrev);
+ DBG_DEC_C(iLines < 0, pText->bbox.max.y);
fail(iLines < 0);
bIndent = iLines > 0 || bFirst;
bFirst = FALSE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:78,86 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:111,119
}
/* Print the indentation */
if (bIndent && bSuccess) {
- for (iX = draw_screenToDraw(8);
- iX <= tText.bbox.x0 && bSuccess;
- iX += draw_screenToDraw(16)) {
+ for (iX = Drawfile_ScreenToDraw(8);
+ iX <= pText->bbox.min.x && bSuccess;
+ iX += Drawfile_ScreenToDraw(16)) {
bSuccess = bWrite2File(" ",
1, pFile, szFilename);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:89,121 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:122,146
break;
}
/* Print the text object */
- pcTmp += sizeof(tText);
- bSuccess = bWrite2File(pcTmp,
- strlen(pcTmp), pFile, szFilename);
- pcTmp += tText.size - sizeof(tText);
- /* Setup for the next text object */
- iToGo -= tText.size;
- iYtopPrev = tText.bbox.y1;
- iHeight = tText.bbox.y1 - tText.bbox.y0;
+ bSuccess = bWrite2File(pText->text,
+ strlen(pText->text), pFile, szFilename);
+ /* Setup for the next object */
+ iYtopPrev = pText->bbox.max.y;
+ iHeight = pText->bbox.max.y - pText->bbox.min.y;
break;
- case draw_OBJPATH:
+ case drawfile_TYPE_FONT_TABLE:
+ case drawfile_TYPE_PATH:
+ case drawfile_TYPE_SPRITE:
+ case drawfile_TYPE_JPEG:
/* These are not relevant in a textfile */
- iSize = ((draw_pathstrhdr *)pcTmp)->size;
- pcTmp += iSize;
- iToGo -= iSize;
break;
- case draw_OBJSPRITE:
- case draw_OBJJPEG:
- /* These are not relevant in a textfile */
- iSize = ((draw_spristrhdr *)pcTmp)->size;
- pcTmp += iSize;
- iToGo -= iSize;
- break;
default:
- DBG_DEC(tText.tag);
+ DBG_DEC(pObj->type);
bSuccess = FALSE;
break;
}
+ pcTmp += pObj->size;
+ iToGo -= pObj->size;
}
DBG_DEC_C(iToGo != 0, iToGo);
if (bSuccess) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:132,161 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:157,205
} /* end of bText2File */
/*
- * vSaveTextfile
+ * bSaveTextfile - save the diagram as a text file
*/
- void
- vSaveTextfile(diagram_type *pDiagram)
+ BOOL
+ bSaveTextfile(event_pollblock *pEvent, void *pvReference)
{
- wimp_emask tMask;
- int iRecLen, iNbrRecs, iEstSize;
+ diagram_type *pDiag;
+ size_t tRecLen, tNbrRecs, tEstSize;
- fail(pDiagram == NULL);
+ TRACE_MSG("bSaveTextfile");
- DBG_MSG("vSaveTextfile");
- iRecLen = sizeof(draw_textstrhdr) + DEFAULT_SCREEN_WIDTH * 2 / 3;
- iNbrRecs = pDiagram->tInfo.length / iRecLen + 1;
- iEstSize = iNbrRecs * DEFAULT_SCREEN_WIDTH * 2 / 3;
- DBG_DEC(iEstSize);
+ fail(pEvent == NULL);
+ fail(pvReference == NULL);
- tMask = event_getmask();
- event_setmask(0);
- saveas(FILETYPE_TEXT, "WordText",
- iEstSize, bText2File,
- NULL, NULL, pDiagram);
- event_setmask(tMask);
- } /* end of vSaveTextfile */
+ pDiag = (diagram_type *)pvReference;
+ switch (pEvent->type) {
+ case event_SEND: /* From a menu */
+ fail(pEvent->data.message.header.action != message_MENUWARN);
+ if (menu_currentopen != pDiag->pSaveMenu ||
+ pEvent->data.message.data.menuwarn.selection[0] !=
+ SAVEMENU_SAVETEXT) {
+ return FALSE;
+ }
+ break;
+ case event_KEY: /* From a key short cut */
+ if (pEvent->data.key.caret.window != pDiag->tMainWindow) {
+ return FALSE;
+ }
+ break;
+ default:
+ DBG_DEC(pEvent->type);
+ return FALSE;
+ }
+
+ tRecLen = sizeof(drawfile_text) + DEFAULT_SCREEN_WIDTH * 2 / 3;
+ tNbrRecs = pDiag->tInfo.length / tRecLen + 1;
+ tEstSize = tNbrRecs * DEFAULT_SCREEN_WIDTH * 2 / 3;
+ DBG_DEC(tEstSize);
+
+ saveas(FILETYPE_TEXT, "WordText", tEstSize, bText2File, pDiag);
+ return TRUE;
+ } /* end of bSaveTextfile */
+
/*
* bDraw2File - Save the generated draw file to a Draw file
*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:168,187 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:212,233
{
FILE *pFile;
diagram_type *pDiagram;
- draw_fileheader tHdr;
- draw_textstrhdr tText;
- draw_pathstrhdr tPath;
- draw_spristrhdr tSprite;
- draw_jpegstrhdr tJpeg;
+ wimp_box *pBbox;
+ drawfile_object *pObj;
+ drawfile_text *pText;
+ drawfile_path *pPath;
+ drawfile_sprite *pSprite;
+ drawfile_jpeg *pJpeg;
int *piPath;
char *pcTmp;
int iYadd, iToGo, iSize;
BOOL bSuccess;
+ TRACE_MSG("bDraw2File");
+
fail(szFilename == NULL || szFilename[0] == '\0');
fail(pvHandle == NULL);
- DBG_MSG("bDraw2File");
NO_DBG_MSG(szFilename);
pDiagram = (diagram_type *)pvHandle;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:193,243 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:239,293
iToGo = pDiagram->tInfo.length;
DBG_DEC(iToGo);
pcTmp = pDiagram->tInfo.data;
- tHdr = *(draw_fileheader *)pcTmp;
- iYadd = -tHdr.bbox.y0;
- tHdr.bbox.y0 += iYadd;
- tHdr.bbox.y1 += iYadd;
- bSuccess = bWrite2File(&tHdr, sizeof(tHdr), pFile, szFilename);
- iToGo -= sizeof(tHdr);
- DBG_DEC(iToGo);
- pcTmp += sizeof(tHdr);
+ bSuccess = bWrite2File(pcTmp,
+ offsetof(drawfile_diagram, bbox), pFile, szFilename);
+ if (bSuccess) {
+ pcTmp += offsetof(drawfile_diagram, bbox);
+ iToGo -= offsetof(drawfile_diagram, bbox);
+ pBbox = (wimp_box *)pcTmp;
+ iYadd = -pBbox->min.y;
+ pBbox->min.y += iYadd;
+ pBbox->max.y += iYadd;
+ bSuccess = bWrite2File(pcTmp,
+ sizeof(*pBbox), pFile, szFilename);
+ iToGo -= sizeof(*pBbox);
+ DBG_DEC(iToGo);
+ pcTmp += sizeof(*pBbox);
+ } else {
+ iYadd = 0;
+ }
while (iToGo > 0 && bSuccess) {
- tText = *(draw_textstrhdr *)pcTmp;
- switch (tText.tag) {
- case draw_OBJFONTLIST:
- iSize = ((draw_fontliststrhdr *)pcTmp)->size;
+ pObj = (drawfile_object *)pcTmp;
+ iSize = pObj->size;
+ switch (pObj->type) {
+ case drawfile_TYPE_FONT_TABLE:
bSuccess = bWrite2File(pcTmp,
iSize, pFile, szFilename);
pcTmp += iSize;
iToGo -= iSize;
break;
- case draw_OBJTEXT:
+ case drawfile_TYPE_TEXT:
+ pText = &pObj->data.text;
/* First correct the coordinates */
- tText.bbox.y0 += iYadd;
- tText.bbox.y1 += iYadd;
- tText.coord.y += iYadd;
+ pText->bbox.min.y += iYadd;
+ pText->bbox.max.y += iYadd;
+ pText->base.y += iYadd;
/* Now write the information to file */
- bSuccess = bWrite2File(&tText,
- sizeof(tText), pFile, szFilename);
- pcTmp += sizeof(tText);
- iSize = tText.size - sizeof(tText);
- if (bSuccess) {
- bSuccess = bWrite2File(pcTmp,
+ bSuccess = bWrite2File(pcTmp,
iSize, pFile, szFilename);
- pcTmp += iSize;
- }
- iToGo -= tText.size;
+ pcTmp += pObj->size;
+ iToGo -= pObj->size;
break;
- case draw_OBJPATH:
- tPath = *(draw_pathstrhdr *)pcTmp;
+ case drawfile_TYPE_PATH:
+ pPath = &pObj->data.path;
/* First correct the coordinates */
- tPath.bbox.y0 += iYadd;
- tPath.bbox.y1 += iYadd;
+ pPath->bbox.min.y += iYadd;
+ pPath->bbox.max.y += iYadd;
/* Now write the information to file */
- bSuccess = bWrite2File(&tPath,
- sizeof(tPath), pFile, szFilename);
- pcTmp += sizeof(tPath);
- iSize = tPath.size - sizeof(tPath);
+ bSuccess = bWrite2File(pPath,
+ sizeof(*pPath), pFile, szFilename);
+ pcTmp += sizeof(*pPath);
+ iSize = pObj->size - sizeof(*pPath);
fail(iSize < 14 * sizeof(int));
/* Second correct the path coordinates */
piPath = xmalloc(iSize);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:252,296 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:302,334
pcTmp += iSize;
}
piPath = xfree(piPath);
- iToGo -= tPath.size;
+ iToGo -= pObj->size;
break;
- case draw_OBJSPRITE:
- tSprite = *(draw_spristrhdr *)pcTmp;
+ case drawfile_TYPE_SPRITE:
+ pSprite = &pObj->data.sprite;
/* First correct the coordinates */
- tSprite.bbox.y0 += iYadd;
- tSprite.bbox.y1 += iYadd;
+ pSprite->bbox.min.y += iYadd;
+ pSprite->bbox.max.y += iYadd;
/* Now write the information to file */
- bSuccess = bWrite2File(&tSprite,
- sizeof(tSprite), pFile, szFilename);
- pcTmp += sizeof(tSprite);
- iSize = tSprite.size - sizeof(tSprite);
- if (bSuccess) {
- bSuccess = bWrite2File(pcTmp,
+ bSuccess = bWrite2File(pcTmp,
iSize, pFile, szFilename);
- pcTmp += iSize;
- }
- iToGo -= tSprite.size;
+ pcTmp += pObj->size;
+ iToGo -= pObj->size;
break;
- case draw_OBJJPEG:
- tJpeg = *(draw_jpegstrhdr *)pcTmp;
+ case drawfile_TYPE_JPEG:
+ pJpeg = &pObj->data.jpeg;
/* First correct the coordinates */
- tJpeg.bbox.y0 += iYadd;
- tJpeg.bbox.y1 += iYadd;
- tJpeg.trfm[5] += iYadd;
+ pJpeg->bbox.min.y += iYadd;
+ pJpeg->bbox.max.y += iYadd;
+ pJpeg->trfm.entries[2][1] += iYadd;
/* Now write the information to file */
- bSuccess = bWrite2File(&tJpeg,
- sizeof(tJpeg), pFile, szFilename);
- pcTmp += sizeof(tJpeg);
- iSize = tJpeg.size - sizeof(tJpeg);
- if (bSuccess) {
- bSuccess = bWrite2File(pcTmp,
+ bSuccess = bWrite2File(pcTmp,
iSize, pFile, szFilename);
- pcTmp += iSize;
- }
- iToGo -= tJpeg.size;
+ pcTmp += pObj->size;
+ iToGo -= pObj->size;
break;
default:
- DBG_DEC(tText.tag);
+ DBG_DEC(pObj->type);
bSuccess = FALSE;
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/saveas.c:307,330 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/saveas.c:345,387
} /* end of bDraw2File */
/*
- * vSaveDrawfile
+ * bSaveDrawfile - save the diagram as a draw file
*/
- void
- vSaveDrawfile(diagram_type *pDiagram)
+ BOOL
+ bSaveDrawfile(event_pollblock *pEvent, void *pvReference)
{
- wimp_emask tMask;
- int iEstSize;
+ diagram_type *pDiag;
+ size_t tEstSize;
- fail(pDiagram == NULL);
+ TRACE_MSG("bSaveDrawfile");
- DBG_MSG("vSaveDrawfile");
- iEstSize = pDiagram->tInfo.length;
- DBG_DEC(iEstSize);
+ fail(pEvent == NULL);
+ fail(pvReference == NULL);
- tMask = event_getmask();
- event_setmask(0);
- saveas(FILETYPE_DRAW, "WordDraw",
- iEstSize, bDraw2File,
- NULL, NULL, pDiagram);
- event_setmask(tMask);
- } /* end of vSaveDrawfile */
+ pDiag = (diagram_type *)pvReference;
+
+ switch (pEvent->type) {
+ case event_SEND: /* From a menu */
+ fail(pEvent->data.message.header.action != message_MENUWARN);
+ if (menu_currentopen != pDiag->pSaveMenu ||
+ pEvent->data.message.data.menuwarn.selection[0] !=
+ SAVEMENU_SAVEDRAW) {
+ return FALSE;
+ }
+ break;
+ case event_KEY: /* From a key short cut */
+ if (pEvent->data.key.caret.window != pDiag->tMainWindow) {
+ return FALSE;
+ }
+ break;
+ default:
+ DBG_DEC(pEvent->type);
+ return FALSE;
+ }
+
+ tEstSize = pDiag->tInfo.length;
+ DBG_DEC(tEstSize);
+
+ saveas(FILETYPE_DRAW, "WordDraw", tEstSize, bDraw2File, pDiag);
+ return TRUE;
+ } /* end of bSaveDrawfile */
[jmk] --rw-rw-r-- M 499692 jmk sys 9851 Jan 14 12:57 sys/src/cmd/aux/antiword/saveas.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3785 Jan 14 12:57 sys/src/cmd/aux/antiword/sectlist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:1,6
/*
* sectlist.c
- * Copyright (C) 2001,2002 A.J. van Os; Released under GPL
+ * Copyright (C) 2001-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy list(s) of Word section information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:17,23 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:17,23
*/
typedef struct section_mem_tag {
section_block_type tInfo;
- ULONG ulTextOffset;
+ ULONG ulCharPos;
struct section_mem_tag *pNext;
} section_mem_type;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:52,58 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:52,58
* vAdd2SectionInfoList - Add an element to the Section Information List
*/
void
- vAdd2SectionInfoList(const section_block_type *pSection, ULONG ulTextOffset)
+ vAdd2SectionInfoList(const section_block_type *pSection, ULONG ulCharPos)
{
section_mem_type *pListMember;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:62,68 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:62,68
pListMember = xmalloc(sizeof(section_mem_type));
/* Fill the list member */
pListMember->tInfo = *pSection;
- pListMember->ulTextOffset = ulTextOffset;
+ pListMember->ulCharPos = ulCharPos;
pListMember->pNext = NULL;
/* Add the new member to the list */
if (pAnchor == NULL) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:88,99 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:88,99
* vDefault2SectionInfoList - Add a default to the Section Information List
*/
void
- vDefault2SectionInfoList(ULONG ulTextOffset)
+ vDefault2SectionInfoList(ULONG ulCharPos)
{
section_block_type tSection;
vGetDefaultSection(&tSection);
- vAdd2SectionInfoList(&tSection, ulTextOffset);
+ vAdd2SectionInfoList(&tSection, ulCharPos);
} /* end of vDefault2SectionInfoList */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:100,110 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:100,110
* pGetSectionInfo - get the section information
*/
const section_block_type *
- pGetSectionInfo(const section_block_type *pOld, ULONG ulTextOffset)
+ pGetSectionInfo(const section_block_type *pOld, ULONG ulCharPos)
{
const section_mem_type *pCurr;
- if (pOld == NULL || ulTextOffset == 0) {
+ if (pOld == NULL || ulCharPos == 0) {
if (pAnchor == NULL) {
/* There are no records, make one */
vDefault2SectionInfoList(0);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/sectlist.c:114,125 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/sectlist.c:114,165
NO_DBG_MSG("First record");
return &pAnchor->tInfo;
}
+
+ NO_DBG_HEX(ulCharPos);
for (pCurr = pAnchor; pCurr != NULL; pCurr = pCurr->pNext) {
- if (ulTextOffset == pCurr->ulTextOffset ||
- ulTextOffset + 1 == pCurr->ulTextOffset) {
- NO_DBG_HEX(pCurr->ulTextOffset);
+ NO_DBG_HEX(pCurr->ulCharPos);
+ if (ulCharPos == pCurr->ulCharPos ||
+ ulCharPos + 1 == pCurr->ulCharPos) {
+ NO_DBG_HEX(pCurr->ulCharPos);
return &pCurr->tInfo;
}
}
return pOld;
} /* end of pGetSectionInfo */
+
+ /*
+ * tGetNumberOfSections - get the number of sections
+ */
+ size_t
+ tGetNumberOfSections(void)
+ {
+ const section_mem_type *pCurr;
+ size_t tCounter;
+
+ for (tCounter = 0, pCurr = pAnchor;
+ pCurr != NULL;
+ tCounter++, pCurr = pCurr->pNext)
+ ; /* Empty */
+ return tCounter;
+ } /* end of tGetNumberOfSections */
+
+ /*
+ * ucGetSepHdrFtrSpecification - get the Heder/footer specification
+ */
+ UCHAR
+ ucGetSepHdrFtrSpecification(size_t tSectionNumber)
+ {
+ const section_mem_type *pCurr;
+ size_t tIndex;
+
+ for (tIndex = 0, pCurr = pAnchor;
+ tIndex < tSectionNumber && pCurr != NULL;
+ tIndex++, pCurr = pCurr->pNext)
+ ; /* Empty */
+ if (pCurr == NULL) {
+ DBG_DEC(tSectionNumber);
+ DBG_FIXME();
+ return 0x00;
+ }
+ return pCurr->tInfo.ucHdrFtrSpecification;
+ } /* end of ucGetSepHdrFtrSpecification */
[jmk] --rw-rw-r-- M 499692 jmk sys 3785 Jan 14 12:57 sys/src/cmd/aux/antiword/sectlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3416 Jan 14 12:57 sys/src/cmd/aux/antiword/startup.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:9,18 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:9,17
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
- #include "kernel.h"
- #include "swis.h"
- #include "wimp.h"
- #include "wimpt.h"
+ #include "DeskLib:Error.h"
+ #include "DeskLib:Event.h"
+ #include "DeskLib:SWI.h"
#include "antiword.h"
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:45,81 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:44,62
*
* returns the task handle when found, otherwise 0
*/
- static wimp_t
- tGetTaskHandle(const char *szTaskname, int iOSVersion)
+ static task_handle
+ tGetTaskHandle(const char *szTaskname)
{
- _kernel_swi_regs regs;
- _kernel_oserror *e;
const char *pcTmp;
- int iIndex;
+ int iReg0, iIndex;
int aiBuffer[4];
char szTmp[21];
- if (iOSVersion < 310) {
- /*
- * SWI TaskManager_EnumerateTasks does not
- * exist in earlier versions of RISC OS
- */
- return 0;
- }
-
- (void)memset((void *)®s, 0, sizeof(regs));
- regs.r[0] = 0;
-
+ iReg0 = 0;
do {
/* Get info on the next task */
- regs.r[1] = (int)aiBuffer;
- regs.r[2] = sizeof(aiBuffer);
- e = _kernel_swi(TaskManager_EnumerateTasks, ®s, ®s);
- if (e != NULL) {
- werr(1, "TaskManager_EnumerateTasks error %d: %s",
- e->errnum, e->errmess);
- exit(EXIT_FAILURE);
- }
+ Error_CheckFatal(SWI(3, 1, TaskManager_EnumerateTasks | XOS_Bit,
+ iReg0, aiBuffer, sizeof(aiBuffer), &iReg0));
/* Copy the (control character terminated) task name */
for (iIndex = 0, pcTmp = (const char *)aiBuffer[1];
iIndex < elementsof(szTmp);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:89,97 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:70,78
szTmp[elementsof(szTmp) - 1] = '\0';
if (bIsMatch(szTmp, szTaskname)) {
/* Task found */
- return (wimp_t)aiBuffer[0];
+ return (task_handle)aiBuffer[0];
}
- } while (regs.r[0] >= 0);
+ } while (iReg0 >= 0);
/* Task not found */
return 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:100,112 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:81,93
int
main(int argc, char **argv)
{
- wimp_msgstr tMsg;
- wimp_t tTaskHandle;
+ message_block tMsg;
+ task_handle tTaskHandle;
size_t tArgLen;
- int iVersion;
+ int aiMessages[] = {0};
char szCommand[512];
- iVersion = wimpt_init("StartUp");
+ Event_Initialise3("StartUp", 310, aiMessages);
if (argc > 1) {
tArgLen = strlen(argv[1]);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:113,124 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:94,105
} else {
tArgLen = 0;
}
- if (tArgLen >= sizeof(tMsg.data.dataload.name)) {
+ if (tArgLen >= sizeof(tMsg.data.dataload.filename)) {
werr(1, "Input filename too long");
return EXIT_FAILURE;
}
- tTaskHandle = tGetTaskHandle("antiword", iVersion);
+ tTaskHandle = tGetTaskHandle("antiword");
if (tTaskHandle == 0) {
/* Antiword is not active */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/startup.c:138,155 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/startup.c:119,141
/* Antiword is active */
if (argc > 1) {
- /* Send the argument to Antiword */
- tMsg.hdr.size = ROUND4(sizeof(tMsg) -
- sizeof(tMsg.data.dataload.name) +
+ /*
+ * Send the argument to Antiword by imitating a
+ * drag-and-drop to Antiword's iconbar icon
+ */
+ memset(&tMsg, 0, sizeof(tMsg));
+ tMsg.header.size = ROUND4(offsetof(message_block, data) +
+ offsetof(message_dataload, filename) +
1 + tArgLen);
- tMsg.hdr.your_ref = 0;
- tMsg.hdr.action = wimp_MDATALOAD;
- tMsg.data.dataload.w = -1;
+ tMsg.header.yourref = 0;
+ tMsg.header.action = message_DATALOAD;
+ tMsg.data.dataload.window = window_ICONBAR;
+ tMsg.data.dataload.icon = -1;
tMsg.data.dataload.size = 0;
- tMsg.data.dataload.type = FILETYPE_MSWORD;
- strcpy(tMsg.data.dataload.name, argv[1]);
- wimpt_noerr(wimp_sendmessage(wimp_ESEND,
- &tMsg, tTaskHandle));
+ tMsg.data.dataload.filetype = FILETYPE_MSWORD;
+ strcpy(tMsg.data.dataload.filename, argv[1]);
+ Error_CheckFatal(Wimp_SendMessage(event_SEND,
+ &tMsg, tTaskHandle, 0));
return EXIT_SUCCESS;
} else {
/* Give an error message and return */
[jmk] --rw-rw-r-- M 499692 jmk sys 3416 Jan 14 12:57 sys/src/cmd/aux/antiword/startup.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12060 Jan 14 12:57 sys/src/cmd/aux/antiword/stylelist.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:1,6
/*
* stylelist.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy a list of Word style information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:79,85 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:79,87
return;
}
- if (ucNFC != LIST_SPECIAL && ucNFC != LIST_BULLETS) {
+ if (ucNFC != LIST_SPECIAL &&
+ ucNFC != LIST_SPECIAL2 &&
+ ucNFC != LIST_BULLETS) {
szListChar[0] = '.';
szListChar[1] = '\0';
return;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:94,100 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:96,102
switch (usListChar) {
case 0x0000: case 0x00b7: case 0x00fe: case 0xf021: case 0xf043:
- case 0xf093: case 0xf0b7:
+ case 0xf06c: case 0xf093: case 0xf0b7:
usListChar = 0x2022; /* BULLET */
break;
case 0x0096: case 0xf02d:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:130,136 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:132,138
case 0xf071:
usListChar = 0x2751; /* LOWER RIGHT SHADOWED WHITE SQUARE */
break;
- case 0xf075:
+ case 0xf075: case 0xf077:
usListChar = 0x25c6; /* BLACK DIAMOND */
break;
case 0xf076:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:156,171 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:158,178
(usListChar < 0x80 && !isprint((int)usListChar))) {
/*
* All remaining private area characters and all
- * remaining non-printable ASCII characters to bullet
+ * remaining non-printable ASCII characters to their
+ * default bullet character
*/
DBG_HEX(usListChar);
DBG_FIXME();
- usListChar = 0x2022; /* BULLET */
+ if (ucNFC == LIST_SPECIAL || ucNFC == LIST_SPECIAL2) {
+ usListChar = 0x2190; /* LEFTWARDS ARROW */
+ } else {
+ usListChar = 0x2022; /* BULLET */
+ }
}
break;
}
- if (eEncoding == encoding_utf8) {
+ if (eEncoding == encoding_utf_8) {
tLen = tUcs2Utf8(usListChar, szListChar, 4);
szListChar[tLen] = '\0';
} else {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:177,183 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:184,190
case 0x2013: case 0x2500:
szListChar[0] = '-';
break;
- case 0x2199: case 0x2329:
+ case 0x2190: case 0x2199: case 0x2329:
szListChar[0] = '<';
break;
case 0x21d2:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylelist.c:386,391 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylelist.c:393,416
}
return &pRecord->pNext->tInfo;
} /* end of pGetNextStyleInfoListItem */
+
+ /*
+ * Get the next text style
+ */
+ const style_block_type *
+ pGetNextTextStyle(const style_block_type *pCurr)
+ {
+ const style_block_type *pRecord;
+
+ pRecord = pCurr;
+ do {
+ pRecord = pGetNextStyleInfoListItem(pRecord);
+ } while (pRecord != NULL &&
+ (pRecord->eListID == hdrftr_list ||
+ pRecord->eListID == macro_list ||
+ pRecord->eListID == annotation_list));
+ return pRecord;
+ } /* end of pGetNextTextStyle */
/*
* usGetIstd - get the istd that belongs to the given file offset
[jmk] --rw-rw-r-- M 499692 jmk sys 12060 Jan 14 12:57 sys/src/cmd/aux/antiword/stylelist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22114 Jan 14 12:57 sys/src/cmd/aux/antiword/stylesheet.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:1,6
/*
* stylesheet.c
- * Copyright (C) 2001,2002 A.J. van Os; Released under GPL
+ * Copyright (C) 2001-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Build, read and destroy a list of stylesheet information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:52,61 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:52,68
* vGetDefaultFont - fill the font struct with default values
*/
static void
- vGetDefaultFont(font_block_type *pFont)
+ vGetDefaultFont(font_block_type *pFont, USHORT usDefaultFontNumber)
{
(void)memset(pFont, 0, sizeof(*pFont));
pFont->usFontSize = DEFAULT_FONT_SIZE;
+ if (usDefaultFontNumber <= (USHORT)UCHAR_MAX) {
+ pFont->ucFontNumber = (UCHAR)usDefaultFontNumber;
+ } else {
+ DBG_DEC(usDefaultFontNumber);
+ DBG_FIXME();
+ pFont->ucFontNumber = 0;
+ }
} /* end of vGetDefaultFont */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:84,109 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:91,96
} /* end of iGetStyleIndex */
/*
- * Convert a stylecode (stc) as used by WinWord 2 into a styleindex (istd)
- * as used by Word 6 and up
- */
- USHORT
- usStc2istd(UCHAR ucStc)
- {
- /* Old nil style to new nil style */
- if (ucStc == 222) {
- return STI_NIL;
- }
- /* Heading 1 through 9 must become istd 1 through 9 */
- /* so 254 through 246 must become 1 through 9 and vice versa */
- if ((ucStc >= 1 && ucStc <= 9) ||
- (ucStc >= 246 && ucStc <= 254)) {
- return 255 - (USHORT)ucStc;
- }
- return (USHORT)ucStc;
- } /* end of usStd2istd */
-
- /*
* Get a build-in style for Winword 1/2
*/
static void
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:114,120 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:101,107
/* Start with de defaults */
vGetDefaultStyle(pStyle);
- /* Add the build-in style */
+ /* Add the build-in style info */
switch (ucStc) {
case 246:
case 247:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:155,163 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:142,150
fail(pFont == NULL);
/* Start with de defaults */
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, 0);
- /* Add the build-in fontstyle */
+ /* Add the build-in fontstyle info */
switch (ucStc) {
case 223:
case 244:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:198,203 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:185,211
} /* end of vGetBuildinFont */
/*
+ * Convert a stylecode (stc) as used by WinWord 1/2 into a styleindex (istd)
+ * as used by Word 6 and up
+ */
+ USHORT
+ usStc2istd(UCHAR ucStc)
+ {
+ /* Old nil style to new nil style */
+ if (ucStc == 222) {
+ return STI_NIL;
+ }
+
+ /* Heading 1 through 9 must become istd 1 through 9 */
+ /* so 254 through 246 must become 1 through 9 and vice versa */
+ if ((ucStc >= 1 && ucStc <= 9) ||
+ (ucStc >= 246 && ucStc <= 254)) {
+ return 255 - (USHORT)ucStc;
+ }
+ return (USHORT)ucStc;
+ } /* end of usStd2istd */
+
+ /*
* Build the lists with Stylesheet Information for WinWord 1/2 files
*/
void
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:207,214 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:215,222
font_block_type *pFont;
UCHAR *aucBuffer;
ULONG ulBeginStshInfo;
- size_t tStshInfoLen, tName, tChpx, tPapx;
- int iStIndex, iChpxIndex, iPapxIndex, iMaxIndex, iSt, iChpx, iPapx;
+ size_t tStshInfoLen, tName, tChpx, tPapx, tMaxIndex;
+ int iStIndex, iChpxIndex, iPapxIndex, iSt, iChpx, iPapx;
int iStd, iIndex, iBaseStyleIndex, iCounter;
USHORT usBaseStyle;
UCHAR ucStc, ucStcNext, ucStcBase;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:228,241 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:236,257
}
NO_DBG_PRINT_BLOCK(aucBuffer, tStshInfoLen);
+ fail(2 > tStshInfoLen);
iStd = (int)usGetWord(0, aucBuffer);
+
+ fail(2 + 2 > tStshInfoLen);
tName = (size_t)usGetWord(2, aucBuffer);
+
+ fail(2 + tName + 2 > tStshInfoLen);
tChpx = (size_t)usGetWord(2 + tName, aucBuffer);
+
+ fail(2 + tName + tChpx + 2 > tStshInfoLen);
tPapx = (size_t)usGetWord(2 + tName + tChpx, aucBuffer);
+
+ fail(2 + tName + tChpx + tPapx + 2 > tStshInfoLen);
tStdCount = (size_t)usGetWord(2 + tName + tChpx + tPapx, aucBuffer);
NO_DBG_HEX(tStdCount);
- fail(2 + tName + tChpx + tPapx + 2 + 2 * tStdCount > tStshInfoLen);
atStyleInfo = xcalloc(tStdCount, sizeof(style_block_type));
atFontInfo = xcalloc(tStdCount, sizeof(font_block_type));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:246,252 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:262,268
iStIndex = 2 + 2;
iChpxIndex = 2 + (int)tName + 2;
iPapxIndex = 2 + (int)tName + (int)tChpx + 2;
- iMaxIndex = 2 + (int)tName + (int)tChpx + (int)tPapx + 2;
+ tMaxIndex = 2 + tName + tChpx + tPapx + 2;
/* Read the styles one-by-one */
for (iIndex = 0; iIndex < (int)tStdCount; iIndex++) {
pStyle = &atStyleInfo[iIndex];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:257,273 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:273,289
NO_DBG_HEX(iSt);
NO_DBG_HEX(iChpx);
NO_DBG_HEX(iPapx);
- if (iSt == 0xff) {
- /* Undefined style */
+ if (iSt == 0xff || tMaxIndex + 1 >= tStshInfoLen) {
+ /* Undefined style or no information */
iStIndex++;
iChpxIndex++;
iPapxIndex++;
- iMaxIndex += 2;
+ tMaxIndex += 2;
if (!abFilled[iIndex]) {
DBG_HEX_C(iChpx != 0xff, iChpx);
DBG_HEX_C(iPapx != 0xff, iPapx);
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, 0);
abFilled[iIndex] = TRUE;
}
continue;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:276,283 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:292,299
NO_DBG_STRN(aucBuffer + iStIndex + 1, iSt);
iStIndex += iSt + 1;
- ucStcNext = ucGetByte(iMaxIndex, aucBuffer);
- ucStcBase = ucGetByte(iMaxIndex + 1, aucBuffer);
+ ucStcNext = ucGetByte(tMaxIndex, aucBuffer);
+ ucStcBase = ucGetByte(tMaxIndex + 1, aucBuffer);
ucStc = (UCHAR)((iIndex - iStd) & 0xff);
NO_DBG_DEC(ucStc);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:285,291 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:301,307
/* Use a build-in style */
iChpxIndex++;
iPapxIndex++;
- iMaxIndex += 2;
+ tMaxIndex += 2;
if (!abFilled[iIndex]) {
DBG_HEX_C(iChpx != 0xff, iChpx);
DBG_HEX_C(iPapx != 0xff, iPapx);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:303,309 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:319,325
/* This record has already been filled */
iChpxIndex += iChpx + 1;
iPapxIndex += iPapx + 1;
- iMaxIndex += 2;
+ tMaxIndex += 2;
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:312,318 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:328,334
if (usBaseStyle == STI_NIL) {
/* Based on the Nil style */
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, 0);
} else {
iBaseStyleIndex = iGetStyleIndex(usBaseStyle);
NO_DBG_DEC(iBaseStyleIndex);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:320,326 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:336,342
/* This style is not known yet */
iChpxIndex += iChpx + 1;
iPapxIndex += iPapx + 1;
- iMaxIndex += 2;
+ tMaxIndex += 2;
continue;
}
fail(iBaseStyleIndex >= (int)tStdCount);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:370,389 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:386,407
iPapxIndex += iPapx + 1;
break;
}
- iMaxIndex += 2;
+ tMaxIndex += 2;
}
NO_DBG_DEC(iCounter);
} while (iCounter > 0);
+ /* Fill records that are still empty */
for (iIndex = 0; iIndex < (int)tStdCount; iIndex++) {
if (!abFilled[iIndex]) {
NO_DBG_DEC(iIndex);
vGetDefaultStyle(&atStyleInfo[iIndex]);
- vGetDefaultFont(&atFontInfo[iIndex]);
+ vGetDefaultFont(&atFontInfo[iIndex], 0);
}
}
+ /* Clean up before you leave */
abFilled = xfree(abFilled);
aucBuffer = xfree(aucBuffer);
} /* end of vGet2Stylesheet */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:403,408 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:421,427
size_t tPos, tNameLen, tUpxLen;
int iIndex, iBaseStyleIndex, iCounter;
USHORT usTmp, usUpxCount, usStyleType, usBaseStyle;
+ USHORT usFtcStandardChpStsh;
fail(pFile == NULL || aucHeader == NULL);
fail(ulStartBlock > MAX_BLOCKNUMBER && ulStartBlock != END_OF_CHAIN);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:425,430 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:444,451
tStdCount = (size_t)usGetWord(2, aucBuffer);
NO_DBG_DEC(tStdCount);
tStdBaseInFile = (size_t)usGetWord(4, aucBuffer);
+ usFtcStandardChpStsh = usGetWord(14, aucBuffer);
+ NO_DBG_DEC(usFtcStandardChpStsh);
atStyleInfo = xcalloc(tStdCount, sizeof(style_block_type));
atFontInfo = xcalloc(tStdCount, sizeof(font_block_type));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:448,454 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:469,475
if (tStdLen == 0) {
/* Empty record */
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, usFtcStandardChpStsh);
abFilled[iIndex] = TRUE;
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:460,466 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:481,487
if (usBaseStyle == STI_NIL || usBaseStyle == STI_USER) {
/* Based on the Nil style */
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, usFtcStandardChpStsh);
} else {
iBaseStyleIndex = iGetStyleIndex(usBaseStyle);
NO_DBG_DEC(iBaseStyleIndex);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:551,564 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:572,588
NO_DBG_DEC(iCounter);
} while (iCounter > 0);
+ /* Fill records that are still empty */
for (iIndex = 0; iIndex < (int)tStdCount; iIndex++) {
if (!abFilled[iIndex]) {
NO_DBG_DEC(iIndex);
vGetDefaultStyle(&atStyleInfo[iIndex]);
- vGetDefaultFont(&atFontInfo[iIndex]);
+ vGetDefaultFont(&atFontInfo[iIndex],
+ usFtcStandardChpStsh);
}
}
+ /* Clean up before you leave */
abFilled = xfree(abFilled);
aucBuffer = xfree(aucBuffer);
} /* end of vGet6Stylesheet */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:577,587 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:601,611
const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulBeginStshInfo;
- ULONG ulTableSize, ulTableStartBlock;
size_t tStshInfoLen, tBlockDepotLen, tOffset, tStdLen, tStdBaseInFile;
size_t tBlockSize, tPos, tNameLen, tUpxLen;
int iIndex, iBaseStyleIndex, iCounter;
- USHORT usDocStatus, usTmp, usUpxCount, usStyleType, usBaseStyle;
+ USHORT usTmp, usUpxCount, usStyleType, usBaseStyle;
+ USHORT usFtcStandardChpStsh;
fail(pFile == NULL || pPPS == NULL || aucHeader == NULL);
fail(aulBBD == NULL || aulSBD == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:591,612 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:615,628
tStshInfoLen = (size_t)ulGetLong(0xa6, aucHeader); /* lcbStshf */
NO_DBG_DEC(tStshInfoLen);
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- NO_DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
+ NO_DBG_DEC(pPPS->tTable.ulSB);
+ NO_DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
DBG_MSG("No stylesheet information");
return;
}
- NO_DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:618,624 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:634,640
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tStshInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginStshInfo, tStshInfoLen)) {
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:629,634 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:645,652
tStdCount = (size_t)usGetWord(2, aucBuffer);
NO_DBG_DEC(tStdCount);
tStdBaseInFile = (size_t)usGetWord(4, aucBuffer);
+ usFtcStandardChpStsh = usGetWord(14, aucBuffer);
+ NO_DBG_DEC(usFtcStandardChpStsh);
atStyleInfo = xcalloc(tStdCount, sizeof(style_block_type));
atFontInfo = xcalloc(tStdCount, sizeof(font_block_type));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:652,658 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:670,676
if (tStdLen == 0) {
/* Empty record */
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, usFtcStandardChpStsh);
abFilled[iIndex] = TRUE;
continue;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:664,670 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:682,688
if (usBaseStyle == STI_NIL || usBaseStyle == STI_USER) {
/* Based on the Nil style */
vGetDefaultStyle(pStyle);
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, usFtcStandardChpStsh);
} else {
iBaseStyleIndex = iGetStyleIndex(usBaseStyle);
NO_DBG_DEC(iBaseStyleIndex);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:757,770 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:775,791
NO_DBG_DEC(iCounter);
} while (iCounter > 0);
+ /* Fill records that are still empty */
for (iIndex = 0; iIndex < (int)tStdCount; iIndex++) {
if (!abFilled[iIndex]) {
NO_DBG_DEC(iIndex);
vGetDefaultStyle(&atStyleInfo[iIndex]);
- vGetDefaultFont(&atFontInfo[iIndex]);
+ vGetDefaultFont(&atFontInfo[iIndex],
+ usFtcStandardChpStsh);
}
}
+ /* Clean up before you leave */
abFilled = xfree(abFilled);
aucBuffer = xfree(aucBuffer);
} /* end of vGet8Stylesheet */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/stylesheet.c:813,817 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/stylesheet.c:834,838
}
}
- vGetDefaultFont(pFont);
+ vGetDefaultFont(pFont, 0);
} /* end of vFillFontFromStylesheet */
[jmk] --rw-rw-r-- M 499692 jmk sys 22114 Jan 14 12:57 sys/src/cmd/aux/antiword/stylesheet.c
[jmk] --rw-rw-r-- M 499692 jmk sys 23077 Jan 14 12:57 sys/src/cmd/aux/antiword/summary.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:1,6
/*
* summary.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 2002-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Read the summary information of a Word document
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:49,55 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:49,55
void
vDestroySummaryInfo(void)
{
- DBG_MSG("vDestroySummaryInfo");
+ TRACE_MSG("vDestroySummaryInfo");
szTitle = xfree(szTitle);
szSubject = xfree(szSubject);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:135,167 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:135,140
} /* end of tConvertDosDate */
/*
- * tConvertDTTM - convert Windows Date and Time format
- *
- * returns Unix time_t or -1
- */
- static time_t
- tConvertDTTM(ULONG ulDTTM)
- {
- struct tm tTime;
- time_t tResult;
-
- if (ulDTTM == 0) {
- return (time_t)-1;
- }
- memset(&tTime, 0, sizeof(tTime));
- tTime.tm_min = (int)(ulDTTM & 0x0000003f);
- tTime.tm_hour = (int)((ulDTTM & 0x000007c0) >> 6);
- tTime.tm_mday = (int)((ulDTTM & 0x0000f800) >> 11);
- tTime.tm_mon = (int)((ulDTTM & 0x000f0000) >> 16);
- tTime.tm_year = (int)((ulDTTM & 0x1ff00000) >> 20);
- tTime.tm_isdst = -1;
- tTime.tm_mon--; /* From 01-12 to 00-11 */
- tResult = mktime(&tTime);
- NO_DBG_MSG(ctime(&tResult));
- return tResult;
- } /* end of tConvertDTTM */
-
- /*
* szLpstr - get a zero terminate string property
*/
static char *
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:168,181 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:141,157
szLpstr(ULONG ulOffset, const UCHAR *aucBuffer)
{
char *szStart, *szResult, *szTmp;
- size_t tTmp;
+ size_t tSize;
- tTmp = (size_t)ulGetLong(ulOffset + 4, aucBuffer);
- NO_DBG_DEC(tTmp);
- NO_DBG_MSG(aucBuffer + ulOffset + 8);
+ tSize = (size_t)ulGetLong(ulOffset + 4, aucBuffer);
+ NO_DBG_DEC(tSize);
+ if (tSize == 0) {
+ return NULL;
+ }
/* Remove white space from the start of the string */
szStart = (char *)aucBuffer + ulOffset + 8;
- fail(strlen(szStart) >= tTmp);
+ NO_DBG_MSG(szStart);
+ fail(strlen(szStart) >= tSize);
while (isspace(*szStart)) {
szStart++;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:229,235 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:205,211
} /* end of tFiletime */
/*
- * vAnalyseSummaryInfo -
+ * vAnalyseSummaryInfo - analyse the summary information
*/
static void
vAnalyseSummaryInfo(const UCHAR *aucBuffer)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:286,292 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:262,268
} /* end of vAnalyseSummaryInfo */
/*
- * vAnalyseDocumentSummaryInfo -
+ * vAnalyseDocumentSummaryInfo - analyse the document summary information
*/
static void
vAnalyseDocumentSummaryInfo(const UCHAR *aucBuffer)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:451,456 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:427,434
size_t tLen;
USHORT usCodepage, usOffset;
+ TRACE_MSG("vSet0SummaryInfo");
+
fail(pFile == NULL || aucHeader == NULL);
/* First check the header */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:514,519 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:492,499
ULONG ulBeginSumdInfo, ulBeginDocpInfo, ulTmp;
size_t tSumdInfoLen, tDocpInfoLen, tLen, tCounter, tStart;
+ TRACE_MSG("vSet2SummaryInfo");
+
fail(pFile == NULL || aucHeader == NULL);
fail(iWordVersion != 1 && iWordVersion != 2);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:522,534 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:502,522
DBG_HEX(usLid);
if (usLid < 999 && iWordVersion == 1) {
switch (usLid) {
- case 1: usLid = 0x0409; break; /* American English */
- case 2: usLid = 0x0c0c; break; /* Canadian French */
- case 31: usLid = 0x0413; break; /* Dutch */
- case 33: usLid = 0x040c; break; /* French */
- case 34: usLid = 0x040a; break; /* Spanish */
- case 44: usLid = 0x0809; break; /* British English */
- case 49: usLid = 0x0407; break; /* German */
+ case 1: usLid = 0x0409; break; /* American English */
+ case 2: usLid = 0x0c0c; break; /* Canadian French */
+ case 31: usLid = 0x0413; break; /* Dutch */
+ case 33: usLid = 0x040c; break; /* French */
+ case 34: usLid = 0x040a; break; /* Spanish */
+ case 36: usLid = 0x040e; break; /* Hungarian */
+ case 39: usLid = 0x0410; break; /* Italian */
+ case 44: usLid = 0x0809; break; /* British English */
+ case 45: usLid = 0x0406; break; /* Danish */
+ case 46: usLid = 0x041f; break; /* Swedish */
+ case 47: usLid = 0x0414; break; /* Norwegian */
+ case 48: usLid = 0x0415; break; /* Polish */
+ case 49: usLid = 0x0407; break; /* German */
+ case 351: usLid = 0x0816; break; /* Portuguese */
+ case 358: usLid = 0x040b; break; /* Finnish */
default:
DBG_DEC(usLid);
DBG_FIXME();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:537,542 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:525,535
}
}
+ if (iWordVersion != 2) {
+ /* Unknown where to find the associated strings */
+ return;
+ }
+
/* Second check the associated strings */
ulBeginSumdInfo = ulGetLong(0x118, aucHeader); /* fcSttbfAssoc */
DBG_HEX(ulBeginSumdInfo);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:558,564 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:551,557
DBG_DEC_C(tSumdInfoLen != tLen, tSumdInfoLen);
DBG_DEC_C(tSumdInfoLen != tLen, tLen);
tStart = 1;
- for (tCounter = 0; tCounter < 18; tCounter++) {
+ for (tCounter = 0; tCounter < 17; tCounter++) {
if (tStart >= tSumdInfoLen) {
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:655,660 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:648,655
const ULONG *aulSBD, size_t tSBDLen,
const UCHAR *aucHeader)
{
+ TRACE_MSG("vSet6SummaryInfo");
+
/* Header Information */
usLid = usGetWord(0x06, aucHeader); /* Language IDentification */
DBG_HEX(usLid);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:674,679 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:669,676
{
USHORT usTmp;
+ TRACE_MSG("vSet8SummaryInfo");
+
/* Header Information */
usTmp = usGetWord(0x0a, aucHeader);
if (usTmp & BIT(14)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/summary.c:736,741 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/summary.c:733,782
pTime->tm_year + 1900, pTime->tm_mon + 1, pTime->tm_mday);
return szTime;
} /* end of szGetLastSaveDtm */
+
+ /*
+ * szGetModDate - get the last save date field
+ */
+ const char *
+ szGetModDate(void)
+ {
+ static char szTime[20];
+ struct tm *pTime;
+
+ if (tLastSaveDtm == (time_t)-1) {
+ return NULL;
+ }
+ pTime = localtime(&tLastSaveDtm);
+ if (pTime == NULL) {
+ return NULL;
+ }
+ sprintf(szTime, "D:%04d%02d%02d%02d%02d",
+ pTime->tm_year + 1900, pTime->tm_mon + 1, pTime->tm_mday,
+ pTime->tm_hour, pTime->tm_min);
+ return szTime;
+ } /* end of szGetModDate */
+
+ /*
+ * szGetCreationDate - get the last save date field
+ */
+ const char *
+ szGetCreationDate(void)
+ {
+ static char szTime[20];
+ struct tm *pTime;
+
+ if (tCreateDtm == (time_t)-1) {
+ return NULL;
+ }
+ pTime = localtime(&tCreateDtm);
+ if (pTime == NULL) {
+ return NULL;
+ }
+ sprintf(szTime, "D:%04d%02d%02d%02d%02d",
+ pTime->tm_year + 1900, pTime->tm_mon + 1, pTime->tm_mday,
+ pTime->tm_hour, pTime->tm_min);
+ return szTime;
+ } /* end of szGetCreationDate */
/*
* szGetCompany - get the company field
[jmk] --rw-rw-r-- M 499692 jmk sys 23077 Jan 14 12:57 sys/src/cmd/aux/antiword/summary.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5122 Jan 14 12:57 sys/src/cmd/aux/antiword/tabstop.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:1,6
/*
* tabstops.c
- * Copyright (C) 1999-2002 A.J. van Os; Released under GPL
+ * Copyright (C) 1999-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Read the tab stop information from a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:109,117 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:109,116
const ULONG *aulBlockDepot;
UCHAR *aucBuffer;
ULONG ulBeginDocpInfo;
- ULONG ulTableSize, ulTableStartBlock;
size_t tDocpInfoLen, tBlockDepotLen, tBlockSize;
- USHORT usDocStatus, usTmp;
+ USHORT usTmp;
ulBeginDocpInfo = ulGetLong(0x192, aucHeader); /* fcDop */
DBG_HEX(ulBeginDocpInfo);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:122,144 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:121,134
return;
}
- /* Use 0Table or 1Table? */
- usDocStatus = usGetWord(0x0a, aucHeader);
- if (usDocStatus & BIT(9)) {
- ulTableStartBlock = pPPS->t1Table.ulSB;
- ulTableSize = pPPS->t1Table.ulSize;
- } else {
- ulTableStartBlock = pPPS->t0Table.ulSB;
- ulTableSize = pPPS->t0Table.ulSize;
- }
- DBG_DEC(ulTableStartBlock);
- if (ulTableStartBlock == 0) {
- DBG_DEC(ulTableStartBlock);
+ DBG_DEC(pPPS->tTable.ulSB);
+ DBG_HEX(pPPS->tTable.ulSize);
+ if (pPPS->tTable.ulSize == 0) {
DBG_MSG("No TAB information");
return;
}
- DBG_HEX(ulTableSize);
- if (ulTableSize < MIN_SIZE_FOR_BBD_USE) {
+
+ if (pPPS->tTable.ulSize < MIN_SIZE_FOR_BBD_USE) {
/* Use the Small Block Depot */
aulBlockDepot = aulSBD;
tBlockDepotLen = tSBDLen;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:150,156 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:140,146
tBlockSize = BIG_BLOCK_SIZE;
}
aucBuffer = xmalloc(tDocpInfoLen);
- if (!bReadBuffer(pFile, ulTableStartBlock,
+ if (!bReadBuffer(pFile, pPPS->tTable.ulSB,
aulBlockDepot, tBlockDepotLen, tBlockSize,
aucBuffer, ulBeginDocpInfo, tDocpInfoLen)) {
aucBuffer = xfree(aucBuffer);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:206,211 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:196,202
}
} /* end of vSetDefaultTabWidth */
+ #if 0
/*
* lGetDefaultTabWidth - Get the default tabwidth in millipoints
*/
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/tabstop.c:218,220 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/tabstop.c:209,212
}
return lDefaultTabWidth;
} /* end of lGetDefaultTabWidth */
+ #endif
[jmk] --rw-rw-r-- M 499692 jmk sys 5122 Jan 14 12:57 sys/src/cmd/aux/antiword/tabstop.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3878 Jan 14 12:57 sys/src/cmd/aux/antiword/text.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/text.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/text.c:1,6
/*
* text.c
- * Copyright (C) 1999-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1999-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to deal with the Text format
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/text.c:59,71 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/text.c:59,71
return;
}
- if (eEncoding == encoding_utf8) {
+ if (eEncoding == encoding_utf_8) {
fprintf(pFile, "%.*s", (int)tStringLength, szString);
return;
}
if (ucNbsp == 0) {
- ucNbsp = ucGetNbspValue();
+ ucNbsp = ucGetNbspCharacter();
DBG_HEX_C(ucNbsp != 0xa0, ucNbsp);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/text.c:80,92 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/text.c:80,92
} /* end of vPrintTXT */
/*
- * vMoveToTXT - move to the given X,Y coordinates (Text)
+ * vMoveTo - move to the given X,Y coordinates
*
* Move the current position of the given diagram to its X,Y coordinates,
* start on a new page if needed
*/
static void
- vMoveToTXT(diagram_type *pDiag)
+ vMoveTo(diagram_type *pDiag)
{
int iCount, iNbr;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/text.c:100,106 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/text.c:100,106
}
lYtopCurr = pDiag->lYtop;
}
- } /* end of vMoveToTXT */
+ } /* end of vMoveTo */
/*
* vMove2NextLineTXT - move to the next line
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/text.c:131,137 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/text.c:131,137
return;
}
- vMoveToTXT(pDiag);
+ vMoveTo(pDiag);
vPrintTXT(pDiag->pOutFile, szString, tStringLength);
pDiag->lXleft += lStringWidth;
} /* end of vSubstringTXT */
[jmk] --rw-rw-r-- M 499692 jmk sys 3878 Jan 14 12:57 sys/src/cmd/aux/antiword/text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 818 Jan 14 12:57 sys/src/cmd/aux/antiword/unix.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/unix.c:35,45 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/unix.c:35,45
} /* end of werr */
void
- visdelay_begin(void)
+ Hourglass_On(void)
{
- } /* end of visdelay_begin */
+ } /* end of Hourglass_On */
void
- visdelay_end(void)
+ Hourglass_Off(void)
{
- } /* end of visdelay_end */
+ } /* end of Hourglass_Off */
[jmk] --rw-rw-r-- M 499692 jmk sys 818 Jan 14 12:57 sys/src/cmd/aux/antiword/unix.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7564 Jan 14 12:57 sys/src/cmd/aux/antiword/utf8.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/utf8.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/utf8.c:1,6
/*
* utf8.c
- * Copyright (C) 2001-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2001-2004 A.J. van Os; Released under GPL
*
*====================================================================
* This part of the software is based on:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/utf8.c:154,195 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/utf8.c:154,198
* Fills in the number of bytes in the UTF-8 character
*/
static ULONG
- utf8_to_ucs(const char *p, int *utflen)
+ utf8_to_ucs(const char *p, int iStrLen, int *piUtfLen)
{
- ULONG wc;
- int j, charlen;
+ ULONG ulUcs;
+ int iIndex, iCharLen;
- fail(p == NULL || utflen == NULL);
+ fail(p == NULL || piUtfLen == NULL);
+ fail(iStrLen < 1);
- wc = (ULONG)(UCHAR)p[0];
+ ulUcs = (ULONG)(UCHAR)p[0];
- if (wc < 0x80) {
- *utflen = 1;
- return wc;
+ if (ulUcs < 0x80) {
+ *piUtfLen = 1;
+ return ulUcs;
}
- if (wc < 0xe0){
- charlen = 2;
- wc &= 0x1f;
- } else if (wc < 0xf0){
- charlen = 3;
- wc &= 0x0f;
- } else if (wc < 0xf8){
- charlen = 4;
- wc &= 0x07;
- } else if (wc < 0xfc){
- charlen = 5;
- wc &= 0x03;
+ if (ulUcs < 0xe0){
+ iCharLen = 2;
+ ulUcs &= 0x1f;
+ } else if (ulUcs < 0xf0){
+ iCharLen = 3;
+ ulUcs &= 0x0f;
+ } else if (ulUcs < 0xf8){
+ iCharLen = 4;
+ ulUcs &= 0x07;
+ } else if (ulUcs < 0xfc){
+ iCharLen = 5;
+ ulUcs &= 0x03;
} else {
- charlen = 6;
- wc &= 0x01;
+ iCharLen = 6;
+ ulUcs &= 0x01;
}
- for (j = 1; j < charlen; j++) {
- wc <<= 6;
- wc |= (UCHAR)p[j] & 0x3f;
+ for (iIndex = 1; iIndex < iCharLen; iIndex++) {
+ ulUcs <<= 6;
+ if (iIndex < iStrLen) {
+ ulUcs |= (ULONG)(UCHAR)p[iIndex] & 0x3f;
+ }
}
- *utflen = charlen;
- return wc;
+ *piUtfLen = iCharLen;
+ return ulUcs;
} /* end of utf8_to_ucs */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/utf8.c:198,225 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/utf8.c:201,228
* Returns the string width in columns
*/
long
- utf8_strwidth(const char *p, size_t numchars)
+ utf8_strwidth(const char *pcString, size_t tNumchars)
{
- const char *maxp;
- ULONG ucs;
- long width, totwidth;
- int utflen;
+ ULONG ulUcs;
+ long lTotal;
+ int iToGo, iWidth, iUtflen;
- fail(p == NULL);
+ fail(pcString == NULL || tNumchars > (size_t)INT_MAX);
- totwidth = 0;
- maxp = p + numchars;
+ lTotal = 0;
+ iToGo = (int)tNumchars;
- while (*p != '\0' && p < maxp) {
- ucs = utf8_to_ucs(p, &utflen);
- width = iWcWidth(ucs);
- if (width > 0) {
- totwidth += width;
+ while (iToGo > 0 && *pcString != '\0') {
+ ulUcs = utf8_to_ucs(pcString, iToGo, &iUtflen);
+ iWidth = iWcWidth(ulUcs);
+ if (iWidth > 0) {
+ lTotal += iWidth;
}
- p += utflen;
+ pcString += iUtflen;
+ iToGo -= iUtflen;
}
- NO_DBG_DEC(totwidth);
- return totwidth;
+ NO_DBG_DEC(lTotal);
+ return lTotal;
} /* end of utf8_strwidth */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/utf8.c:230,298 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/utf8.c:233,260
int
utf8_chrlength(const char *p)
{
- int utflen;
+ int iUtflen;
fail(p == NULL);
- utflen = -1; /* Just to make sure */
- (void)utf8_to_ucs(p, &utflen);
- NO_DBG_DEC(utflen);
- return utflen;
+ iUtflen = -1; /* Just to make sure */
+ (void)utf8_to_ucs(p, INT_MAX, &iUtflen);
+ NO_DBG_DEC(iUtflen);
+ return iUtflen;
} /* end of utf8_chrlength */
/*
- * Original version:
- * Copyright (C) 1999 Bruno Haible
+ * is_locale_utf8 - return TRUE if the locale is UTF-8
*/
BOOL
is_locale_utf8(void)
{
- const char *locale, *cp, *encoding;
+ char szCodeset[20];
- /*
- * Determine the current locale the same way as setlocale() does,
- * according to POSIX.
- */
- locale = getenv("LC_ALL");
- if (locale == NULL || locale[0] == '\0') {
- locale = getenv("LC_CTYPE");
- if (locale == NULL || locale[0] == '\0') {
- locale = getenv("LANG");
- }
- }
-
- if (locale == NULL || locale[0] == '\0') {
+ szCodeset[0] = '\0';
+ if (!bGetNormalizedCodeset(szCodeset, sizeof(szCodeset), NULL)) {
return FALSE;
}
-
- /* The most general syntax of a locale (not all optional parts
- * recognized by all systems) is
- * language[_territory][.codeset][@modifier][+special][,[sponsor][_revision]]
- * To retrieve the codeset, search the first dot. Stop searching when
- * a '@' or '+' or ',' is encountered.
- */
- for (cp = locale;
- *cp != '\0' && *cp != '@' && *cp != '+' && *cp != ',';
- cp++) {
- if (*cp != '.') {
- continue;
- }
- encoding = cp + 1;
- for (cp = encoding;
- *cp != '\0' && *cp != '@' && *cp != '+' && *cp != ',';
- cp++)
- ; /* EMPTY */
- /*
- * The encoding is now contained in the part from encoding to
- * cp. Check it for "UTF-8", which is the only official IANA
- * name of UTF-8. Also check for the lowercase-no-dashes
- * version, which is what some SystemV systems use.
- */
- if ((cp - encoding == 5 && STRNEQ(encoding, "UTF-8", 5)) ||
- (cp - encoding == 4 && STRNEQ(encoding, "utf8", 4))) {
- return TRUE;
- }
- return FALSE;
- }
- return FALSE;
+ DBG_MSG(szCodeset);
+ return STREQ(szCodeset, "utf8");
} /* end of is_locale_utf8 */
[jmk] --rw-rw-r-- M 499692 jmk sys 7564 Jan 14 12:57 sys/src/cmd/aux/antiword/utf8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 800 Jan 14 12:57 sys/src/cmd/aux/antiword/version.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/version.h:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/version.h:1,6
/*
* version.h
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Version and release information
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/version.h:13,24 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/version.h:13,32
#define PURPOSESTRING "Display MS-Word files"
#if defined(__riscos)
- #define AUTHORSTRING "� 1998-2003 Adri van Os"
+ #define AUTHORSTRING "� 1998-2005 Adri van Os"
#else
- #define AUTHORSTRING "(C) 1998-2003 Adri van Os"
+ #define AUTHORSTRING "(C) 1998-2005 Adri van Os"
#endif /* __riscos */
- #define VERSIONSTRING "0.34 (25 Aug 2003)"
+ #define VERSIONSTRING "0.37 (21 Oct 2005)"
+
+ #if defined(__dos)
+ #if defined(__DJGPP__)
+ #define VERSIONSTRING2 " # 32-bit Protected Mode"
+ #else
+ #define VERSIONSTRING2 " # 16-bit Real Mode"
+ #endif /* __DJGPP__ */
+ #endif /* __dos */
#if defined(DEBUG)
#define STATUSSTRING "DEBUG version"
[jmk] --rw-rw-r-- M 499692 jmk sys 800 Jan 14 12:57 sys/src/cmd/aux/antiword/version.h
[jmk] --rw-rw-r-- M 499692 jmk sys 39070 Jan 14 12:57 sys/src/cmd/aux/antiword/word2text.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1,9 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1,9
/*
* word2text.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
*
* Description:
- * MS Word to text functions
+ * MS Word to "text" functions
*/
#include <stdio.h>
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:11,17 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:11,18
#include <string.h>
#include <ctype.h>
#if defined(__riscos)
- #include "visdelay.h"
+ #include "DeskLib:Hourglass.h"
+ #include "drawfile.h"
#endif /* __riscos */
#include "antiword.h"
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:24,29 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:25,31
#define OUTPUT_LINE() \
do {\
vAlign2Window(pDiag, pAnchor, lWidthMax, ucAlignment);\
+ TRACE_MSG("after vAlign2Window");\
pAnchor = pStartNewOutput(pAnchor, NULL);\
pOutput = pAnchor;\
} while(0)
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:43,49 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:45,51
#endif /* __riscos */
/* The document is in the format belonging to this version of Word */
static int iWordVersion = -1;
- /* Special treatment for files from Word 6 on an Apple Macintosh */
+ /* Special treatment for files from Word 4/5/6 on an Apple Macintosh */
static BOOL bOldMacFile = FALSE;
/* Section Information */
static const section_block_type *pSection = NULL;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:82,88 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:84,90
ulCharCounter++;
iCurrPct = (int)((ulCharCounter * 100) / ulDocumentLength);
if (iCurrPct != iPrevPct) {
- visdelay_percent(iCurrPct);
+ Hourglass_Percentage(iCurrPct);
iPrevPct = iCurrPct;
}
#endif /* __riscos */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:91,100 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:93,102
/*
* bOutputContainsText - see if the output contains more than white space
*/
- static BOOL
- bOutputContainsText(output_type *pAnchor)
+ BOOL
+ bOutputContainsText(const output_type *pAnchor)
{
- output_type *pCurr;
+ const output_type *pCurr;
size_t tIndex;
fail(pAnchor == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:120,128 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:122,130
* lTotalStringWidth - compute the total width of the output string
*/
static long
- lTotalStringWidth(output_type *pAnchor)
+ lTotalStringWidth(const output_type *pAnchor)
{
- output_type *pCurr;
+ const output_type *pCurr;
long lTotal;
lTotal = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:168,174 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:170,176
fail(pOutput == NULL);
- if (tOptions.eEncoding == encoding_utf8 && bChangeAllowed) {
+ if (tOptions.eEncoding == encoding_utf_8 && bChangeAllowed) {
DBG_HEX_C(ulChar > 0xffff, ulChar);
fail(ulChar > 0xffff);
tLen = tUcs2Utf8(ulChar, szResult, sizeof(szResult));
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:208,214 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:210,216
fail(szString == NULL || pOutput == NULL);
for (tIndex = 0; tIndex < tStringLength; tIndex++) {
- vStoreCharacter((UCHAR)szString[tIndex], pOutput);
+ vStoreCharacter((ULONG)(UCHAR)szString[tIndex], pOutput);
}
} /* end of vStoreString */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:261,267 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:263,270
if (tOptions.eConversionType == conversion_xml) {
vSetHeaders(pDiag, pStyle->usIstd);
} else {
- tLen = tStyle2Window(szString, pStyle, pSection);
+ tLen = tStyle2Window(szString, sizeof(szString),
+ pStyle, pSection);
vStoreString(szString, tLen, pOutput);
}
} /* end of vStoreStyle */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:306,312 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:309,315
}
#if defined(DEBUG)
- if (tOptions.eEncoding == encoding_utf8) {
+ if (tOptions.eEncoding == encoding_utf_8) {
fail(strlen(szListChar) > 3);
} else {
DBG_HEX_C(iscntrl((int)szListChar[0]), szListChar[0]);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:317,322 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:320,326
switch (ucNFC) {
case LIST_ARABIC_NUM:
+ case LIST_NUMBER_TXT:
tNextFree = (size_t)sprintf(szLine, "%u", uiListNumber);
break;
case LIST_UPPER_ROMAN:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:330,335 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:334,340
ucNFC == LIST_UPPER_ALPHA, szLine);
break;
case LIST_ORDINAL_NUM:
+ case LIST_ORDINAL_TXT:
if (uiListNumber % 10 == 1 && uiListNumber != 11) {
tNextFree =
(size_t)sprintf(szLine, "%ust", uiListNumber);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:344,355 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:349,364
(size_t)sprintf(szLine, "%uth", uiListNumber);
}
break;
+ case LIST_OUTLINE_NUM:
+ tNextFree = (size_t)sprintf(szLine, "%02u", uiListNumber);
+ break;
case LIST_SPECIAL:
+ case LIST_SPECIAL2:
case LIST_BULLETS:
tNextFree = 0;
break;
default:
- DBG_DEC(ucNFC);
+ DBG_HEX(ucNFC);
DBG_FIXME();
tNextFree = (size_t)sprintf(szLine, "%u", uiListNumber);
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:365,371 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:374,380
}
vSetLeftIndentation(pDiag, lLeftIndentation);
for (tIndex = 0; tIndex < tNextFree; tIndex++) {
- vStoreChar((UCHAR)szLine[tIndex], FALSE, pOutput);
+ vStoreChar((ULONG)(UCHAR)szLine[tIndex], FALSE, pOutput);
}
} /* end of vPutIndentation */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:406,411 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:415,422
{
output_type *pNew;
+ TRACE_MSG("pStartNextOutput");
+
if (pCurrent->tNextFree == 0) {
/* The current record is empty, re-use */
fail(pCurrent->szStorage[0] != '\0');
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:422,428 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:433,439
pNew->lStringWidth = 0;
pNew->ucFontColor = FONT_COLOR_DEFAULT;
pNew->usFontStyle = FONT_REGULAR;
- pNew->tFontRef = (draw_fontref)0;
+ pNew->tFontRef = (drawfile_fontref)0;
pNew->usFontSize = DEFAULT_FONT_SIZE;
pNew->pPrev = pCurrent;
pNew->pNext = NULL;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:437,452 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:448,466
{
output_type *pCurr, *pNext;
USHORT usFontStyle, usFontSize;
- draw_fontref tFontRef;
+ drawfile_fontref tFontRef;
UCHAR ucFontColor;
+ TRACE_MSG("pStartNewOutput");
+
ucFontColor = FONT_COLOR_DEFAULT;
usFontStyle = FONT_REGULAR;
- tFontRef = (draw_fontref)0;
+ tFontRef = (drawfile_fontref)0;
usFontSize = DEFAULT_FONT_SIZE;
/* Free the old output space */
pCurr = pAnchor;
while (pCurr != NULL) {
+ TRACE_MSG("Free the old output space");
pNext = pCurr->pNext;
pCurr->szStorage = xfree(pCurr->szStorage);
if (pCurr->pNext == NULL) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:460,468 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:474,486
}
if (pLeftOver == NULL) {
/* Create new output space */
+ TRACE_MSG("Create new output space");
pLeftOver = xmalloc(sizeof(*pLeftOver));
pLeftOver->tStorageSize = INITIAL_SIZE;
+ NO_DBG_DEC(pLeftOver->tStorageSize);
+ TRACE_MSG("before 2nd xmalloc");
pLeftOver->szStorage = xmalloc(pLeftOver->tStorageSize);
+ TRACE_MSG("after 2nd xmalloc");
pLeftOver->szStorage[0] = '\0';
pLeftOver->tNextFree = 0;
pLeftOver->lStringWidth = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:486,492 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:504,510
ulGetChar(FILE *pFile, list_id_enum eListID)
{
const font_block_type *pCurr;
- ULONG ulChar, ulFileOffset, ulTextOffset;
+ ULONG ulChar, ulFileOffset, ulCharPos;
row_info_enum eRowInfo;
USHORT usChar, usPropMod;
BOOL bSkip;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:497,503 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:515,521
bSkip = FALSE;
for (;;) {
usChar = usNextChar(pFile, eListID,
- &ulFileOffset, &ulTextOffset, &usPropMod);
+ &ulFileOffset, &ulCharPos, &usPropMod);
if (usChar == (USHORT)EOF) {
return (ULONG)EOF;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:583,589 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:601,607
}
if (ulChar == PAGE_BREAK) {
/* Might be the start of a new section */
- pSectionNext = pGetSectionInfo(pSection, ulTextOffset);
+ pSectionNext = pGetSectionInfo(pSection, ulCharPos);
}
return ulChar;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:590,597 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:608,637
} /* end of ulGetChar */
/*
- * bWordDecryptor - translate Word to text or PostScript
+ * lGetWidthMax - get the maximum line width from the paragraph break value
*
+ * Returns the maximum line width in millipoints
+ */
+ static long
+ lGetWidthMax(int iParagraphBreak)
+ {
+ fail(iParagraphBreak < 0);
+
+ if (iParagraphBreak == 0) {
+ return LONG_MAX;
+ }
+ if (iParagraphBreak < MIN_SCREEN_WIDTH) {
+ return lChar2MilliPoints(MIN_SCREEN_WIDTH);
+ }
+ if (iParagraphBreak > MAX_SCREEN_WIDTH) {
+ return lChar2MilliPoints(MAX_SCREEN_WIDTH);
+ }
+ return lChar2MilliPoints(iParagraphBreak);
+ } /* end of lGetWidthMax */
+
+ /*
+ * bWordDecryptor - turn Word to something more useful
+ *
* returns TRUE when succesful, otherwise FALSE
*/
BOOL
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:605,611 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:645,651
ULONG ulChar;
long lBeforeIndentation, lAfterIndentation;
long lLeftIndentation, lLeftIndentation1, lRightIndentation;
- long lWidthCurr, lWidthMax, lDefaultTabWidth, lTmp;
+ long lWidthCurr, lWidthMax, lDefaultTabWidth, lHalfSpaceWidth, lTmp;
list_id_enum eListID;
image_info_enum eRes;
UINT uiFootnoteNumber, uiEndnoteNumber, uiTmp;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:620,626 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:660,666
fail(pFile == NULL || lFilesize <= 0 || pDiag == NULL);
- DBG_MSG("bWordDecryptor");
+ TRACE_MSG("bWordDecryptor");
iWordVersion = iInitDocument(pFile, lFilesize);
if (iWordVersion < 0) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:627,632 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:667,678
DBG_DEC(iWordVersion);
return FALSE;
}
+
+ vGetOptions(&tOptions);
+ bOldMacFile = bIsOldMacFile();
+ vPrepareHdrFtrText(pFile);
+ vPrepareFootnoteText(pFile);
+
vPrologue2(pDiag, iWordVersion);
/* Initialisation */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:636,642 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:682,687
iPrevPct = -1;
ulDocumentLength = ulGetDocumentLength();
#endif /* __riscos */
- bOldMacFile = bIsOldMacFile();
pSection = pGetSectionInfo(NULL, 0);
pSectionNext = pSection;
lDefaultTabWidth = lGetDefaultTabWidth();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:651,657 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:696,702
bIsTableRow = FALSE;
bWasTableRow = FALSE;
vResetStyles();
- pStyleInfo = pGetNextStyleInfoListItem(NULL);
+ pStyleInfo = pGetNextTextStyle(NULL);
bStartStyle = FALSE;
bInList = FALSE;
bWasInList = FALSE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:683,689 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:728,733
bNoMarks = TRUE;
bFirstLine = TRUE;
ucNFC = LIST_BULLETS;
- vGetOptions(&tOptions);
if (pStyleInfo != NULL) {
szListChar = pStyleInfo->szListChar;
pStyleTmp = pStyleInfo;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:700,718 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:744,753
bAllCapitals = FALSE;
bHiddenText = FALSE;
bMarkDelText = FALSE;
- fail(tOptions.iParagraphBreak < 0);
- if (tOptions.iParagraphBreak == 0) {
- lWidthMax = LONG_MAX;
- } else if (tOptions.iParagraphBreak < MIN_SCREEN_WIDTH) {
- lWidthMax = lChar2MilliPoints(MIN_SCREEN_WIDTH);
- } else if (tOptions.iParagraphBreak > MAX_SCREEN_WIDTH) {
- lWidthMax = lChar2MilliPoints(MAX_SCREEN_WIDTH);
- } else {
- lWidthMax = lChar2MilliPoints(tOptions.iParagraphBreak);
- }
+ lWidthMax = lGetWidthMax(tOptions.iParagraphBreak);
NO_DBG_DEC(lWidthMax);
- visdelay_begin();
+ Hourglass_On();
uiFootnoteNumber = 0;
uiEndnoteNumber = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:727,739 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:762,778
}
switch (eListID) {
case text_list:
- eListID = footnote_list;
- if (uiFootnoteNumber != 0) {
- vPutSeparatorLine(pAnchor);
- OUTPUT_LINE();
- uiFootnoteNumber = 0;
+ if (tOptions.eConversionType !=
+ conversion_xml) {
+ eListID = footnote_list;
+ if (uiFootnoteNumber != 0) {
+ vPutSeparatorLine(pAnchor);
+ OUTPUT_LINE();
+ uiFootnoteNumber = 0;
+ }
+ break;
}
- break;
+ /* No break or return */
case footnote_list:
eListID = endnote_list;
if (uiEndnoteNumber != 0) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:834,840 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:873,879
case PAGE_BREAK:
case COLUMN_FEED:
if (bIsTableRow) {
- vStoreCharacter((ULONG)'\n', pOutput);
+ /* Ignore when in a table */
break;
}
if (bOutputContainsText(pAnchor)) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:843,850 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:882,889
RESET_LINE();
}
if (ulChar == PAGE_BREAK) {
- vEndOfPage(pDiag,
- lAfterIndentation);
+ vEndOfPage(pDiag, lAfterIndentation,
+ pSection != pSectionNext);
} else {
vEndOfParagraph(pDiag,
pOutput->tFontRef,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:945,952 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:984,990
}
bWasInList = bInList;
if (bStartStyle) {
- pStyleInfo =
- pGetNextStyleInfoListItem(pStyleInfo);
+ pStyleInfo = pGetNextTextStyle(pStyleInfo);
NO_DBG_HEX_C(pStyleInfo != NULL,
pStyleInfo->ulFileOffset);
DBG_MSG_C(pStyleInfo == NULL,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1015,1020 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1053,1063
break;
case FOOTNOTE_CHAR:
uiFootnoteNumber++;
+ if (tOptions.eConversionType == conversion_xml) {
+ vStoreCharacter((ULONG)FOOTNOTE_OR_ENDNOTE,
+ pOutput);
+ break;
+ }
vStoreCharacter((ULONG)'[', pOutput);
vStoreNumberAsDecimal(uiFootnoteNumber, pOutput);
vStoreCharacter((ULONG)']', pOutput);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1033,1039 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1076,1088
vStoreCharacter((ULONG)'\n', pOutput);
break;
}
- OUTPUT_LINE();
+ if (bOutputContainsText(pAnchor)) {
+ OUTPUT_LINE();
+ } else {
+ vMove2NextLine(pDiag,
+ pOutput->tFontRef, pOutput->usFontSize);
+ RESET_LINE();
+ }
vEndOfParagraph(pDiag,
pOutput->tFontRef,
pOutput->usFontSize,
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1047,1055 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1096,1106
}
if (bOutputContainsText(pAnchor)) {
OUTPUT_LINE();
- }
- vMove2NextLine(pDiag,
+ } else {
+ vMove2NextLine(pDiag,
pOutput->tFontRef, pOutput->usFontSize);
+ RESET_LINE();
+ }
break;
case PAGE_BREAK:
case COLUMN_FEED:
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1070,1080 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1121,1135
break;
}
if (tOptions.iParagraphBreak == 0 &&
- tOptions.eConversionType == conversion_text) {
+ (tOptions.eConversionType == conversion_text ||
+ tOptions.eConversionType == conversion_fmt_text)) {
/* No logical lines, so no tab expansion */
vStoreCharacter(TAB, pOutput);
break;
}
+ lHalfSpaceWidth = (lComputeSpaceWidth(
+ pOutput->tFontRef,
+ pOutput->usFontSize) + 1) / 2;
lTmp = lTotalStringWidth(pAnchor);
lTmp += lDrawUnits2MilliPoints(pDiag->lXleft);
lTmp /= lDefaultTabWidth;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1090,1103 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1145,1162
if (bHiddenText && tOptions.bHideHiddenText) {
continue;
}
- if (bMarkDelText &&
- tOptions.eConversionType != conversion_ps) {
+ if (bMarkDelText && tOptions.bRemoveRemovedText) {
continue;
}
- if (bAllCapitals) {
- ulChar = ulToUpper(ulChar);
+ if (ulChar == UNICODE_ELLIPSIS &&
+ tOptions.eEncoding != encoding_utf_8) {
+ vStoreString("...", 3, pOutput);
+ } else {
+ if (bAllCapitals) {
+ ulChar = ulToUpper(ulChar);
+ }
+ vStoreCharacter(ulChar, pOutput);
}
- vStoreCharacter(ulChar, pOutput);
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1124,1130 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1183,1191
/* End of a table row */
if (bEndRowNorm) {
fail(pRowInfo == NULL);
- vTableRow2Window(pDiag, pAnchor, pRowInfo);
+ vTableRow2Window(pDiag, pAnchor, pRowInfo,
+ tOptions.eConversionType,
+ tOptions.iParagraphBreak);
} else {
fail(!bEndRowFast);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/word2text.c:1167,1172 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/word2text.c:1228,1505
pAnchor = xfree(pAnchor);
vCloseFont();
vFreeDocument();
- visdelay_end();
+ Hourglass_Off();
return TRUE;
} /* end of bWordDecryptor */
+
+ /*
+ * lLastStringWidth - compute the width of the last part of the output string
+ */
+ static long
+ lLastStringWidth(const output_type *pAnchor)
+ {
+ const output_type *pCurr, *pStart;
+
+ pStart = NULL;
+ for (pCurr = pAnchor; pCurr != NULL; pCurr = pCurr->pNext) {
+ if (pCurr->tNextFree == 1 &&
+ (pCurr->szStorage[0] == PAR_END ||
+ pCurr->szStorage[0] == HARD_RETURN)) {
+ /* Found a separator. Start after the separator */
+ pStart = pCurr->pNext;
+ }
+ }
+ if (pStart == NULL) {
+ /* No separators. Use the whole output string */
+ pStart = pAnchor;
+ }
+ return lTotalStringWidth(pStart);
+ } /* end of lLastStringWidth */
+
+ /*
+ * pHdrFtrDecryptor - turn a header/footer list element to something useful
+ */
+ output_type *
+ pHdrFtrDecryptor(FILE *pFile, ULONG ulCharPosStart, ULONG ulCharPosNext)
+ {
+ output_type *pAnchor, *pOutput, *pLeftOver;
+ ULONG ulChar, ulFileOffset, ulCharPos;
+ long lWidthCurr, lWidthMax;
+ long lRightIndentation;
+ USHORT usChar;
+ UCHAR ucAlignment;
+ BOOL bSkip;
+
+ fail(iWordVersion < 0);
+ fail(tOptions.eConversionType == conversion_unknown);
+ fail(tOptions.eEncoding == 0);
+
+ if (ulCharPosStart == ulCharPosNext) {
+ /* There are no bytes to decrypt */
+ return NULL;
+ }
+
+ lRightIndentation = 0;
+ ucAlignment = ALIGNMENT_LEFT;
+ bSkip = FALSE;
+ lWidthMax = lGetWidthMax(tOptions.iParagraphBreak);
+ pAnchor = pStartNewOutput(NULL, NULL);
+ pOutput = pAnchor;
+ pOutput->tFontRef = tOpenFont(0, FONT_REGULAR, DEFAULT_FONT_SIZE);
+ usChar = usToHdrFtrPosition(pFile, ulCharPosStart);
+ ulCharPos = ulCharPosStart;
+ ulFileOffset = ulCharPos2FileOffset(ulCharPos);
+ while (usChar != (USHORT)EOF && ulCharPos != ulCharPosNext) {
+ /* Skip embedded characters */
+ if (usChar == START_EMBEDDED) {
+ bSkip = TRUE;
+ } else if (usChar == END_IGNORE || usChar == END_EMBEDDED) {
+ bSkip = FALSE;
+ }
+ /* Translate character */
+ if (bSkip || usChar == END_IGNORE || usChar == END_EMBEDDED) {
+ ulChar = IGNORE_CHARACTER;
+ } else {
+ ulChar = ulTranslateCharacters(usChar,
+ ulFileOffset,
+ iWordVersion,
+ tOptions.eConversionType,
+ tOptions.eEncoding,
+ bOldMacFile);
+ }
+ /* Process character */
+ if (ulChar != IGNORE_CHARACTER) {
+ switch (ulChar) {
+ case PICTURE:
+ vStoreString("[pic]", 5, pOutput);
+ break;
+ case PAR_END:
+ case HARD_RETURN:
+ case PAGE_BREAK:
+ case COLUMN_FEED:
+ /* To the next substring */
+ pOutput = pStartNextOutput(pOutput);
+ vCloseFont();
+ pOutput->tFontRef = tOpenFont(0,
+ FONT_REGULAR, DEFAULT_FONT_SIZE);
+ /* A substring with just one character */
+ if (ulChar == HARD_RETURN) {
+ vStoreCharacter(HARD_RETURN, pOutput);
+ } else {
+ vStoreCharacter(PAR_END, pOutput);
+ }
+ /* To the next substring */
+ pOutput = pStartNextOutput(pOutput);
+ vCloseFont();
+ pOutput->tFontRef = tOpenFont(0,
+ FONT_REGULAR, DEFAULT_FONT_SIZE);
+ fail(!bCheckDoubleLinkedList(pAnchor));
+ break;
+ case TABLE_SEPARATOR:
+ vStoreCharacter((ULONG)' ', pOutput);
+ vStoreCharacter((ULONG)TABLE_SEPARATOR_CHAR,
+ pOutput);
+ break;
+ case TAB:
+ vStoreCharacter((ULONG)FILLER_CHAR, pOutput);
+ break;
+ default:
+ vStoreCharacter(ulChar, pOutput);
+ break;
+ }
+ }
+ lWidthCurr = lLastStringWidth(pAnchor);
+ if (lWidthCurr >= lWidthMax + lRightIndentation) {
+ pLeftOver = pSplitList(pAnchor);
+ for (pOutput = pAnchor;
+ pOutput->pNext != NULL;
+ pOutput = pOutput->pNext)
+ ; /* EMPTY */
+ fail(pOutput == NULL);
+ /* To the next substring */
+ pOutput = pStartNextOutput(pOutput);
+ /* A substring with just one HARD_RETURN */
+ vStoreCharacter(HARD_RETURN, pOutput);
+ /* Put the leftover piece(s) at the end */
+ pOutput->pNext = pLeftOver;
+ if (pLeftOver != NULL) {
+ pLeftOver->pPrev = pOutput;
+ }
+ fail(!bCheckDoubleLinkedList(pAnchor));
+ for (pOutput = pAnchor;
+ pOutput->pNext != NULL;
+ pOutput = pOutput->pNext)
+ ; /* EMPTY */
+ fail(pOutput == NULL);
+ }
+ usChar = usNextChar(pFile, hdrftr_list,
+ &ulFileOffset, &ulCharPos, NULL);
+ }
+ vCloseFont();
+ if (bOutputContainsText(pAnchor)) {
+ return pAnchor;
+ }
+ pAnchor = pStartNewOutput(pAnchor, NULL);
+ pAnchor->szStorage = xfree(pAnchor->szStorage);
+ pAnchor = xfree(pAnchor);
+ return NULL;
+ } /* end of pHdrFtrDecryptor */
+
+ /*
+ * pFootnoteDecryptor - turn a footnote text list element into text
+ */
+ char *
+ szFootnoteDecryptor(FILE *pFile, ULONG ulCharPosStart, ULONG ulCharPosNext)
+ {
+ char *szText;
+ ULONG ulChar, ulFileOffset, ulCharPos;
+ USHORT usChar;
+ size_t tLen, tIndex, tNextFree, tStorageSize;
+ char szResult[6];
+ BOOL bSkip;
+
+ fail(iWordVersion < 0);
+ fail(tOptions.eConversionType == conversion_unknown);
+ fail(tOptions.eEncoding == 0);
+
+ if (ulCharPosStart == ulCharPosNext) {
+ /* There are no bytes to decrypt */
+ return NULL;
+ }
+
+ if (tOptions.eConversionType != conversion_xml) {
+ /* Only implemented for XML output */
+ return NULL;
+ }
+
+ bSkip = FALSE;
+
+ /* Initialise the text buffer */
+ tStorageSize = INITIAL_SIZE;
+ szText = xmalloc(tStorageSize);
+ tNextFree = 0;
+ szText[tNextFree] = '\0';
+
+ /* Goto the start */
+ usChar = usToFootnotePosition(pFile, ulCharPosStart);
+ ulCharPos = ulCharPosStart;
+ ulFileOffset = ulCharPos2FileOffset(ulCharPos);
+ /* Skip the unwanted starting characters */
+ while (usChar != (USHORT)EOF && ulCharPos != ulCharPosNext &&
+ (usChar == FOOTNOTE_OR_ENDNOTE ||
+ usChar == PAR_END ||
+ usChar == TAB ||
+ usChar == (USHORT)' ')) {
+ usChar = usNextChar(pFile, footnote_list,
+ &ulFileOffset, &ulCharPos, NULL);
+ }
+ /* Process the footnote text */
+ while (usChar != (USHORT)EOF && ulCharPos != ulCharPosNext) {
+ /* Skip embedded characters */
+ if (usChar == START_EMBEDDED) {
+ bSkip = TRUE;
+ } else if (usChar == END_IGNORE || usChar == END_EMBEDDED) {
+ bSkip = FALSE;
+ }
+ /* Translate character */
+ if (bSkip ||
+ usChar == END_IGNORE ||
+ usChar == END_EMBEDDED ||
+ usChar == FOOTNOTE_OR_ENDNOTE) {
+ ulChar = IGNORE_CHARACTER;
+ } else {
+ ulChar = ulTranslateCharacters(usChar,
+ ulFileOffset,
+ iWordVersion,
+ tOptions.eConversionType,
+ tOptions.eEncoding,
+ bOldMacFile);
+ }
+ /* Process character */
+ if (ulChar == PICTURE) {
+ tLen = 5;
+ strcpy(szResult, "[pic]");
+ } else if (ulChar == IGNORE_CHARACTER) {
+ tLen = 0;
+ szResult[0] = '\0';
+ } else {
+ switch (ulChar) {
+ case PAR_END:
+ case HARD_RETURN:
+ case PAGE_BREAK:
+ case COLUMN_FEED:
+ ulChar = (ULONG)PAR_END;
+ break;
+ case TAB:
+ ulChar = (ULONG)' ';
+ break;
+ default:
+ break;
+ }
+ tLen = tUcs2Utf8(ulChar, szResult, sizeof(szResult));
+ }
+ /* Add the results to the text */
+ if (tNextFree + tLen + 1 > tStorageSize) {
+ tStorageSize += EXTENTION_SIZE;
+ szText = xrealloc(szText, tStorageSize);
+ }
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
+ szText[tNextFree++] = szResult[tIndex];
+ }
+ szText[tNextFree] = '\0';
+ /* Next character */
+ usChar = usNextChar(pFile, footnote_list,
+ &ulFileOffset, &ulCharPos, NULL);
+ }
+ /* Remove redundant spaces */
+ while (tNextFree != 0 && szText[tNextFree - 1] == ' ') {
+ szText[tNextFree - 1] = '\0';
+ tNextFree--;
+ }
+ if (tNextFree == 0) {
+ /* No text */
+ szText = xfree(szText);
+ return NULL;
+ }
+ return szText;
+ } /* end of szFootnoteDecryptor */
[jmk] --rw-rw-r-- M 499692 jmk sys 39070 Jan 14 12:57 sys/src/cmd/aux/antiword/word2text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 11743 Jan 14 12:57 sys/src/cmd/aux/antiword/wordconst.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:1,6
/*
* wordconst.h
- * Copyright (C) 1998-2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Constants and macros for the interpretation of MS Word files
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:79,85 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:79,89
#define LIST_UPPER_ALPHA 0x03
#define LIST_LOWER_ALPHA 0x04
#define LIST_ORDINAL_NUM 0x05
+ #define LIST_NUMBER_TXT 0x06
+ #define LIST_ORDINAL_TXT 0x07
+ #define LIST_OUTLINE_NUM 0x16
#define LIST_SPECIAL 0x17
+ #define LIST_SPECIAL2 0x19
#define LIST_BULLETS 0xff
/* Types of paragraph alignment */
#define ALIGNMENT_LEFT 0x00
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:188,194 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:192,202
#define WORD_SOFT_HYPHEN 0x1f
/* Unicode characters */
- #define UNICODE_COPYRIGHT_SIGN 0x00a9
+ #define UNICODE_DOUBLE_LEFT_ANGLE_QMARK 0x00ab
+ #define UNICODE_MIDDLE_DOT 0x00b7
+ #define UNICODE_DOUBLE_RIGHT_ANGLE_QMARK 0x00bb
+ #define UNICODE_CAPITAL_D_WITH_STROKE 0x0110
+ #define UNICODE_SMALL_D_WITH_STROKE 0x0111
#define UNICODE_CAPITAL_LIGATURE_OE 0x0152
#define UNICODE_SMALL_LIGATURE_OE 0x0153
#define UNICODE_SMALL_F_HOOK 0x0192
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:234,246 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:242,258
#define UNICODE_BULLET 0x2022
#define UNICODE_TRIANGULAR_BULLET 0x2023
#define UNICODE_ONE_DOT_LEADER 0x2024
+ #define UNICODE_TWO_DOT_LEADER 0x2025
#define UNICODE_ELLIPSIS 0x2026
#define UNICODE_HYPHENATION_POINT 0x2027
#define UNICODE_LEFT_TO_RIGHT_EMBEDDING 0x202a
#define UNICODE_RIGHT_TO_LEFT_EMBEDDING 0x202b
+ #define UNICODE_POP_DIRECTIONAL_FORMATTING 0x202c
+ #define UNICODE_LEFT_TO_RIGHT_OVERRIDE 0x202d
+ #define UNICODE_RIGHT_TO_LEFT_OVERRIDE 0x202e
+ #define UNICODE_NARROW_NO_BREAK_SPACE 0x202f
#define UNICODE_PER_MILLE_SIGN 0x2030
#define UNICODE_PRIME 0x2032
- #define UNICODE_PRIME 0x2032
#define UNICODE_DOUBLE_PRIME 0x2033
#define UNICODE_SINGLE_LEFT_ANGLE_QMARK 0x2039
#define UNICODE_SINGLE_RIGHT_ANGLE_QMARK 0x203a
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:250,255 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:262,268
#define UNICODE_CIRCLE 0x20dd
#define UNICODE_SQUARE 0x20de
#define UNICODE_DIAMOND 0x20df
+ #define UNICODE_NUMERO_SIGN 0x2116
#define UNICODE_TRADEMARK_SIGN 0x2122
#define UNICODE_KELVIN_SIGN 0x212a
#define UNICODE_LEFTWARDS_ARROW 0x2190
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:260,265 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:273,279
#define UNICODE_MINUS_SIGN 0x2212
#define UNICODE_DIVISION_SLASH 0x2215
#define UNICODE_ASTERISK_OPERATOR 0x2217
+ #define UNICODE_BULLET_OPERATOR 0x2219
#define UNICODE_RATIO 0x2236
#define UNICODE_TILDE_OPERATOR 0x223c
#define UNICODE_BD_LIGHT_HORIZONTAL 0x2500
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordconst.h:291,307 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordconst.h:305,318
#define UNICODE_BLACK_CLUB_SUIT 0x2663
#define UNICODE_SMALL_LIGATURE_FI 0xfb01
#define UNICODE_SMALL_LIGATURE_FL 0xfb02
+ #define UNICODE_ZERO_WIDTH_NO_BREAK_SPACE 0xfeff
#if defined(__riscos)
#define OUR_ELLIPSIS 0x8c
- #define OUR_BULLET_TEXT 0x8f
- #define OUR_BULLET_PS 0x8f
#define OUR_EM_DASH 0x98
#define OUR_UNBREAKABLE_JOIN 0x99
#else
#define OUR_ELLIPSIS '.'
- #define OUR_BULLET_TEXT '.'
- #define OUR_BULLET_PS '\217'
#define OUR_EM_DASH '-'
#define OUR_UNBREAKABLE_JOIN '-'
#endif /* __riscos */
[jmk] --rw-rw-r-- M 499692 jmk sys 11743 Jan 14 12:57 sys/src/cmd/aux/antiword/wordconst.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2790 Jan 14 12:57 sys/src/cmd/aux/antiword/worddos.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/worddos.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/worddos.c:1,6
/*
* worddos.c
- * Copyright (C) 2002 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Deal with the DOS internals of a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/worddos.c:96,105 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/worddos.c:96,108
}
bSuccess = bGetDocumentText(pFile, lFilesize, aucHeader);
if (bSuccess) {
+ vGetPropertyInfo(pFile, NULL,
+ NULL, 0, NULL, 0,
+ aucHeader, iWordVersion);
vSetDefaultTabWidth(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
- vGetPropertyInfo(pFile, NULL,
+ vGetNotesInfo(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
}
[jmk] --rw-rw-r-- M 499692 jmk sys 2790 Jan 14 12:57 sys/src/cmd/aux/antiword/worddos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7910 Jan 14 12:57 sys/src/cmd/aux/antiword/wordlib.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordlib.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordlib.c:1,6
/*
* wordlib.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Deal with the internals of a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordlib.c:349,355 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordlib.c:349,357
vDestroyFontInfoList();
vDestroyStylesheetList();
vDestroyPictInfoList();
+ vDestroyDocumentInfoList();
vDestroySectionInfoList();
+ vDestroyHdrFtrInfoList();
vDestroyPropModList();
vDestroyNotesInfoLists();
vDestroyFontTable();
[jmk] --rw-rw-r-- M 499692 jmk sys 7910 Jan 14 12:57 sys/src/cmd/aux/antiword/wordlib.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2658 Jan 14 12:57 sys/src/cmd/aux/antiword/wordmac.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordmac.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordmac.c:1,6
/*
* wordmac.c
- * Copyright (C) 2002 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2004 A.J. van Os; Released under GNU GPL
*
* Description:
* Deal with the MAC internals of a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordmac.c:20,25 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordmac.c:20,27
text_block_type tTextBlock;
ULONG ulBeginOfText, ulEndOfText;
ULONG ulTextLen;
+ UCHAR ucDocStatus;
+ BOOL bFastSaved;
fail(pFile == NULL);
fail(aucHeader == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordmac.c:26,31 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordmac.c:28,45
DBG_MSG("bGetDocumentText");
+ NO_DBG_PRINT_BLOCK(aucHeader, 0x20);
+
+ /* Get the status flags from the header */
+ ucDocStatus = ucGetByte(0x0a, aucHeader);
+ DBG_HEX(ucDocStatus);
+ bFastSaved = (ucDocStatus & BIT(5)) != 0;
+ DBG_MSG_C(bFastSaved, "This document is Fast Saved");
+ if (bFastSaved) {
+ werr(0, "MacWord: fast saved documents are not supported yet");
+ return FALSE;
+ }
+
/* Get length information */
ulBeginOfText = ulGetLongBE(0x14, aucHeader);
DBG_HEX(ulBeginOfText);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordmac.c:83,92 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordmac.c:97,106
}
bSuccess = bGetDocumentText(pFile, aucHeader);
if (bSuccess) {
- vSetDefaultTabWidth(pFile, NULL,
+ vGetPropertyInfo(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
- vGetPropertyInfo(pFile, NULL,
+ vSetDefaultTabWidth(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
}
[jmk] --rw-rw-r-- M 499692 jmk sys 2658 Jan 14 12:57 sys/src/cmd/aux/antiword/wordmac.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22402 Jan 14 12:57 sys/src/cmd/aux/antiword/wordole.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordole.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordole.c:1,6
/*
* wordole.c
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GPL
*
* Description:
* Deal with the OLE internals of a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordole.c:557,562 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordole.c:557,563
if (!bHasImages ||
tOptions.eConversionType == conversion_text ||
+ tOptions.eConversionType == conversion_fmt_text ||
tOptions.eConversionType == conversion_xml ||
tOptions.eImageLevel == level_no_images) {
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordole.c:629,635 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordole.c:630,636
size_t tBBDLen, tSBDLen, tNumBbdBlocks, tRootListLen;
int iWordVersion, iIndex, iToGo;
BOOL bSuccess;
- USHORT usIdent;
+ USHORT usIdent, usDocStatus;
UCHAR aucHeader[HEADER_SIZE];
fail(pFile == NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordole.c:771,776 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordole.c:772,788
return -1;
}
+ /* Get the status flags from the header */
+ usDocStatus = usGetWord(0x0a, aucHeader);
+ if (usDocStatus & BIT(9)) {
+ PPS_info.tTable = PPS_info.t1Table;
+ } else {
+ PPS_info.tTable = PPS_info.t0Table;
+ }
+ /* Clean the entries that should not be used */
+ memset(&PPS_info.t0Table, 0, sizeof(PPS_info.t0Table));
+ memset(&PPS_info.t1Table, 0, sizeof(PPS_info.t1Table));
+
bSuccess = bGetDocumentText(pFile, &PPS_info,
aulBBD, tBBDLen, aulSBD, tSBDLen,
aucHeader, iWordVersion);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordole.c:777,786 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordole.c:789,798
if (bSuccess) {
vGetDocumentData(pFile, &PPS_info,
aulBBD, tBBDLen, aucHeader, iWordVersion);
- vSetDefaultTabWidth(pFile, &PPS_info,
+ vGetPropertyInfo(pFile, &PPS_info,
aulBBD, tBBDLen, aulSBD, tSBDLen,
aucHeader, iWordVersion);
- vGetPropertyInfo(pFile, &PPS_info,
+ vSetDefaultTabWidth(pFile, &PPS_info,
aulBBD, tBBDLen, aulSBD, tSBDLen,
aucHeader, iWordVersion);
vGetNotesInfo(pFile, &PPS_info,
[jmk] --rw-rw-r-- M 499692 jmk sys 22402 Jan 14 12:57 sys/src/cmd/aux/antiword/wordole.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8285 Jan 14 12:57 sys/src/cmd/aux/antiword/wordtypes.h
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:1,6
/*
* wordtypes.h
- * Copyright (C) 1998-2003 A.J. van Os; Released under GPL
+ * Copyright (C) 1998-2004 A.J. van Os; Released under GPL
*
* Description:
* Typedefs for the interpretation of MS Word files
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:9,14 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:9,20
#if !defined(__wordtypes_h)
#define __wordtypes_h 1
+ #include <time.h>
+ #if defined(__riscos)
+ #include "DeskLib:Font.h"
+ #include "DeskLib:Wimp.h"
+ #endif /* __riscos */
+
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned int UINT;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:16,24 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:22,31
#if defined(__riscos)
typedef struct diagram_tag {
- draw_diag tInfo;
- wimp_w tMainWindow;
- wimp_w tScaleWindow;
+ drawfile_info tInfo;
+ window_handle tMainWindow;
+ window_handle tScaleWindow;
+ menu_ptr pSaveMenu;
long lXleft; /* In DrawUnits */
long lYtop; /* In DrawUnits */
size_t tMemorySize;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:32,42 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:39,49
long lXleft; /* In DrawUnits */
long lYtop; /* In DrawUnits */
} diagram_type;
- typedef UCHAR draw_fontref;
+ typedef UCHAR drawfile_fontref;
#endif /* __riscos */
typedef struct output_tag {
- char *szStorage;
+ char *szStorage;
long lStringWidth; /* In millipoints */
size_t tStorageSize;
size_t tNextFree;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:43,49 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:50,56
USHORT usFontStyle;
USHORT usFontSize;
UCHAR ucFontColor;
- draw_fontref tFontRef;
+ drawfile_fontref tFontRef;
struct output_tag *pPrev;
struct output_tag *pNext;
} output_type;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:54,68 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:61,78
conversion_text,
conversion_draw,
conversion_ps,
- conversion_xml
+ conversion_xml,
+ conversion_pdf,
+ conversion_fmt_text
} conversion_type;
/* Types of encoding */
typedef enum encoding_tag {
encoding_neutral = 100,
- encoding_iso_8859_1 = 801,
- encoding_iso_8859_2 = 802,
- encoding_utf8 = 1601
+ encoding_latin_1 = 801,
+ encoding_latin_2 = 802,
+ encoding_cyrillic = 805,
+ encoding_utf_8 = 1601
} encoding_type;
/* Font translation table entry */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:69,74 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:79,86
typedef struct font_table_tag {
USHORT usFontStyle;
UCHAR ucWordFontNumber;
+ UCHAR ucFFN;
+ UCHAR ucEmphasis;
UCHAR ucInUse;
char szWordFontname[65];
char szOurFontname[33];
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:87,92 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:99,105
int iParagraphBreak;
conversion_type eConversionType;
BOOL bHideHiddenText;
+ BOOL bRemoveRemovedText;
BOOL bUseLandscape;
encoding_type eEncoding;
int iPageHeight; /* In points */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:106,115 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:119,129
typedef struct pps_info_tag {
pps_type tWordDocument; /* Text stream */
pps_type tData; /* Data stream */
- pps_type t0Table; /* Table 0 stream */
- pps_type t1Table; /* Table 1 stream */
+ pps_type tTable; /* Table stream */
pps_type tSummaryInfo; /* Summary Information */
pps_type tDocSummaryInfo;/* Document Summary Information */
+ pps_type t0Table; /* Table 0 stream */
+ pps_type t1Table; /* Table 1 stream */
} pps_info_type;
/* Record of data block information */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:128,133 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:142,155
USHORT usPropMod;
} text_block_type;
+ /* Record of the document block information */
+ typedef struct document_block_tag {
+ time_t tCreateDate; /* Unix timestamp */
+ time_t tRevisedDate; /* Unix timestamp */
+ USHORT usDefaultTabWidth; /* In twips */
+ UCHAR ucHdrFtrSpecification;
+ } document_block_type;
+
/* Record of table-row block information */
typedef struct row_block_tag {
ULONG ulFileOffsetStart;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:134,140 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:156,161
ULONG ulFileOffsetEnd;
ULONG ulCharPosStart;
ULONG ulCharPosEnd;
- int iColumnWidthSum; /* In twips */
short asColumnWidth[TABLE_COLUMN_MAX+1]; /* In twips */
UCHAR ucNumberOfColumns;
UCHAR ucBorderInfo;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:149,157 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:170,192
level_type_pause
} level_type_enum;
+ typedef enum list_id_tag {
+ no_list = 0,
+ text_list,
+ footnote_list,
+ hdrftr_list,
+ macro_list,
+ annotation_list,
+ endnote_list,
+ textbox_list,
+ hdrtextbox_list,
+ end_of_lists
+ } list_id_enum;
+
/* Linked list of style description information */
typedef struct style_block_tag {
- ULONG ulFileOffset;
+ ULONG ulFileOffset; /* The style start with this character */
+ list_id_enum eListID;/* The fileoffset is in this list */
BOOL bNumPause;
BOOL bNoRestart; /* Don't restart by more significant levels */
USHORT usIstd; /* Current style */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:171,177 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:206,212
char szListChar[4]; /* Character for an itemized list */
} style_block_type;
- /* Linked list of font description information */
+ /* Font description information */
typedef struct font_block_tag {
ULONG ulFileOffset;
USHORT usFontStyle;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:179,208 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:214,247
UCHAR ucFontNumber;
UCHAR ucFontColor;
} font_block_type;
- typedef struct font_desc_tag {
- font_block_type tInfo;
- struct font_desc_tag *pNext;
- } font_desc_type;
- /* Linked list of picture description information */
+ /* Picture description information */
typedef struct picture_block_tag {
ULONG ulFileOffset;
ULONG ulFileOffsetPicture;
ULONG ulPictureOffset;
} picture_block_type;
- typedef struct picture_desc_tag {
- picture_block_type tInfo;
- struct picture_desc_tag *pNext;
- } picture_desc_type;
/* Section description information */
typedef struct section_block_tag {
BOOL bNewPage;
- UCHAR aucNFC[9]; /* Number format code */
USHORT usNeedPrevLvl; /* Print previous level numbers */
USHORT usHangingIndent;
+ UCHAR aucNFC[9]; /* Number format code */
+ UCHAR ucHdrFtrSpecification; /* Which headers/footers Word < 8 */
} section_block_type;
+ /* Header/footer description information */
+ typedef struct hdrftr_block_tag {
+ output_type *pText;
+ long lHeight; /* In DrawUnits */
+ } hdrftr_block_type;
+
+ /* Footnote description information */
+ typedef struct footnote_block_tag {
+ char *szText;
+ } footnote_block_type;
+
/* List description information */
typedef struct list_block_tag {
ULONG ulStartAt; /* Number at the start of a list */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordtypes.h:262,276 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordtypes.h:301,306
found_end_of_row,
found_not_end_of_row
} row_info_enum;
-
- typedef enum list_id_tag {
- text_list,
- footnote_list,
- endnote_list,
- textbox_list,
- hdrtextbox_list,
- end_of_lists
- } list_id_enum;
typedef enum notetype_tag {
notetype_is_footnote,
[jmk] --rw-rw-r-- M 499692 jmk sys 8285 Jan 14 12:57 sys/src/cmd/aux/antiword/wordtypes.h
[jmk] --rw-rw-r-- M 499692 jmk sys 5584 Jan 14 12:57 sys/src/cmd/aux/antiword/wordwin.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordwin.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordwin.c:1,6
/*
* wordwin.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GPL
+ * Copyright (C) 2002-2005 A.J. van Os; Released under GPL
*
* Description:
* Deal with the WIN internals of a MS Word file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordwin.c:121,126 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordwin.c:121,127
if (!bHasImages ||
tOptions.eConversionType == conversion_text ||
+ tOptions.eConversionType == conversion_fmt_text ||
tOptions.eConversionType == conversion_xml ||
tOptions.eImageLevel == level_no_images) {
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/wordwin.c:194,203 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/wordwin.c:195,207
bSuccess = bGetDocumentText(pFile, aucHeader);
if (bSuccess) {
vGetDocumentData(pFile, aucHeader);
+ vGetPropertyInfo(pFile, NULL,
+ NULL, 0, NULL, 0,
+ aucHeader, iWordVersion);
vSetDefaultTabWidth(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
- vGetPropertyInfo(pFile, NULL,
+ vGetNotesInfo(pFile, NULL,
NULL, 0, NULL, 0,
aucHeader, iWordVersion);
}
[jmk] --rw-rw-r-- M 499692 jmk sys 5584 Jan 14 12:57 sys/src/cmd/aux/antiword/wordwin.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2501 Jan 14 12:57 sys/src/cmd/aux/antiword/xmalloc.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:1,6
/*
* xmalloc.c
- * Copyright (C) 1998-2003 A.J. van Os
+ * Copyright (C) 1998-2005 A.J. van Os
*
* Description:
* Extended malloc and friends
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:10,22 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:10,21
#include <string.h>
#include "antiword.h"
- #if !defined(DMALLOC)
- static char *szWarning =
+ static char *szMessage =
"Memory allocation failed, unable to continue";
- #if defined(__dos)
- static char *szDosWarning =
+ #if defined(__dos) && !defined(__DJGPP__)
+ static char *szDosMessage =
"DOS can't allocate this kind of memory, unable to continue";
- #endif /* __dos */
+ #endif /* __dos && !__DJGPP__ */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:30,41 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:29,44
{
void *pvTmp;
+ TRACE_MSG("xmalloc");
+
if (tSize == 0) {
tSize = 1;
}
pvTmp = malloc(tSize);
if (pvTmp == NULL) {
- werr(1, szWarning);
+ DBG_MSG("xmalloc returned NULL");
+ DBG_DEC(tSize);
+ werr(1, szMessage);
}
return pvTmp;
} /* end of xmalloc */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:50,60 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:53,66
{
void *pvTmp;
- #if defined(__dos)
+ TRACE_MSG("xcalloc");
+
+ #if defined(__dos) && !defined(__DJGPP__)
if ((ULONG)tNmemb * (ULONG)tSize > 0xffffUL) {
- werr(1, szDosWarning);
+ DBG_DEC((ULONG)tNmemb * (ULONG)tSize);
+ werr(1, szDosMessage);
}
- #endif /* __dos */
+ #endif /* __dos && !__DJGPP__ */
if (tNmemb == 0 || tSize == 0) {
tNmemb = 1;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:62,68 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:68,75
}
pvTmp = calloc(tNmemb, tSize);
if (pvTmp == NULL) {
- werr(1, szWarning);
+ DBG_MSG("xcalloc returned NULL");
+ werr(1, szMessage);
}
return pvTmp;
} /* end of xcalloc */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:78,86 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:85,96
{
void *pvTmp;
+ TRACE_MSG("xrealloc");
+
pvTmp = realloc(pvArg, tSize);
if (pvTmp == NULL) {
- werr(1, szWarning);
+ DBG_MSG("realloc returned NULL");
+ werr(1, szMessage);
}
return pvTmp;
} /* end of xrealloc */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:99,109 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:109,120
{
char *szTmp;
+ TRACE_MSG("xstrdup");
+
szTmp = xmalloc(strlen(szArg) + 1);
strcpy(szTmp, szArg);
return szTmp;
} /* end of xstrdup */
- #endif /* !DMALLOC */
/*
* xfree - Deallocates dynamic memory
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xmalloc.c:116,121 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xmalloc.c:127,134
void *
xfree(void *pvArg)
{
+ TRACE_MSG("xfree");
+
if (pvArg != NULL) {
free(pvArg);
}
[jmk] --rw-rw-r-- M 499692 jmk sys 2501 Jan 14 12:57 sys/src/cmd/aux/antiword/xmalloc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 34115 Jan 14 12:57 sys/src/cmd/aux/antiword/xml.c
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:1,6 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1,6
/*
* xml.c
- * Copyright (C) 2002,2003 A.J. van Os; Released under GNU GPL
+ * Copyright (C) 2002-2005 A.J. van Os; Released under GNU GPL
*
* Description:
* Functions to deal with the XML/DocBook format
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:19,24 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:19,30
#define vStackTrace() /* EMPTY */
#endif /* DEBUG */
+ /* The character set */
+ static encoding_type eEncoding = encoding_neutral;
+ /* Word version */
+ static int iWordVersion = -1;
+ /* Special treatment for files from Word 4/5/6 on an Apple Macintosh */
+ static BOOL bOldMacFile = FALSE;
/* Text is emphasised */
static BOOL bEmphasisOpen = FALSE;
/* Text is superscript */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:29,34 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:35,42
static BOOL bTitleOpen = FALSE;
/* Table is open */
static BOOL bTableOpen = FALSE;
+ /* Footnote is open */
+ static BOOL bFootnoteOpen = FALSE;
/* Current paragraph level */
static UINT uiParagraphLevel = 0;
/* Current list level */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:41,46 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:49,56
static BOOL bEmptyHeaderLevel = TRUE;
/* Number of columns in the current table */
static int iTableColumnsCurrent = 0;
+ /* Footnote number */
+ static UINT uiFootnoteNumber = 0;
/* Constants for the stack */
#define INITIAL_STACK_SIZE 10
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:68,132 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:78,150
#define TAG_EMPHASIS (UCHAR)9
#define TAG_ENTRY (UCHAR)10
#define TAG_FILENAME (UCHAR)11
- #define TAG_INFORMALTABLE (UCHAR)12
- #define TAG_ITEMIZEDLIST (UCHAR)13
- #define TAG_LISTITEM (UCHAR)14
- #define TAG_ORDEREDLIST (UCHAR)15
- #define TAG_PARA (UCHAR)16
- #define TAG_ROW (UCHAR)17
- #define TAG_SECT1 (UCHAR)18
- #define TAG_SECT2 (UCHAR)19
- #define TAG_SECT3 (UCHAR)20
- #define TAG_SECT4 (UCHAR)21
- #define TAG_SECT5 (UCHAR)22
- #define TAG_SUBSCRIPT (UCHAR)23
- #define TAG_SUBTITLE (UCHAR)24
- #define TAG_SUPERSCRIPT (UCHAR)25
- #define TAG_SURNAME (UCHAR)26
- #define TAG_TBODY (UCHAR)27
- #define TAG_TGROUP (UCHAR)28
- #define TAG_TITLE (UCHAR)29
+ #define TAG_FOOTNOTE (UCHAR)12
+ #define TAG_INFORMALTABLE (UCHAR)13
+ #define TAG_ITEMIZEDLIST (UCHAR)14
+ #define TAG_LISTITEM (UCHAR)15
+ #define TAG_ORDEREDLIST (UCHAR)16
+ #define TAG_PARA (UCHAR)17
+ #define TAG_ROW (UCHAR)18
+ #define TAG_SECT1 (UCHAR)19
+ #define TAG_SECT2 (UCHAR)20
+ #define TAG_SECT3 (UCHAR)21
+ #define TAG_SECT4 (UCHAR)22
+ #define TAG_SECT5 (UCHAR)23
+ #define TAG_SUBSCRIPT (UCHAR)24
+ #define TAG_SUBTITLE (UCHAR)25
+ #define TAG_SUPERSCRIPT (UCHAR)26
+ #define TAG_SURNAME (UCHAR)27
+ #define TAG_TBODY (UCHAR)28
+ #define TAG_TGROUP (UCHAR)29
+ #define TAG_TITLE (UCHAR)30
typedef struct docbooktags_tag {
UCHAR ucTagnumber;
char szTagname[15];
- BOOL bAddNewline;
+ BOOL bAddNewlineStart;
+ BOOL bAddNewlineEnd;
} docbooktags_type;
static const docbooktags_type atDocBookTags[] = {
- { TAG_NOTAG, "!ERROR!", TRUE },
- { TAG_AUTHOR, "author", TRUE },
- { TAG_BEGINPAGE, "beginpage", TRUE },
- { TAG_BOOK, "book", TRUE },
- { TAG_BOOKINFO, "bookinfo", TRUE },
- { TAG_CHAPTER, "chapter", TRUE },
- { TAG_COLSPEC, "colspec", TRUE },
- { TAG_CORPNAME, "corpname", FALSE },
- { TAG_DATE, "date", FALSE },
- { TAG_EMPHASIS, "emphasis", FALSE },
- { TAG_ENTRY, "entry", TRUE },
- { TAG_FILENAME, "filename", FALSE },
- { TAG_INFORMALTABLE, "informaltable",TRUE },
- { TAG_ITEMIZEDLIST, "itemizedlist", TRUE },
- { TAG_LISTITEM, "listitem", TRUE },
- { TAG_ORDEREDLIST, "orderedlist", TRUE },
- { TAG_PARA, "para", TRUE },
- { TAG_ROW, "row", TRUE },
- { TAG_SECT1, "sect1", TRUE },
- { TAG_SECT2, "sect2", TRUE },
- { TAG_SECT3, "sect3", TRUE },
- { TAG_SECT4, "sect4", TRUE },
- { TAG_SECT5, "sect5", TRUE },
- { TAG_SUBSCRIPT, "subscript", FALSE },
- { TAG_SUBTITLE, "subtitle", FALSE },
- { TAG_SUPERSCRIPT, "superscript", FALSE },
- { TAG_SURNAME, "surname", FALSE },
- { TAG_TBODY, "tbody", TRUE },
- { TAG_TGROUP, "tgroup", TRUE },
- { TAG_TITLE, "title", FALSE },
+ { TAG_NOTAG, "!ERROR!", TRUE, TRUE },
+ { TAG_AUTHOR, "author", TRUE, TRUE },
+ { TAG_BEGINPAGE, "beginpage", TRUE, TRUE },
+ { TAG_BOOK, "book", TRUE, TRUE },
+ { TAG_BOOKINFO, "bookinfo", TRUE, TRUE },
+ { TAG_CHAPTER, "chapter", TRUE, TRUE },
+ { TAG_COLSPEC, "colspec", TRUE, TRUE },
+ { TAG_CORPNAME, "corpname", FALSE, FALSE },
+ { TAG_DATE, "date", FALSE, FALSE },
+ { TAG_EMPHASIS, "emphasis", FALSE, FALSE },
+ { TAG_ENTRY, "entry", TRUE, TRUE },
+ { TAG_FILENAME, "filename", FALSE, FALSE },
+ { TAG_FOOTNOTE, "footnote", FALSE, FALSE },
+ { TAG_INFORMALTABLE, "informaltable",TRUE, TRUE },
+ { TAG_ITEMIZEDLIST, "itemizedlist", TRUE, TRUE },
+ { TAG_LISTITEM, "listitem", TRUE, TRUE },
+ { TAG_ORDEREDLIST, "orderedlist", TRUE, TRUE },
+ { TAG_PARA, "para", TRUE, TRUE },
+ { TAG_ROW, "row", TRUE, TRUE },
+ { TAG_SECT1, "sect1", TRUE, TRUE },
+ { TAG_SECT2, "sect2", TRUE, TRUE },
+ { TAG_SECT3, "sect3", TRUE, TRUE },
+ { TAG_SECT4, "sect4", TRUE, TRUE },
+ { TAG_SECT5, "sect5", TRUE, TRUE },
+ { TAG_SUBSCRIPT, "subscript", FALSE, FALSE },
+ { TAG_SUBTITLE, "subtitle", FALSE, FALSE },
+ { TAG_SUPERSCRIPT, "superscript", FALSE, FALSE },
+ { TAG_SURNAME, "surname", FALSE, FALSE },
+ { TAG_TBODY, "tbody", TRUE, TRUE },
+ { TAG_TGROUP, "tgroup", TRUE, TRUE },
+ { TAG_TITLE, "title", FALSE, FALSE },
};
+ static void vAddStartTag(diagram_type *, UCHAR, const char *);
+ static void vAddEndTag(diagram_type *, UCHAR);
+ static void vAddCombinedTag(diagram_type *, UCHAR, const char *);
+ static void vPrintChar(diagram_type *, char);
+
#if defined(DEBUG)
/*
* vCheckTagTable - check the tag table
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:238,297 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:256,386
} /* end of vPrintLevel */
/*
+ * vPrintFootnote - print a footnote
+ */
+ static void
+ vPrintFootnote(diagram_type *pDiag, UINT uiFootnoteIndex)
+ {
+ const char *szText, *pcTmp;
+ BOOL bSuScript;
+ UCHAR ucTopTag;
+
+ TRACE_MSG("vPrintFootnote");
+
+ szText = szGetFootnootText(uiFootnoteIndex);
+
+ if (szText == NULL) {
+ szText = "";
+ }
+
+ /* Remove the subscript/superscript (if any) */
+ ucTopTag = ucReadStack();
+ bSuScript = ucTopTag == TAG_SUBSCRIPT || ucTopTag == TAG_SUPERSCRIPT;
+ if (bSuScript) {
+ vAddEndTag(pDiag, ucTopTag);
+ }
+
+ /* Start a footnote */
+ vAddStartTag(pDiag, TAG_FOOTNOTE, NULL);
+ vAddStartTag(pDiag, TAG_PARA, NULL);
+
+ /* Print a footnote */
+ for (pcTmp = szText; *pcTmp != '\0'; pcTmp++) {
+ if (*pcTmp == PAR_END) {
+ if (*(pcTmp + 1) != PAR_END && *(pcTmp + 1) != '\0') {
+ /* PAR_END is not empty and not last */
+ vAddEndTag(pDiag, TAG_PARA);
+ vAddStartTag(pDiag, TAG_PARA, NULL);
+ }
+ } else {
+ vPrintChar(pDiag, *pcTmp);
+ }
+ }
+
+ /* End a footnote */
+ vAddEndTag(pDiag, TAG_PARA);
+ vAddEndTag(pDiag, TAG_FOOTNOTE);
+
+ /* Repair the subscript/superscript (if any) */
+ if (bSuScript) {
+ vAddStartTag(pDiag, ucTopTag, NULL);
+ }
+ } /* end of vPrintFootnote */
+
+ /*
* vPrintChar - print a character with XML encoding
*/
static void
- vPrintChar(FILE *pOutFile, char cChar)
+ vPrintChar(diagram_type *pDiag, char cChar)
{
+ fail(pDiag == NULL);
+ fail(pDiag->pOutFile == NULL);
+
switch (cChar) {
+ case FOOTNOTE_OR_ENDNOTE:
+ uiFootnoteNumber++;
+ vPrintFootnote(pDiag, uiFootnoteNumber - 1);
+ break;
case '<':
- fprintf(pOutFile, "%s", "<");
+ fprintf(pDiag->pOutFile, "%s", "<");
break;
case '>':
- fprintf(pOutFile, "%s", ">");
+ fprintf(pDiag->pOutFile, "%s", ">");
break;
case '&':
- fprintf(pOutFile, "%s", "&");
+ fprintf(pDiag->pOutFile, "%s", "&");
break;
default:
- (void)putc(cChar, pOutFile);
+ (void)putc(cChar, pDiag->pOutFile);
break;
}
} /* end of vPrintChar */
/*
- * vPrintSpecial
+ * vPrintSpecialChar - convert and print a character
*/
static void
- vPrintSpecial(FILE *pOutFile, const char *szString,
- int iWordVersion, encoding_type eEncoding)
+ vPrintSpecialChar(diagram_type *pDiag, USHORT usChar)
{
- ULONG ulChar;
- size_t tLen, tIndex;
+ ULONG ulChar;
+ size_t tLen, tIndex;
+ char szResult[4];
+
+ fail(pDiag == NULL);
+ fail(pDiag->pOutFile == NULL);
+ fail(iWordVersion < 0);
+ fail(eEncoding == encoding_neutral);
+
+ ulChar = ulTranslateCharacters(usChar, 0, iWordVersion,
+ conversion_xml, eEncoding, bOldMacFile);
+ tLen = tUcs2Utf8(ulChar, szResult, sizeof(szResult));
+ if (tLen == 1) {
+ vPrintChar(pDiag, szResult[0]);
+ } else {
+ for (tIndex = 0; tIndex < tLen; tIndex++) {
+ (void)putc(szResult[tIndex], pDiag->pOutFile);
+ }
+ }
+ } /* end of vPrintSpecialChar */
+
+ /*
+ * vPrintSpecialString - convert and print a string
+ */
+ static void
+ vPrintSpecialString(diagram_type *pDiag, const char *szString)
+ {
int iIndex;
- BOOL bOldMacFile;
USHORT usChar;
- char szResult[4];
- fail(pOutFile == NULL);
+ fail(pDiag == NULL);
+ fail(pDiag->pOutFile == NULL);
fail(szString == NULL);
- bOldMacFile = bIsOldMacFile();
-
for (iIndex = 0; szString[iIndex] != '\0'; iIndex++) {
usChar = (USHORT)(UCHAR)szString[iIndex];
- ulChar = ulTranslateCharacters(usChar, 0, iWordVersion,
- conversion_xml, eEncoding, bOldMacFile);
- tLen = tUcs2Utf8(ulChar, szResult, sizeof(szResult));
- if (tLen == 1) {
- vPrintChar(pOutFile, szResult[0]);
- } else {
- for (tIndex = 0; tIndex < tLen; tIndex++) {
- (void)putc(szResult[tIndex], pOutFile);
- }
- }
+ vPrintSpecialChar(pDiag, usChar);
}
- } /* end of vPrintSpecial */
+ } /* end of vPrintSpecialString */
/*
* vAddStartTag - add the specified start tag to the file
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:303,309 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:392,398
fail(pDiag->pOutFile == NULL);
fail((size_t)ucTag >= elementsof(atDocBookTags));
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineStart) {
fprintf(pDiag->pOutFile, "\n");
vPrintLevel(pDiag->pOutFile);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:316,322 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:405,411
atDocBookTags[(UINT)ucTag].szTagname, szAttribute);
}
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineEnd) {
fprintf(pDiag->pOutFile, "\n");
pDiag->lXleft = 0;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:353,360 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:442,452
fail(uiParagraphLevel != 0);
bTitleOpen = TRUE;
break;
+ case TAG_FOOTNOTE:
+ bFootnoteOpen = TRUE;
+ break;
case TAG_PARA:
- fail(bTitleOpen);
+ fail(bTitleOpen && !bFootnoteOpen);
uiParagraphLevel++;
bEmptyHeaderLevel = FALSE;
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:415,421 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:507,513
werr(1, "Impossible tag sequence, unable to continue");
}
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineEnd) {
fprintf(pDiag->pOutFile, "\n");
vPrintLevel(pDiag->pOutFile);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:422,428 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:514,520
fprintf(pDiag->pOutFile, "</%s>", atDocBookTags[(UINT)ucTag].szTagname);
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineStart) {
fprintf(pDiag->pOutFile, "\n");
pDiag->lXleft = 0;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:450,455 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:542,550
case TAG_TITLE:
bTitleOpen = FALSE;
break;
+ case TAG_FOOTNOTE:
+ bFootnoteOpen = FALSE;
+ break;
case TAG_PARA:
uiParagraphLevel--;
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:499,505 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:594,600
fail(pDiag->pOutFile == NULL);
fail((size_t)ucTag >= elementsof(atDocBookTags));
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineStart) {
fprintf(pDiag->pOutFile, "\n");
vPrintLevel(pDiag->pOutFile);
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:512,518 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:607,613
atDocBookTags[(UINT)ucTag].szTagname, szAttribute);
}
- if (atDocBookTags[(UINT)ucTag].bAddNewline) {
+ if (atDocBookTags[(UINT)ucTag].bAddNewlineStart) {
fprintf(pDiag->pOutFile, "\n");
pDiag->lXleft = 0;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:568,574 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:663,669
* vCreateBookIntro - create title and bookinfo
*/
void
- vCreateBookIntro(diagram_type *pDiag, int iWordVersion, encoding_type eEncoding)
+ vCreateBookIntro(diagram_type *pDiag, int iVersion)
{
const char *szTitle, *szSubject, *szAuthor;
const char *szLastSaveDtm, *szCompany;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:577,585 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:672,682
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
- fail(iWordVersion < 0);
+ fail(iVersion < 0);
fail(eEncoding == encoding_neutral);
+ iWordVersion = iVersion;
+ bOldMacFile = bIsOldMacFile();
szTitle = szGetTitle();
szSubject = szGetSubject();
szAuthor = szGetAuthor();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:598,605 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:695,701
/* Book title */
if (szTitle != NULL && szTitle[0] != '\0') {
vAddStartTag(pDiag, TAG_TITLE, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szTitle, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szTitle);
vAddEndTag(pDiag, TAG_TITLE);
}
/* Bookinfo */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:611,644 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:707,735
vAddStartTag(pDiag, TAG_BOOKINFO, NULL);
if (szTitle != NULL && szTitle[0] != '\0') {
vAddStartTag(pDiag, TAG_TITLE, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szTitle, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szTitle);
vAddEndTag(pDiag, TAG_TITLE);
}
if (szSubject != NULL && szSubject[0] != '\0') {
vAddStartTag(pDiag, TAG_SUBTITLE, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szSubject, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szSubject);
vAddEndTag(pDiag, TAG_SUBTITLE);
}
if (szAuthor != NULL && szAuthor[0] != '\0') {
vAddStartTag(pDiag, TAG_AUTHOR, NULL);
vAddStartTag(pDiag, TAG_SURNAME, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szAuthor, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szAuthor);
vAddEndTag(pDiag, TAG_SURNAME);
vAddEndTag(pDiag, TAG_AUTHOR);
}
if (szLastSaveDtm != NULL && szLastSaveDtm[0] != '\0') {
vAddStartTag(pDiag, TAG_DATE, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szLastSaveDtm, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szLastSaveDtm);
vAddEndTag(pDiag, TAG_DATE);
}
if (szCompany != NULL && szCompany[0] != '\0') {
vAddStartTag(pDiag, TAG_CORPNAME, NULL);
- vPrintSpecial(pDiag->pOutFile,
- szCompany, iWordVersion, eEncoding);
+ vPrintSpecialString(pDiag, szCompany);
vAddEndTag(pDiag, TAG_CORPNAME);
}
vAddEndTag(pDiag, TAG_BOOKINFO);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:649,659 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:740,751
* vPrologueXML - perform the XML initialization
*/
void
- vPrologueXML(diagram_type *pDiag)
+ vPrologueXML(diagram_type *pDiag, const options_type *pOptions)
{
fail(pDiag == NULL);
fail(pDiag->pOutFile == NULL);
+ fail(pOptions == NULL);
#if defined(DEBUG)
vCheckTagTable();
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:660,670 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:752,764
#endif /* DEBUG */
/* Set global variables to their start values */
+ eEncoding = pOptions->eEncoding;
bEmphasisOpen = FALSE;
bSuperscriptOpen = FALSE;
bSubscriptOpen = FALSE;
bTitleOpen = FALSE;
bTableOpen = FALSE;
+ bFootnoteOpen = FALSE;
uiParagraphLevel = 0;
uiListLevel = 0;
bEmptyListLevel = TRUE;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:671,676 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:765,771
usHeaderLevelCurrent = 0;
bEmptyHeaderLevel = TRUE;
iTableColumnsCurrent = 0;
+ uiFootnoteNumber = 0;
pDiag->lXleft = 0;
pDiag->lYtop = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:707,712 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:802,808
vPrintXML(diagram_type *pDiag, const char *szString, size_t tStringLength,
USHORT usFontstyle)
{
+ const char *szAttr;
int iCount;
size_t tNextFree;
BOOL bNotReady, bEmphasisNew, bSuperscriptNew, bSubscriptNew;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:718,729 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:814,833
return;
}
- bEmphasisNew = bIsBold(usFontstyle) ||
- bIsItalic(usFontstyle) ||
- bIsUnderline(usFontstyle) ||
- bIsStrike(usFontstyle);
- bSuperscriptNew = bIsSuperscript(usFontstyle);
- bSubscriptNew = bIsSubscript(usFontstyle);
+ if (tStringLength == 1 && szString[0] == FOOTNOTE_OR_ENDNOTE) {
+ /* Don't do anything special for just a single footnote */
+ bEmphasisNew = FALSE;
+ bSuperscriptNew = FALSE;
+ bSubscriptNew = FALSE;
+ } else {
+ /* Situation normal */
+ bEmphasisNew = bIsBold(usFontstyle) ||
+ bIsItalic(usFontstyle) ||
+ bIsUnderline(usFontstyle) ||
+ bIsStrike(usFontstyle);
+ bSuperscriptNew = bIsSuperscript(usFontstyle);
+ bSubscriptNew = bIsSubscript(usFontstyle);
+ }
/* End what has to be ended (or more to keep the stack happy) */
tNextFree = 0;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:770,776 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:874,891
/* Start what has to be started */
if (bEmphasisNew && !bEmphasisOpen) {
- vAddStartTag(pDiag, TAG_EMPHASIS, NULL);
+ if (bIsBold(usFontstyle)) {
+ szAttr = "role='bold'";
+ } else if (bIsItalic(usFontstyle)) {
+ szAttr = NULL;
+ } else if (bIsUnderline(usFontstyle)) {
+ szAttr = "role='underline'";
+ } else if (bIsStrike(usFontstyle)) {
+ szAttr = "role='strikethrough'";
+ } else {
+ szAttr = NULL;
+ }
+ vAddStartTag(pDiag, TAG_EMPHASIS, szAttr);
}
if (bSuperscriptNew && !bSuperscriptOpen) {
vAddStartTag(pDiag, TAG_SUPERSCRIPT, NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:781,787 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:896,902
/* The print the string */
for (iCount = 0; iCount < (int)tStringLength; iCount++) {
- vPrintChar(pDiag->pOutFile, szString[iCount]);
+ vPrintChar(pDiag, szString[iCount]);
}
} /* end of vPrintXML */
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:793,802 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:908,918
{
fail(pDiag == NULL);
+ /*
if (uiParagraphLevel != 0) {
- vEndOfParagraphXML(pDiag, INT_MAX);
- vStartOfParagraphXML(pDiag, INT_MAX);
+ We need something like HTML's <BR> tag
}
+ */
} /* end of vMove2NextLineXML */
/*
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:826,837 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:942,953
* in paragraphs. Other paragraph levels result from DocBooks special needs.
*/
void
- vStartOfParagraphXML(diagram_type *pDiag, int iMaxLevel)
+ vStartOfParagraphXML(diagram_type *pDiag, UINT uiMaxLevel)
{
fail(pDiag == NULL);
- if (uiParagraphLevel >= (UINT)iMaxLevel || bTitleOpen) {
- /* To Word titles are just paragraphs */
+ if (uiParagraphLevel >= uiMaxLevel || bTitleOpen) {
+ /* In Word a title is just a paragraph */
return;
}
if (uiListLevel != 0 && bEmptyListLevel) {
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:852,864 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:968,980
* Only for paragraph level one and for titles
*/
void
- vEndOfParagraphXML(diagram_type *pDiag, int iMaxLevel)
+ vEndOfParagraphXML(diagram_type *pDiag, UINT uiMaxLevel)
{
UCHAR ucTopTag;
fail(pDiag == NULL);
- if (uiParagraphLevel > (UINT)iMaxLevel) {
+ if (uiParagraphLevel > uiMaxLevel) {
DBG_DEC(uiParagraphLevel);
return;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:918,925 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1034,1041
if (bTitleOpen) {
/* A beginpage is not allowed when in a title */
/* So start a new paragraph */
- vEndOfParagraphXML(pDiag, INT_MAX);
- vStartOfParagraphXML(pDiag, INT_MAX);
+ vEndOfParagraphXML(pDiag, UINT_MAX);
+ vStartOfParagraphXML(pDiag, UINT_MAX);
return;
}
vAddCombinedTag(pDiag, TAG_BEGINPAGE, NULL);
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:1060,1065 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1176,1184
switch (ucNFC) {
case LIST_ARABIC_NUM:
case LIST_ORDINAL_NUM:
+ case LIST_NUMBER_TXT:
+ case LIST_ORDINAL_TXT:
+ case LIST_OUTLINE_NUM:
ucTag = TAG_ORDEREDLIST;
szAttr = "numeration='arabic'";
break;
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:1080,1085 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1199,1205
szAttr = "numeration='loweralpha'";
break;
case LIST_SPECIAL:
+ case LIST_SPECIAL2:
case LIST_BULLETS:
ucTag = TAG_ITEMIZEDLIST;
szAttr = "mark='bullet'";
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:1087,1093 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1207,1213
default:
ucTag = TAG_ORDEREDLIST;
szAttr = "numeration='arabic'";
- DBG_DEC(ucNFC);
+ DBG_HEX(ucNFC);
DBG_FIXME();
break;
}
/n/sourcesdump/2006/0114/plan9/sys/src/cmd/aux/antiword/xml.c:1310,1316 -
/n/sourcesdump/2006/0115/plan9/sys/src/cmd/aux/antiword/xml.c:1430,1436
vAddStartTag(pDiag, TAG_ENTRY, NULL);
tStringLength = strlen(aszColTxt[iIndex]);
for (tCount = 0; tCount < tStringLength; tCount++) {
- vPrintChar(pDiag->pOutFile, aszColTxt[iIndex][tCount]);
+ vPrintChar(pDiag, aszColTxt[iIndex][tCount]);
}
vAddEndTag(pDiag, TAG_ENTRY);
}
[jmk] --rw-rw-r-- M 499692 jmk sys 34115 Jan 14 12:57 sys/src/cmd/aux/antiword/xml.c
[jmk] --rw-rw-r-- M 499692 jmk sys 27773 Jan 14 12:57 sys/src/cmd/aux/antiword/antiword.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3910 Jan 14 12:57 sys/src/cmd/aux/antiword/asc85enc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22483 Jan 14 12:57 sys/src/cmd/aux/antiword/blocklist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22456 Jan 14 12:57 sys/src/cmd/aux/antiword/chartrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8933 Jan 14 12:57 sys/src/cmd/aux/antiword/datalist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3153 Jan 14 12:57 sys/src/cmd/aux/antiword/debug.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2724 Jan 14 12:57 sys/src/cmd/aux/antiword/depot.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12146 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 14486 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1610 Jan 14 12:57 sys/src/cmd/aux/antiword/doclist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26682 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1012 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.h
[jmk] --rw-rw-r-- M 499692 jmk sys 10881 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12215 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.h
[jmk] --rw-rw-r-- M 499692 jmk sys 613 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.c
[jmk] --rw-rw-r-- M 499692 jmk sys 401 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3797 Jan 14 12:57 sys/src/cmd/aux/antiword/finddata.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7321 Jan 14 12:57 sys/src/cmd/aux/antiword/findtext.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3691 Jan 14 12:57 sys/src/cmd/aux/antiword/fmt_text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 126349 Jan 14 12:57 sys/src/cmd/aux/antiword/fontinfo.h
[jmk] --rw-rw-r-- M 499692 jmk sys 4339 Jan 14 12:57 sys/src/cmd/aux/antiword/fontlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 27501 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5843 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_r.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7542 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9314 Jan 14 12:57 sys/src/cmd/aux/antiword/hdrftrlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2504 Jan 14 12:57 sys/src/cmd/aux/antiword/icons.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26488 Jan 14 12:57 sys/src/cmd/aux/antiword/imgexam.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1703 Jan 14 12:57 sys/src/cmd/aux/antiword/imgtrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1482 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2159 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7855 Jan 14 12:57 sys/src/cmd/aux/antiword/listlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 13140 Jan 14 12:57 sys/src/cmd/aux/antiword/main_ros.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8171 Jan 14 12:57 sys/src/cmd/aux/antiword/main_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 21663 Jan 14 12:57 sys/src/cmd/aux/antiword/misc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1007 Jan 14 12:57 sys/src/cmd/aux/antiword/mkfile
[jmk] --rw-rw-r-- M 499692 jmk sys 24813 Jan 14 12:57 sys/src/cmd/aux/antiword/notes.c
[jmk] --rw-rw-r-- M 499692 jmk sys 24707 Jan 14 12:57 sys/src/cmd/aux/antiword/options.c
[jmk] --rw-rw-r-- M 499692 jmk sys 19601 Jan 14 12:57 sys/src/cmd/aux/antiword/out2window.c
[jmk] --rw-rw-r-- M 499692 jmk sys 10773 Jan 14 12:57 sys/src/cmd/aux/antiword/output.c
[jmk] --rw-rw-r-- M 499692 jmk sys 31661 Jan 14 12:57 sys/src/cmd/aux/antiword/pdf.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2512 Jan 14 12:57 sys/src/cmd/aux/antiword/pictlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 4032 Jan 14 12:57 sys/src/cmd/aux/antiword/png2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 572 Jan 14 12:57 sys/src/cmd/aux/antiword/png2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 33883 Jan 14 12:57 sys/src/cmd/aux/antiword/postscript.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12600 Jan 14 12:57 sys/src/cmd/aux/antiword/prop0.c
[jmk] --rw-rw-r-- M 499692 jmk sys 28409 Jan 14 12:57 sys/src/cmd/aux/antiword/prop2.c
[jmk] --rw-rw-r-- M 499692 jmk sys 30660 Jan 14 12:57 sys/src/cmd/aux/antiword/prop6.c
[jmk] --rw-rw-r-- M 499692 jmk sys 40247 Jan 14 12:57 sys/src/cmd/aux/antiword/prop8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5989 Jan 14 12:57 sys/src/cmd/aux/antiword/properties.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2427 Jan 14 12:57 sys/src/cmd/aux/antiword/propmod.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5517 Jan 14 12:57 sys/src/cmd/aux/antiword/riscos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2801 Jan 14 12:57 sys/src/cmd/aux/antiword/rowlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9851 Jan 14 12:57 sys/src/cmd/aux/antiword/saveas.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3785 Jan 14 12:57 sys/src/cmd/aux/antiword/sectlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3416 Jan 14 12:57 sys/src/cmd/aux/antiword/startup.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12060 Jan 14 12:57 sys/src/cmd/aux/antiword/stylelist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22114 Jan 14 12:57 sys/src/cmd/aux/antiword/stylesheet.c
[jmk] --rw-rw-r-- M 499692 jmk sys 23077 Jan 14 12:57 sys/src/cmd/aux/antiword/summary.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5122 Jan 14 12:57 sys/src/cmd/aux/antiword/tabstop.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3878 Jan 14 12:57 sys/src/cmd/aux/antiword/text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 818 Jan 14 12:57 sys/src/cmd/aux/antiword/unix.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7564 Jan 14 12:57 sys/src/cmd/aux/antiword/utf8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 800 Jan 14 12:57 sys/src/cmd/aux/antiword/version.h
[jmk] --rw-rw-r-- M 499692 jmk sys 39070 Jan 14 12:57 sys/src/cmd/aux/antiword/word2text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 11743 Jan 14 12:57 sys/src/cmd/aux/antiword/wordconst.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2790 Jan 14 12:57 sys/src/cmd/aux/antiword/worddos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7910 Jan 14 12:57 sys/src/cmd/aux/antiword/wordlib.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2658 Jan 14 12:57 sys/src/cmd/aux/antiword/wordmac.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22402 Jan 14 12:57 sys/src/cmd/aux/antiword/wordole.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8285 Jan 14 12:57 sys/src/cmd/aux/antiword/wordtypes.h
[jmk] --rw-rw-r-- M 499692 jmk sys 5584 Jan 14 12:57 sys/src/cmd/aux/antiword/wordwin.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2501 Jan 14 12:57 sys/src/cmd/aux/antiword/xmalloc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 34115 Jan 14 12:57 sys/src/cmd/aux/antiword/xml.c
[jmk] --rw-rw-r-- M 499692 jmk sys 27773 Jan 14 12:57 sys/src/cmd/aux/antiword/antiword.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3910 Jan 14 12:57 sys/src/cmd/aux/antiword/asc85enc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22483 Jan 14 12:57 sys/src/cmd/aux/antiword/blocklist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22456 Jan 14 12:57 sys/src/cmd/aux/antiword/chartrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8933 Jan 14 12:57 sys/src/cmd/aux/antiword/datalist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3153 Jan 14 12:57 sys/src/cmd/aux/antiword/debug.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2724 Jan 14 12:57 sys/src/cmd/aux/antiword/depot.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12146 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 14486 Jan 14 12:57 sys/src/cmd/aux/antiword/dib2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1610 Jan 14 12:57 sys/src/cmd/aux/antiword/doclist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26682 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1012 Jan 14 12:57 sys/src/cmd/aux/antiword/draw.h
[jmk] --rw-rw-r-- M 499692 jmk sys 10881 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12215 Jan 14 12:57 sys/src/cmd/aux/antiword/drawfile.h
[jmk] --rw-rw-r-- M 499692 jmk sys 613 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.c
[jmk] --rw-rw-r-- M 499692 jmk sys 401 Jan 14 12:57 sys/src/cmd/aux/antiword/fail.h
[jmk] --rw-rw-r-- M 499692 jmk sys 3797 Jan 14 12:57 sys/src/cmd/aux/antiword/finddata.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7321 Jan 14 12:57 sys/src/cmd/aux/antiword/findtext.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3691 Jan 14 12:57 sys/src/cmd/aux/antiword/fmt_text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 126349 Jan 14 12:57 sys/src/cmd/aux/antiword/fontinfo.h
[jmk] --rw-rw-r-- M 499692 jmk sys 4339 Jan 14 12:57 sys/src/cmd/aux/antiword/fontlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 27501 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5843 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_r.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7542 Jan 14 12:57 sys/src/cmd/aux/antiword/fonts_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9314 Jan 14 12:57 sys/src/cmd/aux/antiword/hdrftrlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2504 Jan 14 12:57 sys/src/cmd/aux/antiword/icons.c
[jmk] --rw-rw-r-- M 499692 jmk sys 26488 Jan 14 12:57 sys/src/cmd/aux/antiword/imgexam.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1703 Jan 14 12:57 sys/src/cmd/aux/antiword/imgtrans.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1482 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2159 Jan 14 12:57 sys/src/cmd/aux/antiword/jpeg2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7855 Jan 14 12:57 sys/src/cmd/aux/antiword/listlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 13140 Jan 14 12:57 sys/src/cmd/aux/antiword/main_ros.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8171 Jan 14 12:57 sys/src/cmd/aux/antiword/main_u.c
[jmk] --rw-rw-r-- M 499692 jmk sys 21663 Jan 14 12:57 sys/src/cmd/aux/antiword/misc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 1007 Jan 14 12:57 sys/src/cmd/aux/antiword/mkfile
[jmk] --rw-rw-r-- M 499692 jmk sys 24813 Jan 14 12:57 sys/src/cmd/aux/antiword/notes.c
[jmk] --rw-rw-r-- M 499692 jmk sys 24707 Jan 14 12:57 sys/src/cmd/aux/antiword/options.c
[jmk] --rw-rw-r-- M 499692 jmk sys 19601 Jan 14 12:57 sys/src/cmd/aux/antiword/out2window.c
[jmk] --rw-rw-r-- M 499692 jmk sys 10773 Jan 14 12:57 sys/src/cmd/aux/antiword/output.c
[jmk] --rw-rw-r-- M 499692 jmk sys 31661 Jan 14 12:57 sys/src/cmd/aux/antiword/pdf.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2512 Jan 14 12:57 sys/src/cmd/aux/antiword/pictlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 4032 Jan 14 12:57 sys/src/cmd/aux/antiword/png2eps.c
[jmk] --rw-rw-r-- M 499692 jmk sys 572 Jan 14 12:57 sys/src/cmd/aux/antiword/png2sprt.c
[jmk] --rw-rw-r-- M 499692 jmk sys 33883 Jan 14 12:57 sys/src/cmd/aux/antiword/postscript.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12600 Jan 14 12:57 sys/src/cmd/aux/antiword/prop0.c
[jmk] --rw-rw-r-- M 499692 jmk sys 28409 Jan 14 12:57 sys/src/cmd/aux/antiword/prop2.c
[jmk] --rw-rw-r-- M 499692 jmk sys 30660 Jan 14 12:57 sys/src/cmd/aux/antiword/prop6.c
[jmk] --rw-rw-r-- M 499692 jmk sys 40247 Jan 14 12:57 sys/src/cmd/aux/antiword/prop8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5989 Jan 14 12:57 sys/src/cmd/aux/antiword/properties.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2427 Jan 14 12:57 sys/src/cmd/aux/antiword/propmod.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5517 Jan 14 12:57 sys/src/cmd/aux/antiword/riscos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2801 Jan 14 12:57 sys/src/cmd/aux/antiword/rowlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 9851 Jan 14 12:57 sys/src/cmd/aux/antiword/saveas.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3785 Jan 14 12:57 sys/src/cmd/aux/antiword/sectlist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3416 Jan 14 12:57 sys/src/cmd/aux/antiword/startup.c
[jmk] --rw-rw-r-- M 499692 jmk sys 12060 Jan 14 12:57 sys/src/cmd/aux/antiword/stylelist.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22114 Jan 14 12:57 sys/src/cmd/aux/antiword/stylesheet.c
[jmk] --rw-rw-r-- M 499692 jmk sys 23077 Jan 14 12:57 sys/src/cmd/aux/antiword/summary.c
[jmk] --rw-rw-r-- M 499692 jmk sys 5122 Jan 14 12:57 sys/src/cmd/aux/antiword/tabstop.c
[jmk] --rw-rw-r-- M 499692 jmk sys 3878 Jan 14 12:57 sys/src/cmd/aux/antiword/text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 818 Jan 14 12:57 sys/src/cmd/aux/antiword/unix.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7564 Jan 14 12:57 sys/src/cmd/aux/antiword/utf8.c
[jmk] --rw-rw-r-- M 499692 jmk sys 800 Jan 14 12:57 sys/src/cmd/aux/antiword/version.h
[jmk] --rw-rw-r-- M 499692 jmk sys 39070 Jan 14 12:57 sys/src/cmd/aux/antiword/word2text.c
[jmk] --rw-rw-r-- M 499692 jmk sys 11743 Jan 14 12:57 sys/src/cmd/aux/antiword/wordconst.h
[jmk] --rw-rw-r-- M 499692 jmk sys 2790 Jan 14 12:57 sys/src/cmd/aux/antiword/worddos.c
[jmk] --rw-rw-r-- M 499692 jmk sys 7910 Jan 14 12:57 sys/src/cmd/aux/antiword/wordlib.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2658 Jan 14 12:57 sys/src/cmd/aux/antiword/wordmac.c
[jmk] --rw-rw-r-- M 499692 jmk sys 22402 Jan 14 12:57 sys/src/cmd/aux/antiword/wordole.c
[jmk] --rw-rw-r-- M 499692 jmk sys 8285 Jan 14 12:57 sys/src/cmd/aux/antiword/wordtypes.h
[jmk] --rw-rw-r-- M 499692 jmk sys 5584 Jan 14 12:57 sys/src/cmd/aux/antiword/wordwin.c
[jmk] --rw-rw-r-- M 499692 jmk sys 2501 Jan 14 12:57 sys/src/cmd/aux/antiword/xmalloc.c
[jmk] --rw-rw-r-- M 499692 jmk sys 34115 Jan 14 12:57 sys/src/cmd/aux/antiword/xml.c
|