Plan 9 from Bell Labs’s /usr/web/sources/contrib/uriel/changes/2006/0114/1

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


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(&regs, 0, sizeof(regs));
	- 	regs.r[0] = 17;
	- 	regs.r[1] = (int)szFilename;
	- 	e = _kernel_swi(OS_File, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 23;
	- 	regs.r[1] = (int)szFilename;
	- 	e = _kernel_swi(OS_File, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 18;
	- 	regs.r[1] = (int)szFilename;
	- 	regs.r[2] = iFiletype;
	- 	e = _kernel_swi(OS_File, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 17;
	- 	regs.r[1] = (int)szDirectory;
	- 	e = _kernel_swi(OS_File, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 8;
	- 	regs.r[1] = (int)szDirectory;
	- 	regs.r[4] = 0;
	- 	e = _kernel_swi(OS_File, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 71;
	- 	regs.r[1] = 127;
	- 	e = _kernel_swi(OS_Byte, &regs, &regs);
	+ 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 129;
	- 	regs.r[1] = 0;
	- 	regs.r[2] = 0xff;
	- 	e = _kernel_swi(OS_Byte, &regs, &regs);
	+ 	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 *)&regs, 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, &regs, &regs);
	- 	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 *)&regs, 0, sizeof(regs));
	- 	regs.r[0] = 0x00;
	- 	regs.r[1] = (int)pucJpeg;
	- 	regs.r[2] = (int)tJpegSize;
	- 	e = _kernel_swi(JPEG_Info, &regs, &regs);
	+ 	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 *)&regs, 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, &regs, &regs);
	- 		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", "&lt;");
	+ 		fprintf(pDiag->pOutFile, "%s", "&lt;");
	  		break;
	  	case '>':
	- 		fprintf(pOutFile, "%s", "&gt;");
	+ 		fprintf(pDiag->pOutFile, "%s", "&gt;");
	  		break;
	  	case '&':
	- 		fprintf(pOutFile, "%s", "&amp;");
	+ 		fprintf(pDiag->pOutFile, "%s", "&amp;");
	  		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


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.