diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/depot_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/depot_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,130 @@ + + + + +TB9.2 Example Applications: examples/PIPS/antiword/src/depot.c Source File + + + + + +

examples/PIPS/antiword/src/depot.c

00001 /*
+00002  * depot.c
+00003  * Copyright (C) 1998-2002 A.J. van Os; Released under GPL
+00004  *
+00005  * Description:
+00006  * Functions to compute the depot offset
+00007  */
+00008 
+00009 #include "antiword.h"
+00010 
+00011 #define SIZE_RATIO      (BIG_BLOCK_SIZE/SMALL_BLOCK_SIZE)
+00012 
+00013 static ULONG    *aulSmallBlockList = NULL;
+00014 static size_t   tSmallBlockListLen = 0;
+00015 
+00016 
+00017 /*
+00018  * vDestroySmallBlockList - destroy the small block list
+00019  */
+00020 void
+00021 vDestroySmallBlockList(void)
+00022 {
+00023         DBG_MSG("vDestroySmallBlockList");
+00024 
+00025         aulSmallBlockList = xfree(aulSmallBlockList);
+00026         tSmallBlockListLen = 0;
+00027 } /* end of vDestroySmalBlockList */
+00028 
+00029 /*
+00030  * vCreateSmallBlockList - create the small block list
+00031  *
+00032  * returns: TRUE when successful, otherwise FALSE
+00033  */
+00034 BOOL
+00035 bCreateSmallBlockList(ULONG ulStartblock, const ULONG *aulBBD, size_t tBBDLen)
+00036 {
+00037         ULONG   ulTmp;
+00038         size_t  tSize;
+00039         int     iIndex;
+00040 
+00041         fail(aulSmallBlockList != NULL);
+00042         fail(tSmallBlockListLen != 0);
+00043         fail(ulStartblock > MAX_BLOCKNUMBER && ulStartblock != END_OF_CHAIN);
+00044         fail(aulBBD == NULL);
+00045         fail(tBBDLen == 0);
+00046 
+00047         /* Find the length of the small block list */
+00048         for (tSmallBlockListLen = 0, ulTmp = ulStartblock;
+00049              tSmallBlockListLen < tBBDLen && ulTmp != END_OF_CHAIN;
+00050              tSmallBlockListLen++, ulTmp = aulBBD[ulTmp]) {
+00051                 if (ulTmp >= (ULONG)tBBDLen) {
+00052                         DBG_DEC(ulTmp);
+00053                         DBG_DEC(tBBDLen);
+00054                         werr(1, "The Big Block Depot is damaged");
+00055                 }
+00056         }
+00057         DBG_DEC(tSmallBlockListLen);
+00058 
+00059         if (tSmallBlockListLen == 0) {
+00060                 /* There is no small block list */
+00061                 fail(ulStartblock != END_OF_CHAIN);
+00062                 aulSmallBlockList = NULL;
+00063                 return TRUE;
+00064         }
+00065 
+00066         /* Create the small block list */
+00067         tSize = tSmallBlockListLen * sizeof(ULONG);
+00068         aulSmallBlockList = xmalloc(tSize);
+00069         for (iIndex = 0, ulTmp = ulStartblock;
+00070              iIndex < (int)tBBDLen && ulTmp != END_OF_CHAIN;
+00071              iIndex++, ulTmp = aulBBD[ulTmp]) {
+00072                 if (ulTmp >= (ULONG)tBBDLen) {
+00073                         DBG_DEC(ulTmp);
+00074                         DBG_DEC(tBBDLen);
+00075                         werr(1, "The Big Block Depot is damaged");
+00076                 }
+00077                 aulSmallBlockList[iIndex] = ulTmp;
+00078                 NO_DBG_DEC(aulSmallBlockList[iIndex]);
+00079         }
+00080         return TRUE;
+00081 } /* end of bCreateSmallBlockList */
+00082 
+00083 /*
+00084  * ulDepotOffset - get the depot offset the block list
+00085  */
+00086 ULONG
+00087 ulDepotOffset(ULONG ulIndex, size_t tBlockSize)
+00088 {
+00089         ULONG   ulTmp;
+00090         size_t  tTmp;
+00091 
+00092         fail(ulIndex >= ULONG_MAX / BIG_BLOCK_SIZE);
+00093 
+00094         switch (tBlockSize) {
+00095         case BIG_BLOCK_SIZE:
+00096                 return (ulIndex + 1) * BIG_BLOCK_SIZE;
+00097         case SMALL_BLOCK_SIZE:
+00098                 tTmp = (size_t)(ulIndex / SIZE_RATIO);
+00099                 ulTmp = ulIndex % SIZE_RATIO;
+00100                 if (aulSmallBlockList == NULL ||
+00101                     tTmp >= tSmallBlockListLen) {
+00102                         DBG_HEX(aulSmallBlockList);
+00103                         DBG_DEC(tSmallBlockListLen);
+00104                         DBG_DEC(tTmp);
+00105                         return 0;
+00106                 }
+00107                 return ((aulSmallBlockList[tTmp] + 1) * SIZE_RATIO +
+00108                                 ulTmp) * SMALL_BLOCK_SIZE;
+00109         default:
+00110                 DBG_DEC(tBlockSize);
+00111                 DBG_FIXME();
+00112                 return 0;
+00113         }
+00114 } /* end of ulDepotOffset */
+
+
Generated by  + +doxygen 1.6.2
+ +