Ignore:
Timestamp:
Mar 27, 2000, 5:09:22 PM (25 years ago)
Author:
cbratschi
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/shell32/iconcache.cpp

    r3243 r3250  
    1 /* $Id: iconcache.cpp,v 1.4 2000-03-26 16:34:41 cbratschi Exp $ */
     1/* $Id: iconcache.cpp,v 1.5 2000-03-27 15:09:20 cbratschi Exp $ */
    22
    33/*
     
    135135     size = ne_header.rname_tab_offset - ne_header.resource_tab_offset;
    136136
    137 //@@@PH no NE support
    138 #if 1
    139137     if( size > sizeof(NE_TYPEINFO) )
    140138     { pTypeInfo = (BYTE*)HeapAlloc( GetProcessHeap(), 0, size);
     
    147145       }
    148146     }
    149 #endif
    150147
    151148     *retptr = pTypeInfo;
     
    157154 *       SHELL_LoadResource
    158155 */
    159 //@@@PH no NE support
    160 #if 1
    161156static BYTE * SHELL_LoadResource( HFILE hFile, NE_NAMEINFO* pNInfo, WORD sizeShift, ULONG *uSize)
    162157{  BYTE*  ptr;
     
    173168   return 0;
    174169}
    175 #endif
    176170
    177171/*************************************************************************
     
    256250 */
    257251HGLOBAL WINAPI ICO_ExtractIconEx(LPCSTR lpszExeFileName, HICON * RetPtr, UINT nIconIndex, UINT n, UINT cxDesired, UINT cyDesired )
    258 // @@@PH turned off
    259 #if 0
    260 {
    261   dprintf (("SHELL32: ICO_ExtractIconEx not implemented.\n"));
    262   return 0;
    263 }
    264 #else
    265252{  HGLOBAL  hRet = 0;
    266253   LPBYTE      pData;
     
    268255   DWORD    sig;
    269256   HFILE    hFile = OpenFile( lpszExeFileName, &ofs, OF_READ );
    270    UINT16      iconDirCount = 0,iconCount = 0;
     257   UINT      iconDirCount = 0,iconCount = 0;
    271258   LPBYTE      peimage;
    272259   HANDLE      fmapping;
     
    280267   sig = SHELL_GetResourceTable(hFile,&pData);
    281268
    282 //@@@PH no NE support
    283 #if 1
    284 /* ico file */
     269   /* ico file */
    285270   if( sig==IMAGE_OS2_SIGNATURE || sig==1 ) /* .ICO file */
    286271   { BYTE      *pCIDir = 0;
     
    318303       }
    319304       else if( nIconIndex < iconDirCount )
    320        { UINT16   i, icon;
     305       { UINT   i, icon;
    321306         if( n > iconDirCount - nIconIndex )
    322307           n = iconDirCount - nIconIndex;
     
    357342       HeapFree( GetProcessHeap(), 0, pData);
    358343   }
    359 /* end ico file */
    360 #endif
    361 
    362 /* exe/dll */
     344   /* end ico file */
     345
     346   /* exe/dll */
    363347   if( sig == IMAGE_NT_SIGNATURE)
    364348   { LPBYTE    idata,igdata;
     
    514498   return hRet;
    515499}
    516 #endif
    517500
    518501/********************** THE ICON CACHE ********************************/
     
    948931
    949932/**********************************************************************
    950  *          GetResDirEntryW
    951  *
    952  *      Helper function - goes down one level of PE resource tree
     933 *          GetResDirEntryW
     934 *
     935 *      Helper function - goes down one level of PE resource tree
    953936 *
    954937 */
    955938PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY resdirptr,
    956                                            LPCWSTR name,DWORD root,
    957                                            BOOL allowdefault)
     939                                           LPCWSTR name,DWORD root,
     940                                           BOOL allowdefault)
    958941{
    959942    int entrynum;
     
    962945
    963946    if (HIWORD(name)) {
    964         if (name[0]=='#') {
    965                 char    buf[10];
    966 
    967                 lstrcpynWtoA(buf,name+1,10);
    968                 return GetResDirEntryW(resdirptr,(LPCWSTR)atoi(buf),root,allowdefault);
    969         }
    970         entryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) (
    971                         (BYTE *) resdirptr +
     947        if (name[0]=='#') {
     948                char    buf[10];
     949
     950                lstrcpynWtoA(buf,name+1,10);
     951                return GetResDirEntryW(resdirptr,(LPCWSTR)atoi(buf),root,allowdefault);
     952        }
     953        entryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) (
     954                        (BYTE *) resdirptr +
    972955                        sizeof(IMAGE_RESOURCE_DIRECTORY));
    973         namelen = lstrlenW(name);
    974         for (entrynum = 0; entrynum < resdirptr->NumberOfNamedEntries; entrynum++)
    975         {
    976                 PIMAGE_RESOURCE_DIR_STRING_U str =
    977                 (PIMAGE_RESOURCE_DIR_STRING_U) (root +
    978                         entryTable[entrynum].u1.s.NameOffset);
    979                 if(namelen != str->Length)
    980                         continue;
    981                 if(lstrncmpiW(name,str->NameString,str->Length)==0)
    982                         return (PIMAGE_RESOURCE_DIRECTORY) (
    983                                 root +
    984                                 entryTable[entrynum].u2.s.OffsetToDirectory);
    985         }
    986         return NULL;
     956        namelen = lstrlenW(name);
     957        for (entrynum = 0; entrynum < resdirptr->NumberOfNamedEntries; entrynum++)
     958        {
     959                PIMAGE_RESOURCE_DIR_STRING_U str =
     960                (PIMAGE_RESOURCE_DIR_STRING_U) (root +
     961                        entryTable[entrynum].u1.s.NameOffset);
     962                if(namelen != str->Length)
     963                        continue;
     964                if(lstrncmpiW(name,str->NameString,str->Length)==0)
     965                        return (PIMAGE_RESOURCE_DIRECTORY) (
     966                                root +
     967                                entryTable[entrynum].u2.s.OffsetToDirectory);
     968        }
     969        return NULL;
    987970    } else {
    988         entryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) (
    989                         (BYTE *) resdirptr +
     971        entryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) (
     972                        (BYTE *) resdirptr +
    990973                        sizeof(IMAGE_RESOURCE_DIRECTORY) +
    991                         resdirptr->NumberOfNamedEntries * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
    992         for (entrynum = 0; entrynum < resdirptr->NumberOfIdEntries; entrynum++)
    993             if ((DWORD)entryTable[entrynum].u1.Name == (DWORD)name)
    994                 return (PIMAGE_RESOURCE_DIRECTORY) (
    995                         root +
    996                         entryTable[entrynum].u2.s.OffsetToDirectory);
    997         /* just use first entry if no default can be found */
    998         if (allowdefault && !name && resdirptr->NumberOfIdEntries)
    999                 return (PIMAGE_RESOURCE_DIRECTORY) (
    1000                         root +
    1001                         entryTable[0].u2.s.OffsetToDirectory);
    1002         return NULL;
     974                        resdirptr->NumberOfNamedEntries * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
     975        for (entrynum = 0; entrynum < resdirptr->NumberOfIdEntries; entrynum++)
     976            if ((DWORD)entryTable[entrynum].u1.Name == (DWORD)name)
     977                return (PIMAGE_RESOURCE_DIRECTORY) (
     978                        root +
     979                        entryTable[entrynum].u2.s.OffsetToDirectory);
     980        /* just use first entry if no default can be found */
     981        if (allowdefault && !name && resdirptr->NumberOfIdEntries)
     982                return (PIMAGE_RESOURCE_DIRECTORY) (
     983                        root +
     984                        entryTable[0].u2.s.OffsetToDirectory);
     985        return NULL;
    1003986    }
    1004987}
Note: See TracChangeset for help on using the changeset viewer.