- Main Page
- Data Structures
- Files

- File List

# E:/DevIL/src-IL/src/il_size.c

    00001 //-----------------------------------------------------------------------------
    00002 //
    00003 // ImageLib Sources
    00004 // Copyright (C) 2000-2009 by Denton Woods
    00005 // Last modified: 01/30/2009
    00006 //
    00007 // Filename: src-IL/src/il_size.c
    00008 //
    00009 // Description: Determines the size of output files for lump writing.
    00010 //
    00011 //-----------------------------------------------------------------------------
    00012
    00013 #include "il_internal.h"
    00014
    00015
    00016 ILuint iTargaSize(void);
    00017
    00018
    00019 ILuint CurPos;  // Fake "file" pointer.
    00020 ILuint MaxPos;
    00021
    00022
    00024 ILint ILAPIENTRY iSizeSeek(ILint Offset, ILuint Mode)
    00025 {
    00026         switch (Mode)
    00027         {
    00028                 case IL_SEEK_SET:
    00029                         CurPos = Offset;
    00030                         if (CurPos > MaxPos)
    00031                                 MaxPos = CurPos;
    00032                         break;
    00033
    00034                 case IL_SEEK_CUR:
    00035                         CurPos = CurPos + Offset;
    00036                         break;
    00037
    00038                 case IL_SEEK_END:
    00039                         CurPos = MaxPos + Offset;  // Offset should be negative in this case.
    00040                         break;
    00041
    00042                 default:
    00043                         ilSetError(IL_INTERNAL_ERROR);  // Should never happen!
    00044                         return -1;  // Error code
    00045         }
    00046
    00047         if (CurPos > MaxPos)
    00048                 MaxPos = CurPos;
    00049
    00050         return 0;  // Code for success
    00051 }
    00052
    00053 ILuint ILAPIENTRY iSizeTell(void)
    00054 {
    00055         return CurPos;
    00056 }
    00057
    00058 ILint ILAPIENTRY iSizePutc(ILubyte Char)
    00059 {
    00060         CurPos++;
    00061         if (CurPos > MaxPos)
    00062                 MaxPos = CurPos;
    00063         return Char;
    00064 }
    00065
    00066 ILint ILAPIENTRY iSizeWrite(const void *Buffer, ILuint Size, ILuint Number)
    00067 {
    00068         CurPos += Size * Number;
    00069         if (CurPos > MaxPos)
    00070                 MaxPos = CurPos;
    00071         return Number;
    00072 }
    00073
    00074
    00075 //@TODO: Do computations for uncompressed formats without going through the
    00076 //       whole writing process.
    00077
    00079 //  A return value of 0 is an error.
    00080 ILuint ilDetermineSize(ILenum Type)
    00081 {
    00082         MaxPos = CurPos = 0;
    00083         iSetOutputFake();  // Sets iputc, iwrite, etc. to functions above.
    00084
    00085         switch (Type)
    00086         {
    00087                 #ifndef IL_NO_BMP
    00088                 case IL_BMP:
    00089                         ilSaveBmpL(NULL, 0);
    00090                         break;
    00091                 #endif//IL_NO_BMP
    00092
    00093                 #ifndef IL_NO_DDS
    00094                 case IL_DDS:
    00095                         ilSaveDdsL(NULL, 0);
    00096                         break;
    00097                 #endif//IL_NO_DDS
    00098
    00099                 #ifndef IL_NO_EXR
    00100                 case IL_EXR:
    00101                         ilSaveExrL(NULL, 0);
    00102                         break;
    00103                 #endif//IL_NO_EXR
    00104
    00105                 #ifndef IL_NO_HDR
    00106                 case IL_HDR:
    00107                         ilSaveHdrL(NULL, 0);
    00108                         break;
    00109                 #endif//IL_NO_HDR
    00110
    00111                 #ifndef IL_NO_JP2
    00112                 case IL_JP2:
    00113                         ilSaveJp2L(NULL, 0);
    00114                         break;
    00115                 #endif//IL_NO_JP2
    00116
    00117                 #ifndef IL_NO_JPG
    00118                 case IL_JPG:
    00119                         ilSaveJpegL(NULL, 0);
    00120                         break;
    00121                 #endif//IL_NO_JPG
    00122
    00123                 #ifndef IL_NO_PCX
    00124                 case IL_PCX:
    00125                         ilSavePcxL(NULL, 0);
    00126                         break;
    00127                 #endif//IL_NO_PCX
    00128
    00129                 #ifndef IL_NO_PNG
    00130                 case IL_PNG:
    00131                         ilSavePngL(NULL, 0);
    00132                         break;
    00133                 #endif//IL_NO_PNG
    00134
    00135                 #ifndef IL_NO_PNM
    00136                 case IL_PNM:
    00137                         ilSavePnmL(NULL, 0);
    00138                         break;
    00139                 #endif//IL_NO_PNM
    00140
    00141                 #ifndef IL_NO_PSD
    00142                 case IL_PSD:
    00143                         ilSavePsdL(NULL, 0);
    00144                         break;
    00145                 #endif//IL_NO_PSD
    00146
    00147                 #ifndef IL_NO_RAW
    00148                 case IL_RAW:
    00149                         ilSaveRawL(NULL, 0);
    00150                         break;
    00151                 #endif//IL_NO_RAW
    00152
    00153                 #ifndef IL_NO_SGI
    00154                 case IL_SGI:
    00155                         ilSaveSgiL(NULL, 0);
    00156                         break;
    00157                 #endif//IL_NO_SGI
    00158
    00159                 #ifndef IL_NO_TGA
    00160                 case IL_TGA:
    00161                         //ilSaveTargaL(NULL, 0);
    00162                         return iTargaSize();
    00163                         break;
    00164                 #endif//IL_NO_TGA
    00165
    00166                 #ifndef IL_NO_TIF
    00167                 case IL_TIF:
    00168                         ilSaveTiffL(NULL, 0);
    00169                         break;
    00170                 #endif//IL_NO_TIF
    00171
    00172                 #ifndef IL_NO_WBMP
    00173                 case IL_WBMP:
    00174                         ilSaveWbmpL(NULL, 0);
    00175                         break;
    00176                 #endif//IL_NO_WBMP
    00177
    00178                 default:
    00179                         // 0 is an error for this.
    00180                         ilSetError(IL_INVALID_ENUM);
    00181                         return 0;
    00182         }
    00183
    00184         return MaxPos;
    00185 }