diff -r 59758314f811 -r d4524d6a4472 Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/worddos_8c_source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/worddos_8c_source.html Fri Jun 11 15:24:34 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ - - -
- -00001 /* -00002 * worddos.c -00003 * Copyright (C) 2002-2005 A.J. van Os; Released under GNU GPL -00004 * -00005 * Description: -00006 * Deal with the DOS internals of a MS Word file -00007 */ -00008 -00009 #include "antiword.h" -00010 -00011 -00012 /* -00013 * bGetDocumentText - make a list of the text blocks of a Word document -00014 * -00015 * Return TRUE when succesful, otherwise FALSE -00016 */ -00017 static BOOL -00018 bGetDocumentText(FILE *pFile, long lFilesize, const UCHAR *aucHeader) -00019 { -00020 text_block_type tTextBlock; -00021 ULONG ulTextLen; -00022 BOOL bFastSaved; -00023 UCHAR ucDocStatus, ucVersion; -00024 -00025 fail(pFile == NULL); -00026 fail(lFilesize < 128); -00027 fail(aucHeader == NULL); -00028 -00029 /* Get the status flags from the header */ -00030 ucDocStatus = ucGetByte(0x75, aucHeader); -00031 DBG_HEX(ucDocStatus); -00032 bFastSaved = (ucDocStatus & BIT(1)) != 0; -00033 DBG_MSG_C(bFastSaved, "This document is Fast Saved"); -00034 ucVersion = ucGetByte(0x74, aucHeader); -00035 DBG_DEC(ucVersion); -00036 DBG_MSG_C(ucVersion == 0, "Written by Word 4.0 or earlier"); -00037 DBG_MSG_C(ucVersion == 3, "Word 5.0 format, but not written by Word"); -00038 DBG_MSG_C(ucVersion == 4, "Written by Word 5.x"); -00039 if (bFastSaved) { -00040 werr(0, "Word for DOS: autosave documents are not supported"); -00041 return FALSE; -00042 } -00043 -00044 /* Get length information */ -00045 ulTextLen = ulGetLong(0x0e, aucHeader); -00046 DBG_HEX(ulTextLen); -00047 ulTextLen -= 128; -00048 DBG_DEC(ulTextLen); -00049 tTextBlock.ulFileOffset = 128; -00050 tTextBlock.ulCharPos = 128; -00051 tTextBlock.ulLength = ulTextLen; -00052 tTextBlock.bUsesUnicode = FALSE; -00053 tTextBlock.usPropMod = IGNORE_PROPMOD; -00054 if (!bAdd2TextBlockList(&tTextBlock)) { -00055 DBG_HEX(tTextBlock.ulFileOffset); -00056 DBG_HEX(tTextBlock.ulCharPos); -00057 DBG_DEC(tTextBlock.ulLength); -00058 DBG_DEC(tTextBlock.bUsesUnicode); -00059 DBG_DEC(tTextBlock.usPropMod); -00060 return FALSE; -00061 } -00062 return TRUE; -00063 } /* end of bGetDocumentText */ -00064 -00065 /* -00066 * iInitDocumentDOS - initialize an DOS document -00067 * -00068 * Returns the version of Word that made the document or -1 -00069 */ -00070 int -00071 iInitDocumentDOS(FILE *pFile, long lFilesize) -00072 { -00073 int iWordVersion; -00074 BOOL bSuccess; -00075 USHORT usIdent; -00076 UCHAR aucHeader[128]; -00077 -00078 fail(pFile == NULL); -00079 -00080 if (lFilesize < 128) { -00081 return -1; -00082 } -00083 -00084 /* Read the headerblock */ -00085 if (!bReadBytes(aucHeader, 128, 0x00, pFile)) { -00086 return -1; -00087 } -00088 /* Get the "magic number" from the header */ -00089 usIdent = usGetWord(0x00, aucHeader); -00090 DBG_HEX(usIdent); -00091 fail(usIdent != 0xbe31); /* Word for DOS */ -00092 iWordVersion = iGetVersionNumber(aucHeader); -00093 if (iWordVersion != 0) { -00094 werr(0, "This file is not from 'Word for DOS'."); -00095 return -1; -00096 } -00097 bSuccess = bGetDocumentText(pFile, lFilesize, aucHeader); -00098 if (bSuccess) { -00099 vGetPropertyInfo(pFile, NULL, -00100 NULL, 0, NULL, 0, -00101 aucHeader, iWordVersion); -00102 vSetDefaultTabWidth(pFile, NULL, -00103 NULL, 0, NULL, 0, -00104 aucHeader, iWordVersion); -00105 vGetNotesInfo(pFile, NULL, -00106 NULL, 0, NULL, 0, -00107 aucHeader, iWordVersion); -00108 } -00109 return bSuccess ? iWordVersion : -1; -00110 } /* end of iInitDocumentDOS */ -