Changeset 3243 for trunk/src/shell32


Ignore:
Timestamp:
Mar 26, 2000, 6:34:57 PM (26 years ago)
Author:
cbratschi
Message:

merged with Corel WINE 20000324

Location:
trunk/src/shell32
Files:
1 added
45 edited

Legend:

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

    r3183 r3243  
    1 /* $Id: brsfolder.cpp,v 1.3 2000-03-21 17:33:21 cbratschi Exp $ */
     1/* $Id: brsfolder.cpp,v 1.4 2000-03-26 16:34:38 cbratschi Exp $ */
    22
    33/*
     
    88 * Project Odin Software License can be found in LICENSE.TXT
    99 *
     10 * Corel WINE 20000324 level
    1011 */
    1112
     
    5556ODINDEBUGCHANNEL(shell32-brsfolder)
    5657
     58#define         BRS_SPACE    40
     59#define         BRS_MARGIN    6
    5760#define         IDD_TREEVIEW 99
    5861
     
    282285}
    283286
     287/*************************************************************************
     288 *     ResizeControls (temporary solution and will be removed
     289 *                    if a horizontal scroll bar added to a tree control)
     290 */
     291
     292void ResizeConrols(HWND hWnd, int Cx, int Cy)
     293{
     294        POINT pt;
     295        HWND  hBtn;
     296        RECT  rcCtl;
     297
     298        // Move the treeView control
     299        if(hwndTreeView)
     300        {
     301                GetWindowRect(hwndTreeView, &rcCtl);
     302                pt.y = rcCtl.top;
     303                pt.x = rcCtl.left;
     304                ScreenToClient(hWnd, &pt);
     305                MoveWindow(hwndTreeView, pt.x, pt.y, Cx - pt.x - BRS_MARGIN, Cy - BRS_SPACE, TRUE);
     306        }
     307       
     308        // Move the OK button
     309        hBtn = GetDlgItem(hWnd, IDOK);
     310        if(hBtn)
     311        {
     312                GetWindowRect(hBtn, &rcCtl);
     313                pt.y = Cy - (BRS_MARGIN + (rcCtl.bottom - rcCtl.top));
     314                pt.x = Cx - 2 * (2 * BRS_MARGIN + (rcCtl.right - rcCtl.left));
     315                MoveWindow(hBtn, pt.x, pt.y, rcCtl.right - rcCtl.left, rcCtl.bottom - rcCtl.top, TRUE);
     316        }
     317
     318        // MOve the cancel button
     319        hBtn = GetDlgItem(hWnd, IDCANCEL);
     320        if(hBtn)
     321        {
     322                pt.x = Cx - (2 * BRS_MARGIN + (rcCtl.right - rcCtl.left));
     323                MoveWindow(hBtn, pt.x, pt.y, rcCtl.right - rcCtl.left, rcCtl.bottom - rcCtl.top, TRUE);
     324        }
     325}
    284326
    285327/*************************************************************************
     
    305347
    306348            InitializeTreeView ( hWnd);
     349            {
     350              RECT rcDlg;
     351
     352              GetClientRect(hWnd, &rcDlg);
     353              ResizeConrols(hWnd, rcDlg.right, rcDlg.bottom);
     354            }
    307355            return 1;
     356
     357          case WM_SIZE:
     358            ResizeConrols(hWnd, LOWORD(lParam), HIWORD(lParam));
     359            break;
    308360
    309361          case WM_NOTIFY:
  • trunk/src/shell32/classes.cpp

    r1543 r3243  
    1 /* $Id: classes.cpp,v 1.2 1999-11-02 18:50:15 phaller Exp $ */
     1/* $Id: classes.cpp,v 1.3 2000-03-26 16:34:39 cbratschi Exp $ */
    22
    33/*
     
    88 * Project Odin Software License can be found in LICENSE.TXT
    99 *
     10 * Corel WINE 20000324 level
    1011 */
    1112
     
    193194            ret = TRUE;
    194195          }
    195           else if (IsEqualIID(riid, &IID_MyComputer))
     196          else if (IsEqualIID(riid, &CLSID_MyComputer))
    196197          {
    197198            LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen);
     
    209210*
    210211* gets the folder attributes of a class
     212*
     213* FIXME
     214*       verify the defaultvalue for *szDest
    211215*/
    212216BOOL HCR_GetFolderAttributes (REFIID riid, LPDWORD szDest)
     
    225229        TRACE("%s\n",xriid );
    226230
     231        if (!szDest) return FALSE;
     232        *szDest = SFGAO_FOLDER|SFGAO_FILESYSTEM;
     233
    227234        strcat (xriid, "\\ShellFolder");
    228235
  • trunk/src/shell32/contmenu.cpp

    r1214 r3243  
    1 /* $Id: contmenu.cpp,v 1.1 1999-10-09 11:13:18 sandervl Exp $ */
     1/* $Id: contmenu.cpp,v 1.2 2000-03-26 16:34:39 cbratschi Exp $ */
    22
    33/*
     
    77 * Project Odin Software License can be found in LICENSE.TXT
    88 *
     9 * Corel WINE 20000324 level
    910 */
    1011
     
    4041
    4142#include "shell32_main.h"
     43#include "shresdef.h"
    4244
    4345#include <heapstring.h>
     
    9092} IContextMenuImpl;
    9193
    92 
    9394//static struct ICOM_VTABLE(IContextMenu) cmvt;
    9495
     
    370371          { /* folder menu */
    371372            fExplore = uFlags & CMF_EXPLORE;
     373            /* patch, the MFS_GRAYED items are not implemented yet */
    372374            if(fExplore)
    373             { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED|MFS_DEFAULT);
     375            {
     376              _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_GRAYED|MFS_DEFAULT);
    374377              _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED);
    375378            }
    376379            else
    377380            { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED|MFS_DEFAULT);
    378               _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED);
     381              _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_GRAYED);
    379382            }
    380383
     
    408411        SHELLEXECUTEINFOA       sei;
    409412        int   i;
     413        int   iItem;
     414        int   hwndListView = GetDlgItem(lpcmi->hwnd,ID_LISTVIEW);
    410415
    411416  dprintf(("SHELL32:contmenu:IContextMenu_fnInvokeCommand(%08xh,%08xh,%08xh,%08xh)\n",
     
    450455
    451456          case IDM_RENAME:
    452             MessageBeep(MB_OK);
    453             /*handle rename for the view here*/
     457            iItem = ListView_GetNextItem(hwndListView,0, LVNI_FOCUSED);
     458            ListView_EditLabelA(hwndListView, iItem);
    454459            break;
    455460        }
  • trunk/src/shell32/dataobject.cpp

    r3217 r3243  
    1 /* $Id: dataobject.cpp,v 1.2 2000-03-24 17:17:26 cbratschi Exp $ */
     1/* $Id: dataobject.cpp,v 1.3 2000-03-26 16:34:40 cbratschi Exp $ */
    22
    33/*
     
    77 * Project Odin Software License can be found in LICENSE.TXT
    88 *
     9 * Corel WINE 20000324 level
    910 */
    1011
     
    809810        return (LPDATAOBJECT)dto;
    810811}
    811 
  • trunk/src/shell32/enumidlist.cpp

    r1214 r3243  
    1 /* $Id: enumidlist.cpp,v 1.1 1999-10-09 11:13:18 sandervl Exp $ */
     1/* $Id: enumidlist.cpp,v 1.2 2000-03-26 16:34:40 cbratschi Exp $ */
    22
    33/*
     
    77 * Project Odin Software License can be found in LICENSE.TXT
    88 *
     9 * Corel WINE 20000324 level
    910 */
    1011
    1112/*
    12  *      IEnumIDList
     13 *      IEnumIDList
    1314 *
    14  *      Copyright 1998  Juergen Schmied <juergen.schmied@metronet.de>
     15 *      Copyright 1998  Juergen Schmied <juergen.schmied@metronet.de>
    1516 */
    1617
     
    4748typedef struct tagENUMLIST
    4849{
    49         struct tagENUMLIST      *pNext;
    50         LPITEMIDLIST            pidl;
     50        struct tagENUMLIST      *pNext;
     51        LPITEMIDLIST            pidl;
    5152
    5253} ENUMLIST, *LPENUMLIST;
     
    5455typedef struct
    5556{
    56         ICOM_VTABLE(IEnumIDList)*       lpvtbl;
    57         DWORD                           ref;
    58         LPENUMLIST                      mpFirst;
    59         LPENUMLIST                      mpLast;
    60         LPENUMLIST                      mpCurrent;
     57        ICOM_VTABLE(IEnumIDList)*       lpvtbl;
     58        DWORD                           ref;
     59        LPENUMLIST                      mpFirst;
     60        LPENUMLIST                      mpLast;
     61        LPENUMLIST                      mpCurrent;
    6162
    6263} IEnumIDListImpl;
     
    6869 */
    6970static BOOL AddToEnumList(
    70         IEnumIDList * iface,
    71         LPITEMIDLIST pidl)
    72 {
    73         ICOM_THIS(IEnumIDListImpl,iface);
    74 
    75         LPENUMLIST  pNew;
    76 
    77         TRACE("(%p)->(pidl=%p)\n",This,pidl);
    78         pNew = (LPENUMLIST)SHAlloc(sizeof(ENUMLIST));
    79         if(pNew)
    80         {
    81           /*set the next pointer */
    82           pNew->pNext = NULL;
    83           pNew->pidl = pidl;
    84 
    85           /*is This the first item in the list? */
    86           if(!This->mpFirst)
    87           {
    88             This->mpFirst = pNew;
    89             This->mpCurrent = pNew;
    90           }
    91 
    92           if(This->mpLast)
    93           {
    94             /*add the new item to the end of the list */
    95             This->mpLast->pNext = pNew;
    96           }
    97        
    98           /*update the last item pointer */
    99           This->mpLast = pNew;
    100           TRACE("-- (%p)->(first=%p, last=%p)\n",This,This->mpFirst,This->mpLast);
    101           return TRUE;
    102         }
    103         return FALSE;
     71        IEnumIDList * iface,
     72        LPITEMIDLIST pidl)
     73{
     74        ICOM_THIS(IEnumIDListImpl,iface);
     75
     76        LPENUMLIST  pNew;
     77
     78        TRACE("(%p)->(pidl=%p)\n",This,pidl);
     79        pNew = (LPENUMLIST)SHAlloc(sizeof(ENUMLIST));
     80        if(pNew)
     81        {
     82          /*set the next pointer */
     83          pNew->pNext = NULL;
     84          pNew->pidl = pidl;
     85
     86          /*is This the first item in the list? */
     87          if(!This->mpFirst)
     88          {
     89            This->mpFirst = pNew;
     90            This->mpCurrent = pNew;
     91          }
     92
     93          if(This->mpLast)
     94          {
     95            /*add the new item to the end of the list */
     96            This->mpLast->pNext = pNew;
     97          }
     98
     99          /*update the last item pointer */
     100          This->mpLast = pNew;
     101          TRACE("-- (%p)->(first=%p, last=%p)\n",This,This->mpFirst,This->mpLast);
     102          return TRUE;
     103        }
     104        return FALSE;
    104105}
    105106
     
    108109 */
    109110static BOOL CreateFolderEnumList(
    110         IEnumIDList * iface,
    111         LPCSTR lpszPath,
    112         DWORD dwFlags)
    113 {
    114         ICOM_THIS(IEnumIDListImpl,iface);
    115 
    116         LPITEMIDLIST    pidl=NULL;
    117         WIN32_FIND_DATAA stffile;       
    118         HANDLE hFile;
    119         CHAR  szPath[MAX_PATH];
    120 
    121         TRACE("(%p)->(path=%s flags=0x%08lx) \n",This,debugstr_a(lpszPath),dwFlags);
    122 
    123         if(!lpszPath || !lpszPath[0]) return FALSE;
    124 
    125         strcpy(szPath, lpszPath);
    126         PathAddBackslashA(szPath);
    127         strcat(szPath,"*.*");
    128 
    129         /*enumerate the folders*/
    130         if(dwFlags & SHCONTF_FOLDERS)
    131         {
    132           TRACE("-- (%p)-> enumerate SHCONTF_FOLDERS of %s\n",This,debugstr_a(szPath));
    133           hFile = FindFirstFileA(szPath,&stffile);
    134           if ( hFile != INVALID_HANDLE_VALUE )
    135           {
    136             do
    137             {
    138               if ( (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp (stffile.cFileName, ".") && strcmp (stffile.cFileName, ".."))
    139               {
    140                 pidl = _ILCreateFolder (&stffile);
    141                 if(pidl && AddToEnumList((IEnumIDList*)This, pidl))
    142                 {
    143                   continue;
    144                 }
    145                 return FALSE;
    146               }
    147             } while( FindNextFileA(hFile,&stffile));
    148             FindClose (hFile);
    149           }
    150         }
    151 
    152         /*enumerate the non-folder items (values) */
    153         if(dwFlags & SHCONTF_NONFOLDERS)
    154         {
    155           TRACE("-- (%p)-> enumerate SHCONTF_NONFOLDERS of %s\n",This,debugstr_a(szPath));
    156           hFile = FindFirstFileA(szPath,&stffile);
    157           if ( hFile != INVALID_HANDLE_VALUE )
    158           {
    159             do
    160             {
    161               if (! (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
    162               {
    163                 pidl = _ILCreateValue(&stffile);
    164                 if(pidl && AddToEnumList((IEnumIDList*)This, pidl))
    165                 {
    166                   continue;
    167                 }
    168                 return FALSE;
    169               }
    170             } while( FindNextFileA(hFile,&stffile));
    171             FindClose (hFile);
    172           }
    173         }
    174         return TRUE;
     111        IEnumIDList * iface,
     112        LPCSTR lpszPath,
     113        DWORD dwFlags)
     114{
     115        ICOM_THIS(IEnumIDListImpl,iface);
     116
     117        LPITEMIDLIST    pidl=NULL;
     118        WIN32_FIND_DATAA stffile;
     119        HANDLE hFile;
     120        CHAR  szPath[MAX_PATH];
     121
     122        TRACE("(%p)->(path=%s flags=0x%08lx) \n",This,debugstr_a(lpszPath),dwFlags);
     123
     124        if(!lpszPath || !lpszPath[0]) return FALSE;
     125
     126        strcpy(szPath, lpszPath);
     127        PathAddBackslashA(szPath);
     128        strcat(szPath,"*.*");
     129
     130        /*enumerate the folders*/
     131        if(dwFlags & SHCONTF_FOLDERS)
     132        {
     133          TRACE("-- (%p)-> enumerate SHCONTF_FOLDERS of %s\n",This,debugstr_a(szPath));
     134          hFile = FindFirstFileA(szPath,&stffile);
     135          if ( hFile != INVALID_HANDLE_VALUE )
     136          {
     137            do
     138            {
     139              if ( (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp (stffile.cFileName, ".") && strcmp (stffile.cFileName, ".."))
     140              {
     141                pidl = _ILCreateFolder (&stffile);
     142                if(pidl && AddToEnumList((IEnumIDList*)This, pidl))
     143                {
     144                  continue;
     145                }
     146                return FALSE;
     147              }
     148            } while( FindNextFileA(hFile,&stffile));
     149            FindClose (hFile);
     150          }
     151        }
     152
     153        /*enumerate the non-folder items (values) */
     154        if(dwFlags & SHCONTF_NONFOLDERS)
     155        {
     156          TRACE("-- (%p)-> enumerate SHCONTF_NONFOLDERS of %s\n",This,debugstr_a(szPath));
     157          hFile = FindFirstFileA(szPath,&stffile);
     158          if ( hFile != INVALID_HANDLE_VALUE )
     159          {
     160            do
     161            {
     162              if (! (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
     163              {
     164                pidl = _ILCreateValue(&stffile);
     165                if(pidl && AddToEnumList((IEnumIDList*)This, pidl))
     166                {
     167                  continue;
     168                }
     169                return FALSE;
     170              }
     171            } while( FindNextFileA(hFile,&stffile));
     172            FindClose (hFile);
     173          }
     174        }
     175        return TRUE;
    175176}
    176177
     
    179180 */
    180181static BOOL CreateDesktopEnumList(
    181         IEnumIDList * iface,
    182         DWORD dwFlags)
    183 {
    184         ICOM_THIS(IEnumIDListImpl,iface);
    185 
    186         LPITEMIDLIST    pidl=NULL;
    187         HKEY hkey;
    188         char    szPath[MAX_PATH];
    189 
    190         TRACE("(%p)->(flags=0x%08lx) \n",This,dwFlags);
    191 
    192         /*enumerate the root folders */
    193         if(dwFlags & SHCONTF_FOLDERS)
    194         {
    195           /*create the pidl for This item */
    196           pidl = _ILCreateMyComputer();
    197           if(pidl)
    198           {
    199             if(!AddToEnumList((IEnumIDList*)This, pidl))
    200               return FALSE;
    201           }
    202 
    203           if (! RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\desktop\\NameSpace", 0, KEY_READ, &hkey))
    204           {
    205             char iid[50];
    206             int i=0;
    207 
    208             while (1)
    209             {
    210               DWORD size = sizeof (iid);
    211 
    212               if (ERROR_SUCCESS!=RegEnumKeyExA(hkey, i, iid, &size, 0, NULL, NULL, NULL))
    213                 break;
    214 
    215               pidl = _ILCreateSpecial(iid);
    216 
    217               if(pidl)
    218                 AddToEnumList((IEnumIDList*)This, pidl);
    219 
    220               i++;
    221             }
    222             RegCloseKey(hkey);
    223           }
    224         }
    225 
    226         /*enumerate the elements in %windir%\desktop */
    227         SHGetSpecialFolderPathA(0, szPath, CSIDL_DESKTOPDIRECTORY, FALSE);
    228         CreateFolderEnumList( (IEnumIDList*)This, szPath, dwFlags);
    229        
    230         return TRUE;
     182        IEnumIDList * iface,
     183        DWORD dwFlags)
     184{
     185        ICOM_THIS(IEnumIDListImpl,iface);
     186
     187        LPITEMIDLIST    pidl=NULL;
     188        HKEY hkey;
     189        char    szPath[MAX_PATH];
     190
     191        TRACE("(%p)->(flags=0x%08lx) \n",This,dwFlags);
     192
     193        /*enumerate the root folders */
     194        if(dwFlags & SHCONTF_FOLDERS)
     195        {
     196          /*create the pidl for This item */
     197          pidl = _ILCreateMyComputer();
     198          if(pidl)
     199          {
     200            if(!AddToEnumList((IEnumIDList*)This, pidl))
     201              return FALSE;
     202          }
     203
     204          if (! RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\desktop\\NameSpace", 0, KEY_READ, &hkey))
     205          {
     206            char iid[50];
     207            int i=0;
     208
     209            while (1)
     210            {
     211              DWORD size = sizeof (iid);
     212
     213              if (ERROR_SUCCESS!=RegEnumKeyExA(hkey, i, iid, &size, 0, NULL, NULL, NULL))
     214                break;
     215
     216              pidl = _ILCreateSpecial(iid);
     217
     218              if(pidl)
     219                AddToEnumList((IEnumIDList*)This, pidl);
     220
     221              i++;
     222            }
     223            RegCloseKey(hkey);
     224          }
     225        }
     226#ifndef SHELL_NO_DESKTOP
     227        /*enumerate the elements in %windir%\desktop */
     228        SHGetSpecialFolderPathA(0, szPath, CSIDL_DESKTOPDIRECTORY, FALSE);
     229        CreateFolderEnumList( (IEnumIDList*)This, szPath, dwFlags);
     230#endif
     231        return TRUE;
    231232}
    232233
     
    235236 */
    236237static BOOL CreateMyCompEnumList(
    237         IEnumIDList * iface,
    238         DWORD dwFlags)
    239 {
    240         ICOM_THIS(IEnumIDListImpl,iface);
    241 
    242         LPITEMIDLIST    pidl=NULL;
    243         DWORD           dwDrivemap;
    244         CHAR            szDriveName[4];
    245         HKEY            hkey;
    246 
    247         TRACE("(%p)->(flags=0x%08lx) \n",This,dwFlags);
    248 
    249         /*enumerate the folders*/
    250         if(dwFlags & SHCONTF_FOLDERS)
    251         {
    252           dwDrivemap = GetLogicalDrives();
    253           strcpy (szDriveName,"A:\\");
    254           while (szDriveName[0]<='Z')
    255           {
    256             if(dwDrivemap & 0x00000001L)
    257             {
    258               pidl = _ILCreateDrive(szDriveName);
    259               if(pidl)
    260               {
    261                 if(!AddToEnumList((IEnumIDList*)This, pidl))
    262                   return FALSE;
    263               }
    264             }
    265             szDriveName[0]++;
    266             dwDrivemap = dwDrivemap >> 1;
    267           }
    268 
    269           TRACE("-- (%p)-> enumerate (mycomputer shell extensions)\n",This);
    270           if (! RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\mycomputer\\NameSpace", 0, KEY_READ, &hkey))
    271           {
    272             char iid[50];
    273             int i=0;
    274 
    275             while (1)
    276             {
    277               DWORD size = sizeof (iid);
    278 
    279               if (ERROR_SUCCESS!=RegEnumKeyExA(hkey, i, iid, &size, 0, NULL, NULL, NULL))
    280                 break;
    281 
    282               pidl = _ILCreateSpecial(iid);
    283 
    284               if(pidl)
    285                 AddToEnumList((IEnumIDList*)This, pidl);
    286 
    287               i++;
    288             }
    289             RegCloseKey(hkey);
    290           }
    291         }
    292         return TRUE;
     238        IEnumIDList * iface,
     239        DWORD dwFlags)
     240{
     241        ICOM_THIS(IEnumIDListImpl,iface);
     242
     243        LPITEMIDLIST    pidl=NULL;
     244        DWORD           dwDrivemap;
     245        CHAR            szDriveName[4];
     246        HKEY            hkey;
     247
     248        TRACE("(%p)->(flags=0x%08lx) \n",This,dwFlags);
     249
     250        /*enumerate the folders*/
     251        if(dwFlags & SHCONTF_FOLDERS)
     252        {
     253          dwDrivemap = GetLogicalDrives();
     254          strcpy (szDriveName,"A:\\");
     255          while (szDriveName[0]<='Z')
     256          {
     257            if(dwDrivemap & 0x00000001L)
     258            {
     259              pidl = _ILCreateDrive(szDriveName);
     260              if(pidl)
     261              {
     262                if(!AddToEnumList((IEnumIDList*)This, pidl))
     263                  return FALSE;
     264              }
     265            }
     266            szDriveName[0]++;
     267            dwDrivemap = dwDrivemap >> 1;
     268          }
     269
     270          TRACE("-- (%p)-> enumerate (mycomputer shell extensions)\n",This);
     271          if (! RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\mycomputer\\NameSpace", 0, KEY_READ, &hkey))
     272          {
     273            char iid[50];
     274            int i=0;
     275
     276            while (1)
     277            {
     278              DWORD size = sizeof (iid);
     279
     280              if (ERROR_SUCCESS!=RegEnumKeyExA(hkey, i, iid, &size, 0, NULL, NULL, NULL))
     281                break;
     282
     283              pidl = _ILCreateSpecial(iid);
     284
     285              if(pidl)
     286                AddToEnumList((IEnumIDList*)This, pidl);
     287
     288              i++;
     289            }
     290            RegCloseKey(hkey);
     291          }
     292        }
     293        return TRUE;
    293294}
    294295
     
    297298*/
    298299static BOOL DeleteList(
    299         IEnumIDList * iface)
    300 {
    301         ICOM_THIS(IEnumIDListImpl,iface);
    302 
    303         LPENUMLIST  pDelete;
    304 
    305         TRACE("(%p)->()\n",This);
    306        
    307         while(This->mpFirst)
    308         { pDelete = This->mpFirst;
    309           This->mpFirst = pDelete->pNext;
    310           SHFree(pDelete->pidl);
    311           SHFree(pDelete);
    312         }
    313         This->mpFirst = This->mpLast = This->mpCurrent = NULL;
    314         return TRUE;
     300        IEnumIDList * iface)
     301{
     302        ICOM_THIS(IEnumIDListImpl,iface);
     303
     304        LPENUMLIST  pDelete;
     305
     306        TRACE("(%p)->()\n",This);
     307
     308        while(This->mpFirst)
     309        { pDelete = This->mpFirst;
     310          This->mpFirst = pDelete->pNext;
     311          SHFree(pDelete->pidl);
     312          SHFree(pDelete);
     313        }
     314        This->mpFirst = This->mpLast = This->mpCurrent = NULL;
     315        return TRUE;
    315316}
    316317
     
    320321 */
    321322static HRESULT WINAPI IEnumIDList_fnQueryInterface(
    322         IEnumIDList * iface,
    323         REFIID riid,
    324         LPVOID *ppvObj)
    325 {
    326         ICOM_THIS(IEnumIDListImpl,iface);
    327 
    328         char    xriid[50];
    329         WINE_StringFromCLSID((LPCLSID)riid,xriid);
     323        IEnumIDList * iface,
     324        REFIID riid,
     325        LPVOID *ppvObj)
     326{
     327        ICOM_THIS(IEnumIDListImpl,iface);
     328
     329        char    xriid[50];
     330        WINE_StringFromCLSID((LPCLSID)riid,xriid);
    330331
    331332  dprintf(("SHELL32:enumidlist: IEnumIDList_fnQueryInterface((%p)->(\n\tIID:\t%s,%p)\n",
     
    334335           ppvObj));
    335336
    336         *ppvObj = NULL;
    337 
    338         if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
    339         { *ppvObj = This;
    340         }
    341         else if(IsEqualIID(riid, &IID_IEnumIDList))  /*IEnumIDList*/
    342         {    *ppvObj = (IEnumIDList*)This;
    343         }
    344 
    345         if(*ppvObj)
    346         { IEnumIDList_AddRef((IEnumIDList*)*ppvObj);
    347           TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
    348           return S_OK;
    349         }
    350        
    351         TRACE("-- Interface: E_NOINTERFACE\n");
    352         return E_NOINTERFACE;
     337        *ppvObj = NULL;
     338
     339        if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
     340        { *ppvObj = This;
     341        }
     342        else if(IsEqualIID(riid, &IID_IEnumIDList))  /*IEnumIDList*/
     343        {    *ppvObj = (IEnumIDList*)This;
     344        }
     345
     346        if(*ppvObj)
     347        { IEnumIDList_AddRef((IEnumIDList*)*ppvObj);
     348          TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
     349          return S_OK;
     350        }
     351
     352        TRACE("-- Interface: E_NOINTERFACE\n");
     353        return E_NOINTERFACE;
    353354}
    354355
     
    357358 */
    358359static ULONG WINAPI IEnumIDList_fnAddRef(
    359         IEnumIDList * iface)
    360 {
    361         ICOM_THIS(IEnumIDListImpl,iface);
     360        IEnumIDList * iface)
     361{
     362        ICOM_THIS(IEnumIDListImpl,iface);
    362363
    363364  dprintf(("SHELL32:enumidlist: IEnumIDList_fnAddRef((%p)->(%lu)\n",
     
    365366           This->ref));
    366367
    367         shell32_ObjCount++;
    368         return ++(This->ref);
     368        shell32_ObjCount++;
     369        return ++(This->ref);
    369370}
    370371/******************************************************************************
     
    372373 */
    373374static ULONG WINAPI IEnumIDList_fnRelease(
    374         IEnumIDList * iface)
    375 {
    376         ICOM_THIS(IEnumIDListImpl,iface);
     375        IEnumIDList * iface)
     376{
     377        ICOM_THIS(IEnumIDListImpl,iface);
    377378
    378379  dprintf(("SHELL32:enumidlist: IEnumIDList_fnRelease((%p)->(%lu)\n",
     
    380381           This->ref));
    381382
    382         shell32_ObjCount--;
    383 
    384         if (!--(This->ref))
    385         { TRACE(" destroying IEnumIDList(%p)\n",This);
    386           DeleteList((IEnumIDList*)This);
    387           HeapFree(GetProcessHeap(),0,This);
    388           return 0;
    389         }
    390         return This->ref;
     383        shell32_ObjCount--;
     384
     385        if (!--(This->ref))
     386        { TRACE(" destroying IEnumIDList(%p)\n",This);
     387          DeleteList((IEnumIDList*)This);
     388          HeapFree(GetProcessHeap(),0,This);
     389          return 0;
     390        }
     391        return This->ref;
    391392}
    392393
     
    396397
    397398static HRESULT WINAPI IEnumIDList_fnNext(
    398         IEnumIDList * iface,
    399         ULONG celt,
    400         LPITEMIDLIST * rgelt,
    401         ULONG *pceltFetched)
    402 {
    403         ICOM_THIS(IEnumIDListImpl,iface);
    404 
    405         ULONG    i;
    406         HRESULT  hr = S_OK;
    407         LPITEMIDLIST  temp;
     399        IEnumIDList * iface,
     400        ULONG celt,
     401        LPITEMIDLIST * rgelt,
     402        ULONG *pceltFetched)
     403{
     404        ICOM_THIS(IEnumIDListImpl,iface);
     405
     406        ULONG    i;
     407        HRESULT  hr = S_OK;
     408        LPITEMIDLIST  temp;
    408409
    409410  dprintf(("SHELL32:enumidlist: IEnumIDList_fnNext((%p)->(%ld,%p, %p)\n",
     
    416417 * subsystems actually use it (and so may a third party browser)
    417418 */
    418         if(pceltFetched)
    419           *pceltFetched = 0;
    420 
    421         *rgelt=0;
    422        
    423         if(celt > 1 && !pceltFetched)
    424         { return E_INVALIDARG;
    425         }
    426 
    427         for(i = 0; i < celt; i++)
    428         { if(!(This->mpCurrent))
    429           { hr =  S_FALSE;
    430             break;
    431           }
    432           temp = ILClone(This->mpCurrent->pidl);
    433           rgelt[i] = temp;
    434           This->mpCurrent = This->mpCurrent->pNext;
    435         }
    436         if(pceltFetched)
    437         {  *pceltFetched = i;
    438         }
    439 
    440         return hr;
     419        if(pceltFetched)
     420          *pceltFetched = 0;
     421
     422        *rgelt=0;
     423
     424        if(celt > 1 && !pceltFetched)
     425        { return E_INVALIDARG;
     426        }
     427
     428        for(i = 0; i < celt; i++)
     429        { if(!(This->mpCurrent))
     430          { hr =  S_FALSE;
     431            break;
     432          }
     433          temp = ILClone(This->mpCurrent->pidl);
     434          rgelt[i] = temp;
     435          This->mpCurrent = This->mpCurrent->pNext;
     436        }
     437        if(pceltFetched)
     438        {  *pceltFetched = i;
     439        }
     440
     441        return hr;
    441442}
    442443
     
    445446*/
    446447static HRESULT WINAPI IEnumIDList_fnSkip(
    447         IEnumIDList * iface,ULONG celt)
    448 {
    449         ICOM_THIS(IEnumIDListImpl,iface);
    450 
    451         DWORD    dwIndex;
    452         HRESULT  hr = S_OK;
     448        IEnumIDList * iface,ULONG celt)
     449{
     450        ICOM_THIS(IEnumIDListImpl,iface);
     451
     452        DWORD    dwIndex;
     453        HRESULT  hr = S_OK;
    453454
    454455  dprintf(("SHELL32:enumidlist: IEnumIDList_fnSkip((%p)->(%lu)\n",
     
    456457           celt));
    457458
    458         for(dwIndex = 0; dwIndex < celt; dwIndex++)
    459         { if(!This->mpCurrent)
    460           { hr = S_FALSE;
    461             break;
    462           }
    463           This->mpCurrent = This->mpCurrent->pNext;
    464         }
    465         return hr;
     459        for(dwIndex = 0; dwIndex < celt; dwIndex++)
     460        { if(!This->mpCurrent)
     461          { hr = S_FALSE;
     462            break;
     463          }
     464          This->mpCurrent = This->mpCurrent->pNext;
     465        }
     466        return hr;
    466467}
    467468
     
    471472*/
    472473static HRESULT WINAPI IEnumIDList_fnReset(
    473         IEnumIDList * iface)
    474 {
    475         ICOM_THIS(IEnumIDListImpl,iface);
     474        IEnumIDList * iface)
     475{
     476        ICOM_THIS(IEnumIDListImpl,iface);
    476477
    477478  dprintf(("SHELL32:enumidlist: IEnumIDList_fnReset((%p)\n",
    478479           This));
    479480
    480         This->mpCurrent = This->mpFirst;
    481         return S_OK;
     481        This->mpCurrent = This->mpFirst;
     482        return S_OK;
    482483}
    483484/**************************************************************************
     
    485486*/
    486487static HRESULT WINAPI IEnumIDList_fnClone(
    487         IEnumIDList * iface,LPENUMIDLIST * ppenum)
    488 {
    489         ICOM_THIS(IEnumIDListImpl,iface);
     488        IEnumIDList * iface,LPENUMIDLIST * ppenum)
     489{
     490        ICOM_THIS(IEnumIDListImpl,iface);
    490491
    491492  dprintf(("SHELL32:enumidlist: IEnumIDList_fnClone((%p)->() to (%p)->() not implemented\n",
     
    493494           ppenum));
    494495
    495         return E_NOTIMPL;
     496        return E_NOTIMPL;
    496497}
    497498
     
    501502static ICOM_VTABLE (IEnumIDList) eidlvt =
    502503{
    503         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    504         IEnumIDList_fnQueryInterface,
    505         IEnumIDList_fnAddRef,
    506         IEnumIDList_fnRelease,
    507         IEnumIDList_fnNext,
    508         IEnumIDList_fnSkip,
    509         IEnumIDList_fnReset,
    510         IEnumIDList_fnClone,
     504        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     505        IEnumIDList_fnQueryInterface,
     506        IEnumIDList_fnAddRef,
     507        IEnumIDList_fnRelease,
     508        IEnumIDList_fnNext,
     509        IEnumIDList_fnSkip,
     510        IEnumIDList_fnReset,
     511        IEnumIDList_fnClone,
    511512};
    512513
     
    517518
    518519IEnumIDList * IEnumIDList_Constructor(
    519         LPCSTR lpszPath,
    520         DWORD dwFlags,
    521         DWORD dwKind)
    522 {
    523         IEnumIDListImpl*        lpeidl;
    524         BOOL                    ret = FALSE;   
    525 
    526         lpeidl = (IEnumIDListImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumIDListImpl));
     520        LPCSTR lpszPath,
     521        DWORD dwFlags,
     522        DWORD dwKind)
     523{
     524        IEnumIDListImpl*        lpeidl;
     525        BOOL                    ret = FALSE;
     526
     527        lpeidl = (IEnumIDListImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumIDListImpl));
    527528
    528529  dprintf(("SHELL32:enumidlist: IEnumIDList_Constructor((%p)->(%08xh flags=0x%08lx kind=0x%08lx)\n",
     
    532533           dwKind));
    533534
    534         if (lpeidl)
    535         {
    536           lpeidl->ref = 1;
    537           lpeidl->lpvtbl = &eidlvt;
    538 
    539           switch (dwKind)
    540           {
    541             case EIDL_DESK:
    542               ret = CreateDesktopEnumList((IEnumIDList*)lpeidl, dwFlags);
    543               break;
    544 
    545             case EIDL_MYCOMP:
    546               ret = CreateMyCompEnumList((IEnumIDList*)lpeidl, dwFlags);
    547               break;
    548 
    549             case EIDL_FILE:
    550               ret = CreateFolderEnumList((IEnumIDList*)lpeidl, lpszPath, dwFlags);
    551               break;
    552           }
    553 
    554           if(ret)
    555           {
    556             shell32_ObjCount++;
    557           }
    558           else
    559           {
    560             if (lpeidl)
    561             {
    562               HeapFree(GetProcessHeap(),0,lpeidl);
    563             }
    564           }
    565         }
    566 
    567         TRACE("-- (%p)->()\n",lpeidl);
    568 
    569         return (IEnumIDList*)lpeidl;
    570 }
    571 
     535        if (lpeidl)
     536        {
     537          lpeidl->ref = 1;
     538          lpeidl->lpvtbl = &eidlvt;
     539
     540          switch (dwKind)
     541          {
     542            case EIDL_DESK:
     543              ret = CreateDesktopEnumList((IEnumIDList*)lpeidl, dwFlags);
     544              break;
     545
     546            case EIDL_MYCOMP:
     547              ret = CreateMyCompEnumList((IEnumIDList*)lpeidl, dwFlags);
     548              break;
     549
     550            case EIDL_FILE:
     551              ret = CreateFolderEnumList((IEnumIDList*)lpeidl, lpszPath, dwFlags);
     552              break;
     553          }
     554
     555          if(ret)
     556          {
     557            shell32_ObjCount++;
     558          }
     559          else
     560          {
     561            if (lpeidl)
     562            {
     563              HeapFree(GetProcessHeap(),0,lpeidl);
     564            }
     565          }
     566        }
     567
     568        TRACE("-- (%p)->()\n",lpeidl);
     569
     570        return (IEnumIDList*)lpeidl;
     571}
     572
  • trunk/src/shell32/folders.cpp

    r1214 r3243  
    1 /* $Id: folders.cpp,v 1.1 1999-10-09 11:13:19 sandervl Exp $ */
     1/* $Id: folders.cpp,v 1.2 2000-03-26 16:34:41 cbratschi Exp $ */
    22
    33/*
     
    77 * Project Odin Software License can be found in LICENSE.TXT
    88 *
     9 * Corel WINE 20000324 level
    910 */
    1011
    1112/*
    12  *      Copyright 1997  Marcus Meissner
    13  *      Copyright 1998  Juergen Schmied
     13 *      Copyright 1997  Marcus Meissner
     14 *      Copyright 1998  Juergen Schmied
    1415 *
    1516 */
     
    4950
    5051typedef struct
    51 {       ICOM_VTABLE(IExtractIconA)*     lpvtbl;
    52         DWORD   ref;
    53         ICOM_VTABLE(IPersistFile)*      lpvtblPersistFile;
    54         LPITEMIDLIST    pidl;
     52{       ICOM_VTABLE(IExtractIconA)*     lpvtbl;
     53        DWORD   ref;
     54        ICOM_VTABLE(IPersistFile)*      lpvtblPersistFile;
     55        LPITEMIDLIST    pidl;
    5556} IExtractIconAImpl;
    5657
     
    6667static HRESULT WINAPI IExtractIconA_fnQueryInterface( IExtractIconA * iface, REFIID riid, LPVOID *ppvObj)
    6768{
    68         ICOM_THIS(IExtractIconAImpl,iface);
    69 
    70         char    xriid[50];
    71         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    72         dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface(%p)->(\n\tIID:\t%s,%p)\n",
     69        ICOM_THIS(IExtractIconAImpl,iface);
     70
     71        char    xriid[50];
     72        WINE_StringFromCLSID((LPCLSID)riid,xriid);
     73        dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface(%p)->(\n\tIID:\t%s,%p)\n",
    7374           This,
    7475           xriid,
    7576           ppvObj));
    7677
    77         *ppvObj = NULL;
    78 
    79         if(IsEqualIID(riid, &IID_IUnknown))             /*IUnknown*/
    80         { *ppvObj = This;
    81         }
    82         else if(IsEqualIID(riid, &IID_IPersistFile))    /*IExtractIcon*/
    83         {    *ppvObj = (IPersistFile*)&(This->lpvtblPersistFile);
    84         }
    85         else if(IsEqualIID(riid, &IID_IExtractIconA))   /*IExtractIcon*/
    86         {    *ppvObj = (IExtractIconA*)This;
    87         }
    88 
    89         if(*ppvObj)
    90         { IExtractIconA_AddRef((IExtractIconA*) *ppvObj);       
    91           dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj));
    92           return S_OK;
    93         }
    94         dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface-- Interface: E_NOINTERFACE\n"));
    95         return E_NOINTERFACE;
     78        *ppvObj = NULL;
     79
     80        if(IsEqualIID(riid, &IID_IUnknown))             /*IUnknown*/
     81        { *ppvObj = This;
     82        }
     83        else if(IsEqualIID(riid, &IID_IPersistFile))    /*IExtractIcon*/
     84        {    *ppvObj = (IPersistFile*)&(This->lpvtblPersistFile);
     85        }
     86        else if(IsEqualIID(riid, &IID_IExtractIconA))   /*IExtractIcon*/
     87        {    *ppvObj = (IExtractIconA*)This;
     88        }
     89
     90        if(*ppvObj)
     91        { IExtractIconA_AddRef((IExtractIconA*) *ppvObj);
     92          dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj));
     93          return S_OK;
     94        }
     95        dprintf(("SHELL32:folders IExtractIconA_fnQueryInterface-- Interface: E_NOINTERFACE\n"));
     96        return E_NOINTERFACE;
    9697}
    9798
     
    101102static ULONG WINAPI IExtractIconA_fnAddRef(IExtractIconA * iface)
    102103{
    103         ICOM_THIS(IExtractIconAImpl,iface);
    104 
    105         dprintf(("SHELL32:folders IExtractIconA_fnAddRef(%p)->(count=%lu)\n",
     104        ICOM_THIS(IExtractIconAImpl,iface);
     105
     106        dprintf(("SHELL32:folders IExtractIconA_fnAddRef(%p)->(count=%lu)\n",
    106107          This,
    107108          This->ref));
    108109
    109         shell32_ObjCount++;
    110 
    111         return ++(This->ref);
     110        shell32_ObjCount++;
     111
     112        return ++(This->ref);
    112113}
    113114/**************************************************************************
     
    116117static ULONG WINAPI IExtractIconA_fnRelease(IExtractIconA * iface)
    117118{
    118         ICOM_THIS(IExtractIconAImpl,iface);
    119 
    120         dprintf(("SHELL32:folders IExtractIconA_fnRelease(%p)->()\n",
     119        ICOM_THIS(IExtractIconAImpl,iface);
     120
     121        dprintf(("SHELL32:folders IExtractIconA_fnRelease(%p)->()\n",
    121122          This));
    122123
    123         shell32_ObjCount--;
    124 
    125         if (!--(This->ref))
    126         { dprintf(("SHELL32:folders  IExtractIconA_fnRelease destroying IExtractIcon(%p)\n",
     124        shell32_ObjCount--;
     125
     126        if (!--(This->ref))
     127        { dprintf(("SHELL32:folders  IExtractIconA_fnRelease destroying IExtractIcon(%p)\n",
    127128            This));
    128           SHFree(This->pidl);
    129           HeapFree(GetProcessHeap(),0,This);
    130           return 0;
    131         }
    132         return This->ref;
     129          SHFree(This->pidl);
     130          HeapFree(GetProcessHeap(),0,This);
     131          return 0;
     132        }
     133        return This->ref;
    133134}
    134135/**************************************************************************
     
    138139*/
    139140static HRESULT WINAPI IExtractIconA_fnGetIconLocation(
    140         IExtractIconA * iface,
    141         UINT uFlags,
    142         LPSTR szIconFile,
    143         UINT cchMax,
    144         int * piIndex,
    145         UINT * pwFlags)
    146 {
    147         ICOM_THIS(IExtractIconAImpl,iface);
    148 
    149         char    sTemp[MAX_PATH];
    150         DWORD   dwNr;
    151         GUID const * riid;
    152         LPITEMIDLIST    pSimplePidl = ILFindLastID(This->pidl);
    153                        
    154         dprintf(("SHELL32:folders IExtractIconA_fnGetIconLocation(%p) (flags=%u %p %u %p %p)\n",
     141        IExtractIconA * iface,
     142        UINT uFlags,
     143        LPSTR szIconFile,
     144        UINT cchMax,
     145        int * piIndex,
     146        UINT * pwFlags)
     147{
     148        ICOM_THIS(IExtractIconAImpl,iface);
     149
     150        char    sTemp[MAX_PATH];
     151        DWORD   dwNr;
     152        GUID const * riid;
     153        LPITEMIDLIST    pSimplePidl = ILFindLastID(This->pidl);
     154
     155        dprintf(("SHELL32:folders IExtractIconA_fnGetIconLocation(%p) (flags=%u %p %u %p %p)\n",
    155156          This,
    156157          uFlags,
     
    160161          pwFlags));
    161162
    162         if (pwFlags)
    163           *pwFlags = 0;
    164 
    165         if (_ILIsDesktop(pSimplePidl))
    166         {
    167           lstrcpynA(szIconFile, "shell32.dll", cchMax);
    168           *piIndex = 34;
    169         }
    170 
    171         /* my computer and other shell extensions */
    172         else if ( (riid = _ILGetGUIDPointer(pSimplePidl)) )
    173         {
    174           char xriid[50];
    175           strcpy(xriid,"CLSID\\");
    176           WINE_StringFromCLSID((LPCLSID)riid,&xriid[strlen(xriid)]);
    177 
    178           if (HCR_GetDefaultIcon(xriid, sTemp, MAX_PATH, &dwNr))
    179           {
    180             lstrcpynA(szIconFile, sTemp, cchMax);
    181             *piIndex = dwNr;
    182           }
    183           else
    184           {
    185             lstrcpynA(szIconFile, "shell32.dll", cchMax);
    186             *piIndex = 15;
    187           }
    188         }
    189 
    190         else if (_ILIsDrive (pSimplePidl))
    191         {
    192           if (HCR_GetDefaultIcon("Drive", sTemp, MAX_PATH, &dwNr))
    193           {
    194             lstrcpynA(szIconFile, sTemp, cchMax);
    195             *piIndex = dwNr;
    196           }
    197           else
    198           {
    199             lstrcpynA(szIconFile, "shell32.dll", cchMax);
    200             *piIndex = 8;
    201           }
    202         }
    203         else if (_ILIsFolder (pSimplePidl))
    204         {
    205           if (HCR_GetDefaultIcon("Folder", sTemp, MAX_PATH, &dwNr))
    206           {
    207             lstrcpynA(szIconFile, sTemp, cchMax);
    208             *piIndex = dwNr;
    209           }
    210           else
    211           {
    212             lstrcpynA(szIconFile, "shell32.dll", cchMax);
    213             *piIndex = 3;
    214           }
    215         }
    216         else    /* object is file */
    217         {
    218           if (_ILGetExtension (pSimplePidl, sTemp, MAX_PATH)
    219               && HCR_MapTypeToValue(sTemp, sTemp, MAX_PATH, TRUE)
    220               && HCR_GetDefaultIcon(sTemp, sTemp, MAX_PATH, &dwNr))
    221           {
    222             if (!strcmp("%1",sTemp))            /* icon is in the file */
    223             {
    224               SHGetPathFromIDListA(This->pidl, sTemp);
    225               dwNr = 0;
    226             }
    227             lstrcpynA(szIconFile, sTemp, cchMax);
    228             *piIndex = dwNr;
    229           }
    230           else                                  /* default icon */
    231           {
    232             lstrcpynA(szIconFile, "shell32.dll", cchMax);
    233             *piIndex = 0;
    234           }
    235         }
    236 
    237         dprintf(("SHELL32:folders IExtractIconA_fnGetIconLocation -- %s %x\n",
     163        if (pwFlags)
     164          *pwFlags = 0;
     165
     166        if (_ILIsDesktop(pSimplePidl))
     167        {
     168          lstrcpynA(szIconFile, "shell32.dll", cchMax);
     169          *piIndex = 34;
     170        }
     171
     172        /* my computer and other shell extensions */
     173        else if (riid = _ILGetGUIDPointer(pSimplePidl))
     174        {
     175          char xriid[50];
     176          strcpy(xriid,"CLSID\\");
     177          WINE_StringFromCLSID((LPCLSID)riid,&xriid[strlen(xriid)]);
     178
     179          if (HCR_GetDefaultIcon(xriid, sTemp, MAX_PATH, &dwNr))
     180          {
     181            lstrcpynA(szIconFile, sTemp, cchMax);
     182            *piIndex = dwNr;
     183          }
     184          else
     185          {
     186            lstrcpynA(szIconFile, "shell32.dll", cchMax);
     187            *piIndex = 15;
     188          }
     189
     190        }
     191        else if (_ILIsDrive (pSimplePidl))
     192        {
     193          if (HCR_GetDefaultIcon("Drive", sTemp, MAX_PATH, &dwNr))
     194          {
     195            lstrcpynA(szIconFile, sTemp, cchMax);
     196            *piIndex = dwNr;
     197          }
     198          else
     199          {
     200            lstrcpynA(szIconFile, "shell32.dll", cchMax);
     201            *piIndex = 8;
     202          }
     203        }
     204        else if (_ILIsFolder (pSimplePidl))
     205        {
     206          if (HCR_GetDefaultIcon("Folder", sTemp, MAX_PATH, &dwNr))
     207          {
     208            lstrcpynA(szIconFile, sTemp, cchMax);
     209            *piIndex = dwNr;
     210          }
     211          else
     212          {
     213            lstrcpynA(szIconFile, "shell32.dll", cchMax);
     214            *piIndex = 3;
     215          }
     216        }
     217        else    /* object is file */
     218        {
     219          if (_ILGetExtension (pSimplePidl, sTemp, MAX_PATH)
     220              && HCR_MapTypeToValue(sTemp, sTemp, MAX_PATH, TRUE)
     221              && HCR_GetDefaultIcon(sTemp, sTemp, MAX_PATH, &dwNr))
     222          {
     223            if (!strcmp("%1",sTemp))            /* icon is in the file */
     224            {
     225              SHGetPathFromIDListA(This->pidl, sTemp);
     226              dwNr = 0;
     227            }
     228            lstrcpynA(szIconFile, sTemp, cchMax);
     229            *piIndex = dwNr;
     230          }
     231          else                                  /* default icon */
     232          {
     233            lstrcpynA(szIconFile, "shell32.dll", cchMax);
     234            *piIndex = 0;
     235          }
     236        }
     237
     238        dprintf(("SHELL32:folders IExtractIconA_fnGetIconLocation -- %s %x\n",
    238239          szIconFile,
    239240          *piIndex));
    240         return NOERROR;
     241        return NOERROR;
    241242}
    242243/**************************************************************************
     
    245246static HRESULT WINAPI IExtractIconA_fnExtract(IExtractIconA * iface, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize)
    246247{
    247         ICOM_THIS(IExtractIconAImpl,iface);
    248 
    249         dprintf(("SHELL32:folders IExtractIconA_fnExtract (%p) (file=%p index=%u %p %p size=%u) semi-stub\n",
     248        ICOM_THIS(IExtractIconAImpl,iface);
     249
     250        dprintf(("SHELL32:folders IExtractIconA_fnExtract (%p) (file=%p index=%u %p %p size=%u) semi-stub\n",
    250251          This,
    251252          pszFile,
     
    255256          nIconSize));
    256257
    257         if (phiconLarge)
    258           *phiconLarge = pImageList_GetIcon(ShellBigIconList, nIconIndex, ILD_TRANSPARENT);
    259 
    260         if (phiconSmall)
    261           *phiconSmall = pImageList_GetIcon(ShellSmallIconList, nIconIndex, ILD_TRANSPARENT);
    262 
    263         return S_OK;
     258        if (phiconLarge)
     259          *phiconLarge = pImageList_GetIcon(ShellBigIconList, nIconIndex, ILD_TRANSPARENT);
     260
     261        if (phiconSmall)
     262          *phiconSmall = pImageList_GetIcon(ShellSmallIconList, nIconIndex, ILD_TRANSPARENT);
     263
     264        return S_OK;
    264265}
    265266
    266267static struct ICOM_VTABLE(IExtractIconA) eivt =
    267 {       
    268         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    269         IExtractIconA_fnQueryInterface,
    270         IExtractIconA_fnAddRef,
    271         IExtractIconA_fnRelease,
    272         IExtractIconA_fnGetIconLocation,
    273         IExtractIconA_fnExtract
     268{
     269        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     270        IExtractIconA_fnQueryInterface,
     271        IExtractIconA_fnAddRef,
     272        IExtractIconA_fnRelease,
     273        IExtractIconA_fnGetIconLocation,
     274        IExtractIconA_fnExtract
    274275};
    275276
     
    279280 */
    280281static HRESULT WINAPI IEIPersistFile_fnQueryInterface(
    281         IPersistFile    *iface,
    282         REFIID          iid,
    283         LPVOID          *ppvObj)
    284 {
    285         _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
    286 
    287         return IShellFolder_QueryInterface((IExtractIconA*)This, iid, ppvObj);
     282        IPersistFile    *iface,
     283        REFIID          iid,
     284        LPVOID          *ppvObj)
     285{
     286        _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
     287
     288        return IShellFolder_QueryInterface((IExtractIconA*)This, iid, ppvObj);
    288289}
    289290
     
    292293 */
    293294static ULONG WINAPI IEIPersistFile_fnAddRef(
    294         IPersistFile    *iface)
    295 {
    296         _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
    297 
    298         return IExtractIconA_AddRef((IExtractIconA*)This);
     295        IPersistFile    *iface)
     296{
     297        _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
     298
     299        return IExtractIconA_AddRef((IExtractIconA*)This);
    299300}
    300301
     
    303304 */
    304305static ULONG WINAPI IEIPersistFile_fnRelease(
    305         IPersistFile    *iface)
    306 {
    307         _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
    308 
    309         return IExtractIconA_Release((IExtractIconA*)This);
     306        IPersistFile    *iface)
     307{
     308        _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
     309
     310        return IExtractIconA_Release((IExtractIconA*)This);
    310311}
    311312
     
    314315 */
    315316static HRESULT WINAPI IEIPersistFile_fnGetClassID(
    316         IPersistFile    *iface,
    317         LPCLSID         lpClassId)
    318 {
    319         CLSID StdFolderID = { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} };
    320 
    321         if (lpClassId==NULL)
    322           return E_POINTER;
    323 
    324         memcpy(lpClassId, &StdFolderID, sizeof(StdFolderID));
    325 
    326         return S_OK;
     317        IPersistFile    *iface,
     318        LPCLSID         lpClassId)
     319{
     320        CLSID StdFolderID = { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} };
     321
     322        if (lpClassId==NULL)
     323          return E_POINTER;
     324
     325        memcpy(lpClassId, &StdFolderID, sizeof(StdFolderID));
     326
     327        return S_OK;
    327328}
    328329
     
    342343static HRESULT WINAPI IEIPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFileName, DWORD dwMode)
    343344{
    344         _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
    345         FIXME("%p\n", This);
    346         return E_NOTIMPL;
     345        _ICOM_THIS_From_IPersistFile(IExtractIconA, iface);
     346        FIXME("%p\n", This);
     347        return E_NOTIMPL;
    347348
    348349}
     
    380381static struct ICOM_VTABLE(IPersistFile) pfvt =
    381382{
    382         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    383         IEIPersistFile_fnQueryInterface,
    384         IEIPersistFile_fnAddRef,
    385         IEIPersistFile_fnRelease,
    386         IEIPersistFile_fnGetClassID,
    387         IEIPersistFile_fnIsDirty,       /* IEIPersistFile_fnIsDirty */
    388         IEIPersistFile_fnLoad,
    389         IEIPersistFile_fnSave,          /* IEIPersistFile_fnSave */
    390         IEIPersistFile_fnSaveCompleted, /* IEIPersistFile_fnSaveCompleted */
    391         IEIPersistFile_fnGetCurFile     /* IEIPersistFile_fnGetCurFile */
     383        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     384        IEIPersistFile_fnQueryInterface,
     385        IEIPersistFile_fnAddRef,
     386        IEIPersistFile_fnRelease,
     387        IEIPersistFile_fnGetClassID,
     388        IEIPersistFile_fnIsDirty,       /* IEIPersistFile_fnIsDirty */
     389        IEIPersistFile_fnLoad,
     390        IEIPersistFile_fnSave,          /* IEIPersistFile_fnSave */
     391        IEIPersistFile_fnSaveCompleted, /* IEIPersistFile_fnSaveCompleted */
     392        IEIPersistFile_fnGetCurFile     /* IEIPersistFile_fnGetCurFile */
    392393};
    393394
     
    397398IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl)
    398399{
    399         IExtractIconAImpl* ei;
    400 
    401         ei=(IExtractIconAImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIconAImpl));
    402         ei->ref=1;
    403         ei->lpvtbl = &eivt;
    404         ei->lpvtblPersistFile = &pfvt;
    405         ei->pidl=ILClone(pidl);
    406 
    407         pdump(pidl);
    408 
    409         dprintf(("SHELL32:folders IExtractIconA_Constructor(%p)\n",
     400        IExtractIconAImpl* ei;
     401
     402        ei=(IExtractIconAImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIconAImpl));
     403        ei->ref=1;
     404        ei->lpvtbl = &eivt;
     405        ei->lpvtblPersistFile = &pfvt;
     406        ei->pidl=ILClone(pidl);
     407
     408        pdump(pidl);
     409
     410        dprintf(("SHELL32:folders IExtractIconA_Constructor(%p)\n",
    410411          ei));
    411         shell32_ObjCount++;
    412         return (IExtractIconA *)ei;
    413 }
    414 
    415 
     412        shell32_ObjCount++;
     413        return (IExtractIconA *)ei;
     414}
     415
     416
  • trunk/src/shell32/iconcache.cpp

    r1399 r3243  
    1 /* $Id: iconcache.cpp,v 1.3 1999-10-22 13:35:21 phaller Exp $ */
     1/* $Id: iconcache.cpp,v 1.4 2000-03-26 16:34:41 cbratschi Exp $ */
    22
    33/*
     
    99 * shell icon cache (SIC)
    1010 *
     11 * Corel WINE 20000324 level
    1112 */
    1213
     
    2728#include "winuser.h"
    2829#include "wingdi.h"
    29 //#include "wine/winuser16.h"
    30 //#include "wine/winbase16.h"
    3130//#include "neexe.h"
    3231#include "cursoricon.h"
     
    137136
    138137//@@@PH no NE support
    139 #if 0
     138#if 1
    140139     if( size > sizeof(NE_TYPEINFO) )
    141140     { pTypeInfo = (BYTE*)HeapAlloc( GetProcessHeap(), 0, size);
     
    159158 */
    160159//@@@PH no NE support
    161 #if 0
     160#if 1
    162161static BYTE * SHELL_LoadResource( HFILE hFile, NE_NAMEINFO* pNInfo, WORD sizeShift, ULONG *uSize)
    163162{  BYTE*  ptr;
     
    166165
    167166   *uSize = (DWORD)pNInfo->length << sizeShift;
    168    if( (ptr = (BYTE*)HeapAlloc(GetProcessHeap(),0, *uSize) ))
     167   ptr = (BYTE*)HeapAlloc(GetProcessHeap(),0, *uSize);
     168   if(ptr)
    169169   { _llseek( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET);
    170170     _lread( hFile, (char*)ptr, pNInfo->length << sizeShift);
     
    184184
    185185   *uSize = lpiIDE->dwBytesInRes;
    186    if( (ptr = (BYTE*)HeapAlloc(GetProcessHeap(),0, *uSize)) )
     186   ptr = (BYTE*)HeapAlloc(GetProcessHeap(),0, *uSize);
     187   if(ptr)
    187188   { _llseek( hFile, lpiIDE->dwImageOffset, SEEK_SET);
    188189     _lread( hFile, (char*)ptr, lpiIDE->dwBytesInRes);
     
    222223   { CURSORICONDIR * lpID;                     /* icon resource in resource format */
    223224     *uSize = lpcid.idCount * sizeof(CURSORICONDIRENTRY) + HEADER_SIZE;
    224      if( (lpID = (CURSORICONDIR*)HeapAlloc(GetProcessHeap(),0, *uSize) ))
     225     lpID = (CURSORICONDIR*)HeapAlloc(GetProcessHeap(),0, *uSize);
     226     if(lpID)
    225227     {
    226228       /* copy the header */
     
    253255 *
    254256 */
    255 #define ICO_INVALID_FILE                 1
    256 #define ICO_NO_ICONS                        0
    257 
    258257HGLOBAL WINAPI ICO_ExtractIconEx(LPCSTR lpszExeFileName, HICON * RetPtr, UINT nIconIndex, UINT n, UINT cxDesired, UINT cyDesired )
     258// @@@PH turned off
     259#if 0
    259260{
    260261  dprintf (("SHELL32: ICO_ExtractIconEx not implemented.\n"));
    261262  return 0;
    262263}
    263 
    264 // @@@PH turned off
    265 #if 0
    266 {  HGLOBAL  hRet = ICO_NO_ICONS;
     264#else
     265{  HGLOBAL  hRet = 0;
    267266   LPBYTE      pData;
    268267   OFSTRUCT ofs;
     
    277276
    278277   if( hFile == HFILE_ERROR || !n )
    279      return ICO_INVALID_FILE;
     278     return hRet;
    280279
    281280   sig = SHELL_GetResourceTable(hFile,&pData);
    282281
    283282//@@@PH no NE support
    284 #if 0
     283#if 1
    285284/* ico file */
    286285   if( sig==IMAGE_OS2_SIGNATURE || sig==1 ) /* .ICO file */
     
    374373     if ( !(fmapping = CreateFileMappingA(hFile,NULL,PAGE_READONLY|SEC_COMMIT,0,0,NULL)))
    375374     { WARN("failed to create filemap.\n"); /* FIXME, INVALID_HANDLE_VALUE? */
    376        hRet = ICO_INVALID_FILE;
    377375       goto end_2;                          /* failure */
    378376     }
     
    380378     if ( !(peimage = (BYTE*)MapViewOfFile(fmapping,FILE_MAP_READ,0,0,0)))
    381379     { WARN("failed to mmap filemap.\n");
    382        hRet = ICO_INVALID_FILE;
    383380       goto end_2;                          /* failure */
    384381     }
     
    401398     if (!rootresdir)
    402399     { WARN("haven't found section for resource directory.\n");
    403        goto end_4;                          /* failure */
     400       goto end_3;                          /* failure */
    404401     }
    405402  /* search the group icon dir*/
    406403     if (!(icongroupresdir = GetResDirEntryW(rootresdir,RT_GROUP_ICONW, (DWORD)rootresdir,FALSE)))
    407404     { WARN("No Icongroupresourcedirectory!\n");
    408        goto end_4;                          /* failure */
     405       goto end_3;                          /* failure */
    409406     }
    410407     iconDirCount = icongroupresdir->NumberOfNamedEntries+icongroupresdir->NumberOfIdEntries;
     
    416413     }
    417414
     415      /* if nIconIndex is negative we have to extract the icon whose resource
     416         id is equal to the absolute value of nIconIndex */
     417      if( nIconIndex < 0 )
     418      {
     419          int n = 0;
     420          int iId = abs(nIconIndex);
     421          PIMAGE_RESOURCE_DIRECTORY_ENTRY xprdeTmp = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(icongroupresdir+1);
     422          nIconIndex = iconDirCount + 1; /* Initialise to get an error at
     423                                            the condition nIconIndex >= iconDirCount
     424                                            below if nothing is found */
     425          while(i<iconDirCount && xprdeTmp)
     426          {
     427              if(xprdeTmp->u1.Id ==  iId)
     428              {
     429                  nIconIndex = n;
     430                  break;
     431              }
     432              n++;
     433              xprdeTmp++;
     434          }
     435      }
     436
    418437     if (nIconIndex >= iconDirCount)
    419438     { WARN("nIconIndex %d is larger than iconDirCount %d\n",nIconIndex,iconDirCount);
    420        goto end_4;                          /* failure */
     439       goto end_3;                          /* failure */
    421440     }
    422441
     
    452471       if (!igdata)
    453472       { WARN("no matching real address for icongroup!\n");
    454          goto end_4;                     /* failure */
     473         goto end_3;                     /* failure */
    455474       }
    456475       RetPtr[i] = (HICON)pLookupIconIdFromDirectoryEx(igdata, TRUE, cxDesired, cyDesired, LR_DEFAULTCOLOR);
     
    459478     if (!(iconresdir=GetResDirEntryW(rootresdir,RT_ICONW,(DWORD)rootresdir,FALSE)))
    460479     { WARN("No Iconresourcedirectory!\n");
    461        goto end_4;                          /* failure */
     480       goto end_3;                          /* failure */
    462481     }
    463482
     
    487506     goto end_3;                         /* sucess */
    488507   }
    489    hRet = ICO_INVALID_FILE;
    490508   goto end_1;    /* unknown filetype */
    491509
    492510/* cleaning up (try & catch would be nicer:-) ) */
    493 end_4:   hRet = 0;                       /* failure */
    494511end_3:   UnmapViewOfFile(peimage);       /* success */
    495512end_2:   CloseHandle(fmapping);
     
    915932   return ret;
    916933}
     934
     935/*
     936 * PE (Portable Execute) File Resources
     937 *
     938 * Copyright 1995 Thomas Sandford
     939 * Copyright 1996 Martin von Loewis
     940 *
     941 * Based on the Win16 resource handling code in loader/resource.c
     942 * Copyright 1993 Robert J. Amstadt
     943 * Copyright 1995 Alexandre Julliard
     944 * Copyright 1997 Marcus Meissner
     945 */
     946
     947//CB: from loader/pe_resource.c
     948
     949/**********************************************************************
     950 *          GetResDirEntryW
     951 *
     952 *      Helper function - goes down one level of PE resource tree
     953 *
     954 */
     955PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY resdirptr,
     956                                           LPCWSTR name,DWORD root,
     957                                           BOOL allowdefault)
     958{
     959    int entrynum;
     960    PIMAGE_RESOURCE_DIRECTORY_ENTRY entryTable;
     961    int namelen;
     962
     963    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 +
     972                        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;
     987    } else {
     988        entryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) (
     989                        (BYTE *) resdirptr +
     990                        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;
     1003    }
     1004}
     1005
  • trunk/src/shell32/makefile

    r3031 r3243  
    1 # $Id: makefile,v 1.22 2000-03-06 23:38:57 bird Exp $
     1# $Id: makefile,v 1.23 2000-03-26 16:34:41 cbratschi Exp $
    22
    33#
     
    5252$(OBJDIR)\sh.obj \
    5353$(OBJDIR)\shpolicy.obj \
     54$(OBJDIR)\systray.obj \
    5455$(OBJDIR)\shres.obj
    5556
  • trunk/src/shell32/memorystream.cpp

    r1398 r3243  
    1 /* $Id: memorystream.cpp,v 1.3 1999-10-22 12:18:46 phaller Exp $ */
     1/* $Id: memorystream.cpp,v 1.4 2000-03-26 16:34:42 cbratschi Exp $ */
    22
    33/*
     
    1515 * interface so it was obvious to capsule the file
    1616 * access in a IStream to.
     17 *
     18 * Corel WINE 20000324 level
    1719 */
    1820
  • trunk/src/shell32/pidl.cpp

    r2354 r3243  
    1 /* $Id: pidl.cpp,v 1.5 2000-01-08 02:28:54 phaller Exp $ */
     1/* $Id: pidl.cpp,v 1.6 2000-03-26 16:34:42 cbratschi Exp $ */
    22
    33/*
     
    1414 *  a pidl == NULL means desktop and is legal
    1515 *
     16 * Corel WINE 20000324 level
    1617 */
    1718
     
    9293       MESSAGE ("empty pidl (Desktop)\n");
    9394     }
     95     pcheck(pidl);
    9496   }
    9597
     
    892894 * SHGetDataFromIDListA [SHELL32.247]
    893895 *
     896 * NOTES
     897 *  the pidl can be a simple one. since we cant get the path out of the pidl
     898 *  we have to take all data from the pidl
    894899 */
    895900
     
    900905                                           int,           len)
    901906{
     907   DWORD type;
     908
    902909   TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
    903910
     
    908915     case SHGDFIL_FINDDATA:
    909916       {
    910           WIN32_FIND_DATAA * pfd = (WIN32_FIND_DATAA*)dest;
    911           CHAR pszPath[MAX_PATH];
    912           HANDLE  handle;
    913 
    914           if ( len < sizeof (WIN32_FIND_DATAA)) {
    915        ERR_(shell)("%d does not find sizeof(finddata)\n",len);
    916             return E_INVALIDARG;
    917           }
    918 
    919           SHGetPathFromIDListA(pidl, pszPath);
    920 
    921           if ((handle  = FindFirstFileA ( pszPath, pfd)))
    922             FindClose (handle);
     917               WIN32_FIND_DATAA * pfd = (WIN32_FIND_DATAA*)dest;
     918
     919               if ( len < sizeof (WIN32_FIND_DATAA)) return E_INVALIDARG;
     920
     921               ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
     922               _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
     923               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
     924               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
     925               type   = _ILGetDataPointer(pidl)->type;
     926               lstrcpynA(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
     927               lstrcpynA(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
    923928       }
    924929       return NOERROR;
     
    946951                                           int,           len)
    947952{
    948    if (! psf || !dest )  return E_INVALIDARG;
    949 
    950    switch (nFormat)
    951    {
    952      case SHGDFIL_FINDDATA:
    953        {
    954           WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW*)dest;
    955           WCHAR   pszPath[MAX_PATH];
    956           HANDLE  handle;
    957 
    958           if ( len < sizeof (WIN32_FIND_DATAW)) {
    959        ERR_(shell)("%d does not find sizeof(finddata)\n",len);
    960             return E_INVALIDARG;
    961           }
    962           SHGetPathFromIDListW(pidl, pszPath);
    963           if ((handle  = FindFirstFileW ( pszPath, pfd)))
    964             FindClose (handle);
    965        }
    966        return NOERROR;
    967      default: /* fallthrough */
    968        break;
    969    }
    970    FIXME_(shell)("(sf=%p pidl=%p nFormat=0x%04x %p 0x%04x), unhandled.\n",psf,pidl,nFormat,dest,len);
    971    return SHGetDataFromIDListA( psf, pidl, nFormat, dest, len);
     953        DWORD type;
     954
     955        if (! psf || !dest )  return E_INVALIDARG;
     956
     957        switch (nFormat)
     958        {
     959          case SHGDFIL_FINDDATA:
     960            {
     961               WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW*)dest;
     962
     963               if ( len < sizeof (WIN32_FIND_DATAW)) return E_INVALIDARG;
     964
     965               ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
     966               _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
     967               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
     968               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
     969               type   = _ILGetDataPointer(pidl)->type;
     970               lstrcpynAtoW(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
     971               lstrcpynAtoW(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
     972            }
     973            return NOERROR;
     974          case SHGDFIL_NETRESOURCE:
     975          case SHGDFIL_DESCRIPTIONID:
     976            FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
     977            break;
     978
     979          default:
     980            ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
     981        }
     982
     983        return E_INVALIDARG;
    972984}
    973985
     
    9991011
    10001012   pdump(pidl);
    1001 
     1013#ifdef SHELL_NO_DESKTOP
    10021014   if(_ILIsDesktop(pidl))
    10031015   {
     
    10051017   }
    10061018   else
     1019#endif
    10071020   {
    10081021     if (SHGetDesktopFolder(&shellfolder)==S_OK)
     
    10751088
    10761089     SHFree (pidlParent);
     1090     if (psf) IShellFolder_Release(psf);
    10771091   }
    10781092
     
    11161130ODINFUNCTION0(LPITEMIDLIST,_ILCreateMyComputer)
    11171131{
    1118   return _ILCreate(PT_MYCOMP, &IID_MyComputer, sizeof(GUID));
     1132  return _ILCreate(PT_MYCOMP, &CLSID_MyComputer, sizeof(GUID));
    11191133}
    11201134
    11211135ODINFUNCTION0(LPITEMIDLIST,_ILCreateIExplore)
    11221136{
    1123    return _ILCreate(PT_MYCOMP, &IID_IExplore, sizeof(GUID));
     1137   return _ILCreate(PT_MYCOMP, &CLSID_Internet, sizeof(GUID));
    11241138}
    11251139
    11261140ODINFUNCTION0(LPITEMIDLIST,_ILCreateControl)
    11271141{
    1128    return _ILCreate(PT_SPECIAL, &IID_Control, sizeof(GUID));
     1142   return _ILCreate(PT_SPECIAL, &CLSID_ControlPanel, sizeof(GUID));
    11291143}
    11301144
    11311145ODINFUNCTION0(LPITEMIDLIST,_ILCreatePrinter)
    11321146{
    1133    return _ILCreate(PT_SPECIAL, &IID_Printer, sizeof(GUID));
     1147   return _ILCreate(PT_SPECIAL, &CLSID_Printers, sizeof(GUID));
    11341148}
    11351149
    11361150ODINFUNCTION0(LPITEMIDLIST,_ILCreateNetwork)
    11371151{
    1138    return _ILCreate(PT_MYCOMP, &IID_Network, sizeof(GUID));
     1152   return _ILCreate(PT_MYCOMP, &CLSID_NetworkPlaces, sizeof(GUID));
    11391153}
    11401154
    11411155ODINFUNCTION0(LPITEMIDLIST,_ILCreateBitBucket)
    11421156{
    1143    return _ILCreate(PT_MYCOMP, &IID_BitBucket, sizeof(GUID));
     1157   return _ILCreate(PT_MYCOMP, &CLSID_RecycleBin, sizeof(GUID));
    11441158}
    11451159
     
    13571371
    13581372   if (iid)
    1359      return IsEqualIID(iid, &IID_MyComputer);
     1373     return IsEqualIID(iid, &CLSID_MyComputer);
    13601374   return FALSE;
    13611375}
     
    14401454   pData = _ILGetDataPointer(pidl);
    14411455
    1442    if (!pData)
     1456   if (_ILIsDesktop(pidl))
    14431457   {
    14441458    /* desktop */
     
    16211635                                    UINT,          uOutSize)
    16221636{
    1623    FILETIME ft;
    1624    SYSTEMTIME time;
    1625 
    1626    if (! _ILGetFileDateTime( pidl, &ft )) return FALSE;
    1627 
    1628    FileTimeToSystemTime (&ft, &time);
    1629    return GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL,  pOut, uOutSize);
     1637        FILETIME ft;
     1638        FILETIME lft;
     1639        SYSTEMTIME time;
     1640        char strTime[16];
     1641        UINT nTempSize=16;
     1642
     1643        if (! _ILGetFileDateTime( pidl, &ft )) return FALSE;
     1644
     1645        FileTimeToLocalFileTime(&ft, &lft);
     1646        FileTimeToSystemTime (&lft, &time);
     1647
     1648        if(GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL,  pOut, uOutSize) > 0)
     1649        {
     1650            if(GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, strTime, nTempSize) > 0)
     1651            {
     1652                strcat(pOut," ");
     1653                strcat(pOut, strTime);
     1654                return TRUE;
     1655            }
     1656        }
     1657        return FALSE;
    16301658}
    16311659
     
    16651693}
    16661694
    1667 
     1695/*************************************************************************
     1696 * _ILGetFileSizeKB
     1697 *
     1698 * Given the ItemIdList, get the FileSize in KiloByte
     1699 *
     1700 * PARAMS
     1701 *      pidl    [I] The ItemIDList
     1702 *      pOut    [I] The buffer to save the result
     1703 *      uOutsize [I] The size of the buffer
     1704 *
     1705 * RETURNS
     1706 *     The FileSize in KiloBytes
     1707 *
     1708 * NOTES
     1709 *      - pOut can be null when no string is needed
     1710 *      - Standard files in explorer or FileOpen have the file size in
     1711 *          Kilobyte
     1712 *
     1713 */
     1714DWORD _ILGetFileSizeKB (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
     1715{
     1716    LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1717    DWORD dwSize;
     1718    char tempSizeStr[24];
     1719    char kbStr[] = "KB";
     1720    int nTempSizeLen, nNumOfComma;
     1721    int i,j,k;
     1722
     1723    switch (pdata->type)
     1724    {
     1725        case PT_VALUE:
     1726        {
     1727            if(pdata->u.file.dwFileSize >= 1024)
     1728            {
     1729                dwSize = pdata->u.file.dwFileSize / 1024;
     1730            }
     1731            else if(pdata->u.file.dwFileSize > 0)
     1732            {
     1733                dwSize = 1;
     1734            }
     1735            else
     1736            {
     1737                dwSize = 0;
     1738            }
     1739
     1740            if (pOut)
     1741            {
     1742                sprintf(tempSizeStr,"%0ld",dwSize);
     1743                nTempSizeLen = strlen(tempSizeStr);
     1744                nNumOfComma = nTempSizeLen / 4;
     1745                uOutSize = nNumOfComma + strlen(tempSizeStr);
     1746                for(i=nTempSizeLen, j=uOutSize, k=0; j >= 0; j--, k++)
     1747                {
     1748                    if((k %4) == 0 && k != 0)
     1749                    {
     1750                        pOut[j] = ',';
     1751                        k = 0;
     1752                    }
     1753                    else
     1754                    {
     1755                        pOut[j] = tempSizeStr[i--];
     1756                    }
     1757                }
     1758                strcat(pOut,kbStr);
     1759            }
     1760            return dwSize;
     1761        }
     1762    }
     1763    return 0;
     1764}
    16681765
    16691766ODINFUNCTION3(BOOL,_ILGetExtension,LPCITEMIDLIST, pidl,
     
    17371834
    17381835/*************************************************************************
    1739  * _ILGetAttributeStr
     1836 * _ILGetFileAttributes
    17401837 *
    17411838 * Given the ItemIdList, get the Attrib string format
     
    17471844 *
    17481845 * RETURNS
    1749  *     True if successful
    1750  *
    1751  * NOTES
    1752  *
    1753  */
    1754 ODINFUNCTION3(BOOL, _ILGetAttributeStr, LPCITEMIDLIST, pidl,
     1846 *     Attributes
     1847 *
     1848 * NOTES
     1849 *
     1850 */
     1851ODINFUNCTION3(BOOL, _ILGetFileAttributes, LPCITEMIDLIST, pidl,
    17551852                                        LPSTR,         pOut,
    17561853                                        UINT,          uOutSize)
    17571854{
    17581855    LPPIDLDATA pData =_ILGetDataPointer(pidl);
    1759     WORD wAttrib;
     1856    WORD wAttrib = 0;
    17601857    int i;
    17611858
    1762     /* Need At Least 6 characters to represent the Attrib String */
    1763     if(uOutSize < 6)
    1764     {
    1765         return FALSE;
    1766     }
    17671859    switch(pData->type)
    17681860    {
     
    17731865            wAttrib = pData->u.file.uFileAttribs;
    17741866            break;
    1775         default:
    1776             return FALSE;
    17771867    }
    1778     i=0;
    1779     if(wAttrib & FILE_ATTRIBUTE_READONLY)
     1868    if(uOutSize >= 6)
    17801869    {
    1781         pOut[i++] = 'R';
     1870      i=0;
     1871      if(wAttrib & FILE_ATTRIBUTE_READONLY)
     1872      {
     1873          pOut[i++] = 'R';
     1874      }
     1875      if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
     1876      {
     1877          pOut[i++] = 'H';
     1878      }
     1879      if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
     1880      {
     1881          pOut[i++] = 'S';
     1882      }
     1883      if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
     1884      {
     1885          pOut[i++] = 'A';
     1886      }
     1887      if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
     1888      {
     1889          pOut[i++] = 'C';
     1890      }
     1891      pOut[i] = 0x00;
    17821892    }
    1783     if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
    1784     {
    1785         pOut[i++] = 'H';
    1786     }
    1787     if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
    1788     {
    1789         pOut[i++] = 'S';
    1790     }
    1791     if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
    1792     {
    1793         pOut[i++] = 'A';
    1794     }
    1795     if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
    1796     {
    1797         pOut[i++] = 'C';
    1798     }
    1799     pOut[i] = 0x00;
    1800     return TRUE;
    1801 }
    1802 
     1893    return wAttrib;
     1894}
     1895
  • trunk/src/shell32/pidl.h

    r1543 r3243  
    1 /* $Id: pidl.h,v 1.2 1999-11-02 18:50:15 phaller Exp $ */
     1/* $Id: pidl.h,v 1.3 2000-03-26 16:34:43 cbratschi Exp $ */
    22
    33/*
     
    4141* PIDLDATA desribes the type of pidl.
    4242*
    43 *       object        ! first byte /  ! format       ! living space
    44 *                     ! size
    45 *       ----------------------------------------------------------------
    46 *       my computer     0x1F/20         mycomp (2)      (usual)
    47 *       network         0x1F            mycomp
    48 *       bitbucket       0x1F            mycomp
    49 *       drive           0x23/25         drive           (usual)
    50 *       drive           0x25/25         drive           (lnk/persistant)
    51 *       drive           0x29/25         drive
    52 *       shell extension 0x2E            mycomp
    53 *       drive           0x2F            drive           (lnk/persistant)
    54 *       folder/file     0x30            folder/file (1) (lnk/persistant)
    55 *       folder          0x31            folder          (usual)
    56 *       value           0x32            file            (usual)
    57 *       workgroup       0x41            network (3)
    58 *       computer        0x42            network (4)
    59 *       whole network   0x47            network (5)
    60 *       MSITStore       0x61            htmlhlp (7)     
    61 *       history/favorites 0xb1          file
    62 *       share           0xc3            network (6)
     43*       object        ! first byte /  ! format       ! living space
     44*                     ! size
     45*       ----------------------------------------------------------------
     46*       my computer     0x1F/20         mycomp (2)      (usual)
     47*       network         0x1F            mycomp
     48*       bitbucket       0x1F            mycomp
     49*       drive           0x23/25         drive           (usual)
     50*       drive           0x25/25         drive           (lnk/persistant)
     51*       drive           0x29/25         drive
     52*       shell extension 0x2E            mycomp
     53*       drive           0x2F            drive           (lnk/persistant)
     54*       folder/file     0x30            folder/file (1) (lnk/persistant)
     55*       folder          0x31            folder          (usual)
     56*       value           0x32            file            (usual)
     57*       workgroup       0x41            network (3)
     58*       computer        0x42            network (4)
     59*       whole network   0x47            network (5)
     60*       MSITStore       0x61            htmlhlp (7)
     61*       history/favorites 0xb1          file
     62*       share           0xc3            network (6)
    6363*
    6464* guess: the persistant elements are non tracking
     
    6666* (1) dummy byte is used, attributes are empty
    6767* (2) IID_MyComputer = 20D04FE0L-3AEA-1069-A2D8-08002B30309D
    68 * (3) two strings       "workgroup" "microsoft network"
    69 * (4) one string        "\\sirius"
    70 * (5) one string        "whole network"
    71 * (6) one string        "\\sirius\c"
     68* (3) two strings       "workgroup" "microsoft network"
     69* (4) one string        "\\sirius"
     70* (5) one string        "whole network"
     71* (6) one string        "\\sirius\c"
    7272* (7) contains string   "mk:@MSITStore:C:\path\file.chm::/path/filename.htm"
    73 *               GUID    871C5380-42A0-1069-A2EA-08002B30309D
     73*               GUID    871C5380-42A0-1069-A2EA-08002B30309D
    7474*/
    7575
    76 #define PT_DESKTOP      0x00 /* internal */
    77 #define PT_MYCOMP       0x1F
    78 #define PT_DRIVE        0x23
    79 #define PT_DRIVE2       0x25
    80 #define PT_DRIVE3       0x29
    81 #define PT_SPECIAL      0x2E
    82 #define PT_DRIVE1       0x2F
    83 #define PT_FOLDER1      0x30
    84 #define PT_FOLDER       0x31
    85 #define PT_VALUE        0x32
    86 #define PT_WORKGRP      0x41
    87 #define PT_COMP         0x42
    88 #define PT_NETWORK      0x47
    89 #define PT_IESPECIAL    0xb1
    90 #define PT_SHARE        0xc3
     76#define PT_DESKTOP      0x00 /* internal */
     77#define PT_MYCOMP       0x1F
     78#define PT_DRIVE        0x23
     79#define PT_DRIVE2       0x25
     80#define PT_DRIVE3       0x29
     81#define PT_SPECIAL      0x2E
     82#define PT_DRIVE1       0x2F
     83#define PT_FOLDER1      0x30
     84#define PT_FOLDER       0x31
     85#define PT_VALUE        0x32
     86#define PT_WORKGRP      0x41
     87#define PT_COMP         0x42
     88#define PT_NETWORK      0x47
     89#define PT_IESPECIAL    0xb1
     90#define PT_SHARE        0xc3
    9191
    9292#include "pshpack1.h"
     
    9494
    9595typedef struct tagPIDLDATA
    96 {       PIDLTYPE type;                  /*00*/
    97         union
    98         { struct
    99           { BYTE dummy;                 /*01*/
    100             GUID guid;                  /*02*/
    101             BYTE dummy1;                /*18*/
    102           } mycomp;
    103           struct
    104           { CHAR szDriveName[20];       /*01*/
    105             DWORD dwUnknown;            /*21*/
    106             /* the drive seems to be 25 bytes every time */
    107           } drive;
    108           struct
    109           { BYTE dummy;                 /*01 is 0x00 for files or dirs */
    110             DWORD dwFileSize;           /*02*/
    111             WORD uFileDate;             /*06*/
    112             WORD uFileTime;             /*08*/
    113             WORD uFileAttribs;          /*10*/
    114             CHAR szNames[1];            /*12*/
    115             /* Here are comming two strings. The first is the long name.
    116             The second the dos name when needed or just 0x00 */
    117           } file, folder, generic;
    118           struct
    119           { WORD dummy;         /*01*/
    120             CHAR szNames[1];    /*03*/
    121           } network;
    122           struct
    123           { WORD dummy;         /*01*/
    124             DWORD dummy1;       /*02*/
    125             CHAR szName[1];     /*06*/ /* teminated by 0x00 0x00 */
    126           } htmlhelp;
    127         }u;
     96{       PIDLTYPE type;                  /*00*/
     97        union
     98        { struct
     99          { BYTE dummy;                 /*01*/
     100            GUID guid;                  /*02*/
     101            BYTE dummy1;                /*18*/
     102          } mycomp;
     103          struct
     104          { CHAR szDriveName[20];       /*01*/
     105            DWORD dwUnknown;            /*21*/
     106            /* the drive seems to be 25 bytes every time */
     107          } drive;
     108          struct
     109          { BYTE dummy;                 /*01 is 0x00 for files or dirs */
     110            DWORD dwFileSize;           /*02*/
     111            WORD uFileDate;             /*06*/
     112            WORD uFileTime;             /*08*/
     113            WORD uFileAttribs;          /*10*/
     114            CHAR szNames[1];            /*12*/
     115            /* Here are comming two strings. The first is the long name.
     116            The second the dos name when needed or just 0x00 */
     117          } file, folder, generic;
     118          struct
     119          { WORD dummy;         /*01*/
     120            CHAR szNames[1];    /*03*/
     121          } network;
     122          struct
     123          { WORD dummy;         /*01*/
     124            DWORD dummy1;       /*02*/
     125            CHAR szName[1];     /*06*/ /* teminated by 0x00 0x00 */
     126          } htmlhelp;
     127        }u;
    128128} PIDLDATA, *LPPIDLDATA;
    129129#include "poppack.h"
     
    132132 * getting special values from simple pidls
    133133 */
    134 DWORD   WINAPI _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    135 BOOL    WINAPI _ILGetFileDate           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    136 DWORD   WINAPI _ILGetFileSize           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    137 BOOL    WINAPI _ILGetExtension          (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    138 void    WINAPI _ILGetFileType           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    139 BOOL    WINAPI _ILGetAttributeStr       (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     134DWORD   WINAPI _ILSimpleGetText         (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     135BOOL    WINAPI _ILGetFileDate           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     136DWORD   WINAPI _ILGetFileSize           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     137BOOL    WINAPI _ILGetExtension          (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     138void    WINAPI _ILGetFileType           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     139DWORD   WINAPI _ILGetFileAttributes     (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
     140DWORD   WINAPI _ILGetFileSizeKB         (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
    140141
    141 BOOL    WINAPI _ILGetFileDateTime       (LPCITEMIDLIST pidl, FILETIME *ft);
    142 DWORD   WINAPI _ILGetDrive              (LPCITEMIDLIST, LPSTR, UINT16);
     142BOOL    WINAPI _ILGetFileDateTime       (LPCITEMIDLIST pidl, FILETIME *ft);
     143DWORD   WINAPI _ILGetDrive              (LPCITEMIDLIST, LPSTR, UINT16);
    143144
    144145/*
    145146 * testing simple pidls
    146147 */
    147 BOOL    WINAPI _ILIsDesktop             (LPCITEMIDLIST pidl);
    148 BOOL    WINAPI _ILIsMyComputer          (LPCITEMIDLIST pidl);
    149 BOOL    WINAPI _ILIsDrive               (LPCITEMIDLIST pidl);
    150 BOOL    WINAPI _ILIsFolder              (LPCITEMIDLIST pidl);
    151 BOOL    WINAPI _ILIsValue               (LPCITEMIDLIST pidl);
    152 BOOL    WINAPI _ILIsSpecialFolder       (LPCITEMIDLIST pidl);
    153 BOOL    WINAPI _ILIsPidlSimple          (LPCITEMIDLIST pidl);
     148BOOL    WINAPI _ILIsDesktop             (LPCITEMIDLIST pidl);
     149BOOL    WINAPI _ILIsMyComputer          (LPCITEMIDLIST pidl);
     150BOOL    WINAPI _ILIsDrive               (LPCITEMIDLIST pidl);
     151BOOL    WINAPI _ILIsFolder              (LPCITEMIDLIST pidl);
     152BOOL    WINAPI _ILIsValue               (LPCITEMIDLIST pidl);
     153BOOL    WINAPI _ILIsSpecialFolder       (LPCITEMIDLIST pidl);
     154BOOL    WINAPI _ILIsPidlSimple          (LPCITEMIDLIST pidl);
    154155
    155156/*
    156157 * simple pidls from strings
    157158 */
    158 LPITEMIDLIST    WINAPI _ILCreate        (PIDLTYPE,LPCVOID,UINT16);
     159LPITEMIDLIST    WINAPI _ILCreate        (PIDLTYPE,LPCVOID,UINT16);
    159160
    160 LPITEMIDLIST    WINAPI _ILCreateDesktop         (void);
    161 LPITEMIDLIST    WINAPI _ILCreateMyComputer      (void);
    162 LPITEMIDLIST    WINAPI _ILCreateIExplore        (void);
    163 LPITEMIDLIST    WINAPI _ILCreateControl         (void);
    164 LPITEMIDLIST    WINAPI _ILCreatePrinter         (void);
    165 LPITEMIDLIST    WINAPI _ILCreateNetwork         (void);
    166 LPITEMIDLIST    WINAPI _ILCreateBitBucket       (void);
    167 LPITEMIDLIST    WINAPI _ILCreateDrive           (LPCSTR);
    168 LPITEMIDLIST    WINAPI _ILCreateFolder          (WIN32_FIND_DATAA * stffile);
    169 LPITEMIDLIST    WINAPI _ILCreateValue           (WIN32_FIND_DATAA * stffile);
    170 LPITEMIDLIST    WINAPI _ILCreateSpecial         (LPCSTR szGUID);
     161LPITEMIDLIST    WINAPI _ILCreateDesktop         (void);
     162LPITEMIDLIST    WINAPI _ILCreateMyComputer      (void);
     163LPITEMIDLIST    WINAPI _ILCreateIExplore        (void);
     164LPITEMIDLIST    WINAPI _ILCreateControl         (void);
     165LPITEMIDLIST    WINAPI _ILCreatePrinter         (void);
     166LPITEMIDLIST    WINAPI _ILCreateNetwork         (void);
     167LPITEMIDLIST    WINAPI _ILCreateBitBucket       (void);
     168LPITEMIDLIST    WINAPI _ILCreateDrive           (LPCSTR);
     169LPITEMIDLIST    WINAPI _ILCreateFolder          (WIN32_FIND_DATAA * stffile);
     170LPITEMIDLIST    WINAPI _ILCreateValue           (WIN32_FIND_DATAA * stffile);
     171LPITEMIDLIST    WINAPI _ILCreateSpecial         (LPCSTR szGUID);
    171172
    172173/*
    173174 * helper functions (getting struct-pointer)
    174175 */
    175 LPPIDLDATA      WINAPI _ILGetDataPointer        (LPCITEMIDLIST);
    176 LPSTR           WINAPI _ILGetTextPointer        (PIDLTYPE type, LPPIDLDATA pidldata);
    177 LPSTR           WINAPI _ILGetSTextPointer       (PIDLTYPE type, LPPIDLDATA pidldata);
    178 REFIID          WINAPI _ILGetGUIDPointer        (LPCITEMIDLIST pidl);
     176LPPIDLDATA      WINAPI _ILGetDataPointer        (LPCITEMIDLIST);
     177LPSTR           WINAPI _ILGetTextPointer        (PIDLTYPE type, LPPIDLDATA pidldata);
     178LPSTR           WINAPI _ILGetSTextPointer       (PIDLTYPE type, LPPIDLDATA pidldata);
     179REFIID          WINAPI _ILGetGUIDPointer        (LPCITEMIDLIST pidl);
    179180
    180 /* 
    181  * debug helper 
     181/*
     182 * debug helper
    182183 */
    183184void pdump (LPCITEMIDLIST pidl);
  • trunk/src/shell32/regstream.cpp

    r1214 r3243  
    1 /* $Id: regstream.cpp,v 1.1 1999-10-09 11:13:20 sandervl Exp $ */
     1/* $Id: regstream.cpp,v 1.2 2000-03-26 16:34:43 cbratschi Exp $ */
    22
    33/*
     
    88 * Project Odin Software License can be found in LICENSE.TXT
    99 *
     10 * Corel WINE 20000324 level
    1011 */
    1112
    1213/*
    13  *      SHRegOpenStream
     14 *      SHRegOpenStream
    1415 */
    1516
     
    4748
    4849typedef struct
    49 {       ICOM_VTABLE(IStream)* lpvtbl;
    50         DWORD           ref;
    51         HKEY            hKey;
    52         LPSTR           pszSubKey;
    53         LPSTR           pszValue;
    54         LPBYTE          pbBuffer;
    55         DWORD           dwLength;
    56         DWORD           dwPos;
     50{       ICOM_VTABLE(IStream)* lpvtbl;
     51        DWORD           ref;
     52        HKEY            hKey;
     53        LPSTR           pszSubKey;
     54        LPSTR           pszValue;
     55        LPBYTE          pbBuffer;
     56        DWORD           dwLength;
     57        DWORD           dwPos;
    5758} ISHRegStream;
    5859
     
    6566static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVOID *ppvObj)
    6667{
    67         ICOM_THIS(ISHRegStream, iface);
    68 
    69         char    xriid[50];
    70         WINE_StringFromCLSID((LPCLSID)riid,xriid);
     68        ICOM_THIS(ISHRegStream, iface);
     69
     70        char    xriid[50];
     71        WINE_StringFromCLSID((LPCLSID)riid,xriid);
    7172
    7273  dprintf(("SHELL32:regstream IStream_fnQueryInterface (%p)->(\n\tIID:\t%s,%p)\n",
     
    7576           ppvObj));
    7677
    77         *ppvObj = NULL;
    78 
    79         if(IsEqualIID(riid, &IID_IUnknown))     /*IUnknown*/
    80         { *ppvObj = This;
    81         }
    82         else if(IsEqualIID(riid, &IID_IStream)) /*IStream*/
    83         { *ppvObj = This;
    84         }
    85 
    86         if(*ppvObj)
    87         {
    88           IStream_AddRef((IStream*)*ppvObj);
    89           dprintf(("SHELL32:regstream IStream_fnQueryInterface -- Interface: (%p)->(%p)\n",
     78        *ppvObj = NULL;
     79
     80        if(IsEqualIID(riid, &IID_IUnknown))     /*IUnknown*/
     81        { *ppvObj = This;
     82        }
     83        else if(IsEqualIID(riid, &IID_IStream)) /*IStream*/
     84        { *ppvObj = This;
     85        }
     86
     87        if(*ppvObj)
     88        {
     89          IStream_AddRef((IStream*)*ppvObj);
     90          dprintf(("SHELL32:regstream IStream_fnQueryInterface -- Interface: (%p)->(%p)\n",
    9091            ppvObj,
    9192            *ppvObj));
    92           return S_OK;
    93         }
    94         dprintf(("SHELL32:regstream IStream_fnQueryInterface-- Interface: E_NOINTERFACE\n"));
    95         return E_NOINTERFACE;
     93          return S_OK;
     94        }
     95        dprintf(("SHELL32:regstream IStream_fnQueryInterface-- Interface: E_NOINTERFACE\n"));
     96        return E_NOINTERFACE;
    9697}
    9798
     
    101102static ULONG WINAPI IStream_fnAddRef(IStream *iface)
    102103{
    103         ICOM_THIS(ISHRegStream, iface);
    104 
    105           dprintf(("SHELL32:regstream IStream_fnAddRef (%p)->(count=%lu)\n",
     104        ICOM_THIS(ISHRegStream, iface);
     105
     106          dprintf(("SHELL32:regstream IStream_fnAddRef (%p)->(count=%lu)\n",
    106107            This,
    107108            This->ref));
    108109
    109         shell32_ObjCount++;
    110         return ++(This->ref);
     110        shell32_ObjCount++;
     111        return ++(This->ref);
    111112}
    112113
     
    116117static ULONG WINAPI IStream_fnRelease(IStream *iface)
    117118{
    118         ICOM_THIS(ISHRegStream, iface);
    119 
    120           dprintf(("SHELL32:regstream IStream_fnRelease(%p)->()\n",
    121             This));
    122 
    123         shell32_ObjCount--;
    124 
    125         if (!--(This->ref))
    126         { dprintf(("SHELL32:regstream IStream_fnRelease destroying SHReg IStream (%p)\n",
    127             This));
    128 
    129           if (This->pszSubKey)
    130             HeapFree(GetProcessHeap(),0,This->pszSubKey);
    131 
    132           if (This->pszValue)
    133             HeapFree(GetProcessHeap(),0,This->pszValue);
    134 
    135           if (This->pbBuffer)
    136             HeapFree(GetProcessHeap(),0,This->pbBuffer);
    137 
    138           if (This->hKey)
    139             RegCloseKey(This->hKey);
    140 
    141           HeapFree(GetProcessHeap(),0,This);
    142           return 0;
    143         }
    144         return This->ref;
     119        ICOM_THIS(ISHRegStream, iface);
     120
     121          dprintf(("SHELL32:regstream IStream_fnRelease(%p)->()\n",
     122            This));
     123
     124        shell32_ObjCount--;
     125
     126        if (!--(This->ref))
     127        { dprintf(("SHELL32:regstream IStream_fnRelease destroying SHReg IStream (%p)\n",
     128            This));
     129
     130          if (This->pszSubKey)
     131            HeapFree(GetProcessHeap(),0,This->pszSubKey);
     132
     133          if (This->pszValue)
     134            HeapFree(GetProcessHeap(),0,This->pszValue);
     135
     136          if (This->pbBuffer)
     137            HeapFree(GetProcessHeap(),0,This->pbBuffer);
     138
     139          if (This->hKey)
     140            RegCloseKey(This->hKey);
     141
     142          HeapFree(GetProcessHeap(),0,This);
     143          return 0;
     144        }
     145        return This->ref;
    145146}
    146147
    147148HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead)
    148149{
    149         ICOM_THIS(ISHRegStream, iface);
    150 
    151         DWORD dwBytesToRead, dwBytesLeft;
    152        
    153         dprintf(("SHELL32:regstream IStream_fnRead(%p)->(%p,0x%08lx,%p)\n",
     150        ICOM_THIS(ISHRegStream, iface);
     151
     152        DWORD dwBytesToRead, dwBytesLeft;
     153
     154        dprintf(("SHELL32:regstream IStream_fnRead(%p)->(%p,0x%08lx,%p)\n",
    154155          This,
    155156          pv,
    156157          cb,
    157158          pcbRead));
    158        
    159         if ( !pv )
    160           return STG_E_INVALIDPOINTER;
    161        
    162         dwBytesLeft = This->dwLength - This->dwPos;
    163 
    164         if ( 0 >= dwBytesLeft )                                         /* end of buffer */
    165           return S_FALSE;
    166        
    167         dwBytesToRead = ( cb > dwBytesLeft) ? dwBytesLeft : cb;
    168 
    169         memmove ( pv, (This->pbBuffer) + (This->dwPos), dwBytesToRead);
    170        
    171         This->dwPos += dwBytesToRead;                                   /* adjust pointer */
    172 
    173         if (pcbRead)
    174           *pcbRead = dwBytesToRead;
    175 
    176         return S_OK;
     159
     160        if ( !pv )
     161          return STG_E_INVALIDPOINTER;
     162
     163        dwBytesLeft = This->dwLength - This->dwPos;
     164
     165        if ( 0 >= dwBytesLeft )                                         /* end of buffer */
     166          return S_FALSE;
     167
     168        dwBytesToRead = ( cb > dwBytesLeft) ? dwBytesLeft : cb;
     169
     170        memmove ( pv, (This->pbBuffer) + (This->dwPos), dwBytesToRead);
     171
     172        This->dwPos += dwBytesToRead;                                   /* adjust pointer */
     173
     174        if (pcbRead)
     175          *pcbRead = dwBytesToRead;
     176
     177        return S_OK;
    177178}
    178179HRESULT WINAPI IStream_fnWrite (IStream * iface, const void* pv, ULONG cb, ULONG* pcbWritten)
    179180{
    180         ICOM_THIS(ISHRegStream, iface);
    181 
    182         dprintf(("SHELL32:regstream IStream_fnWrite(%p)\n",
    183           This));
    184 
    185         return E_NOTIMPL;
     181        ICOM_THIS(ISHRegStream, iface);
     182
     183        dprintf(("SHELL32:regstream IStream_fnWrite(%p)\n",
     184          This));
     185
     186        return E_NOTIMPL;
    186187}
    187188HRESULT WINAPI IStream_fnSeek (IStream * iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition)
    188189{
    189         ICOM_THIS(ISHRegStream, iface);
    190 
    191         dprintf(("SHELL32:regstream IStream_fnSeek(%p)\n",
    192           This));
    193 
    194         return E_NOTIMPL;
     190        ICOM_THIS(ISHRegStream, iface);
     191
     192        dprintf(("SHELL32:regstream IStream_fnSeek(%p)\n",
     193          This));
     194
     195        return E_NOTIMPL;
    195196}
    196197HRESULT WINAPI IStream_fnSetSize (IStream * iface, ULARGE_INTEGER libNewSize)
    197198{
    198         ICOM_THIS(ISHRegStream, iface);
    199 
    200         dprintf(("SHELL32:regstream IStream_fnSetSize(%p)\n",
    201           This));
    202 
    203         return E_NOTIMPL;
     199        ICOM_THIS(ISHRegStream, iface);
     200
     201        dprintf(("SHELL32:regstream IStream_fnSetSize(%p)\n",
     202          This));
     203
     204        return E_NOTIMPL;
    204205}
    205206HRESULT WINAPI IStream_fnCopyTo (IStream * iface, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten)
    206207{
    207         ICOM_THIS(ISHRegStream, iface);
    208 
    209           dprintf(("SHELL32:regstream IStream_fnCopyTo(%p)\n",
    210             This));
    211 
    212         return E_NOTIMPL;
     208        ICOM_THIS(ISHRegStream, iface);
     209
     210          dprintf(("SHELL32:regstream IStream_fnCopyTo(%p)\n",
     211            This));
     212
     213        return E_NOTIMPL;
    213214}
    214215HRESULT WINAPI IStream_fnCommit (IStream * iface, DWORD grfCommitFlags)
    215216{
    216         ICOM_THIS(ISHRegStream, iface);
    217 
    218           dprintf(("SHELL32:regstream IStream_fnCommit(%p)\n",
    219             This));
    220 
    221         return E_NOTIMPL;
     217        ICOM_THIS(ISHRegStream, iface);
     218
     219          dprintf(("SHELL32:regstream IStream_fnCommit(%p)\n",
     220            This));
     221
     222        return E_NOTIMPL;
    222223}
    223224HRESULT WINAPI IStream_fnRevert (IStream * iface)
    224225{
    225         ICOM_THIS(ISHRegStream, iface);
    226 
    227         dprintf(("SHELL32:regstream IStream_fnRevert(%p)\n",
    228           This));
    229 
    230         return E_NOTIMPL;
     226        ICOM_THIS(ISHRegStream, iface);
     227
     228        dprintf(("SHELL32:regstream IStream_fnRevert(%p)\n",
     229          This));
     230
     231        return E_NOTIMPL;
    231232}
    232233HRESULT WINAPI IStream_fnLockRegion (IStream * iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
    233234{
    234         ICOM_THIS(ISHRegStream, iface);
    235 
    236         dprintf(("SHELL32:regstream IStream_fnLockRegion(%p)\n",
    237           This));
    238 
    239         return E_NOTIMPL;
     235        ICOM_THIS(ISHRegStream, iface);
     236
     237        dprintf(("SHELL32:regstream IStream_fnLockRegion(%p)\n",
     238          This));
     239
     240        return E_NOTIMPL;
    240241}
    241242HRESULT WINAPI IStream_fnUnlockRegion (IStream * iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
    242243{
    243         ICOM_THIS(ISHRegStream, iface);
    244 
    245           dprintf(("SHELL32:regstream IStream_fnUnlockRegion(%p)\n",
    246             This));
    247 
    248         return E_NOTIMPL;
     244        ICOM_THIS(ISHRegStream, iface);
     245
     246          dprintf(("SHELL32:regstream IStream_fnUnlockRegion(%p)\n",
     247            This));
     248
     249        return E_NOTIMPL;
    249250}
    250251HRESULT WINAPI IStream_fnStat (IStream * iface, STATSTG*   pstatstg, DWORD grfStatFlag)
    251252{
    252         ICOM_THIS(ISHRegStream, iface);
    253 
    254           dprintf(("SHELL32:regstream IStream_fnStat(%p)\n",
    255             This));
    256 
    257         return E_NOTIMPL;
     253        ICOM_THIS(ISHRegStream, iface);
     254
     255          dprintf(("SHELL32:regstream IStream_fnStat(%p)\n",
     256            This));
     257
     258        return E_NOTIMPL;
    258259}
    259260HRESULT WINAPI IStream_fnClone (IStream * iface, IStream** ppstm)
    260261{
    261         ICOM_THIS(ISHRegStream, iface);
    262 
    263           dprintf(("SHELL32:regstream IStream_fnClone(%p)\n",
    264             This));
    265 
    266         return E_NOTIMPL;
     262        ICOM_THIS(ISHRegStream, iface);
     263
     264          dprintf(("SHELL32:regstream IStream_fnClone(%p)\n",
     265            This));
     266
     267        return E_NOTIMPL;
    267268}
    268269
    269270static struct ICOM_VTABLE(IStream) rstvt =
    270 {       
    271         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    272         IStream_fnQueryInterface,
    273         IStream_fnAddRef,
    274         IStream_fnRelease,
    275         IStream_fnRead,
    276         IStream_fnWrite,
    277         IStream_fnSeek,
    278         IStream_fnSetSize,
    279         IStream_fnCopyTo,
    280         IStream_fnCommit,
    281         IStream_fnRevert,
    282         IStream_fnLockRegion,
    283         IStream_fnUnlockRegion,
    284         IStream_fnStat,
    285         IStream_fnClone
    286        
     271{
     272        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     273        IStream_fnQueryInterface,
     274        IStream_fnAddRef,
     275        IStream_fnRelease,
     276        IStream_fnRead,
     277        IStream_fnWrite,
     278        IStream_fnSeek,
     279        IStream_fnSetSize,
     280        IStream_fnCopyTo,
     281        IStream_fnCommit,
     282        IStream_fnRevert,
     283        IStream_fnLockRegion,
     284        IStream_fnUnlockRegion,
     285        IStream_fnStat,
     286        IStream_fnClone
     287
    287288};
    288289
     
    291292*/
    292293IStream *IStream_Constructor(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD grfMode)
    293 {       ISHRegStream*   rstr;
    294         DWORD           dwType;
    295        
    296         rstr = (ISHRegStream*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ISHRegStream));
    297         rstr->lpvtbl=&rstvt;
    298         rstr->ref = 1;
     294{       ISHRegStream*   rstr;
     295        DWORD           dwType;
     296
     297        rstr = (ISHRegStream*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ISHRegStream));
     298        rstr->lpvtbl=&rstvt;
     299        rstr->ref = 1;
    299300
    300301 dprintf(("SHELL32:regstream IStream_Constructor(%08xh,%ls,%ls,%08xh)\n",
     
    304305          grfMode));
    305306
    306         if ( ERROR_SUCCESS == RegOpenKeyExA (hKey, pszSubKey, 0, KEY_READ, &(rstr->hKey)))
    307         { if ( ERROR_SUCCESS == RegQueryValueExA(rstr->hKey, (LPSTR)pszValue,0,0,0,&(rstr->dwLength)))
    308           {
    309             /* read the binary data into the buffer */
    310             rstr->pbBuffer = (BYTE*)HeapAlloc(GetProcessHeap(),0,rstr->dwLength);
    311             if (rstr->pbBuffer)
    312             { if ( ERROR_SUCCESS == RegQueryValueExA(rstr->hKey, (LPSTR)pszValue,0,&dwType,rstr->pbBuffer,&(rstr->dwLength)))
    313               { if (dwType == REG_BINARY )
    314                 { rstr->pszSubKey = HEAP_strdupA (GetProcessHeap(),0, pszSubKey);
    315                   rstr->pszValue = HEAP_strdupA (GetProcessHeap(),0, pszValue);         
    316                     dprintf(("SHELL32:regstream IStream_Constructor(%p)->0x%08x,%s,%s,0x%08lx\n", rstr, hKey, pszSubKey, pszValue, grfMode));
    317                   shell32_ObjCount++;
    318                   return (IStream*)rstr;
    319                 }
    320               }
    321               HeapFree (GetProcessHeap(),0,rstr->pbBuffer);
    322             }
    323           }
    324           RegCloseKey(rstr->hKey);
    325 
    326         }
    327         HeapFree (GetProcessHeap(),0,rstr);
    328         return NULL;
     307        if ( ERROR_SUCCESS == RegOpenKeyExA (hKey, pszSubKey, 0, KEY_READ, &(rstr->hKey)))
     308        { if ( ERROR_SUCCESS == RegQueryValueExA(rstr->hKey, (LPSTR)pszValue,0,0,0,&(rstr->dwLength)))
     309          {
     310            /* read the binary data into the buffer */
     311            rstr->pbBuffer = (BYTE*)HeapAlloc(GetProcessHeap(),0,rstr->dwLength);
     312            if (rstr->pbBuffer)
     313            { if ( ERROR_SUCCESS == RegQueryValueExA(rstr->hKey, (LPSTR)pszValue,0,&dwType,rstr->pbBuffer,&(rstr->dwLength)))
     314              { if (dwType == REG_BINARY )
     315                { rstr->pszSubKey = HEAP_strdupA (GetProcessHeap(),0, pszSubKey);
     316                  rstr->pszValue = HEAP_strdupA (GetProcessHeap(),0, pszValue);
     317                    dprintf(("SHELL32:regstream IStream_Constructor(%p)->0x%08x,%s,%s,0x%08lx\n", rstr, hKey, pszSubKey, pszValue, grfMode));
     318                  shell32_ObjCount++;
     319                  return (IStream*)rstr;
     320                }
     321              }
     322              HeapFree (GetProcessHeap(),0,rstr->pbBuffer);
     323            }
     324          }
     325          RegCloseKey(rstr->hKey);
     326
     327        }
     328        HeapFree (GetProcessHeap(),0,rstr);
     329        return NULL;
    329330}
    330331
    331332
    332333/*************************************************************************
    333  * OpenRegStream                                [SHELL32.85]
     334 * OpenRegStream                                [SHELL32.85]
    334335 *
    335336 * NOTES
     
    343344           pszValue,
    344345           grfMode));
    345         return IStream_Constructor(hkey, pszSubkey, pszValue, grfMode);
    346 }
     346        return IStream_Constructor(hkey, pszSubkey, pszValue, grfMode);
     347}
  • trunk/src/shell32/shell.cpp

    r2534 r3243  
    1 /* $Id: shell.cpp,v 1.4 2000-01-27 21:50:45 sandervl Exp $ */
     1/* $Id: shell.cpp,v 1.5 2000-03-26 16:34:43 cbratschi Exp $ */
    22
    33/*
     
    1010 *
    1111 *  1998 Marcus Meissner
     12 *
     13 * Corel WINE 20000324 level
    1214 */
    1315
     
    4850#include "imagelist.h"
    4951#include "shell32_main.h"
     52#include "winversion.h"
    5053
    5154#include <heapstring.h>
     
    9093static const char* lpstrMsgShellActivate = "ACTIVATESHELLWINDOW";
    9194
    92 static HWND16  SHELL_hWnd = 0;
    93 static HHOOK   SHELL_hHook = 0;
    94 static UINT16  uMsgWndCreated = 0;
    95 static UINT16  uMsgWndDestroyed = 0;
    96 static UINT16  uMsgShellActivate = 0;
    97 HINSTANCE16 SHELL_hInstance = 0;
     95static HWND  SHELL_hWnd = 0;
     96static HHOOK SHELL_hHook = 0;
     97static UINT  uMsgWndCreated = 0;
     98static UINT  uMsgWndDestroyed = 0;
     99static UINT  uMsgShellActivate = 0;
    98100HINSTANCE SHELL_hInstance32;
    99101static int SHELL_Attach = 0;
     
    377379                             &commandlen ) == ERROR_SUCCESS )
    378380   {
     381       LPSTR tmp;
     382       char param[256];
     383       LONG paramlen = 256;
     384
     385       /* Get the parameters needed by the application
     386          from the associated ddeexec key */
     387       tmp = strstr(filetype,"command");
     388       tmp[0] = '\0';
     389       strcat(filetype,"ddeexec");
     390
     391       if(RegQueryValueA( HKEY_CLASSES_ROOT, filetype, param,&paramlen ) == ERROR_SUCCESS)
     392       {
     393         strcat(command," ");
     394         strcat(command,param);
     395         commandlen += paramlen;
     396       }
     397
    379398       /* Is there a replace() function anywhere? */
    380399       command[commandlen]='\0';
     
    472491
    473492//@@@PH no NE support
    474 #if 0
     493#if 1
    475494     if( size > sizeof(NE_TYPEINFO) )
    476495     { pTypeInfo = (BYTE*)HeapAlloc( GetProcessHeap(), 0, size);
     
    490509   return 0; /* failed */
    491510}
    492 
     511#if 0 //CB: DirectResAlloc16 not yet ported
     512/*************************************************************************
     513 *                      SHELL_LoadResource
     514 */
     515static HGLOBAL SHELL_LoadResource(HINSTANCE hInst, HFILE hFile, NE_NAMEINFO* pNInfo, WORD sizeShift)
     516{       BYTE*  ptr;
     517        HGLOBAL handle = DirectResAlloc( hInst, 0x10, (DWORD)pNInfo->length << sizeShift);
     518
     519        TRACE("\n");
     520
     521        if( (ptr = (BYTE*)GlobalLock( handle )) )
     522        { _llseek( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET);
     523          _lread( hFile, (char*)ptr, pNInfo->length << sizeShift);
     524          return handle;
     525        }
     526        return 0;
     527}
     528
     529/*************************************************************************
     530 *                      ICO_LoadIcon
     531 */
     532static HGLOBAL ICO_LoadIcon(HINSTANCE hInst, HFILE hFile, LPicoICONDIRENTRY lpiIDE)
     533{       BYTE*  ptr;
     534        HGLOBAL handle = DirectResAlloc( hInst, 0x10, lpiIDE->dwBytesInRes);
     535        TRACE("\n");
     536        if( (ptr = (BYTE*)GlobalLock( handle )) )
     537        { _llseek( hFile, lpiIDE->dwImageOffset, SEEK_SET);
     538          _lread( hFile, (char*)ptr, lpiIDE->dwBytesInRes);
     539          return handle;
     540        }
     541        return 0;
     542}
     543
     544/*************************************************************************
     545 *                      ICO_GetIconDirectory
     546 *
     547 *  Read .ico file and build phony ICONDIR struct for GetIconID
     548 */
     549static HGLOBAL ICO_GetIconDirectory(HINSTANCE hInst, HFILE hFile, LPicoICONDIR* lplpiID )
     550{ WORD    id[3];  /* idReserved, idType, idCount */
     551  LPicoICONDIR  lpiID;
     552  int           i;
     553
     554  TRACE("\n");
     555  _llseek( hFile, 0, SEEK_SET );
     556  if( _lread(hFile,(char*)id,sizeof(id)) != sizeof(id) ) return 0;
     557
     558  /* check .ICO header
     559   *
     560   * - see http://www.microsoft.com/win32dev/ui/icons.htm
     561   */
     562
     563  if( id[0] || id[1] != 1 || !id[2] ) return 0;
     564
     565  i = id[2]*sizeof(icoICONDIRENTRY) ;
     566
     567  lpiID = (LPicoICONDIR)HeapAlloc( GetProcessHeap(), 0, i + sizeof(id));
     568
     569  if( _lread(hFile,(char*)lpiID->idEntries,i) == i )
     570  { HGLOBAL handle = DirectResAlloc( hInst, 0x10,
     571                                     id[2]*sizeof(CURSORICONDIRENTRY) + sizeof(id) );
     572     if( handle )
     573    { CURSORICONDIR*     lpID = (CURSORICONDIR*)GlobalLock( handle );
     574       lpID->idReserved = lpiID->idReserved = id[0];
     575       lpID->idType = lpiID->idType = id[1];
     576       lpID->idCount = lpiID->idCount = id[2];
     577       for( i=0; i < lpiID->idCount; i++ )
     578      { memcpy((void*)(lpID->idEntries + i),
     579                   (void*)(lpiID->idEntries + i), sizeof(CURSORICONDIRENTRY) - 2);
     580            lpID->idEntries[i].wResId = i;
     581         }
     582      *lplpiID = lpiID;
     583       return handle;
     584     }
     585  }
     586  /* fail */
     587
     588  HeapFree( GetProcessHeap(), 0, lpiID);
     589  return 0;
     590}
     591#endif
     592/*************************************************************************
     593 *                      InternalExtractIcon             [SHELL.39]
     594 *
     595 * This abortion is called directly by Progman
     596 */
     597HGLOBAL WINAPI InternalExtractIcon(HINSTANCE hInstance,
     598                                     LPCSTR lpszExeFileName, UINT nIconIndex, WORD n )
     599{       HGLOBAL hRet = 0;
     600        HGLOBAL*        RetPtr = NULL;
     601        LPBYTE          pData;
     602        OFSTRUCT        ofs;
     603        DWORD           sig;
     604        HFILE           hFile = OpenFile( lpszExeFileName, &ofs, OF_READ );
     605        UINT            iconDirCount = 0,iconCount = 0;
     606        LPBYTE          peimage;
     607        HANDLE  fmapping;
     608
     609        TRACE("(%04x,file %s,start %d,extract %d\n",
     610                       hInstance, lpszExeFileName, nIconIndex, n);
     611
     612        if( hFile == HFILE_ERROR || !n )
     613          return 0;
     614
     615        hRet = GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, sizeof(HICON16)*n);
     616        RetPtr = (HGLOBAL*)GlobalLock(hRet);
     617
     618        *RetPtr = (n == 0xFFFF)? 0: 1;  /* error return values */
     619
     620        sig = SHELL_GetResourceTable(hFile,&pData);
     621#if 0 //CB: some functions not (yet) supported
     622        if( sig==IMAGE_OS2_SIGNATURE || sig==1 ) /* .ICO file */
     623        { HICON  hIcon = 0;
     624          NE_TYPEINFO* pTInfo = (NE_TYPEINFO*)(pData + 2);
     625          NE_NAMEINFO* pIconStorage = NULL;
     626          NE_NAMEINFO* pIconDir = NULL;
     627          LPicoICONDIR lpiID = NULL;
     628
     629          if( pData == (BYTE*)-1 )
     630          { hIcon = ICO_GetIconDirectory(hInstance, hFile, &lpiID);     /* check for .ICO file */
     631            if( hIcon )
     632            { iconDirCount = 1; iconCount = lpiID->idCount;
     633            }
     634          }
     635          else while( pTInfo->type_id && !(pIconStorage && pIconDir) )
     636          { if( pTInfo->type_id == NE_RSCTYPE_GROUP_ICON )      /* find icon directory and icon repository */
     637            { iconDirCount = pTInfo->count;
     638              pIconDir = ((NE_NAMEINFO*)(pTInfo + 1));
     639              TRACE("\tfound directory - %i icon families\n", iconDirCount);
     640            }
     641            if( pTInfo->type_id == NE_RSCTYPE_ICON )
     642            { iconCount = pTInfo->count;
     643              pIconStorage = ((NE_NAMEINFO*)(pTInfo + 1));
     644              TRACE("\ttotal icons - %i\n", iconCount);
     645            }
     646            pTInfo = (NE_TYPEINFO *)((char*)(pTInfo+1)+pTInfo->count*sizeof(NE_NAMEINFO));
     647          }
     648
     649          /* load resources and create icons */
     650
     651          if( (pIconStorage && pIconDir) || lpiID )
     652          { if( nIconIndex == (UINT16)-1 )
     653            { RetPtr[0] = iconDirCount;
     654            }
     655            else if( nIconIndex < iconDirCount )
     656            { UINT   i, icon;
     657              if( n > iconDirCount - nIconIndex )
     658                n = iconDirCount - nIconIndex;
     659
     660              for( i = nIconIndex; i < nIconIndex + n; i++ )
     661              { /* .ICO files have only one icon directory */
     662
     663                if( lpiID == NULL )
     664                  hIcon = SHELL_LoadResource( hInstance, hFile, pIconDir + i, *(WORD*)pData );
     665                RetPtr[i-nIconIndex] = GetIconID( hIcon, 3 );
     666                GlobalFree(hIcon);
     667              }
     668
     669              for( icon = nIconIndex; icon < nIconIndex + n; icon++ )
     670              { hIcon = 0;
     671                if( lpiID )
     672                { hIcon = ICO_LoadIcon( hInstance, hFile, lpiID->idEntries + RetPtr[icon-nIconIndex]);
     673                }
     674                else
     675                { for( i = 0; i < iconCount; i++ )
     676                  { if( pIconStorage[i].id == (RetPtr[icon-nIconIndex] | 0x8000) )
     677                    { hIcon = SHELL_LoadResource( hInstance, hFile, pIconStorage + i,*(WORD*)pData );
     678                    }
     679                  }
     680                }
     681                if( hIcon )
     682                { RetPtr[icon-nIconIndex] = LoadIconHandler16( hIcon, TRUE );
     683                  FarSetOwner16( RetPtr[icon-nIconIndex], GetExePtr(hInstance) );
     684                }
     685                else
     686                { RetPtr[icon-nIconIndex] = 0;
     687                }
     688              }
     689            }
     690          }
     691          if( lpiID )
     692            HeapFree( GetProcessHeap(), 0, lpiID);
     693          else
     694            HeapFree( GetProcessHeap(), 0, pData);
     695        }
     696#endif
     697        if( sig == IMAGE_NT_SIGNATURE)
     698        { LPBYTE                idata,igdata;
     699          PIMAGE_DOS_HEADER     dheader;
     700          PIMAGE_NT_HEADERS     pe_header;
     701          PIMAGE_SECTION_HEADER pe_sections;
     702          PIMAGE_RESOURCE_DIRECTORY     rootresdir,iconresdir,icongroupresdir;
     703          PIMAGE_RESOURCE_DATA_ENTRY    idataent,igdataent;
     704          int                   i,j;
     705          PIMAGE_RESOURCE_DIRECTORY_ENTRY       xresent;
     706          CURSORICONDIR         **cids;
     707
     708          fmapping = CreateFileMappingA(hFile,NULL,PAGE_READONLY|SEC_COMMIT,0,0,NULL);
     709          if (fmapping == 0)
     710          { /* FIXME, INVALID_HANDLE_VALUE? */
     711            WARN("failed to create filemap.\n");
     712            hRet = 0;
     713            goto end_2; /* failure */
     714          }
     715          peimage = (BYTE*)MapViewOfFile(fmapping,FILE_MAP_READ,0,0,0);
     716          if (!peimage)
     717          { WARN("failed to mmap filemap.\n");
     718            hRet = 0;
     719            goto end_2; /* failure */
     720          }
     721          dheader = (PIMAGE_DOS_HEADER)peimage;
     722
     723          /* it is a pe header, SHELL_GetResourceTable checked that */
     724          pe_header = (PIMAGE_NT_HEADERS)(peimage+dheader->e_lfanew);
     725
     726          /* probably makes problems with short PE headers... but I haven't seen
     727          * one yet...
     728          */
     729          pe_sections = (PIMAGE_SECTION_HEADER)(((char*)pe_header)+sizeof(*pe_header));
     730          rootresdir = NULL;
     731
     732          for (i=0;i<pe_header->FileHeader.NumberOfSections;i++)
     733          { if (pe_sections[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
     734              continue;
     735            /* FIXME: doesn't work when the resources are not in a seperate section */
     736            if (pe_sections[i].VirtualAddress == pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress)
     737            { rootresdir = (PIMAGE_RESOURCE_DIRECTORY)((char*)peimage+pe_sections[i].PointerToRawData);
     738              break;
     739            }
     740          }
     741
     742          if (!rootresdir)
     743          { WARN("haven't found section for resource directory.\n");
     744            goto end_4; /* failure */
     745          }
     746
     747          icongroupresdir = GetResDirEntryW(rootresdir,RT_GROUP_ICONW, (DWORD)rootresdir,FALSE);
     748
     749          if (!icongroupresdir)
     750          { WARN("No Icongroupresourcedirectory!\n");
     751            goto end_4; /* failure */
     752          }
     753
     754          iconDirCount = icongroupresdir->NumberOfNamedEntries+icongroupresdir->NumberOfIdEntries;
     755
     756          if( nIconIndex == (UINT)-1 )
     757          { RetPtr[0] = iconDirCount;
     758            goto end_3; /* success */
     759          }
     760
     761          if (nIconIndex >= iconDirCount)
     762          { WARN("nIconIndex %d is larger than iconDirCount %d\n",nIconIndex,iconDirCount);
     763            GlobalFree(hRet);
     764            goto end_4; /* failure */
     765          }
     766
     767          cids = (CURSORICONDIR**)HeapAlloc(GetProcessHeap(),0,n*sizeof(CURSORICONDIR*));
     768
     769          /* caller just wanted the number of entries */
     770          xresent = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(icongroupresdir+1);
     771
     772          /* assure we don't get too much ... */
     773          if( n > iconDirCount - nIconIndex )
     774          { n = iconDirCount - nIconIndex;
     775          }
     776
     777          /* starting from specified index ... */
     778          xresent = xresent+nIconIndex;
     779
     780          for (i=0;i<n;i++,xresent++)
     781          { CURSORICONDIR       *cid;
     782            PIMAGE_RESOURCE_DIRECTORY   resdir;
     783
     784            /* go down this resource entry, name */
     785            resdir = (PIMAGE_RESOURCE_DIRECTORY)((DWORD)rootresdir+(xresent->u2.s.OffsetToDirectory));
     786
     787            /* default language (0) */
     788            resdir = GetResDirEntryW(resdir,(LPWSTR)0,(DWORD)rootresdir,TRUE);
     789            igdataent = (PIMAGE_RESOURCE_DATA_ENTRY)resdir;
     790
     791            /* lookup address in mapped image for virtual address */
     792            igdata = NULL;
     793
     794            for (j=0;j<pe_header->FileHeader.NumberOfSections;j++)
     795            { if (igdataent->OffsetToData < pe_sections[j].VirtualAddress)
     796                continue;
     797              if (igdataent->OffsetToData+igdataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData)
     798                continue;
     799              igdata = peimage+(igdataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData);
     800            }
     801
     802            if (!igdata)
     803            { WARN("no matching real address for icongroup!\n");
     804              goto end_4;       /* failure */
     805            }
     806            /* found */
     807            cid = (CURSORICONDIR*)igdata;
     808            cids[i] = cid;
     809            RetPtr[i] = LookupIconIdFromDirectoryEx(igdata,TRUE,GetSystemMetrics(SM_CXICON),GetSystemMetrics(SM_CYICON),0);
     810          }
     811
     812          iconresdir=GetResDirEntryW(rootresdir,RT_ICONW,(DWORD)rootresdir,FALSE);
     813
     814          if (!iconresdir)
     815          { WARN("No Iconresourcedirectory!\n");
     816            goto end_4; /* failure */
     817          }
     818
     819          for (i=0;i<n;i++)
     820          { PIMAGE_RESOURCE_DIRECTORY   xresdir;
     821            xresdir = GetResDirEntryW(iconresdir,(LPWSTR)(DWORD)RetPtr[i],(DWORD)rootresdir,FALSE);
     822            xresdir = GetResDirEntryW(xresdir,(LPWSTR)0,(DWORD)rootresdir,TRUE);
     823            idataent = (PIMAGE_RESOURCE_DATA_ENTRY)xresdir;
     824            idata = NULL;
     825
     826            /* map virtual to address in image */
     827            for (j=0;j<pe_header->FileHeader.NumberOfSections;j++)
     828            { if (idataent->OffsetToData < pe_sections[j].VirtualAddress)
     829                continue;
     830              if (idataent->OffsetToData+idataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData)
     831                continue;
     832              idata = peimage+(idataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData);
     833            }
     834            if (!idata)
     835            { WARN("no matching real address found for icondata!\n");
     836              RetPtr[i]=0;
     837              continue;
     838            }
     839            RetPtr[i] = CreateIconFromResourceEx(idata,idataent->Size,TRUE,0x00030000,GetSystemMetrics(SM_CXICON),GetSystemMetrics(SM_CYICON),0);
     840          }
     841          goto end_3;   /* sucess */
     842        }
     843        goto end_1;     /* return array with icon handles */
     844
     845/* cleaning up (try & catch would be nicer) */
     846end_4:  hRet = 0;       /* failure */
     847end_3:  UnmapViewOfFile(peimage);       /* success */
     848end_2:  CloseHandle(fmapping);
     849end_1:  _lclose( hFile);
     850        return hRet;
     851}
    493852
    494853/*************************************************************************
     
    510869   { if( hIcon == 1 ) /* no icons found in given file */
    511870     { char  tempPath[0x104];
    512        UINT16  uRet = FindExecutableA(lpIconPath,NULL,tempPath);
     871       UINT  uRet = FindExecutableA(lpIconPath,NULL,tempPath);
    513872
    514873       if( uRet > 32 && tempPath[0] )
  • trunk/src/shell32/shell32_Ca.orc

    r3031 r3243  
    1 /* $Id: shell32_Ca.orc,v 1.1 2000-03-06 23:38:57 bird Exp $ */
     1/* $Id: shell32_Ca.orc,v 1.2 2000-03-26 16:34:44 cbratschi Exp $ */
    22LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "D'Acord", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "D'Acord", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine ha estat construit per:", 98, 8, 55, 137, 10
     13 LTEXT "Odin ha estat construit per:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Cs.orc

    r3031 r3243  
    1 /* $Id: shell32_Cs.orc,v 1.1 2000-03-06 23:38:58 bird Exp $ */
     1/* $Id: shell32_Cs.orc,v 1.2 2000-03-26 16:34:44 cbratschi Exp $ */
    22LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Da.orc

    r3031 r3243  
    1 /* $Id: shell32_Da.orc,v 1.1 2000-03-06 23:38:58 bird Exp $ */
     1/* $Id: shell32_Da.orc,v 1.2 2000-03-26 16:34:45 cbratschi Exp $ */
    22LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine havde ikke været mulig uden hjælp fra disse personer:", 98, 8, 55, 137, 10
     13 LTEXT "Odin havde ikke været mulig uden hjælp fra disse personer:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_De.orc

    r3031 r3243  
    1 /* $Id: shell32_De.orc,v 1.1 2000-03-06 23:38:59 bird Exp $ */
     1/* $Id: shell32_De.orc,v 1.2 2000-03-26 16:34:45 cbratschi Exp $ */
    22LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin wurde entwickelt von:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_En.orc

    r3031 r3243  
    1 /* $Id: shell32_En.orc,v 1.1 2000-03-06 23:38:59 bird Exp $ */
     1/* $Id: shell32_En.orc,v 1.2 2000-03-26 16:34:45 cbratschi Exp $ */
    22LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
    33
     
    88FONT 10, "System"
    99{
    10  DEFPUSHBUTTON "OK", 1, 156, 147, 50, 12, WS_TABSTOP
     10 DEFPUSHBUTTON "OK", IDOK, 156, 147, 50, 12, WS_TABSTOP
    1111 LISTBOX 99, 8, 85, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1212 ICON "", 1088, 189, 50, 14, 16
     
    2121FONT 10, "System"
    2222{
    23  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12, WS_TABSTOP
     23 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12, WS_TABSTOP
    2424 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    2525 ICON "", 1088, 189, 10, 14, 16
     
    2828}
    2929#endif
     30
     31/*      columns in the shellview        */
     32STRINGTABLE LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
     33BEGIN
     34        IDS_SHV_COLUMN1         "File"
     35        IDS_SHV_COLUMN2         "Size"
     36        IDS_SHV_COLUMN3         "Type"
     37        IDS_SHV_COLUMN4         "Modified"
     38        IDS_SHV_COLUMN5         "Attrs"
     39        IDS_SHV_COLUMN3DV       "Size"
     40        IDS_SHV_COLUMN4DV       "Size available"
     41
     42END
     43
     44STRINGTABLE DISCARDABLE
     45{
     46        IDS_SHV_INVALID_FILENAME_TITLE  "Rename"
     47        IDS_SHV_INVALID_FILENAME        "A filename cannot contain any of the following characters: \n                          / \\ : * ? \" < > |"
     48        IDS_SHV_INVALID_MOVE_TITLE      "Error Renaming File"
     49        IDS_SHV_INVALID_MOVE            "Cannot rename %s: A file with the same you specified already exists.  Specify a different filename."
     50}
     51
     52STRINGTABLE DISCARDABLE
     53{
     54    IDS_ABOUTBOX            "&About FolderPicker Test"
     55    IDS_DOCUMENTFOLDERS     "Document Folders"
     56    IDS_PERSONAL            "My Documents"
     57    IDS_FAVORITES           "My Favorites"
     58    IDS_PATH                "System Path"
     59    IDS_DESKTOP             "Desktop"
     60    IDS_FONTS               "Fonts"
     61    IDS_MYCOMPUTER          "My Computer"
     62    IDS_SYSTEMFOLDERS       "System Folders"
     63    IDS_LOCALHARDRIVES      "Local Hard Drives"
     64    IDS_FILENOTFOUND        "File not found"
     65}
     66
  • trunk/src/shell32/shell32_Eo.orc

    r3031 r3243  
    1 /* $Id: shell32_Eo.orc,v 1.1 2000-03-06 23:39:00 bird Exp $ */
     1/* $Id: shell32_Eo.orc,v 1.2 2000-03-26 16:34:45 cbratschi Exp $ */
    22LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "Enorde", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "Enorde", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Es.orc

    r3031 r3243  
    1 /* $Id: shell32_Es.orc,v 1.1 2000-03-06 23:39:00 bird Exp $ */
     1/* $Id: shell32_Es.orc,v 1.2 2000-03-26 16:34:46 cbratschi Exp $ */
    22LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "Aceptar", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "Aceptar", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine es disponible gracias a:", 98, 8, 55, 137, 10
     13 LTEXT "Odin es disponible gracias a:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Fi.orc

    r3031 r3243  
    1 /* $Id: shell32_Fi.orc,v 1.1 2000-03-06 23:39:01 bird Exp $ */
     1/* $Id: shell32_Fi.orc,v 1.2 2000-03-26 16:34:46 cbratschi Exp $ */
    22LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "Järjestelmä"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine:n tekijät:", 98, 8, 55, 137, 10
     13 LTEXT "Odin:n tekijät:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Fr.orc

    r3031 r3243  
    1 /* $Id: shell32_Fr.orc,v 1.1 2000-03-06 23:39:01 bird Exp $ */
     1/* $Id: shell32_Fr.orc,v 1.2 2000-03-26 16:34:46 cbratschi Exp $ */
    22LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine est une réalisation de:", 98, 8, 55, 137, 10
     13 LTEXT "Odin est une r‚alisation de:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Hu.orc

    r3031 r3243  
    1 /* $Id: shell32_Hu.orc,v 1.1 2000-03-06 23:39:02 bird Exp $ */
     1/* $Id: shell32_Hu.orc,v 1.2 2000-03-26 16:34:47 cbratschi Exp $ */
    22LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_It.orc

    r3031 r3243  
    1 /* $Id: shell32_It.orc,v 1.1 2000-03-06 23:39:02 bird Exp $ */
     1/* $Id: shell32_It.orc,v 1.2 2000-03-26 16:34:47 cbratschi Exp $ */
    22LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Nl.orc

    r3031 r3243  
    1 /* $Id: shell32_Nl.orc,v 1.1 2000-03-06 23:39:03 bird Exp $ */
     1/* $Id: shell32_Nl.orc,v 1.2 2000-03-26 16:34:47 cbratschi Exp $ */
    22LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12, WS_TABSTOP
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12, WS_TABSTOP
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine is geschreven door:", 98, 8, 55, 137, 10
     13 LTEXT "Odin is geschreven door:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_No.orc

    r3031 r3243  
    1 /* $Id: shell32_No.orc,v 1.1 2000-03-06 23:39:04 bird Exp $ */
     1/* $Id: shell32_No.orc,v 1.2 2000-03-26 16:34:48 cbratschi Exp $ */
    22LANGUAGE LANG_NORWEGIAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Pl.orc

    r3031 r3243  
    1 /* $Id: shell32_Pl.orc,v 1.1 2000-03-06 23:39:04 bird Exp $ */
     1/* $Id: shell32_Pl.orc,v 1.2 2000-03-26 16:34:48 cbratschi Exp $ */
    22LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
     13 LTEXT "Odin was brought to you by:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Pt.orc

    r3031 r3243  
    1 /* $Id: shell32_Pt.orc,v 1.1 2000-03-06 23:39:05 bird Exp $ */
     1/* $Id: shell32_Pt.orc,v 1.2 2000-03-26 16:34:48 cbratschi Exp $ */
    22LANGUAGE LANG_PORTUGUESE, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine foi disponibilizado por:", 98, 8, 55, 137, 10
     13 LTEXT "Odin foi disponibilizado por:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Ru.orc

    r3031 r3243  
    1 /* $Id: shell32_Ru.orc,v 1.1 2000-03-06 23:39:06 bird Exp $ */
     1/* $Id: shell32_Ru.orc,v 1.2 2000-03-26 16:34:49 cbratschi Exp $ */
    22LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12, WS_TABSTOP
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12, WS_TABSTOP
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Ðàçðàáîò÷èêè Wine :", 98, 8, 55, 137, 10
     13 LTEXT "Ðàçðàáîò÷èêè Odin :", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Sv.orc

    r3031 r3243  
    1 /* $Id: shell32_Sv.orc,v 1.1 2000-03-06 23:39:07 bird Exp $ */
     1/* $Id: shell32_Sv.orc,v 1.2 2000-03-26 16:34:49 cbratschi Exp $ */
    22LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
    33
     
    77FONT 10, "System"
    88{
    9  DEFPUSHBUTTON "OK", 1, 153, 130, 50, 12
     9 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12
    1010 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1111 ICON "", 1088, 189, 10, 14, 16
    1212 LTEXT "", 100, 8, 10, 137, 33
    13  LTEXT "Wine hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
     13 LTEXT "Odin hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
    1414}
    1515
  • trunk/src/shell32/shell32_Wa.orc

    r3031 r3243  
    1 /* $Id: shell32_Wa.orc,v 1.1 2000-03-06 23:39:08 bird Exp $ */
     1/* $Id: shell32_Wa.orc,v 1.2 2000-03-26 16:34:49 cbratschi Exp $ */
    22LANGUAGE LANG_WALON, SUBLANG_DEFAULT
    33
     
    1212FONT 10, "System"
    1313{
    14  DEFPUSHBUTTON "I Va", 1, 153, 130, 50, 12
     14 DEFPUSHBUTTON "I Va", IDOK, 153, 130, 50, 12
    1515 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
    1616 ICON "", 1088, 189, 10, 14, 16
    1717 LTEXT "", 100, 8, 10, 137, 33
    18  LTEXT "Wine a estu fwait par:", 98, 8, 55, 137, 10
     18 LTEXT "Odin a estu fwait par:", 98, 8, 55, 137, 10
    1919}
    2020
  • trunk/src/shell32/shell32_main.cpp

    r2477 r3243  
    1 /* $Id: shell32_main.cpp,v 1.8 2000-01-18 22:27:56 sandervl Exp $ */
     1/* $Id: shell32_main.cpp,v 1.9 2000-03-26 16:34:49 cbratschi Exp $ */
    22
    33/*
     
    1111 *  1998 Marcus Meissner
    1212 *  1998 Juergen Schmied (jsch)  *  <juergen.schmied@metronet.de>
     13 *
     14 * Corel WINE 20000324 level
    1315 */
    1416
     
    6163#define MORE_DEBUG 1
    6264
     65BOOL VERSION_OsIsUnicode(VOID)
     66{
     67  return FALSE;
     68}
    6369
    6470/*************************************************************************
     
    330336                                   UINT,      nIconIndex )
    331337{
    332   dprintf(("SHELL32:Shell32_Main:ExtractIconA not implemented.\n"));
    333 
    334 #if 0
    335 //@@@PH
    336 HGLOBAL handle = InternalExtractIconA(hInstance,lpszExeFileName,nIconIndex, 1);
     338  HGLOBAL handle = InternalExtractIcon(hInstance,lpszExeFileName,nIconIndex, 1);
    337339    TRACE_(shell)("\n");
    338340    if( handle )
     
    344346   return hIcon;
    345347    }
    346 #endif
    347     return 0;
     348   return 0;
    348349}
    349350
     
    423424#define     DROP_FIELD_TOP                  (-15)
    424425#define     DROP_FIELD_HEIGHT            15
     426
     427#if 0 //CB: not used
     428extern HICON hIconTitleFont;
     429#endif
    425430
    426431static BOOL __get_dropline( HWND hWnd, LPRECT lprect )
     
    442447                                     PAPPBARDATA, data)
    443448{
    444   dprintf(("SHELL32:Shell32_Main:SHAppBarMessage not implemented.\n"));
    445 
    446    switch (msg)
    447    { case ABM_GETSTATE:
    448       return ABS_ALWAYSONTOP | ABS_AUTOHIDE;
    449      case ABM_GETTASKBARPOS:
    450       /* fake a taskbar on the bottom of the desktop */
    451       { RECT rec;
    452         GetWindowRect(GetDesktopWindow(), &rec);
    453         rec.left = 0;
    454         rec.top = rec.bottom - 2;
    455       }
    456       return TRUE;
    457      case ABM_ACTIVATE:
    458      case ABM_GETAUTOHIDEBAR:
    459      case ABM_NEW:
    460      case ABM_QUERYPOS:
    461      case ABM_REMOVE:
    462      case ABM_SETAUTOHIDEBAR:
    463      case ABM_SETPOS:
    464      case ABM_WINDOWPOSCHANGED:
     449  int width=data->rc.right - data->rc.left;
     450  int height=data->rc.bottom - data->rc.top;
     451  RECT rec=data->rc;
     452
     453  dprintf(("SHELL32: SHAppBarMessage.\n"));
     454
     455        switch (msg)
     456        { case ABM_GETSTATE:
     457               return ABS_ALWAYSONTOP | ABS_AUTOHIDE;
     458          case ABM_GETTASKBARPOS:
     459               GetWindowRect(data->hWnd, &rec);
     460               data->rc=rec;
     461               return TRUE;
     462          case ABM_ACTIVATE:
     463               SetActiveWindow(data->hWnd);
     464               return TRUE;
     465          case ABM_GETAUTOHIDEBAR:
     466               data->hWnd=GetActiveWindow();
     467               return TRUE;
     468          case ABM_NEW:
     469               SetWindowPos(data->hWnd,HWND_TOP,rec.left,rec.top,
     470                                        width,height,SWP_SHOWWINDOW);
     471               return TRUE;
     472          case ABM_QUERYPOS:
     473               GetWindowRect(data->hWnd, &(data->rc));
     474               return TRUE;
     475          case ABM_REMOVE:
     476               CloseHandle(data->hWnd);
     477               return TRUE;
     478          case ABM_SETAUTOHIDEBAR:
     479               SetWindowPos(data->hWnd,HWND_TOP,rec.left+1000,rec.top,
     480                                       width,height,SWP_SHOWWINDOW);
     481               return TRUE;
     482          case ABM_SETPOS:
     483               data->uEdge=(ABE_RIGHT | ABE_LEFT);
     484               SetWindowPos(data->hWnd,HWND_TOP,data->rc.left,data->rc.top,
     485                                  width,height,SWP_SHOWWINDOW);
     486               return TRUE;
     487          case ABM_WINDOWPOSCHANGED:
     488               SetWindowPos(data->hWnd,HWND_TOP,rec.left,rec.top,
     489                                        width,height,SWP_SHOWWINDOW);
     490               return TRUE;
     491          }
    465492      return FALSE;
    466    }
    467    return 0;
    468493}
    469494
     
    484509/*************************************************************************
    485510 * SHLoadInProc                                [SHELL32.225]
    486  *
     511 * Create an instance of specified object class from within the shell process
    487512 */
    488513
    489514ODINFUNCTION1(DWORD, SHLoadInProc, DWORD, dwArg1)
    490515{
    491   dprintf(("SHELL32:Shell32_Main:SHLoadInProc not implemented.\n"));
    492   return 0;
     516  CLSID *id;
     517
     518  dprintf(("SHELL32: SHLoadInProc\n"));
     519
     520  CLSIDFromString((LPCOLESTR) dwArg1, id);
     521  if (S_OK==SHCoCreateInstance( (LPSTR) dwArg1, id, NULL, &IID_IUnknown, NULL) )
     522        return NOERROR;
     523  return DISP_E_MEMBERNOTFOUND;
    493524}
    494525
     
    518549    }
    519550
     551    cmd[0] = '\0';
    520552    retval = SHELL_FindExecutable( lpFile, lpOperation, cmd );
    521553
     
    531563        retval = WinExec( cmd, iShowCmd );
    532564    }
     565    else if(PathIsURLA((LPSTR)lpFile))    /* File not found, check for URL */
     566    {
     567      char lpstrProtocol[256];
     568      LONG cmdlen = 512;
     569      LPSTR lpstrRes;
     570      INT iSize;
     571
     572      lpstrRes = strchr(lpFile,':');
     573      iSize = lpstrRes - lpFile;
     574
     575      /* Looking for ...protocol\shell\lpOperation\command */
     576      strncpy(lpstrProtocol,lpFile,iSize);
     577      lpstrProtocol[iSize]='\0';
     578      strcat( lpstrProtocol, "\\shell\\" );
     579      strcat( lpstrProtocol, lpOperation );
     580      strcat( lpstrProtocol, "\\command" );
     581
     582      /* Remove File Protocol from lpFile */
     583      /* In the case file://path/file     */
     584      if(!strnicmp(lpFile,"file",iSize))
     585      {
     586        lpFile += iSize;
     587        while(*lpFile == ':') lpFile++;
     588      }
     589
     590
     591      /* Get the application for the protocol and execute it */
     592      if (RegQueryValueA( HKEY_CLASSES_ROOT, lpstrProtocol, cmd,
     593                           &cmdlen ) == ERROR_SUCCESS )
     594      {
     595          LPSTR tok;
     596          LPSTR tmp;
     597          char param[256] = "";
     598          LONG paramlen = 256;
     599
     600          /* Get the parameters needed by the application
     601             from the associated ddeexec key */
     602          tmp = strstr(lpstrProtocol,"command");
     603          tmp[0] = '\0';
     604          strcat(lpstrProtocol,"ddeexec");
     605
     606          if(RegQueryValueA( HKEY_CLASSES_ROOT, lpstrProtocol, param,&paramlen ) == ERROR_SUCCESS)
     607          {
     608            strcat(cmd," ");
     609            strcat(cmd,param);
     610            cmdlen += paramlen;
     611          }
     612
     613          /* Is there a replace() function anywhere? */
     614          cmd[cmdlen]='\0';
     615          tok=strstr( cmd, "%1" );
     616          if (tok != NULL)
     617          {
     618            tok[0]='\0'; /* truncate string at the percent */
     619            strcat( cmd, lpFile ); /* what if no dir in xlpFile? */
     620            tok=strstr( cmd, "%1" );
     621            if ((tok!=NULL) && (strlen(tok)>2))
     622            {
     623              strcat( cmd, &tok[2] );
     624            }
     625          }
     626
     627          retval = WinExec( cmd, iShowCmd );
     628      }
     629    }
     630    /* Check if file specified is in the form www.??????.*** */
     631    else if(!strnicmp(lpFile,"www",3))
     632    {
     633      /* if so, append lpFile http:// and call ShellExecute */
     634      char lpstrTmpFile[256] = "http://" ;
     635      strcat(lpstrTmpFile,lpFile);
     636      retval = ShellExecuteA(hWnd,lpOperation,lpstrTmpFile,NULL,NULL,0);
     637    }
     638    /* Nothing was done yet, try to execute the cmdline directly,
     639       maybe it's an OS/2 program */
     640    else
     641    {
     642      strcpy(cmd,lpFile);
     643      strcat(cmd,lpParameters ? lpParameters : "");
     644      retval = WinExec( cmd, iShowCmd );
     645    }
     646
    533647    if (lpDirectory)
    534648      SetCurrentDirectoryA( old_dir );
     
    585699            HWND hwndOdinLogo = GetDlgItem(hWnd, IDC_ODINLOGO);
    586700            if(hwndOdinLogo) {
    587                         HBITMAP hBitmap = LoadBitmapA(shell32_hInstance, MAKEINTRESOURCEA(IDB_ODINLOGO));
    588                         SendMessageA(hwndOdinLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
     701                        HBITMAP hBitmap = LoadBitmapA(shell32_hInstance, MAKEINTRESOURCEA(IDB_ODINLOGO));
     702                        SendMessageA(hwndOdinLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
    589703            }
    590704
    591705            hWndCtl = GetDlgItem(hWnd, IDC_LISTBOX);
    592706            SendMessageA( hWndCtl, WM_SETREDRAW, 0, 0 );
     707#if 0 //CB: not used
     708            SendMessageA( hWndCtl, WM_SETFONT, hIconTitleFont, 0 );
     709#endif
    593710            while (*pstr)
    594711            {
     
    730847    info.szOtherStuff = szOtherStuff;
    731848    info.hIcon        = hIcon;
    732     if (!hIcon) info.hIcon = LoadIconA( 0, (LPCSTR)OIC_ODINICON );
     849    if (!hIcon) info.hIcon = LoadIconA( 0, MAKEINTRESOURCEA(OIC_ODINICON) );
    733850    return DialogBoxIndirectParamA( GetWindowLongA( hWnd, GWL_HINSTANCE ),
    734851                                    (DLGTEMPLATE*)dlgTemplate , hWnd, AboutDlgProc, (LPARAM)&info );
     
    756873    info.szOtherStuff = HEAP_strdupWtoA( GetProcessHeap(), 0, szOtherStuff );
    757874    info.hIcon        = hIcon;
    758     if (!hIcon) info.hIcon = LoadIconA( 0, (LPCSTR)OIC_ODINICON );
     875    if (!hIcon) info.hIcon = LoadIconA( 0, MAKEINTRESOURCEA(OIC_ODINICON) );
    759876    ret = DialogBoxIndirectParamA( GetWindowLongA( hWnd, GWL_HINSTANCE ),
    760877                                   (DLGTEMPLATE*)dlgTemplate, hWnd, AboutDlgProc, (LPARAM)&info );
     
    762879    HeapFree( GetProcessHeap(), 0, (LPSTR)info.szOtherStuff );
    763880    return ret;
    764 }
    765 
    766 /*************************************************************************
    767  * Shell_NotifyIcon                            [SHELL32.297]
    768  * FIXME
    769  * This function is supposed to deal with the systray.
    770  * Any ideas on how this is to be implimented?
    771  */
    772 
    773 ODINFUNCTION2(BOOL, Shell_NotifyIconA, DWORD,            dwMessage,
    774                                        PNOTIFYICONDATAA, pnid )
    775 {
    776   dprintf(("SHELL32:Shell32_Main:Shell_NotifyIconA not implemented\n"));
    777   return FALSE;
    778 }
    779 
    780 /*************************************************************************
    781  * Shell_NotifyIcon                            [SHELL32.?]
    782  * FIXME
    783  * This function is supposed to deal with the systray.
    784  * Any ideas on how this is to be implimented?
    785  */
    786 
    787 ODINFUNCTION2(BOOL, Shell_NotifyIconW, DWORD,            dwMessage,
    788                                        PNOTIFYICONDATAW, pnid )
    789 {
    790   dprintf(("SHELL32:Shell32_Main:Shell_NotifyIconA not implemented\n"));
    791   return FALSE;
    792 }
    793 
    794 
    795 /*************************************************************************
    796  * Shell_NotifyIcon                            [SHELL32.296]
    797  * FIXME
    798  * This function is supposed to deal with the systray.
    799  * Any ideas on how this is to be implimented?
    800  */
    801 
    802 BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATAA pnid )
    803 {
    804   if (VERSION_OsIsUnicode())
    805     return(Shell_NotifyIconW(dwMessage,(PNOTIFYICONDATAW)pnid));
    806   else
    807     return(Shell_NotifyIconA(dwMessage,pnid));
    808881}
    809882
     
    9841057
    9851058       SIC_Initialize();
     1059       SYSTRAY_Init();
    9861060
    9871061       break;
     
    10251099   return TRUE;
    10261100}
     1101
     1102/*************************************************************************
     1103 * DllInstall         [SHELL32.202]
     1104 *
     1105 * PARAMETERS
     1106 *
     1107 *    BOOL bInstall - TRUE for install, FALSE for uninstall
     1108 *    LPCWSTR pszCmdLine - command line (unused by shell32?)
     1109 */
     1110
     1111HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
     1112{
     1113   FIXME("(%s, %s): stub!\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline));
     1114
     1115   return S_OK;         /* indicate success */
     1116}
     1117
  • trunk/src/shell32/shell32_main.h

    r1543 r3243  
    1 /* $Id: shell32_main.h,v 1.2 1999-11-02 18:50:16 phaller Exp $ */
     1/* $Id: shell32_main.h,v 1.3 2000-03-26 16:34:50 cbratschi Exp $ */
    22
    33/*
     
    77 * Project Odin Software License can be found in LICENSE.TXT
    88 *
     9 * Corel WINE 20000324 level
    910 */
    1011
    1112/*
    12  *      internal Shell32 Library definitions
     13 *      internal Shell32 Library definitions
    1314 */
    1415
     
    4243 **/
    4344
    44 #define VERSION_OsIsUnicode() FALSE
    45 
    4645/*******************************************
    4746*  global SHELL32.DLL variables
    4847*/
    4948extern HINSTANCE shell32_hInstance;
    50 extern INT        shell32_ObjCount;
    51 extern HIMAGELIST       ShellSmallIconList;
    52 extern HIMAGELIST       ShellBigIconList;
    53 extern HDPA             sic_hdpa;
     49extern INT        shell32_ObjCount;
     50extern HIMAGELIST       ShellSmallIconList;
     51extern HIMAGELIST       ShellBigIconList;
     52extern HDPA             sic_hdpa;
    5453
    5554/*******************************************
    5655* pointer to functions dynamically loaded
    5756*/
    58 extern void     (WINAPI* pDLLInitComctl)(LPVOID);
    59 extern INT      (WINAPI* pImageList_AddIcon) (HIMAGELIST himl, HICON hIcon);
    60 extern INT      (WINAPI* pImageList_ReplaceIcon) (HIMAGELIST, INT, HICON);
     57extern void     (WINAPI* pDLLInitComctl)(LPVOID);
     58extern INT      (WINAPI* pImageList_AddIcon) (HIMAGELIST himl, HICON hIcon);
     59extern INT      (WINAPI* pImageList_ReplaceIcon) (HIMAGELIST, INT, HICON);
    6160extern HIMAGELIST (WINAPI* pImageList_Create) (INT,INT,UINT,INT,INT);
    62 extern BOOL     (WINAPI* pImageList_Draw) (HIMAGELIST himl, int i, HDC hdcDest, int x, int y, UINT fStyle);
    63 extern HICON    (WINAPI* pImageList_GetIcon) (HIMAGELIST, INT, UINT);
    64 extern INT      (WINAPI* pImageList_GetImageCount)(HIMAGELIST);
     61extern BOOL     (WINAPI* pImageList_Draw) (HIMAGELIST himl, int i, HDC hdcDest, int x, int y, UINT fStyle);
     62extern HICON    (WINAPI* pImageList_GetIcon) (HIMAGELIST, INT, UINT);
     63extern INT      (WINAPI* pImageList_GetImageCount)(HIMAGELIST);
    6564extern COLORREF (WINAPI *pImageList_SetBkColor)(HIMAGELIST, COLORREF);
    6665
    67 extern LPVOID   (WINAPI* pCOMCTL32_Alloc) (INT);
    68 extern BOOL     (WINAPI* pCOMCTL32_Free) (LPVOID);
     66extern LPVOID   (WINAPI* pCOMCTL32_Alloc) (INT);
     67extern BOOL     (WINAPI* pCOMCTL32_Free) (LPVOID);
    6968
    70 extern HDPA     (WINAPI* pDPA_Create) (INT);
    71 extern INT      (WINAPI* pDPA_InsertPtr) (const HDPA, INT, LPVOID);
    72 extern BOOL     (WINAPI* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM);
    73 extern LPVOID   (WINAPI* pDPA_GetPtr) (const HDPA, INT);
    74 extern BOOL     (WINAPI* pDPA_Destroy) (const HDPA);
    75 extern INT      (WINAPI* pDPA_Search) (const HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
    76 extern LPVOID   (WINAPI* pDPA_DeletePtr) (const HDPA hdpa, INT i);
     69extern HDPA     (WINAPI* pDPA_Create) (INT);
     70extern INT      (WINAPI* pDPA_InsertPtr) (const HDPA, INT, LPVOID);
     71extern BOOL     (WINAPI* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM);
     72extern LPVOID   (WINAPI* pDPA_GetPtr) (const HDPA, INT);
     73extern BOOL     (WINAPI* pDPA_Destroy) (const HDPA);
     74extern INT      (WINAPI* pDPA_Search) (const HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
     75extern LPVOID   (WINAPI* pDPA_DeletePtr) (const HDPA hdpa, INT i);
    7776#define pDPA_GetPtrCount(hdpa)  (*(INT*)(hdpa))
    7877
     
    8887
    8988BOOL WINAPI Shell_GetImageList(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList);
     89
     90HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
     91HRESULT WINAPI StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
    9092HRESULT WINAPI StrRetToStrN (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
    9193
     
    103105BOOL HCR_GetFolderAttributes (REFIID riid, LPDWORD szDest);
    104106
    105 DWORD   WINAPI ParseFieldA(LPCSTR src,DWORD field,LPSTR dst,DWORD len);
     107DWORD   WINAPI ParseFieldA(LPCSTR src,DWORD field,LPSTR dst,DWORD len);
    106108
    107 HGLOBAL WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID);
    108 LPVOID  WINAPI SHLockShared(HANDLE hmem, DWORD procID);
    109 BOOL    WINAPI SHUnlockShared(HANDLE pmem);
    110 HANDLE  WINAPI SHFreeShared(HANDLE hmem, DWORD procID);
     109HGLOBAL WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID);
     110LPVOID  WINAPI SHLockShared(HANDLE hmem, DWORD procID);
     111BOOL    WINAPI SHUnlockShared(HANDLE pmem);
     112HANDLE  WINAPI SHFreeShared(HANDLE hmem, DWORD procID);
    111113
    112114/****************************************************************************
    113115 * Class constructors
    114116 */
    115 LPDATAOBJECT    IDataObject_Constructor(HWND hwndOwner, LPITEMIDLIST myPidl, LPITEMIDLIST * apidl, UINT cidl);
    116 LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT, const FORMATETC []);
     117LPDATAOBJECT    IDataObject_Constructor(HWND hwndOwner, LPITEMIDLIST myPidl, LPITEMIDLIST * apidl, UINT cidl);
     118LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT, const FORMATETC []);
    117119
    118 LPCLASSFACTORY  IClassFactory_Constructor(REFCLSID);
    119 IContextMenu *  IContextMenu_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount);
    120 IContextMenu *  ISvBgCm_Constructor(void);
    121 LPSHELLVIEW     IShellView_Constructor(LPSHELLFOLDER);
    122 LPSHELLLINK     IShellLink_Constructor(BOOL);
     120LPCLASSFACTORY  IClassFactory_Constructor(REFCLSID);
     121IContextMenu *  IContextMenu_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount);
     122IContextMenu *  ISvBgCm_Constructor(void);
     123LPSHELLVIEW     IShellView_Constructor(LPSHELLFOLDER);
     124LPSHELLLINK     IShellLink_Constructor(BOOL);
    123125
    124126IShellFolder * ISF_Desktop_Constructor(void);
    125127
    126128/* kind of enumidlist */
    127 #define EIDL_DESK       0
    128 #define EIDL_MYCOMP     1
    129 #define EIDL_FILE       2
     129#define EIDL_DESK       0
     130#define EIDL_MYCOMP     1
     131#define EIDL_FILE       2
    130132
    131 LPENUMIDLIST    IEnumIDList_Constructor(LPCSTR,DWORD,DWORD);
     133LPENUMIDLIST    IEnumIDList_Constructor(LPCSTR,DWORD,DWORD);
    132134
    133 LPEXTRACTICONA  IExtractIconA_Constructor(LPITEMIDLIST);
    134 HRESULT         CreateStreamOnFile (LPCSTR pszFilename, IStream ** ppstm);     
     135LPEXTRACTICONA  IExtractIconA_Constructor(LPITEMIDLIST);
     136HRESULT         CreateStreamOnFile (LPCSTR pszFilename, IStream ** ppstm);
    135137
    136138/* fixme: rename the functions when the shell32.dll has it's own exports namespace */
     
    149151/* initialisation for FORMATETC */
    150152#define InitFormatEtc(fe, cf, med) \
    151         {\
    152         (fe).cfFormat=cf;\
    153         (fe).dwAspect=DVASPECT_CONTENT;\
    154         (fe).ptd=NULL;\
    155         (fe).tymed=med;\
    156         (fe).lindex=-1;\
    157         };
     153        {\
     154        (fe).cfFormat=cf;\
     155        (fe).dwAspect=DVASPECT_CONTENT;\
     156        (fe).ptd=NULL;\
     157        (fe).tymed=med;\
     158        (fe).lindex=-1;\
     159        };
    158160
    159161#define KeyStateToDropEffect(kst)\
    160         (((kst) & MK_CONTROL) ?\
    161         (((kst) & MK_SHIFT) ? DROPEFFECT_LINK : DROPEFFECT_COPY):\
    162         DROPEFFECT_MOVE)
     162        (((kst) & MK_CONTROL) ?\
     163        (((kst) & MK_SHIFT) ? DROPEFFECT_LINK : DROPEFFECT_COPY):\
     164        DROPEFFECT_MOVE)
     165
     166/* Systray */
     167BOOL SYSTRAY_Init(void);
    163168
    164169#ifdef __cplusplus
  • trunk/src/shell32/shelllink.cpp

    r1215 r3243  
    1 /* $Id: shelllink.cpp,v 1.2 1999-10-09 11:17:04 sandervl Exp $ */
     1/* $Id: shelllink.cpp,v 1.3 2000-03-26 16:34:50 cbratschi Exp $ */
    22/*
    33 *
    4  *      Copyright 1997  Marcus Meissner
    5  *      Copyright 1998  Juergen Schmied
     4 *      Copyright 1997  Marcus Meissner
     5 *      Copyright 1998  Juergen Schmied
    66 *
     7 * Corel WINE 20000324 level
    78 */
    89
     
    3738
    3839/* flag1: lnk elements: simple link has 0x0B */
    39 #define WORKDIR         0x10
    40 #define ARGUMENT        0x20
    41 #define ICON            0x40
    42 #define UNC             0x80
     40#define WORKDIR         0x10
     41#define ARGUMENT        0x20
     42#define ICON            0x40
     43#define UNC             0x80
    4344
    4445/* fStartup */
    45 #define NORMAL          0x01
    46 #define MAXIMIZED       0x03
    47 #define MINIMIZED       0x07
    48 
    49 typedef struct _LINK_HEADER     
    50 {       DWORD   MagicStr;       /* 0x00 'L','\0','\0','\0' */
    51         GUID    MagicGuid;      /* 0x04 is CLSID_ShellLink */
    52         DWORD   Flag1;          /* 0x14 describes elements following */
    53         DWORD   Flag2;          /* 0x18 */
    54         FILETIME Time1;         /* 0x1c */
    55         FILETIME Time2;         /* 0x24 */
    56         FILETIME Time3;         /* 0x2c */
    57         DWORD   Unknown1;       /* 0x34 */
    58         DWORD   Unknown2;       /* 0x38 icon number */
    59         DWORD   fStartup;       /* 0x3c startup type */
    60         DWORD   wHotKey;        /* 0x40 hotkey */
    61         DWORD   Unknown5;       /* 0x44 */
    62         DWORD   Unknown6;       /* 0x48 */
    63         USHORT  PidlSize;       /* 0x4c */
    64         ITEMIDLIST Pidl;        /* 0x4e */
     46#define NORMAL          0x01
     47#define MAXIMIZED       0x03
     48#define MINIMIZED       0x07
     49
     50typedef struct _LINK_HEADER
     51{       DWORD   MagicStr;       /* 0x00 'L','\0','\0','\0' */
     52        GUID    MagicGuid;      /* 0x04 is CLSID_ShellLink */
     53        DWORD   Flag1;          /* 0x14 describes elements following */
     54        DWORD   Flag2;          /* 0x18 */
     55        FILETIME Time1;         /* 0x1c */
     56        FILETIME Time2;         /* 0x24 */
     57        FILETIME Time3;         /* 0x2c */
     58        DWORD   Unknown1;       /* 0x34 */
     59        DWORD   Unknown2;       /* 0x38 icon number */
     60        DWORD   fStartup;       /* 0x3c startup type */
     61        DWORD   wHotKey;        /* 0x40 hotkey */
     62        DWORD   Unknown5;       /* 0x44 */
     63        DWORD   Unknown6;       /* 0x48 */
     64        USHORT  PidlSize;       /* 0x4c */
     65        ITEMIDLIST Pidl;        /* 0x4e */
    6566} LINK_HEADER, * PLINK_HEADER;
    6667
     
    6970#include "poppack.h"
    7071
    71 //static ICOM_VTABLE(IShellLink)                slvt;
    72 //static ICOM_VTABLE(IShellLinkW)               slvtw;
    73 //static ICOM_VTABLE(IPersistFile)      pfvt;
    74 //static ICOM_VTABLE(IPersistStream)    psvt;
     72//static ICOM_VTABLE(IShellLink)                slvt;
     73//static ICOM_VTABLE(IShellLinkW)               slvtw;
     74//static ICOM_VTABLE(IPersistFile)      pfvt;
     75//static ICOM_VTABLE(IPersistStream)    psvt;
    7576
    7677/* IShellLink Implementation */
     
    7879typedef struct
    7980{
    80         ICOM_VTABLE(IShellLink)*        lpvtbl;
    81         DWORD                           ref;
    82 
    83         ICOM_VTABLE(IShellLinkW)*       lpvtblw;
    84         ICOM_VTABLE(IPersistFile)*      lpvtblPersistFile;
    85         ICOM_VTABLE(IPersistStream)*    lpvtblPersistStream;
    86        
    87         /* internal stream of the IPersistFile interface */
    88         IStream*                        lpFileStream;
    89        
    90         /* data structures according to the informations in the lnk */
    91         LPSTR           sPath;
    92         LPITEMIDLIST    pPidl;
    93         WORD            wHotKey;
    94         SYSTEMTIME      time1;
    95         SYSTEMTIME      time2;
    96         SYSTEMTIME      time3;
     81        ICOM_VTABLE(IShellLink)*        lpvtbl;
     82        DWORD                           ref;
     83
     84        ICOM_VTABLE(IShellLinkW)*       lpvtblw;
     85        ICOM_VTABLE(IPersistFile)*      lpvtblPersistFile;
     86        ICOM_VTABLE(IPersistStream)*    lpvtblPersistStream;
     87
     88        /* internal stream of the IPersistFile interface */
     89        IStream*                        lpFileStream;
     90
     91        /* data structures according to the informations in the lnk */
     92        LPSTR           sPath;
     93        LPITEMIDLIST    pPidl;
     94        WORD            wHotKey;
     95        SYSTEMTIME      time1;
     96        SYSTEMTIME      time2;
     97        SYSTEMTIME      time3;
    9798
    9899} IShellLinkImpl;
     
    112113 */
    113114static HRESULT WINAPI IPersistFile_fnQueryInterface(
    114         IPersistFile* iface,
    115         REFIID riid,
    116         LPVOID *ppvObj)
    117 {
    118         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    119 
    120         TRACE("(%p)\n",This);
    121 
    122         return IShellLink_QueryInterface((IShellLink*)This, riid, ppvObj);
     115        IPersistFile* iface,
     116        REFIID riid,
     117        LPVOID *ppvObj)
     118{
     119        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     120
     121        TRACE("(%p)\n",This);
     122
     123        return IShellLink_QueryInterface((IShellLink*)This, riid, ppvObj);
    123124}
    124125
     
    128129static ULONG WINAPI IPersistFile_fnAddRef(IPersistFile* iface)
    129130{
    130         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    131 
    132         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    133 
    134         return IShellLink_AddRef((IShellLink*)This);
     131        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     132
     133        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     134
     135        return IShellLink_AddRef((IShellLink*)This);
    135136}
    136137/******************************************************************************
     
    139140static ULONG WINAPI IPersistFile_fnRelease(IPersistFile* iface)
    140141{
    141         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    142 
    143         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    144 
    145         return IShellLink_Release((IShellLink*)This);
     142        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     143
     144        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     145
     146        return IShellLink_Release((IShellLink*)This);
    146147}
    147148
    148149static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile* iface, CLSID *pClassID)
    149150{
    150         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    151         FIXME("(%p)\n",This);
    152         return NOERROR;
     151        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     152        FIXME("(%p)\n",This);
     153        return NOERROR;
    153154}
    154155static HRESULT WINAPI IPersistFile_fnIsDirty(IPersistFile* iface)
    155156{
    156         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    157         FIXME("(%p)\n",This);
    158         return NOERROR;
     157        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     158        FIXME("(%p)\n",This);
     159        return NOERROR;
    159160}
    160161static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFileName, DWORD dwMode)
    161162{
    162         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
    163         _IPersistStream_From_ICOM_THIS(IPersistStream, This)
    164 
    165         LPSTR           sFile = HEAP_strdupWtoA ( GetProcessHeap(), 0, pszFileName);
    166         HRESULT         hRet = E_FAIL;
    167 
    168         TRACE("(%p, %s)\n",This, sFile);
    169        
    170 
    171         if (This->lpFileStream)
    172           IStream_Release(This->lpFileStream);
    173        
    174         if SUCCEEDED(CreateStreamOnFile(sFile, &(This->lpFileStream)))
    175         {
    176           if SUCCEEDED (IPersistStream_Load(StreamThis, This->lpFileStream))
    177           {
    178             return NOERROR;
    179           }
    180         }
    181        
    182         return hRet;
     163        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface)
     164        _IPersistStream_From_ICOM_THIS(IPersistStream, This)
     165
     166        LPSTR           sFile = HEAP_strdupWtoA ( GetProcessHeap(), 0, pszFileName);
     167        HRESULT         hRet = E_FAIL;
     168
     169        TRACE("(%p, %s)\n",This, sFile);
     170
     171
     172        if (This->lpFileStream)
     173          IStream_Release(This->lpFileStream);
     174
     175        if SUCCEEDED(CreateStreamOnFile(sFile, &(This->lpFileStream)))
     176        {
     177          if SUCCEEDED (IPersistStream_Load(StreamThis, This->lpFileStream))
     178          {
     179            return NOERROR;
     180          }
     181        }
     182
     183        return hRet;
    183184}
    184185
    185186static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFileName, BOOL fRemember)
    186187{
    187         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
    188         FIXME("(%p)->(%s)\n",This,debugstr_w(pszFileName));
    189         return NOERROR;
     188        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
     189        FIXME("(%p)->(%s)\n",This,debugstr_w(pszFileName));
     190        return NOERROR;
    190191}
    191192static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile* iface, LPCOLESTR pszFileName)
    192193{
    193         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
    194         FIXME("(%p)->(%s)\n",This,debugstr_w(pszFileName));
    195         return NOERROR;
     194        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
     195        FIXME("(%p)->(%s)\n",This,debugstr_w(pszFileName));
     196        return NOERROR;
    196197}
    197198static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile* iface, LPOLESTR *ppszFileName)
    198199{
    199         _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
    200         FIXME("(%p)\n",This);
    201         return NOERROR;
     200        _ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
     201        FIXME("(%p)\n",This);
     202        return NOERROR;
    202203}
    203204
    204205static ICOM_VTABLE(IPersistFile) pfvt =
    205206{
    206         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    207         IPersistFile_fnQueryInterface,
    208         IPersistFile_fnAddRef,
    209         IPersistFile_fnRelease,
    210         IPersistFile_fnGetClassID,
    211         IPersistFile_fnIsDirty,
    212         IPersistFile_fnLoad,
    213         IPersistFile_fnSave,
    214         IPersistFile_fnSaveCompleted,
    215         IPersistFile_fnGetCurFile
     207        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     208        IPersistFile_fnQueryInterface,
     209        IPersistFile_fnAddRef,
     210        IPersistFile_fnRelease,
     211        IPersistFile_fnGetClassID,
     212        IPersistFile_fnIsDirty,
     213        IPersistFile_fnLoad,
     214        IPersistFile_fnSave,
     215        IPersistFile_fnSaveCompleted,
     216        IPersistFile_fnGetCurFile
    216217};
    217218
     
    220221 */
    221222static HRESULT WINAPI IPersistStream_fnQueryInterface(
    222         IPersistStream* iface,
    223         REFIID     riid,
    224         VOID**     ppvoid)
    225 {
    226         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    227 
    228         TRACE("(%p)\n",This);
    229 
    230         return IShellLink_QueryInterface((IShellLink*)This, riid, ppvoid);
     223        IPersistStream* iface,
     224        REFIID     riid,
     225        VOID**     ppvoid)
     226{
     227        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     228
     229        TRACE("(%p)\n",This);
     230
     231        return IShellLink_QueryInterface((IShellLink*)This, riid, ppvoid);
    231232}
    232233
     
    235236 */
    236237static ULONG WINAPI IPersistStream_fnRelease(
    237         IPersistStream* iface)
    238 {
    239         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    240 
    241         TRACE("(%p)\n",This);
    242 
    243         return IShellLink_Release((IShellLink*)This);
     238        IPersistStream* iface)
     239{
     240        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     241
     242        TRACE("(%p)\n",This);
     243
     244        return IShellLink_Release((IShellLink*)This);
    244245}
    245246
     
    248249 */
    249250static ULONG WINAPI IPersistStream_fnAddRef(
    250         IPersistStream* iface)
    251 {
    252         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    253 
    254         TRACE("(%p)\n",This);
    255 
    256         return IShellLink_AddRef((IShellLink*)This);
     251        IPersistStream* iface)
     252{
     253        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     254
     255        TRACE("(%p)\n",This);
     256
     257        return IShellLink_AddRef((IShellLink*)This);
    257258}
    258259
     
    262263 */
    263264static HRESULT WINAPI IPersistStream_fnGetClassID(
    264         IPersistStream* iface,
    265         CLSID* pClassID)
    266 {
    267         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    268 
    269         TRACE("(%p)\n", This);
    270 
    271         if (pClassID==0)
    272           return E_POINTER;
    273 
    274 /*      memcpy(pClassID, &CLSID_???, sizeof(CLSID_???)); */
    275 
    276         return S_OK;
     265        IPersistStream* iface,
     266        CLSID* pClassID)
     267{
     268        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     269
     270        TRACE("(%p)\n", This);
     271
     272        if (pClassID==0)
     273          return E_POINTER;
     274
     275/*      memcpy(pClassID, &CLSID_???, sizeof(CLSID_???)); */
     276
     277        return S_OK;
    277278}
    278279
     
    281282 */
    282283static HRESULT WINAPI IPersistStream_fnIsDirty(
    283         IPersistStream*  iface)
    284 {
    285         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    286 
    287         TRACE("(%p)\n", This);
    288 
    289         return S_OK;
     284        IPersistStream*  iface)
     285{
     286        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     287
     288        TRACE("(%p)\n", This);
     289
     290        return S_OK;
    290291}
    291292/************************************************************************
     
    294295
    295296static HRESULT WINAPI IPersistStream_fnLoad(
    296         IPersistStream*  iface,
    297         IStream*         pLoadStream)
    298 {
    299         PLINK_HEADER lpLinkHeader = (PLINK_HEADER)HeapAlloc(GetProcessHeap(), 0, LINK_HEADER_SIZE);
    300         ULONG   dwBytesRead;
    301         DWORD   ret = E_FAIL;
    302         char    sTemp[512];
    303        
    304         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    305 
    306         TRACE("(%p)(%p)\n", This, pLoadStream);
    307 
    308         if ( ! pLoadStream)
    309         {
    310           return STG_E_INVALIDPOINTER;
    311         }
    312        
    313         IStream_AddRef (pLoadStream);
    314         if(lpLinkHeader)
    315         {
    316           if (SUCCEEDED(IStream_Read(pLoadStream, lpLinkHeader, LINK_HEADER_SIZE, &dwBytesRead)))
    317           {
    318             if ((lpLinkHeader->MagicStr == 0x0000004CL) && IsEqualIID(&lpLinkHeader->MagicGuid, &CLSID_ShellLink))
    319             {
    320               lpLinkHeader = (PLINK_HEADER)HeapReAlloc(GetProcessHeap(), 0, lpLinkHeader, LINK_HEADER_SIZE+lpLinkHeader->PidlSize);
    321               if (lpLinkHeader)
    322               {
    323                 if (SUCCEEDED(IStream_Read(pLoadStream, &(lpLinkHeader->Pidl), lpLinkHeader->PidlSize, &dwBytesRead)))
    324                 {
    325                   if (pcheck (&lpLinkHeader->Pidl))
    326                   {     
    327                     This->pPidl = ILClone (&lpLinkHeader->Pidl);
    328 
    329                     SHGetPathFromIDListA(&lpLinkHeader->Pidl, sTemp);
    330                     This->sPath = HEAP_strdupA ( GetProcessHeap(), 0, sTemp);
    331                   }
    332                   This->wHotKey = lpLinkHeader->wHotKey;
    333                   FileTimeToSystemTime (&lpLinkHeader->Time1, &This->time1);
    334                   FileTimeToSystemTime (&lpLinkHeader->Time2, &This->time2);
    335                   FileTimeToSystemTime (&lpLinkHeader->Time3, &This->time3);
     297        IPersistStream*  iface,
     298        IStream*         pLoadStream)
     299{
     300        PLINK_HEADER lpLinkHeader = (PLINK_HEADER)HeapAlloc(GetProcessHeap(), 0, LINK_HEADER_SIZE);
     301        ULONG   dwBytesRead;
     302        DWORD   ret = E_FAIL;
     303        char    sTemp[512];
     304
     305        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     306
     307        TRACE("(%p)(%p)\n", This, pLoadStream);
     308
     309        if ( ! pLoadStream)
     310        {
     311          return STG_E_INVALIDPOINTER;
     312        }
     313
     314        IStream_AddRef (pLoadStream);
     315        if(lpLinkHeader)
     316        {
     317          if (SUCCEEDED(IStream_Read(pLoadStream, lpLinkHeader, LINK_HEADER_SIZE, &dwBytesRead)))
     318          {
     319            if ((lpLinkHeader->MagicStr == 0x0000004CL) && IsEqualIID(&lpLinkHeader->MagicGuid, &CLSID_ShellLink))
     320            {
     321              lpLinkHeader = (PLINK_HEADER)HeapReAlloc(GetProcessHeap(), 0, lpLinkHeader, LINK_HEADER_SIZE+lpLinkHeader->PidlSize);
     322              if (lpLinkHeader)
     323              {
     324                if (SUCCEEDED(IStream_Read(pLoadStream, &(lpLinkHeader->Pidl), lpLinkHeader->PidlSize, &dwBytesRead)))
     325                {
     326                  if (pcheck (&lpLinkHeader->Pidl))
     327                  {
     328                    This->pPidl = ILClone (&lpLinkHeader->Pidl);
     329
     330                    SHGetPathFromIDListA(&lpLinkHeader->Pidl, sTemp);
     331                    This->sPath = HEAP_strdupA ( GetProcessHeap(), 0, sTemp);
     332                  }
     333                  This->wHotKey = lpLinkHeader->wHotKey;
     334                  FileTimeToSystemTime (&lpLinkHeader->Time1, &This->time1);
     335                  FileTimeToSystemTime (&lpLinkHeader->Time2, &This->time2);
     336                  FileTimeToSystemTime (&lpLinkHeader->Time3, &This->time3);
    336337#if 1
    337                   GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time1, NULL, sTemp, 256);
    338                   TRACE("-- time1: %s\n", sTemp);
    339                   GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time2, NULL, sTemp, 256);
    340                   TRACE("-- time1: %s\n", sTemp);
    341                   GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time3, NULL, sTemp, 256);
    342                   TRACE("-- time1: %s\n", sTemp);
    343                   pdump (This->pPidl);
    344 #endif         
    345                   ret = S_OK;
    346                 }
    347               }
    348             }
    349             else
    350             {
    351               WARN("stream contains no link!\n");
    352             }
    353           }
    354         }
    355 
    356         IStream_Release (pLoadStream);
    357 
    358         pdump(This->pPidl);
    359        
    360         HeapFree(GetProcessHeap(), 0, lpLinkHeader);
    361 
    362         return ret;
     338                  GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time1, NULL, sTemp, 256);
     339                  TRACE("-- time1: %s\n", sTemp);
     340                  GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time2, NULL, sTemp, 256);
     341                  TRACE("-- time1: %s\n", sTemp);
     342                  GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&This->time3, NULL, sTemp, 256);
     343                  TRACE("-- time1: %s\n", sTemp);
     344                  pdump (This->pPidl);
     345#endif
     346                  ret = S_OK;
     347                }
     348              }
     349            }
     350            else
     351            {
     352              WARN("stream contains no link!\n");
     353            }
     354          }
     355        }
     356
     357        IStream_Release (pLoadStream);
     358
     359        pdump(This->pPidl);
     360
     361        HeapFree(GetProcessHeap(), 0, lpLinkHeader);
     362
     363        return ret;
    363364}
    364365
     
    367368 */
    368369static HRESULT WINAPI IPersistStream_fnSave(
    369         IPersistStream*  iface,
    370         IStream*         pOutStream,
    371         BOOL             fClearDirty)
    372 {
    373         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    374        
    375         TRACE("(%p) %p %x\n", This, pOutStream, fClearDirty);
    376 
    377         return E_NOTIMPL;
     370        IPersistStream*  iface,
     371        IStream*         pOutStream,
     372        BOOL             fClearDirty)
     373{
     374        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     375
     376        TRACE("(%p) %p %x\n", This, pOutStream, fClearDirty);
     377
     378        return E_NOTIMPL;
    378379}
    379380
     
    382383 */
    383384static HRESULT WINAPI IPersistStream_fnGetSizeMax(
    384         IPersistStream*  iface,
    385         ULARGE_INTEGER*  pcbSize)
    386 {
    387         _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
    388        
    389         TRACE("(%p)\n", This);
    390 
    391         return E_NOTIMPL;
     385        IPersistStream*  iface,
     386        ULARGE_INTEGER*  pcbSize)
     387{
     388        _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
     389
     390        TRACE("(%p)\n", This);
     391
     392        return E_NOTIMPL;
    392393}
    393394
    394395static ICOM_VTABLE(IPersistStream) psvt =
    395396{
    396         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    397         IPersistStream_fnQueryInterface,
    398         IPersistStream_fnAddRef,
    399         IPersistStream_fnRelease,
    400         IPersistStream_fnGetClassID,
    401         IPersistStream_fnIsDirty,
    402         IPersistStream_fnLoad,
    403         IPersistStream_fnSave,
    404         IPersistStream_fnGetSizeMax
     397        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     398        IPersistStream_fnQueryInterface,
     399        IPersistStream_fnAddRef,
     400        IPersistStream_fnRelease,
     401        IPersistStream_fnGetClassID,
     402        IPersistStream_fnIsDirty,
     403        IPersistStream_fnLoad,
     404        IPersistStream_fnSave,
     405        IPersistStream_fnGetSizeMax
    405406};
    406407
     
    410411static HRESULT WINAPI IShellLink_fnQueryInterface( IShellLink * iface, REFIID riid,  LPVOID *ppvObj)
    411412{
    412         ICOM_THIS(IShellLinkImpl, iface);
    413        
    414         char    xriid[50];
    415         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    416         TRACE("(%p)->(\n\tIID:\t%s)\n",This,xriid);
    417 
    418         *ppvObj = NULL;
    419 
    420         if(IsEqualIID(riid, &IID_IUnknown) ||
    421            IsEqualIID(riid, &IID_IShellLink))
    422         {
    423           *ppvObj = This;
    424         }
    425         else if(IsEqualIID(riid, &IID_IShellLinkW))
    426         {
    427           *ppvObj = (IShellLinkW *)&(This->lpvtblw);
    428         }
    429         else if(IsEqualIID(riid, &IID_IPersistFile))
    430         {
    431           *ppvObj = (IPersistFile *)&(This->lpvtblPersistFile);
    432         }
    433         else if(IsEqualIID(riid, &IID_IPersistStream))
    434         {
    435           *ppvObj = (IPersistStream *)&(This->lpvtblPersistStream);
    436         }
    437 
    438         if(*ppvObj)
    439         {
    440           IUnknown_AddRef((IUnknown*)(*ppvObj));
    441           TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
    442           return S_OK;
    443         }
    444         TRACE("-- Interface: E_NOINTERFACE\n");
    445         return E_NOINTERFACE;
     413        ICOM_THIS(IShellLinkImpl, iface);
     414
     415        char    xriid[50];
     416        WINE_StringFromCLSID((LPCLSID)riid,xriid);
     417        TRACE("(%p)->(\n\tIID:\t%s)\n",This,xriid);
     418
     419        *ppvObj = NULL;
     420
     421        if(IsEqualIID(riid, &IID_IUnknown) ||
     422           IsEqualIID(riid, &IID_IShellLink))
     423        {
     424          *ppvObj = This;
     425        }
     426        else if(IsEqualIID(riid, &IID_IShellLinkW))
     427        {
     428          *ppvObj = (IShellLinkW *)&(This->lpvtblw);
     429        }
     430        else if(IsEqualIID(riid, &IID_IPersistFile))
     431        {
     432          *ppvObj = (IPersistFile *)&(This->lpvtblPersistFile);
     433        }
     434        else if(IsEqualIID(riid, &IID_IPersistStream))
     435        {
     436          *ppvObj = (IPersistStream *)&(This->lpvtblPersistStream);
     437        }
     438
     439        if(*ppvObj)
     440        {
     441          IUnknown_AddRef((IUnknown*)(*ppvObj));
     442          TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
     443          return S_OK;
     444        }
     445        TRACE("-- Interface: E_NOINTERFACE\n");
     446        return E_NOINTERFACE;
    446447}
    447448/******************************************************************************
     
    450451static ULONG WINAPI IShellLink_fnAddRef(IShellLink * iface)
    451452{
    452         ICOM_THIS(IShellLinkImpl, iface);
    453        
    454         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    455 
    456         shell32_ObjCount++;
    457         return ++(This->ref);
     453        ICOM_THIS(IShellLinkImpl, iface);
     454
     455        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     456
     457        shell32_ObjCount++;
     458        return ++(This->ref);
    458459}
    459460/******************************************************************************
    460  *      IShellLink_Release
     461 *      IShellLink_Release
    461462 */
    462463static ULONG WINAPI IShellLink_fnRelease(IShellLink * iface)
    463464{
    464         ICOM_THIS(IShellLinkImpl, iface);
    465        
    466         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    467 
    468         shell32_ObjCount--;
    469         if (!--(This->ref))
    470         { TRACE("-- destroying IShellLink(%p)\n",This);
    471 
    472           if (This->sPath)
    473             HeapFree(GetProcessHeap(),0,This->sPath);
    474 
    475           if (This->pPidl)
    476             SHFree(This->pPidl);
    477 
    478           if (This->lpFileStream)
    479             IStream_Release(This->lpFileStream);
    480 
    481           HeapFree(GetProcessHeap(),0,This);
    482           return 0;
    483         }
    484         return This->ref;
     465        ICOM_THIS(IShellLinkImpl, iface);
     466
     467        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     468
     469        shell32_ObjCount--;
     470        if (!--(This->ref))
     471        { TRACE("-- destroying IShellLink(%p)\n",This);
     472
     473          if (This->sPath)
     474            HeapFree(GetProcessHeap(),0,This->sPath);
     475
     476          if (This->pPidl)
     477            SHFree(This->pPidl);
     478
     479          if (This->lpFileStream)
     480            IStream_Release(This->lpFileStream);
     481
     482          HeapFree(GetProcessHeap(),0,This);
     483          return 0;
     484        }
     485        return This->ref;
    485486}
    486487
    487488static HRESULT WINAPI IShellLink_fnGetPath(IShellLink * iface, LPSTR pszFile,INT cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags)
    488489{
    489         ICOM_THIS(IShellLinkImpl, iface);
    490        
    491         TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",This, pszFile, cchMaxPath, pfd, fFlags, debugstr_a(This->sPath));
    492 
    493         if (This->sPath)
    494           lstrcpynA(pszFile,This->sPath, cchMaxPath);
    495         else
    496           return E_FAIL;
    497 
    498         return NOERROR;
     490        ICOM_THIS(IShellLinkImpl, iface);
     491
     492        TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",This, pszFile, cchMaxPath, pfd, fFlags, debugstr_a(This->sPath));
     493
     494        if (This->sPath)
     495          lstrcpynA(pszFile,This->sPath, cchMaxPath);
     496        else
     497          return E_FAIL;
     498
     499        return NOERROR;
    499500}
    500501static HRESULT WINAPI IShellLink_fnGetIDList(IShellLink * iface, LPITEMIDLIST * ppidl)
    501502{
    502         ICOM_THIS(IShellLinkImpl, iface);
    503        
    504         TRACE("(%p)->(ppidl=%p)\n",This, ppidl);
    505 
    506         *ppidl = ILClone(This->pPidl);
    507         return NOERROR;
     503        ICOM_THIS(IShellLinkImpl, iface);
     504
     505        TRACE("(%p)->(ppidl=%p)\n",This, ppidl);
     506
     507        *ppidl = ILClone(This->pPidl);
     508        return NOERROR;
    508509}
    509510static HRESULT WINAPI IShellLink_fnSetIDList(IShellLink * iface, LPCITEMIDLIST pidl)
    510511{
    511         ICOM_THIS(IShellLinkImpl, iface);
    512        
    513         TRACE("(%p)->(pidl=%p)\n",This, pidl);
    514 
    515         if (This->pPidl)
    516             SHFree(This->pPidl);
    517         This->pPidl = ILClone (pidl);
    518         return NOERROR;
     512        ICOM_THIS(IShellLinkImpl, iface);
     513
     514        TRACE("(%p)->(pidl=%p)\n",This, pidl);
     515
     516        if (This->pPidl)
     517            SHFree(This->pPidl);
     518        This->pPidl = ILClone (pidl);
     519        return NOERROR;
    519520}
    520521static HRESULT WINAPI IShellLink_fnGetDescription(IShellLink * iface, LPSTR pszName,INT cchMaxName)
    521522{
    522         ICOM_THIS(IShellLinkImpl, iface);
    523        
    524         FIXME("(%p)->(%p len=%u)\n",This, pszName, cchMaxName);
    525         lstrcpynA(pszName,"Description, FIXME",cchMaxName);
    526         return NOERROR;
     523        ICOM_THIS(IShellLinkImpl, iface);
     524
     525        FIXME("(%p)->(%p len=%u)\n",This, pszName, cchMaxName);
     526        lstrcpynA(pszName,"Description, FIXME",cchMaxName);
     527        return NOERROR;
    527528}
    528529static HRESULT WINAPI IShellLink_fnSetDescription(IShellLink * iface, LPCSTR pszName)
    529530{
    530         ICOM_THIS(IShellLinkImpl, iface);
    531        
    532         FIXME("(%p)->(desc=%s)\n",This, pszName);
    533         return NOERROR;
     531        ICOM_THIS(IShellLinkImpl, iface);
     532
     533        FIXME("(%p)->(desc=%s)\n",This, pszName);
     534        return NOERROR;
    534535}
    535536static HRESULT WINAPI IShellLink_fnGetWorkingDirectory(IShellLink * iface, LPSTR pszDir,INT cchMaxPath)
    536537{
    537         ICOM_THIS(IShellLinkImpl, iface);
    538        
    539         FIXME("(%p)->()\n",This);
    540         lstrcpynA(pszDir,"c:\\", cchMaxPath);
    541         return NOERROR;
     538        ICOM_THIS(IShellLinkImpl, iface);
     539
     540        FIXME("(%p)->()\n",This);
     541        lstrcpynA(pszDir,"c:\\", cchMaxPath);
     542        return NOERROR;
    542543}
    543544static HRESULT WINAPI IShellLink_fnSetWorkingDirectory(IShellLink * iface, LPCSTR pszDir)
    544545{
    545         ICOM_THIS(IShellLinkImpl, iface);
    546        
    547         FIXME("(%p)->(dir=%s)\n",This, pszDir);
    548         return NOERROR;
     546        ICOM_THIS(IShellLinkImpl, iface);
     547
     548        FIXME("(%p)->(dir=%s)\n",This, pszDir);
     549        return NOERROR;
    549550}
    550551static HRESULT WINAPI IShellLink_fnGetArguments(IShellLink * iface, LPSTR pszArgs,INT cchMaxPath)
    551552{
    552         ICOM_THIS(IShellLinkImpl, iface);
    553        
    554         FIXME("(%p)->(%p len=%u)\n",This, pszArgs, cchMaxPath);
    555         lstrcpynA(pszArgs, "", cchMaxPath);
    556         return NOERROR;
     553        ICOM_THIS(IShellLinkImpl, iface);
     554
     555        FIXME("(%p)->(%p len=%u)\n",This, pszArgs, cchMaxPath);
     556        lstrcpynA(pszArgs, "", cchMaxPath);
     557        return NOERROR;
    557558}
    558559static HRESULT WINAPI IShellLink_fnSetArguments(IShellLink * iface, LPCSTR pszArgs)
    559560{
    560         ICOM_THIS(IShellLinkImpl, iface);
    561        
    562         FIXME("(%p)->(args=%s)\n",This, pszArgs);
    563 
    564         return NOERROR;
     561        ICOM_THIS(IShellLinkImpl, iface);
     562
     563        FIXME("(%p)->(args=%s)\n",This, pszArgs);
     564
     565        return NOERROR;
    565566}
    566567static HRESULT WINAPI IShellLink_fnGetHotkey(IShellLink * iface, WORD *pwHotkey)
    567568{
    568         ICOM_THIS(IShellLinkImpl, iface);
    569        
    570         TRACE("(%p)->(%p)(0x%08x)\n",This, pwHotkey, This->wHotKey);
    571 
    572         *pwHotkey = This->wHotKey;
    573 
    574         return NOERROR;
     569        ICOM_THIS(IShellLinkImpl, iface);
     570
     571        TRACE("(%p)->(%p)(0x%08x)\n",This, pwHotkey, This->wHotKey);
     572
     573        *pwHotkey = This->wHotKey;
     574
     575        return NOERROR;
    575576}
    576577static HRESULT WINAPI IShellLink_fnSetHotkey(IShellLink * iface, WORD wHotkey)
    577578{
    578         ICOM_THIS(IShellLinkImpl, iface);
    579        
    580         TRACE("(%p)->(hotkey=%x)\n",This, wHotkey);
    581        
    582         This->wHotKey = wHotkey;
    583 
    584         return NOERROR;
     579        ICOM_THIS(IShellLinkImpl, iface);
     580
     581        TRACE("(%p)->(hotkey=%x)\n",This, wHotkey);
     582
     583        This->wHotKey = wHotkey;
     584
     585        return NOERROR;
    585586}
    586587static HRESULT WINAPI IShellLink_fnGetShowCmd(IShellLink * iface, INT *piShowCmd)
    587588{
    588         ICOM_THIS(IShellLinkImpl, iface);
    589        
    590         FIXME("(%p)->(%p)\n",This, piShowCmd);
    591         *piShowCmd=0;
    592         return NOERROR;
     589        ICOM_THIS(IShellLinkImpl, iface);
     590
     591        FIXME("(%p)->(%p)\n",This, piShowCmd);
     592        *piShowCmd=0;
     593        return NOERROR;
    593594}
    594595static HRESULT WINAPI IShellLink_fnSetShowCmd(IShellLink * iface, INT iShowCmd)
    595596{
    596         ICOM_THIS(IShellLinkImpl, iface);
    597        
    598         FIXME("(%p)->(showcmd=%x)\n",This, iShowCmd);
    599         return NOERROR;
     597        ICOM_THIS(IShellLinkImpl, iface);
     598
     599        FIXME("(%p)->(showcmd=%x)\n",This, iShowCmd);
     600        return NOERROR;
    600601}
    601602static HRESULT WINAPI IShellLink_fnGetIconLocation(IShellLink * iface, LPSTR pszIconPath,INT cchIconPath,INT *piIcon)
    602603{
    603         ICOM_THIS(IShellLinkImpl, iface);
    604        
    605         FIXME("(%p)->(%p len=%u iicon=%p)\n",This, pszIconPath, cchIconPath, piIcon);
    606         lstrcpynA(pszIconPath,"shell32.dll",cchIconPath);
    607         *piIcon=1;
    608         return NOERROR;
     604        ICOM_THIS(IShellLinkImpl, iface);
     605
     606        FIXME("(%p)->(%p len=%u iicon=%p)\n",This, pszIconPath, cchIconPath, piIcon);
     607        lstrcpynA(pszIconPath,"shell32.dll",cchIconPath);
     608        *piIcon=1;
     609        return NOERROR;
    609610}
    610611static HRESULT WINAPI IShellLink_fnSetIconLocation(IShellLink * iface, LPCSTR pszIconPath,INT iIcon)
    611612{
    612         ICOM_THIS(IShellLinkImpl, iface);
    613        
    614         FIXME("(%p)->(path=%s iicon=%u)\n",This, pszIconPath, iIcon);
    615         return NOERROR;
     613        ICOM_THIS(IShellLinkImpl, iface);
     614
     615        FIXME("(%p)->(path=%s iicon=%u)\n",This, pszIconPath, iIcon);
     616        return NOERROR;
    616617}
    617618static HRESULT WINAPI IShellLink_fnSetRelativePath(IShellLink * iface, LPCSTR pszPathRel, DWORD dwReserved)
    618619{
    619         ICOM_THIS(IShellLinkImpl, iface);
    620        
    621         FIXME("(%p)->(path=%s %lx)\n",This, pszPathRel, dwReserved);
    622         return NOERROR;
     620        ICOM_THIS(IShellLinkImpl, iface);
     621
     622        FIXME("(%p)->(path=%s %lx)\n",This, pszPathRel, dwReserved);
     623        return NOERROR;
    623624}
    624625static HRESULT WINAPI IShellLink_fnResolve(IShellLink * iface, HWND hwnd, DWORD fFlags)
    625626{
    626         ICOM_THIS(IShellLinkImpl, iface);
    627        
    628         FIXME("(%p)->(hwnd=%x flags=%lx)\n",This, hwnd, fFlags);
    629         return NOERROR;
     627        ICOM_THIS(IShellLinkImpl, iface);
     628
     629        FIXME("(%p)->(hwnd=%x flags=%lx)\n",This, hwnd, fFlags);
     630        return NOERROR;
    630631}
    631632static HRESULT WINAPI IShellLink_fnSetPath(IShellLink * iface, LPCSTR pszFile)
    632633{
    633         ICOM_THIS(IShellLinkImpl, iface);
    634        
    635         FIXME("(%p)->(path=%s)\n",This, pszFile);
    636         return NOERROR;
     634        ICOM_THIS(IShellLinkImpl, iface);
     635
     636        FIXME("(%p)->(path=%s)\n",This, pszFile);
     637        return NOERROR;
    637638}
    638639
     
    642643
    643644static ICOM_VTABLE(IShellLink) slvt =
    644 {       
    645         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    646         IShellLink_fnQueryInterface,
    647         IShellLink_fnAddRef,
    648         IShellLink_fnRelease,
    649         IShellLink_fnGetPath,
    650         IShellLink_fnGetIDList,
    651         IShellLink_fnSetIDList,
    652         IShellLink_fnGetDescription,
    653         IShellLink_fnSetDescription,
    654         IShellLink_fnGetWorkingDirectory,
    655         IShellLink_fnSetWorkingDirectory,
    656         IShellLink_fnGetArguments,
    657         IShellLink_fnSetArguments,
    658         IShellLink_fnGetHotkey,
    659         IShellLink_fnSetHotkey,
    660         IShellLink_fnGetShowCmd,
    661         IShellLink_fnSetShowCmd,
    662         IShellLink_fnGetIconLocation,
    663         IShellLink_fnSetIconLocation,
    664         IShellLink_fnSetRelativePath,
    665         IShellLink_fnResolve,
    666         IShellLink_fnSetPath
     645{
     646        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     647        IShellLink_fnQueryInterface,
     648        IShellLink_fnAddRef,
     649        IShellLink_fnRelease,
     650        IShellLink_fnGetPath,
     651        IShellLink_fnGetIDList,
     652        IShellLink_fnSetIDList,
     653        IShellLink_fnGetDescription,
     654        IShellLink_fnSetDescription,
     655        IShellLink_fnGetWorkingDirectory,
     656        IShellLink_fnSetWorkingDirectory,
     657        IShellLink_fnGetArguments,
     658        IShellLink_fnSetArguments,
     659        IShellLink_fnGetHotkey,
     660        IShellLink_fnSetHotkey,
     661        IShellLink_fnGetShowCmd,
     662        IShellLink_fnSetShowCmd,
     663        IShellLink_fnGetIconLocation,
     664        IShellLink_fnSetIconLocation,
     665        IShellLink_fnSetRelativePath,
     666        IShellLink_fnResolve,
     667        IShellLink_fnSetPath
    667668};
    668669
     
    674675  IShellLinkW * iface, REFIID riid, LPVOID *ppvObj)
    675676{
    676         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    677        
    678         return IShellLink_QueryInterface((IShellLink*)This, riid, ppvObj);
     677        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     678
     679        return IShellLink_QueryInterface((IShellLink*)This, riid, ppvObj);
    679680}
    680681
     
    684685static ULONG WINAPI IShellLinkW_fnAddRef(IShellLinkW * iface)
    685686{
    686         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    687        
    688         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    689 
    690         return IShellLink_AddRef((IShellLink*)This);
     687        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     688
     689        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     690
     691        return IShellLink_AddRef((IShellLink*)This);
    691692}
    692693/******************************************************************************
     
    696697static ULONG WINAPI IShellLinkW_fnRelease(IShellLinkW * iface)
    697698{
    698         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    699        
    700         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    701 
    702         return IShellLink_Release((IShellLink*)This);
     699        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     700
     701        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     702
     703        return IShellLink_Release((IShellLink*)This);
    703704}
    704705
    705706static HRESULT WINAPI IShellLinkW_fnGetPath(IShellLinkW * iface, LPWSTR pszFile,INT cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags)
    706707{
    707         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    708        
    709         FIXME("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)\n",This, pszFile, cchMaxPath, pfd, fFlags);
    710         lstrcpynAtoW(pszFile,"c:\\foo.bar", cchMaxPath);
    711         return NOERROR;
     708        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     709
     710        FIXME("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)\n",This, pszFile, cchMaxPath, pfd, fFlags);
     711        lstrcpynAtoW(pszFile,"c:\\foo.bar", cchMaxPath);
     712        return NOERROR;
    712713}
    713714
    714715static HRESULT WINAPI IShellLinkW_fnGetIDList(IShellLinkW * iface, LPITEMIDLIST * ppidl)
    715716{
    716         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    717        
    718         FIXME("(%p)->(ppidl=%p)\n",This, ppidl);
    719         *ppidl = _ILCreateDesktop();
    720         return NOERROR;
     717        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     718
     719        FIXME("(%p)->(ppidl=%p)\n",This, ppidl);
     720        *ppidl = _ILCreateDesktop();
     721        return NOERROR;
    721722}
    722723
    723724static HRESULT WINAPI IShellLinkW_fnSetIDList(IShellLinkW * iface, LPCITEMIDLIST pidl)
    724725{
    725         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    726        
    727         FIXME("(%p)->(pidl=%p)\n",This, pidl);
    728         return NOERROR;
     726        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     727
     728        FIXME("(%p)->(pidl=%p)\n",This, pidl);
     729        return NOERROR;
    729730}
    730731
    731732static HRESULT WINAPI IShellLinkW_fnGetDescription(IShellLinkW * iface, LPWSTR pszName,INT cchMaxName)
    732733{
    733         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    734        
    735         FIXME("(%p)->(%p len=%u)\n",This, pszName, cchMaxName);
    736         lstrcpynAtoW(pszName,"Description, FIXME",cchMaxName);
    737         return NOERROR;
     734        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     735
     736        FIXME("(%p)->(%p len=%u)\n",This, pszName, cchMaxName);
     737        lstrcpynAtoW(pszName,"Description, FIXME",cchMaxName);
     738        return NOERROR;
    738739}
    739740
    740741static HRESULT WINAPI IShellLinkW_fnSetDescription(IShellLinkW * iface, LPCWSTR pszName)
    741742{
    742         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    743        
    744         FIXME("(%p)->(desc=%s)\n",This, debugstr_w(pszName));
    745         return NOERROR;
     743        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     744
     745        FIXME("(%p)->(desc=%s)\n",This, debugstr_w(pszName));
     746        return NOERROR;
    746747}
    747748
    748749static HRESULT WINAPI IShellLinkW_fnGetWorkingDirectory(IShellLinkW * iface, LPWSTR pszDir,INT cchMaxPath)
    749750{
    750         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    751        
    752         FIXME("(%p)->()\n",This);
    753         lstrcpynAtoW(pszDir,"c:\\", cchMaxPath);
    754         return NOERROR;
     751        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     752
     753        FIXME("(%p)->()\n",This);
     754        lstrcpynAtoW(pszDir,"c:\\", cchMaxPath);
     755        return NOERROR;
    755756}
    756757
    757758static HRESULT WINAPI IShellLinkW_fnSetWorkingDirectory(IShellLinkW * iface, LPCWSTR pszDir)
    758759{
    759         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    760        
    761         FIXME("(%p)->(dir=%s)\n",This, debugstr_w(pszDir));
    762         return NOERROR;
     760        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     761
     762        FIXME("(%p)->(dir=%s)\n",This, debugstr_w(pszDir));
     763        return NOERROR;
    763764}
    764765
    765766static HRESULT WINAPI IShellLinkW_fnGetArguments(IShellLinkW * iface, LPWSTR pszArgs,INT cchMaxPath)
    766767{
    767         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    768        
    769         FIXME("(%p)->(%p len=%u)\n",This, pszArgs, cchMaxPath);
    770         lstrcpynAtoW(pszArgs, "", cchMaxPath);
    771         return NOERROR;
     768        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     769
     770        FIXME("(%p)->(%p len=%u)\n",This, pszArgs, cchMaxPath);
     771        lstrcpynAtoW(pszArgs, "", cchMaxPath);
     772        return NOERROR;
    772773}
    773774
    774775static HRESULT WINAPI IShellLinkW_fnSetArguments(IShellLinkW * iface, LPCWSTR pszArgs)
    775776{
    776         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    777        
    778         FIXME("(%p)->(args=%s)\n",This, debugstr_w(pszArgs));
    779         return NOERROR;
     777        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     778
     779        FIXME("(%p)->(args=%s)\n",This, debugstr_w(pszArgs));
     780        return NOERROR;
    780781}
    781782
    782783static HRESULT WINAPI IShellLinkW_fnGetHotkey(IShellLinkW * iface, WORD *pwHotkey)
    783784{
    784         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    785        
    786         FIXME("(%p)->(%p)\n",This, pwHotkey);
    787         *pwHotkey=0x0;
    788         return NOERROR;
     785        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     786
     787        FIXME("(%p)->(%p)\n",This, pwHotkey);
     788        *pwHotkey=0x0;
     789        return NOERROR;
    789790}
    790791
    791792static HRESULT WINAPI IShellLinkW_fnSetHotkey(IShellLinkW * iface, WORD wHotkey)
    792793{
    793         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    794        
    795         FIXME("(%p)->(hotkey=%x)\n",This, wHotkey);
    796         return NOERROR;
     794        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     795
     796        FIXME("(%p)->(hotkey=%x)\n",This, wHotkey);
     797        return NOERROR;
    797798}
    798799
    799800static HRESULT WINAPI IShellLinkW_fnGetShowCmd(IShellLinkW * iface, INT *piShowCmd)
    800801{
    801         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    802        
    803         FIXME("(%p)->(%p)\n",This, piShowCmd);
    804         *piShowCmd=0;
    805         return NOERROR;
     802        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     803
     804        FIXME("(%p)->(%p)\n",This, piShowCmd);
     805        *piShowCmd=0;
     806        return NOERROR;
    806807}
    807808
    808809static HRESULT WINAPI IShellLinkW_fnSetShowCmd(IShellLinkW * iface, INT iShowCmd)
    809810{
    810         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    811        
    812         FIXME("(%p)->(showcmd=%x)\n",This, iShowCmd);
    813         return NOERROR;
     811        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     812
     813        FIXME("(%p)->(showcmd=%x)\n",This, iShowCmd);
     814        return NOERROR;
    814815}
    815816
    816817static HRESULT WINAPI IShellLinkW_fnGetIconLocation(IShellLinkW * iface, LPWSTR pszIconPath,INT cchIconPath,INT *piIcon)
    817818{
    818         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    819        
    820         FIXME("(%p)->(%p len=%u iicon=%p)\n",This, pszIconPath, cchIconPath, piIcon);
    821         lstrcpynAtoW(pszIconPath,"shell32.dll",cchIconPath);
    822         *piIcon=1;
    823         return NOERROR;
     819        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     820
     821        FIXME("(%p)->(%p len=%u iicon=%p)\n",This, pszIconPath, cchIconPath, piIcon);
     822        lstrcpynAtoW(pszIconPath,"shell32.dll",cchIconPath);
     823        *piIcon=1;
     824        return NOERROR;
    824825}
    825826
    826827static HRESULT WINAPI IShellLinkW_fnSetIconLocation(IShellLinkW * iface, LPCWSTR pszIconPath,INT iIcon)
    827828{
    828         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    829        
    830         FIXME("(%p)->(path=%s iicon=%u)\n",This, debugstr_w(pszIconPath), iIcon);
    831         return NOERROR;
     829        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     830
     831        FIXME("(%p)->(path=%s iicon=%u)\n",This, debugstr_w(pszIconPath), iIcon);
     832        return NOERROR;
    832833}
    833834
    834835static HRESULT WINAPI IShellLinkW_fnSetRelativePath(IShellLinkW * iface, LPCWSTR pszPathRel, DWORD dwReserved)
    835836{
    836         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    837        
    838         FIXME("(%p)->(path=%s %lx)\n",This, debugstr_w(pszPathRel), dwReserved);
    839         return NOERROR;
     837        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     838
     839        FIXME("(%p)->(path=%s %lx)\n",This, debugstr_w(pszPathRel), dwReserved);
     840        return NOERROR;
    840841}
    841842
    842843static HRESULT WINAPI IShellLinkW_fnResolve(IShellLinkW * iface, HWND hwnd, DWORD fFlags)
    843844{
    844         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    845        
    846         FIXME("(%p)->(hwnd=%x flags=%lx)\n",This, hwnd, fFlags);
    847         return NOERROR;
     845        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     846
     847        FIXME("(%p)->(hwnd=%x flags=%lx)\n",This, hwnd, fFlags);
     848        return NOERROR;
    848849}
    849850
    850851static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile)
    851852{
    852         _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
    853        
    854         FIXME("(%p)->(path=%s)\n",This, debugstr_w(pszFile));
    855         return NOERROR;
     853        _ICOM_THIS_From_IShellLinkW(IShellLinkImpl, iface);
     854
     855        FIXME("(%p)->(path=%s)\n",This, debugstr_w(pszFile));
     856        return NOERROR;
    856857}
    857858
     
    861862
    862863static ICOM_VTABLE(IShellLinkW) slvtw =
    863 {       
    864         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    865         IShellLinkW_fnQueryInterface,
    866         IShellLinkW_fnAddRef,
    867         IShellLinkW_fnRelease,
    868         IShellLinkW_fnGetPath,
    869         IShellLinkW_fnGetIDList,
    870         IShellLinkW_fnSetIDList,
    871         IShellLinkW_fnGetDescription,
    872         IShellLinkW_fnSetDescription,
    873         IShellLinkW_fnGetWorkingDirectory,
    874         IShellLinkW_fnSetWorkingDirectory,
    875         IShellLinkW_fnGetArguments,
    876         IShellLinkW_fnSetArguments,
    877         IShellLinkW_fnGetHotkey,
    878         IShellLinkW_fnSetHotkey,
    879         IShellLinkW_fnGetShowCmd,
    880         IShellLinkW_fnSetShowCmd,
    881         IShellLinkW_fnGetIconLocation,
    882         IShellLinkW_fnSetIconLocation,
    883         IShellLinkW_fnSetRelativePath,
    884         IShellLinkW_fnResolve,
    885         IShellLinkW_fnSetPath
     864{
     865        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     866        IShellLinkW_fnQueryInterface,
     867        IShellLinkW_fnAddRef,
     868        IShellLinkW_fnRelease,
     869        IShellLinkW_fnGetPath,
     870        IShellLinkW_fnGetIDList,
     871        IShellLinkW_fnSetIDList,
     872        IShellLinkW_fnGetDescription,
     873        IShellLinkW_fnSetDescription,
     874        IShellLinkW_fnGetWorkingDirectory,
     875        IShellLinkW_fnSetWorkingDirectory,
     876        IShellLinkW_fnGetArguments,
     877        IShellLinkW_fnSetArguments,
     878        IShellLinkW_fnGetHotkey,
     879        IShellLinkW_fnSetHotkey,
     880        IShellLinkW_fnGetShowCmd,
     881        IShellLinkW_fnSetShowCmd,
     882        IShellLinkW_fnGetIconLocation,
     883        IShellLinkW_fnSetIconLocation,
     884        IShellLinkW_fnSetRelativePath,
     885        IShellLinkW_fnResolve,
     886        IShellLinkW_fnSetPath
    886887};
    887888
    888889/**************************************************************************
    889  *        IShellLink_Constructor
     890 *        IShellLink_Constructor
    890891 */
    891892IShellLink * IShellLink_Constructor(BOOL bUnicode)
    892 {       IShellLinkImpl * sl;
    893 
    894         sl = (IShellLinkImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellLinkImpl));
    895         sl->ref = 1;
    896         sl->lpvtbl = &slvt;
    897         sl->lpvtblw = &slvtw;
    898         sl->lpvtblPersistFile = &pfvt;
    899         sl->lpvtblPersistStream = &psvt;
    900        
    901         TRACE("(%p)->()\n",sl);
    902         shell32_ObjCount++;
    903         return bUnicode ? (IShellLink *) &(sl->lpvtblw) : (IShellLink *)sl;
    904 }
    905 
    906 
     893{       IShellLinkImpl * sl;
     894
     895        sl = (IShellLinkImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellLinkImpl));
     896        sl->ref = 1;
     897        sl->lpvtbl = &slvt;
     898        sl->lpvtblw = &slvtw;
     899        sl->lpvtblPersistFile = &pfvt;
     900        sl->lpvtblPersistStream = &psvt;
     901
     902        TRACE("(%p)->()\n",sl);
     903        shell32_ObjCount++;
     904        return bUnicode ? (IShellLink *) &(sl->lpvtblw) : (IShellLink *)sl;
     905}
     906
     907
  • trunk/src/shell32/shellole.cpp

    r1353 r3243  
    1 /* $Id: shellole.cpp,v 1.3 1999-10-19 10:23:27 phaller Exp $ */
     1/* $Id: shellole.cpp,v 1.4 2000-03-26 16:34:51 cbratschi Exp $ */
    22
    33/*
     
    1212 * Copyright 1998 Juergen Schmied  <juergen.schmied@metronet.de>
    1313 *
     14 * Corel WINE 20000324 level
    1415 */
    1516
     
    5657
    5758DWORD WINAPI SHCLSIDFromStringA (LPSTR clsid, CLSID *id);
     59extern IShellFolder * IShellFolder_Constructor(
     60        IShellFolder * psf,
     61        LPITEMIDLIST pidl);
     62extern HRESULT IFSFolder_Constructor(
     63        IUnknown * pUnkOuter,
     64        REFIID riid,
     65        LPVOID * ppv);
    5866
    5967/*************************************************************************
     
    7078                                           LPVOID*,   ppv)
    7179{
    72    char  xclsid[48], xiid[48], xuout[48];
     80   char  xclsid[48], xiid[48];
    7381   DWORD hres;
    7482   IID   iid;
     
    8694   WINE_StringFromCLSID(myclsid,xclsid);
    8795   WINE_StringFromCLSID(refiid,xiid);
    88    if (unknownouter)
    89       WINE_StringFromCLSID((const CLSID*)unknownouter,xuout);
    90 
    91    dprintf(("SHELL32:SHCoCreateInstance (%p,CLSID:%s UOUT:%s IID:%s,%p)\n",
     96
     97   dprintf(("SHELL32:SHCoCreateInstance (%p,CLSID:%s unk:%s IID:%s,%p)\n",
    9298            aclsid,
    9399            xclsid,
    94             unknownouter?xuout:"nil",xiid,ppv));
    95 
    96    hres = CoCreateInstance(myclsid, NULL, CLSCTX_INPROC_SERVER, refiid, ppv);
     100            unknownouter,xiid,ppv));
     101
     102   if IsEqualCLSID(myclsid, &CLSID_ShellFSFolder)
     103   {
     104     hres = IFSFolder_Constructor(unknownouter, refiid, ppv);
     105   }
     106   else
     107   {
     108     hres = CoCreateInstance(myclsid, unknownouter, CLSCTX_INPROC_SERVER, refiid, ppv);
     109   }
    97110
    98111   if(hres!=S_OK)
    99112   {
    100      dprintf(("SHELL32:SHCoCreateInstance failed (0x%08lx) to create CLSID:%s IID:%s\n",
     113     dprintf(("SHELL32: SHCoCreateInstance failed (0x%08lx) to create CLSID:%s IID:%s\n",
    101114              hres,
    102115              xclsid,
    103116              xiid));
    104      dprintf(("SHELL32:SHCoCreateInstance you might need to import the winedefault.reg\n"));
     117     dprintf(("SHELL32: SHCoCreateInstance: class not found in registry\n"));
     118     dprintf(("SHELL32: SHCoCreateInstance you might need to import the winedefault.reg\n"));
    105119   }
    106120
     
    128142   *ppv = NULL;
    129143
    130    if(IsEqualCLSID(rclsid, &CLSID_PaperBin))
    131    {
    132      dprintf(("SHELL32:SHELL32_DllGetClassObject paper bin not implemented\n"));
    133      return CLASS_E_CLASSNOTAVAILABLE;
    134    }
    135144   if(IsEqualCLSID(rclsid, &CLSID_ShellDesktop)||
    136145      IsEqualCLSID(rclsid, &CLSID_ShellLink))
  • trunk/src/shell32/shellord.cpp

    r2258 r3243  
    1 /* $Id: shellord.cpp,v 1.5 1999-12-30 00:21:33 phaller Exp $ */
     1/* $Id: shellord.cpp,v 1.6 2000-03-26 16:34:51 cbratschi Exp $ */
    22/*
    33 * The parameters of many functions changes between different OS versions
     
    66 * Copyright 1997 Marcus Meissner
    77 *           1998 Jürgen Schmied
     8 *
     9 * Corel WINE 20000324 level
    810 */
    911
     
    4951
    5052/*************************************************************************
    51  * SHChangeNotifyRegister                       [SHELL32.2]
     53 * SHChangeNotifyRegister                       [SHELL32.2]
    5254 *
    5355 * NOTES
     
    6365    int count,
    6466    IDSTRUCT *idlist)
    65 {       
    66         FIXME("SHChangeNotifyRegister: (0x%04x,0x%08lx,0x%08lx,0x%08lx,0x%08x,%p):stub.\n",
    67                 hwnd,events1,events2,msg,count,idlist);
    68         return 0;
    69 }
    70 /*************************************************************************
    71  * SHChangeNotifyDeregister                     [SHELL32.4]
     67{
     68        FIXME("SHChangeNotifyRegister: (0x%04x,0x%08lx,0x%08lx,0x%08lx,0x%08x,%p):stub.\n",
     69                hwnd,events1,events2,msg,count,idlist);
     70        return 0;
     71}
     72/*************************************************************************
     73 * SHChangeNotifyDeregister                     [SHELL32.4]
    7274 */
    7375DWORD WINAPI
    7476SHChangeNotifyDeregister(LONG x1)
    75 {       FIXME("(0x%08lx):stub.\n",x1);
    76         return 0;
    77 }
    78 /*************************************************************************
    79  * NTSHChangeNotifyRegister                     [SHELL32.640]
     77{       FIXME("(0x%08lx):stub.\n",x1);
     78        return 0;
     79}
     80/*************************************************************************
     81 * NTSHChangeNotifyRegister                     [SHELL32.640]
    8082 * NOTES
    8183 *   Idlist is an array of structures and Count specifies how many items in the array
     
    8991    int count,
    9092    IDSTRUCT *idlist)
    91 {       FIXME("(0x%04x,0x%08lx,0x%08lx,0x%08lx,0x%08x,%p):stub.\n",
    92                 hwnd,events1,events2,msg,count,idlist);
    93         return 0;
    94 }
    95 /*************************************************************************
    96  * NTSHChangeNotifyDeregister                   [SHELL32.641]
     93{       FIXME("(0x%04x,0x%08lx,0x%08lx,0x%08lx,0x%08x,%p):stub.\n",
     94                hwnd,events1,events2,msg,count,idlist);
     95        return 0;
     96}
     97/*************************************************************************
     98 * NTSHChangeNotifyDeregister                   [SHELL32.641]
    9799 */
    98100DWORD WINAPI NTSHChangeNotifyDeregister(LONG x1)
    99 {       FIXME("(0x%08lx):stub.\n",x1);
    100         return 0;
    101 }
    102 
    103 /*************************************************************************
    104  * ParseField                                   [SHELL32.58]
     101{       FIXME("(0x%08lx):stub.\n",x1);
     102        return 0;
     103}
     104
     105/*************************************************************************
     106 * ParseField                                   [SHELL32.58]
    105107 *
    106108 */
    107109DWORD WINAPI ParseFieldA(LPCSTR src, DWORD field, LPSTR dst, DWORD len)
    108 {       WARN("('%s',0x%08lx,%p,%ld) semi-stub.\n",src,field,dst,len);
    109 
    110         if (!src || !src[0] || !dst || !len)
    111           return 0;
    112 
    113         if (field >1)
    114         { field--;     
    115           while (field)
    116           { if (*src==0x0) return FALSE;
    117             if (*src==',') field--;
    118             src++;
    119           }
    120         }
    121 
    122         while (*src!=0x00 && *src!=',' && len>0)
    123         { *dst=*src; dst++, src++; len--;
    124         }
    125         *dst=0x0;
    126        
    127         return TRUE;
    128 }
    129 
    130 /*************************************************************************
    131  * PickIconDlg                                  [SHELL32.62]
     110{       WARN("('%s',0x%08lx,%p,%ld) semi-stub.\n",src,field,dst,len);
     111
     112        if (!src || !src[0] || !dst || !len)
     113          return 0;
     114
     115        if (field >1)
     116        { field--;
     117          while (field)
     118          { if (*src==0x0) return FALSE;
     119            if (*src==',') field--;
     120            src++;
     121          }
     122        }
     123
     124        while (*src!=0x00 && *src!=',' && len>0)
     125        { *dst=*src; dst++, src++; len--;
     126        }
     127        *dst=0x0;
     128
     129        return TRUE;
     130}
     131
     132/*************************************************************************
     133 * PickIconDlg                                  [SHELL32.62]
    132134 *
    133135 */
    134136DWORD WINAPI PickIconDlg(DWORD x,DWORD y,DWORD z,DWORD a)
    135 {       FIXME("PickIconDlg(%08lx,%08lx,%08lx,%08lx):stub.\n",x,y,z,a);
    136         return 0xffffffff;
    137 }
    138 
    139 /*************************************************************************
    140  * GetFileNameFromBrowse                        [SHELL32.63]
     137{       FIXME("PickIconDlg(%08lx,%08lx,%08lx,%08lx):stub.\n",x,y,z,a);
     138        return 0xffffffff;
     139}
     140
     141/*************************************************************************
     142 * GetFileNameFromBrowse                        [SHELL32.63]
    141143 *
    142144 */
    143145DWORD WINAPI GetFileNameFromBrowse(HWND howner, LPSTR targetbuf, DWORD len, DWORD x, LPCSTR suffix, LPCSTR y, LPCSTR cmd)
    144 {       FIXME("(%04x,%p,%ld,%08lx,%s,%s,%s):stub.\n",
    145             howner,targetbuf,len,x,suffix,y,cmd);
     146{       FIXME("(%04x,%p,%ld,%08lx,%s,%s,%s):stub.\n",
     147            howner,targetbuf,len,x,suffix,y,cmd);
    146148    /* puts up a Open Dialog and requests input into targetbuf */
    147149    /* OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_FILEMUSTEXIST|OFN_unknown */
     
    151153
    152154/*************************************************************************
    153  * SHGetSettings                                [SHELL32.68]
     155 * SHGetSettings                                [SHELL32.68]
    154156 *
    155157 * NOTES
     
    159161void WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask, DWORD dwx)
    160162{
    161         HKEY    hKey;
    162         DWORD   dwData;
    163         DWORD   dwDataSize = sizeof (DWORD);
    164 
    165         TRACE("(%p 0x%08lx 0x%08lx)\n",lpsfs,dwMask, dwx);
    166        
    167         if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
    168                                 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0))
    169           return;
    170        
    171         if ( (SSF_SHOWEXTENSIONS & dwMask) && !RegQueryValueExA(hKey, "HideFileExt", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    172           lpsfs->fShowExtensions  = ((dwData == 0) ?  0 : 1);
    173 
    174         if ( (SSF_SHOWINFOTIP & dwMask) && !RegQueryValueExA(hKey, "ShowInfoTip", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    175           lpsfs->fShowInfoTip  = ((dwData == 0) ?  0 : 1);
    176 
    177         if ( (SSF_DONTPRETTYPATH & dwMask) && !RegQueryValueExA(hKey, "DontPrettyPath", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    178           lpsfs->fDontPrettyPath  = ((dwData == 0) ?  0 : 1);
    179 
    180         if ( (SSF_HIDEICONS & dwMask) && !RegQueryValueExA(hKey, "HideIcons", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    181           lpsfs->fHideIcons  = ((dwData == 0) ?  0 : 1);
    182 
    183         if ( (SSF_MAPNETDRVBUTTON & dwMask) && !RegQueryValueExA(hKey, "MapNetDrvBtn", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    184           lpsfs->fMapNetDrvBtn  = ((dwData == 0) ?  0 : 1);
    185 
    186         if ( (SSF_SHOWATTRIBCOL & dwMask) && !RegQueryValueExA(hKey, "ShowAttribCol", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    187           lpsfs->fShowAttribCol  = ((dwData == 0) ?  0 : 1);
    188 
    189         if (((SSF_SHOWALLOBJECTS | SSF_SHOWSYSFILES) & dwMask) && !RegQueryValueExA(hKey, "Hidden", 0, 0, (LPBYTE)&dwData, &dwDataSize))
    190         { if (dwData == 0)
    191           { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 0;
    192             if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 0;
    193           }
    194           else if (dwData == 1)
    195           { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 1;
    196             if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 0;
    197           }
    198           else if (dwData == 2)
    199           { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 0;
    200             if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 1;
    201           }
    202         }
    203         RegCloseKey (hKey);
    204 
    205         TRACE("-- 0x%04x\n", *(WORD*)lpsfs);
    206 }
    207 
    208 /*************************************************************************
    209  * SHShellFolderView_Message                    [SHELL32.73]
     163        HKEY    hKey;
     164        DWORD   dwData;
     165        DWORD   dwDataSize = sizeof (DWORD);
     166
     167        TRACE("(%p 0x%08lx 0x%08lx)\n",lpsfs,dwMask, dwx);
     168
     169        if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
     170                                0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0))
     171          return;
     172
     173        if ( (SSF_SHOWEXTENSIONS & dwMask) && !RegQueryValueExA(hKey, "HideFileExt", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     174          lpsfs->fShowExtensions  = ((dwData == 0) ?  0 : 1);
     175
     176        if ( (SSF_SHOWINFOTIP & dwMask) && !RegQueryValueExA(hKey, "ShowInfoTip", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     177          lpsfs->fShowInfoTip  = ((dwData == 0) ?  0 : 1);
     178
     179        if ( (SSF_DONTPRETTYPATH & dwMask) && !RegQueryValueExA(hKey, "DontPrettyPath", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     180          lpsfs->fDontPrettyPath  = ((dwData == 0) ?  0 : 1);
     181
     182        if ( (SSF_HIDEICONS & dwMask) && !RegQueryValueExA(hKey, "HideIcons", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     183          lpsfs->fHideIcons  = ((dwData == 0) ?  0 : 1);
     184
     185        if ( (SSF_MAPNETDRVBUTTON & dwMask) && !RegQueryValueExA(hKey, "MapNetDrvBtn", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     186          lpsfs->fMapNetDrvBtn  = ((dwData == 0) ?  0 : 1);
     187
     188        if ( (SSF_SHOWATTRIBCOL & dwMask) && !RegQueryValueExA(hKey, "ShowAttribCol", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     189          lpsfs->fShowAttribCol  = ((dwData == 0) ?  0 : 1);
     190
     191        if (((SSF_SHOWALLOBJECTS | SSF_SHOWSYSFILES) & dwMask) && !RegQueryValueExA(hKey, "Hidden", 0, 0, (LPBYTE)&dwData, &dwDataSize))
     192        { if (dwData == 0)
     193          { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 0;
     194            if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 0;
     195          }
     196          else if (dwData == 1)
     197          { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 1;
     198            if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 0;
     199          }
     200          else if (dwData == 2)
     201          { if (SSF_SHOWALLOBJECTS & dwMask)    lpsfs->fShowAllObjects  = 0;
     202            if (SSF_SHOWSYSFILES & dwMask)      lpsfs->fShowSysFiles  = 1;
     203          }
     204        }
     205        RegCloseKey (hKey);
     206
     207        TRACE("-- 0x%04x\n", *(WORD*)lpsfs);
     208}
     209
     210/*************************************************************************
     211 * SHShellFolderView_Message                    [SHELL32.73]
    210212 *
    211213 * PARAMETERS
     
    227229
    228230/*************************************************************************
    229  * OleStrToStrN                                 [SHELL32.78]
     231 * OleStrToStrN                                 [SHELL32.78]
    230232 */
    231233BOOL WINAPI OleStrToStrNA (LPSTR lpStr, INT nStr, LPCWSTR lpOle, INT nOle)
    232234{
    233         TRACE("%p %x %s %x\n", lpStr, nStr, debugstr_w(lpOle), nOle);
    234         return WideCharToMultiByte (0, 0, lpOle, nOle, lpStr, nStr, NULL, NULL);
     235        TRACE("%p %x %s %x\n", lpStr, nStr, debugstr_w(lpOle), nOle);
     236        return WideCharToMultiByte (0, 0, lpOle, nOle, lpStr, nStr, NULL, NULL);
    235237}
    236238
    237239BOOL WINAPI OleStrToStrNW (LPWSTR lpwStr, INT nwStr, LPCWSTR lpOle, INT nOle)
    238240{
    239         TRACE("%p %x %s %x\n", lpwStr, nwStr, debugstr_w(lpOle), nOle);
    240 
    241         if (lstrcpynW ( lpwStr, lpOle, nwStr))
    242         { return lstrlenW (lpwStr);
    243         }
    244         return 0;
     241        TRACE("%p %x %s %x\n", lpwStr, nwStr, debugstr_w(lpOle), nOle);
     242
     243        if (lstrcpynW ( lpwStr, lpOle, nwStr))
     244        { return lstrlenW (lpwStr);
     245        }
     246        return 0;
    245247}
    246248
    247249BOOL WINAPI OleStrToStrNAW (LPVOID lpOut, INT nOut, LPCVOID lpIn, INT nIn)
    248250{
    249         if (VERSION_OsIsUnicode())
    250           return OleStrToStrNW ((LPWSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn);
    251         return OleStrToStrNA ((LPSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn);
    252 }
    253 
    254 /*************************************************************************
    255  * StrToOleStrN                                 [SHELL32.79]
     251        if (VERSION_OsIsUnicode())
     252          return OleStrToStrNW ((LPWSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn);
     253        return OleStrToStrNA ((LPSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn);
     254}
     255
     256/*************************************************************************
     257 * StrToOleStrN                                 [SHELL32.79]
    256258 *  lpMulti, nMulti, nWide [IN]
    257259 *  lpWide [OUT]
     
    259261BOOL WINAPI StrToOleStrNA (LPWSTR lpWide, INT nWide, LPCSTR lpStrA, INT nStr)
    260262{
    261         TRACE("%p %x %s %x\n", lpWide, nWide, lpStrA, nStr);
    262         return MultiByteToWideChar (0, 0, lpStrA, nStr, lpWide, nWide);
     263        TRACE("%p %x %s %x\n", lpWide, nWide, lpStrA, nStr);
     264        return MultiByteToWideChar (0, 0, lpStrA, nStr, lpWide, nWide);
    263265}
    264266BOOL WINAPI StrToOleStrNW (LPWSTR lpWide, INT nWide, LPCWSTR lpStrW, INT nStr)
    265267{
    266         TRACE("%p %x %s %x\n", lpWide, nWide, debugstr_w(lpStrW), nStr);
    267 
    268         if (lstrcpynW (lpWide, lpStrW, nWide))
    269         { return lstrlenW (lpWide);
    270         }
    271         return 0;
     268        TRACE("%p %x %s %x\n", lpWide, nWide, debugstr_w(lpStrW), nStr);
     269
     270        if (lstrcpynW (lpWide, lpStrW, nWide))
     271        { return lstrlenW (lpWide);
     272        }
     273        return 0;
    272274}
    273275
    274276BOOL WINAPI StrToOleStrNAW (LPWSTR lpWide, INT nWide, LPCVOID lpStr, INT nStr)
    275277{
    276         if (VERSION_OsIsUnicode())
    277           return StrToOleStrNW (lpWide, nWide, (LPWSTR)lpStr, nStr);
    278         return StrToOleStrNA (lpWide, nWide, (LPSTR)lpStr, nStr);
    279 }
    280 
    281 /*************************************************************************
    282  * RegisterShellHook                            [SHELL32.181]
     278        if (VERSION_OsIsUnicode())
     279          return StrToOleStrNW (lpWide, nWide, (LPWSTR)lpStr, nStr);
     280        return StrToOleStrNA (lpWide, nWide, (LPSTR)lpStr, nStr);
     281}
     282
     283/*************************************************************************
     284 * RegisterShellHook                            [SHELL32.181]
    283285 *
    284286 * PARAMS
     
    293295}
    294296/*************************************************************************
    295  * ShellMessageBoxW                             [SHELL32.182]
     297 * ShellMessageBoxW                             [SHELL32.182]
    296298 *
    297299 * Format and output errormessage.
    298300 *
    299  * idText       resource ID of title or LPSTR
    300  * idTitle      resource ID of title or LPSTR
     301 * idText       resource ID of title or LPSTR
     302 * idTitle      resource ID of title or LPSTR
    301303 *
    302304 * NOTES
     
    305307INT __cdecl
    306308ShellMessageBoxW(HMODULE hmod,HWND hwnd,DWORD idText,DWORD idTitle,DWORD uType,LPCVOID arglist)
    307 {       WCHAR   szText[100],szTitle[100],szTemp[256];
    308         LPWSTR   pszText = &szText[0], pszTitle = &szTitle[0];
    309         LPVOID  args = &arglist;
    310 
    311         TRACE("(%08lx,%08lx,%08lx,%08lx,%08lx,%p)\n",(DWORD)hmod,(DWORD)hwnd,idText,idTitle,uType,arglist);
    312 
    313         if (!HIWORD (idTitle))
    314           LoadStringW(hmod,idTitle,pszTitle,100);
    315         else
    316           pszTitle = (LPWSTR)idTitle;
    317 
    318         if (! HIWORD (idText))
    319           LoadStringW(hmod,idText,pszText,100);
    320         else
    321           pszText = (LPWSTR)idText;
    322 
    323         FormatMessageW(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY,
     309{       WCHAR   szText[100],szTitle[100],szTemp[256];
     310        LPWSTR   pszText = &szText[0], pszTitle = &szTitle[0];
     311        LPVOID  args = &arglist;
     312
     313        TRACE("(%08lx,%08lx,%08lx,%08lx,%08lx,%p)\n",(DWORD)hmod,(DWORD)hwnd,idText,idTitle,uType,arglist);
     314
     315        if (!HIWORD (idTitle))
     316          LoadStringW(hmod,idTitle,pszTitle,100);
     317        else
     318          pszTitle = (LPWSTR)idTitle;
     319
     320        if (! HIWORD (idText))
     321          LoadStringW(hmod,idText,pszText,100);
     322        else
     323          pszText = (LPWSTR)idText;
     324
     325        FormatMessageW(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY,
    324326                szText,
    325327                0,
     
    328330                256,
    329331                (LPDWORD)args);
    330         return MessageBoxW(hwnd,szTemp,szTitle,uType);
    331 }
    332 
    333 /*************************************************************************
    334  * ShellMessageBoxA                             [SHELL32.183]
     332        return MessageBoxW(hwnd,szTemp,szTitle,uType);
     333}
     334
     335/*************************************************************************
     336 * ShellMessageBoxA                             [SHELL32.183]
    335337 */
    336338INT __cdecl
    337339ShellMessageBoxA(HMODULE hmod,HWND hwnd,DWORD idText,DWORD idTitle,DWORD uType,LPCVOID arglist)
    338 {       char    szText[100],szTitle[100],szTemp[256];
    339         LPSTR   pszText = &szText[0], pszTitle = &szTitle[0];
    340         LPVOID  args = &arglist;
    341 
    342         TRACE("(%08lx,%08lx,%08lx,%08lx,%08lx,%p)\n", (DWORD)hmod,(DWORD)hwnd,idText,idTitle,uType,arglist);
    343 
    344         if (!HIWORD (idTitle))
    345           LoadStringA(hmod,idTitle,pszTitle,100);
    346         else
    347           pszTitle = (LPSTR)idTitle;
    348 
    349         if (! HIWORD (idText))
    350           LoadStringA(hmod,idText,pszText,100);
    351         else
    352           pszText = (LPSTR)idText;
    353 
    354         FormatMessageA(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY ,pszText,0,0,szTemp,256,(LPDWORD)args);
    355         return MessageBoxA(hwnd,szTemp,pszTitle,uType);
    356 }
    357 
    358 /*************************************************************************
    359  * SHRestricted                         [SHELL32.100]
     340{       char    szText[100],szTitle[100],szTemp[256];
     341        LPSTR   pszText = &szText[0], pszTitle = &szTitle[0];
     342        LPVOID  args = &arglist;
     343
     344        TRACE("(%08lx,%08lx,%08lx,%08lx,%08lx,%p)\n", (DWORD)hmod,(DWORD)hwnd,idText,idTitle,uType,arglist);
     345
     346        if (!HIWORD (idTitle))
     347          LoadStringA(hmod,idTitle,pszTitle,100);
     348        else
     349          pszTitle = (LPSTR)idTitle;
     350
     351        if (! HIWORD (idText))
     352          LoadStringA(hmod,idText,pszText,100);
     353        else
     354          pszText = (LPSTR)idText;
     355
     356        FormatMessageA(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY ,pszText,0,0,szTemp,256,(LPDWORD)args);
     357        return MessageBoxA(hwnd,szTemp,pszTitle,uType);
     358}
     359
     360/*************************************************************************
     361 * SHRestricted                         [SHELL32.100]
    360362 *
    361363 * walks through policy table, queries <app> key, <type> value, returns
     
    373375DWORD WINAPI SHRestricted (DWORD pol) {
    374376        char regstr[256];
    375         HKEY    xhkey;
    376         DWORD   retval, polidx, i, datsize = 4;
    377 
    378         TRACE("(%08lx)\n",pol);
    379 
    380         polidx = -1;
    381 
    382         /* scan to see if we know this policy ID */
    383         for (i = 0; i < SHELL_MAX_POLICIES; i++)
    384         {
    385              if (pol == sh32_policy_table[i].polflags)
    386              {
    387                  polidx = i;
    388                 break;
    389              }
    390         }
    391 
    392         if (polidx == -1)
    393         {
    394             /* we don't know this policy, return 0 */
    395             TRACE("unknown policy: (%08lx)\n", pol);
    396                 return 0;
    397         }
    398 
    399         /* we have a known policy */
    400         lstrcpyA(regstr, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\");
    401         lstrcatA(regstr, sh32_policy_table[polidx].appstr);
    402 
    403         /* first check if this policy has been cached, return it if so */
    404         if (sh32_policy_table[polidx].cache != SHELL_NO_POLICY)
    405         {
    406             return sh32_policy_table[polidx].cache;
    407         }
    408 
    409         /* return 0 and don't set the cache if any registry errors occur */
    410         retval = 0;
    411         if (RegOpenKeyA(HKEY_CURRENT_USER, regstr, &xhkey) == ERROR_SUCCESS)
    412         {
    413             if (RegQueryValueExA(xhkey, sh32_policy_table[polidx].keystr, NULL, NULL, (LPBYTE)&retval, &datsize) == ERROR_SUCCESS)
    414             {
    415                 sh32_policy_table[polidx].cache = retval;
    416             }
    417 
    418         RegCloseKey(xhkey);
    419 }
    420 
    421         return retval;
     377        HKEY    xhkey;
     378        DWORD   retval, polidx, i, datsize = 4;
     379
     380        TRACE("(%08lx)\n",pol);
     381
     382        polidx = -1;
     383
     384        /* scan to see if we know this policy ID */
     385        for (i = 0; i < SHELL_MAX_POLICIES; i++)
     386        {
     387             if (pol == sh32_policy_table[i].polflags)
     388             {
     389                 polidx = i;
     390                break;
     391             }
     392        }
     393
     394        if (polidx == -1)
     395        {
     396            /* we don't know this policy, return 0 */
     397            TRACE("unknown policy: (%08lx)\n", pol);
     398                return 0;
     399        }
     400
     401        /* we have a known policy */
     402        lstrcpyA(regstr, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\");
     403        lstrcatA(regstr, sh32_policy_table[polidx].appstr);
     404
     405        /* first check if this policy has been cached, return it if so */
     406        if (sh32_policy_table[polidx].cache != SHELL_NO_POLICY)
     407        {
     408            return sh32_policy_table[polidx].cache;
     409        }
     410
     411        /* return 0 and don't set the cache if any registry errors occur */
     412        retval = 0;
     413        if (RegOpenKeyA(HKEY_CURRENT_USER, regstr, &xhkey) == ERROR_SUCCESS)
     414        {
     415            if (RegQueryValueExA(xhkey, sh32_policy_table[polidx].keystr, NULL, NULL, (LPBYTE)&retval, &datsize) == ERROR_SUCCESS)
     416            {
     417                sh32_policy_table[polidx].cache = retval;
     418            }
     419
     420        RegCloseKey(xhkey);
     421}
     422
     423        return retval;
    422424}
    423425
     
    460462     {
    461463         if (lstrcmpiA(inpRegKey, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies"))
    462         {
    463              /* doesn't match, fail */
    464              return 0;
    465         }
     464        {
     465             /* doesn't match, fail */
     466             return 0;
     467        }
    466468     }
    467469
     
    476478
    477479/*************************************************************************
    478  * SHCreateDirectory                            [SHELL32.165]
     480 * SHCreateDirectory                            [SHELL32.165]
    479481 *
    480482 * NOTES
     
    483485 */
    484486DWORD WINAPI SHCreateDirectory(LPSECURITY_ATTRIBUTES sec,LPCSTR path) {
    485         TRACE("(%p,%s):stub.\n",sec,path);
    486         if (CreateDirectoryA(path,sec))
    487                 return TRUE;
    488         /* SHChangeNotify(8,1,path,0); */
    489         return FALSE;
     487        TRACE("(%p,%s):stub.\n",sec,path);
     488        if (CreateDirectoryA(path,sec))
     489                return TRUE;
     490        /* SHChangeNotify(8,1,path,0); */
     491        return FALSE;
    490492#if 0
    491         if (SHELL32_79(path,(LPVOID)x))
    492                 return 0;
    493         FIXME("(%08lx,%s):stub.\n",x,path);
    494         return 0;
     493        if (SHELL32_79(path,(LPVOID)x))
     494                return 0;
     495        FIXME("(%08lx,%s):stub.\n",x,path);
     496        return 0;
    495497#endif
    496498}
    497499
    498500/*************************************************************************
    499  * SHFree                                       [SHELL32.195]
     501 * SHFree                                       [SHELL32.195]
    500502 *
    501503 * NOTES
     
    503505 *     exported by ordinal
    504506 */
    505 /*#define MEM_DEBUG 1*/
     507#define MEM_DEBUG 0
    506508DWORD WINAPI SHFree(LPVOID x)
    507509{
    508 #ifdef MEM_DEBUG
    509         WORD len = *(LPWORD)(x-2);
    510 
    511         if ( *(LPWORD)(x+len) != 0x7384)
    512           ERR("MAGIC2!\n");
    513 
    514         if ( (*(LPWORD)(x-4)) != 0x8271)
    515           ERR("MAGIC1!\n");
    516         else
    517           memset(x-4, 0xde, len+6);
    518 
    519         TRACE("%p len=%u\n",x, len);
    520 
    521         x -= 4;
     510#if MEM_DEBUG
     511        WORD len = *(LPWORD)(x-2);
     512
     513        if ( *(LPWORD)(x+len) != 0x7384)
     514          ERR("MAGIC2!\n");
     515
     516        if ( (*(LPWORD)(x-4)) != 0x8271)
     517          ERR("MAGIC1!\n");
     518        else
     519          memset(x-4, 0xde, len+6);
     520
     521        TRACE("%p len=%u\n",x, len);
     522
     523        x -= 4;
    522524#else
    523         TRACE("%p\n",x);
     525        TRACE("%p\n",x);
    524526#endif
    525         return HeapFree(GetProcessHeap(), 0, x);
    526 }
    527 
    528 /*************************************************************************
    529  * SHAlloc                                      [SHELL32.196]
     527        return HeapFree(GetProcessHeap(), 0, x);
     528}
     529
     530/*************************************************************************
     531 * SHAlloc                                      [SHELL32.196]
    530532 *
    531533 * NOTES
     
    535537LPVOID WINAPI SHAlloc(DWORD len)
    536538{
    537         LPBYTE ret;
    538 
    539 #ifdef MEM_DEBUG
    540         ret = (LPBYTE) HeapAlloc(GetProcessHeap(),0,len+6);
     539        LPBYTE ret;
     540
     541#if MEM_DEBUG
     542        ret = (LPBYTE) HeapAlloc(GetProcessHeap(),0,len+6);
    541543#else
    542         ret = (LPBYTE) HeapAlloc(GetProcessHeap(),0,len);
     544        ret = (LPBYTE) HeapAlloc(GetProcessHeap(),0,len);
    543545#endif
    544546
    545 #ifdef MEM_DEBUG
    546         *(LPWORD)(ret) = 0x8271;
    547         *(LPWORD)(ret+2) = (WORD)len;
    548         *(LPWORD)(ret+4+len) = 0x7384;
    549         ret += 4;
    550         memset(ret, 0xdf, len);
     547#if MEM_DEBUG
     548        *(LPWORD)(ret) = 0x8271;
     549        *(LPWORD)(ret+2) = (WORD)len;
     550        *(LPWORD)(ret+4+len) = 0x7384;
     551        ret += 4;
     552        memset(ret, 0xdf, len);
    551553#endif
    552         TRACE("%lu bytes at %p\n",len, ret);
    553         return (LPVOID)ret;
    554 }
    555 
    556 /*************************************************************************
    557  * SHRegisterDragDrop                           [SHELL32.86]
     554        TRACE("%lu bytes at %p\n",len, ret);
     555        return (LPVOID)ret;
     556}
     557
     558/*************************************************************************
     559 * SHRegisterDragDrop                           [SHELL32.86]
    558560 *
    559561 * NOTES
     
    562564DWORD WINAPI SHRegisterDragDrop(HWND hWnd,IDropTarget * pDropTarget)
    563565{
    564         FIXME("(0x%08x,%p):stub.\n", hWnd, pDropTarget);
    565         return     RegisterDragDrop(hWnd, pDropTarget);
    566 }
    567 
    568 /*************************************************************************
    569  * SHRevokeDragDrop                             [SHELL32.87]
     566        FIXME("(0x%08x,%p):stub.\n", hWnd, pDropTarget);
     567        return     RegisterDragDrop(hWnd, pDropTarget);
     568}
     569
     570/*************************************************************************
     571 * SHRevokeDragDrop                             [SHELL32.87]
    570572 *
    571573 * NOTES
     
    578580
    579581/*************************************************************************
    580  * SHDoDragDrop                                 [SHELL32.88]
     582 * SHDoDragDrop                                 [SHELL32.88]
    581583 *
    582584 * NOTES
     
    589591
    590592/*************************************************************************
    591  * RunFileDlg                                   [SHELL32.61]
     593 * RunFileDlg                                   [SHELL32.61]
    592594 *
    593595 * NOTES
     
    596598DWORD WINAPI
    597599RunFileDlg (HWND hwndOwner, DWORD dwParam1, DWORD dwParam2,
    598             LPSTR lpszTitle, LPSTR lpszPrompt, UINT uFlags)
     600            LPSTR lpszTitle, LPSTR lpszPrompt, UINT uFlags)
    599601{
    600602    FIXME("(0x%08x 0x%lx 0x%lx \"%s\" \"%s\" 0x%x):stub.\n",
    601            hwndOwner, dwParam1, dwParam2, lpszTitle, lpszPrompt, uFlags);
     603           hwndOwner, dwParam1, dwParam2, lpszTitle, lpszPrompt, uFlags);
    602604    return 0;
    603605}
    604606
    605607/*************************************************************************
    606  * ExitWindowsDialog                            [SHELL32.60]
     608 * ExitWindowsDialog                            [SHELL32.60]
    607609 *
    608610 * NOTES
     
    611613void WINAPI ExitWindowsDialog (HWND hWndOwner)
    612614{
    613         TRACE("(0x%08x)\n", hWndOwner);
    614         if (MessageBoxA( hWndOwner, "Do you want to exit WINE?", "Shutdown", MB_YESNO|MB_ICONQUESTION) == IDOK)
    615         { SendMessageA ( hWndOwner, WM_QUIT, 0, 0);
    616         }
    617 }
    618 
    619 /*************************************************************************
    620  * ArrangeWindows                               [SHELL32.184]
     615        TRACE("(0x%08x)\n", hWndOwner);
     616        if (MessageBoxA( hWndOwner, "Do you want to exit WINE?", "Shutdown", MB_YESNO|MB_ICONQUESTION) == IDOK)
     617        { SendMessageA ( hWndOwner, WM_QUIT, 0, 0);
     618        }
     619}
     620
     621/*************************************************************************
     622 * ArrangeWindows                               [SHELL32.184]
    621623 *
    622624 */
    623625DWORD WINAPI
    624626ArrangeWindows (DWORD dwParam1, DWORD dwParam2, DWORD dwParam3,
    625                 DWORD dwParam4, DWORD dwParam5)
     627                DWORD dwParam4, DWORD dwParam5)
    626628{
    627629    FIXME("(0x%lx 0x%lx 0x%lx 0x%lx 0x%lx):stub.\n",
    628            dwParam1, dwParam2, dwParam3, dwParam4, dwParam5);
     630           dwParam1, dwParam2, dwParam3, dwParam4, dwParam5);
    629631    return 0;
    630632}
    631633
    632634/*************************************************************************
    633  * SignalFileOpen                               [SHELL32.103]
     635 * SignalFileOpen                               [SHELL32.103]
    634636 *
    635637 * NOTES
     
    645647
    646648/*************************************************************************
    647  * SHAddToRecentDocs                            [SHELL32.234]
     649 * SHAddToRecentDocs                            [SHELL32.234]
    648650 *
    649651 * PARAMETERS
     
    657659{ if (SHARD_PIDL==uFlags)
    658660  { FIXME("(0x%08x,pidl=%p):stub.\n", uFlags,pv);
    659         }
    660         else
    661         { FIXME("(0x%08x,%s):stub.\n", uFlags,(char*)pv);
    662         }
     661        }
     662        else
     663        { FIXME("(0x%08x,%s):stub.\n", uFlags,(char*)pv);
     664        }
    663665  return 0;
    664666}
    665667/*************************************************************************
    666  * SHFileOperation                              [SHELL32.242]
     668 * SHFileOperation                              [SHELL32.242]
    667669 *
    668670 */
    669671DWORD WINAPI SHFileOperationAW(DWORD x)
    670 {       FIXME("0x%08lx stub\n",x);
    671         return 0;
    672 
    673 }
    674 
    675 /*************************************************************************
    676  * SHFileOperationA                             [SHELL32.243]
     672{       FIXME("0x%08lx stub\n",x);
     673        return 0;
     674
     675}
     676
     677/*************************************************************************
     678 * SHFileOperationA                             [SHELL32.243]
    677679 *
    678680 * NOTES
     
    684686}
    685687/*************************************************************************
    686  * SHFileOperationW                             [SHELL32.244]
     688 * SHFileOperationW                             [SHELL32.244]
    687689 *
    688690 * NOTES
     
    695697
    696698/*************************************************************************
    697  * SHChangeNotify                               [SHELL32.239]
     699 * SHChangeNotify                               [SHELL32.239]
    698700 *
    699701 * NOTES
     
    703705    INT   wEventId,  /* [IN] flags that specifies the event*/
    704706    UINT  uFlags,   /* [IN] the meaning of dwItem[1|2]*/
    705                 LPCVOID dwItem1,
    706                 LPCVOID dwItem2)
     707                LPCVOID dwItem1,
     708                LPCVOID dwItem2)
    707709{ FIXME("(0x%08x,0x%08ux,%p,%p):stub.\n", wEventId,uFlags,dwItem1,dwItem2);
    708710  return 0;
    709711}
    710712/*************************************************************************
    711  * SHCreateShellFolderViewEx                    [SHELL32.174]
     713 * SHCreateShellFolderViewEx                    [SHELL32.174]
    712714 *
    713715 * NOTES
     
    718720  LPVOID* ppv)            /*[out] IShellView pointer*/
    719721{
    720         IShellView * psf;
    721         HRESULT hRes;
    722        
    723         TRACE("sf=%p pidl=%p cb=%p mode=0x%08lx parm=0x%08lx\n",
    724           psvcbi->pShellFolder, psvcbi->pidl, psvcbi->pCallBack, psvcbi->viewmode, psvcbi->dwUserParam);
    725 
    726         psf = IShellView_Constructor(psvcbi->pShellFolder);
    727        
    728         if (!psf)
    729           return E_OUTOFMEMORY;
    730 
    731         IShellView_AddRef(psf);
    732         hRes = IShellView_QueryInterface(psf, &IID_IShellView, (LPVOID *)ppv);
    733         IShellView_Release(psf);
    734 
    735         return hRes;
    736 }
    737 /*************************************************************************
    738  *  SHWinHelp                                   [SHELL32.127]
     722        IShellView * psf;
     723        HRESULT hRes;
     724
     725        TRACE("sf=%p pidl=%p cb=%p mode=0x%08lx parm=0x%08lx\n",
     726          psvcbi->pShellFolder, psvcbi->pidl, psvcbi->pCallBack, psvcbi->viewmode, psvcbi->dwUserParam);
     727
     728        psf = IShellView_Constructor(psvcbi->pShellFolder);
     729
     730        if (!psf)
     731          return E_OUTOFMEMORY;
     732
     733        IShellView_AddRef(psf);
     734        hRes = IShellView_QueryInterface(psf, &IID_IShellView, (LPVOID *)ppv);
     735        IShellView_Release(psf);
     736
     737        return hRes;
     738}
     739/*************************************************************************
     740 *  SHWinHelp                                   [SHELL32.127]
    739741 *
    740742 */
    741743HRESULT WINAPI SHWinHelp (DWORD v, DWORD w, DWORD x, DWORD z)
    742 {       FIXME("0x%08lx 0x%08lx 0x%08lx 0x%08lx stub\n",v,w,x,z);
    743         return 0;
     744{       FIXME("0x%08lx 0x%08lx 0x%08lx 0x%08lx stub\n",v,w,x,z);
     745        return 0;
    744746}
    745747/*************************************************************************
     
    748750 */
    749751HRESULT WINAPI SHRunControlPanel (DWORD x, DWORD z)
    750 {       FIXME("0x%08lx 0x%08lx stub\n",x,z);
    751         return 0;
    752 }
    753 /*************************************************************************
    754  * ShellExecuteEx                               [SHELL32.291]
     752{       FIXME("0x%08lx 0x%08lx stub\n",x,z);
     753        return 0;
     754}
     755/*************************************************************************
     756 * ShellExecuteEx                               [SHELL32.291]
    755757 *
    756758 */
    757759BOOL WINAPI ShellExecuteExAW (LPVOID sei)
    758 {       if (VERSION_OsIsUnicode())
    759           return ShellExecuteExW ((LPSHELLEXECUTEINFOW)sei);
    760         return ShellExecuteExA ((LPSHELLEXECUTEINFOA)sei);
    761 }
    762 /*************************************************************************
    763  * ShellExecuteExA                              [SHELL32.292]
     760{       if (VERSION_OsIsUnicode())
     761          return ShellExecuteExW ((LPSHELLEXECUTEINFOW)sei);
     762        return ShellExecuteExA ((LPSHELLEXECUTEINFOA)sei);
     763}
     764/*************************************************************************
     765 * ShellExecuteExA                              [SHELL32.292]
    764766 *
    765767 */
    766768BOOL WINAPI ShellExecuteExA (LPSHELLEXECUTEINFOA sei)
    767 {       CHAR szApplicationName[MAX_PATH],szCommandline[MAX_PATH],szPidl[20];
    768         LPSTR pos;
    769         int gap, len;
    770         STARTUPINFOA  startupinfo;
    771         PROCESS_INFORMATION processinformation;
    772                        
    773         WARN("mask=0x%08lx hwnd=0x%04x verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s incomplete\n",
    774                 sei->fMask, sei->hwnd, sei->lpVerb, sei->lpFile,
    775                 sei->lpParameters, sei->lpDirectory, sei->nShow,
    776                 (sei->fMask & SEE_MASK_CLASSNAME) ? sei->lpClass : "not used");
    777 
    778         ZeroMemory(szApplicationName,MAX_PATH);
    779         if (sei->lpFile)
    780           strcpy(szApplicationName, sei->lpFile);
    781        
    782         ZeroMemory(szCommandline,MAX_PATH);
    783         if (sei->lpParameters)
    784           strcpy(szCommandline, sei->lpParameters);
    785                        
    786         if (sei->fMask & (SEE_MASK_CLASSKEY | SEE_MASK_INVOKEIDLIST | SEE_MASK_ICON | SEE_MASK_HOTKEY |
    787                           SEE_MASK_NOCLOSEPROCESS | SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT |
    788                           SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI | SEE_MASK_UNICODE |
    789                           SEE_MASK_NO_CONSOLE | SEE_MASK_ASYNCOK | SEE_MASK_HMONITOR ))
    790         { FIXME("flags ignored: 0x%08lx\n", sei->fMask);
    791         }
    792 
    793         if (sei->fMask & SEE_MASK_CLASSNAME)
    794         { HCR_GetExecuteCommand(sei->lpClass, (sei->lpVerb) ? sei->lpVerb : "open", szCommandline, 256);       
    795         }
    796 
    797         /* process the IDList */
    798         if ( (sei->fMask & SEE_MASK_INVOKEIDLIST) == SEE_MASK_INVOKEIDLIST) /*0x0c*/
    799         { SHGetPathFromIDListA ((LPCITEMIDLIST)sei->lpIDList,szApplicationName);
    800           TRACE("-- idlist=%p (%s)\n", sei->lpIDList, szApplicationName);
    801         }
    802         else
    803         { if (sei->fMask & SEE_MASK_IDLIST )
    804           { /* %I is the adress of a global item ID*/
    805             pos = strstr(szCommandline, "%I");
    806             if (pos)
    807             { HGLOBAL hmem = SHAllocShared ( sei->lpIDList, ILGetSize((LPCITEMIDLIST)sei->lpIDList), 0);
    808               sprintf(szPidl,":%li",(DWORD)SHLockShared(hmem,0) );
    809               SHUnlockShared(hmem);
    810        
    811               gap = strlen(szPidl);
    812               len = strlen(pos)-2;
    813               memmove(pos+gap,pos+2,len);
    814               memcpy(pos,szPidl,gap);
    815 
    816             }
    817           }
    818         }
    819 
    820         pos = strstr(szCommandline, ",%L");     /* dunno what it means: kill it*/
    821         if (pos)
    822         { len = strlen(pos)-2;
    823           *pos=0x0;
    824           memmove(pos,pos+3,len);
    825         }
    826 
    827         TRACE("execute: %s %s\n",szApplicationName, szCommandline);
    828 
    829         ZeroMemory(&startupinfo,sizeof(STARTUPINFOA));
    830         startupinfo.cb = sizeof(STARTUPINFOA);
    831 
    832         return CreateProcessA(szApplicationName[0] ? szApplicationName:NULL,
    833                         szCommandline[0] ? szCommandline : NULL,
    834                         NULL, NULL, FALSE, 0,
    835                         NULL, NULL, &startupinfo, &processinformation);
    836        
    837        
    838 }
    839 /*************************************************************************
    840  * ShellExecuteExW                              [SHELL32.293]
     769{       CHAR szApplicationName[MAX_PATH],szCommandline[MAX_PATH],szPidl[20];
     770        LPSTR pos;
     771        int gap, len;
     772        STARTUPINFOA  startupinfo;
     773        PROCESS_INFORMATION processinformation;
     774
     775        WARN("mask=0x%08lx hwnd=0x%04x verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s incomplete\n",
     776                sei->fMask, sei->hwnd, sei->lpVerb, sei->lpFile,
     777                sei->lpParameters, sei->lpDirectory, sei->nShow,
     778                (sei->fMask & SEE_MASK_CLASSNAME) ? sei->lpClass : "not used");
     779
     780        ZeroMemory(szApplicationName,MAX_PATH);
     781        if (sei->lpFile)
     782          strcpy(szApplicationName, sei->lpFile);
     783
     784        ZeroMemory(szCommandline,MAX_PATH);
     785        if (sei->lpParameters)
     786          strcpy(szCommandline, sei->lpParameters);
     787
     788        if (sei->fMask & (SEE_MASK_CLASSKEY | SEE_MASK_INVOKEIDLIST | SEE_MASK_ICON | SEE_MASK_HOTKEY |
     789                          SEE_MASK_NOCLOSEPROCESS | SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT |
     790                          SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI | SEE_MASK_UNICODE |
     791                          SEE_MASK_NO_CONSOLE | SEE_MASK_ASYNCOK | SEE_MASK_HMONITOR ))
     792        { FIXME("flags ignored: 0x%08lx\n", sei->fMask);
     793        }
     794
     795        if (sei->fMask & SEE_MASK_CLASSNAME)
     796        { HCR_GetExecuteCommand(sei->lpClass, (sei->lpVerb) ? sei->lpVerb : "open", szCommandline, 256);
     797        }
     798
     799        /* process the IDList */
     800        if ( (sei->fMask & SEE_MASK_INVOKEIDLIST) == SEE_MASK_INVOKEIDLIST) /*0x0c*/
     801        { SHGetPathFromIDListA ((LPCITEMIDLIST)sei->lpIDList,szApplicationName);
     802          TRACE("-- idlist=%p (%s)\n", sei->lpIDList, szApplicationName);
     803        }
     804        else
     805        { if (sei->fMask & SEE_MASK_IDLIST )
     806          { /* %I is the adress of a global item ID*/
     807            pos = strstr(szCommandline, "%I");
     808            if (pos)
     809            { HGLOBAL hmem = SHAllocShared ( sei->lpIDList, ILGetSize((LPCITEMIDLIST)sei->lpIDList), 0);
     810              sprintf(szPidl,":%li",(DWORD)SHLockShared(hmem,0) );
     811              SHUnlockShared(hmem);
     812
     813              gap = strlen(szPidl);
     814              len = strlen(pos)-2;
     815              memmove(pos+gap,pos+2,len);
     816              memcpy(pos,szPidl,gap);
     817
     818            }
     819          }
     820        }
     821
     822        pos = strstr(szCommandline, ",%L");     /* dunno what it means: kill it*/
     823        if (pos)
     824        { len = strlen(pos)-2;
     825          *pos=0x0;
     826          memmove(pos,pos+3,len);
     827        }
     828
     829        TRACE("execute: %s %s\n",szApplicationName, szCommandline);
     830
     831        ZeroMemory(&startupinfo,sizeof(STARTUPINFOA));
     832        startupinfo.cb = sizeof(STARTUPINFOA);
     833
     834        return CreateProcessA(szApplicationName[0] ? szApplicationName:NULL,
     835                        szCommandline[0] ? szCommandline : NULL,
     836                        NULL, NULL, FALSE, 0,
     837                        NULL, NULL, &startupinfo, &processinformation);
     838
     839
     840}
     841/*************************************************************************
     842 * ShellExecuteExW                              [SHELL32.293]
    841843 *
    842844 */
    843845BOOL WINAPI ShellExecuteExW (LPSHELLEXECUTEINFOW sei)
    844 {       SHELLEXECUTEINFOA seiA;
    845         DWORD ret;
    846 
    847         TRACE("%p\n", sei);
    848 
    849         memcpy(&seiA, sei, sizeof(SHELLEXECUTEINFOA));
    850        
     846{       SHELLEXECUTEINFOA seiA;
     847        DWORD ret;
     848
     849        TRACE("%p\n", sei);
     850
     851        memcpy(&seiA, sei, sizeof(SHELLEXECUTEINFOA));
     852
    851853        if (sei->lpVerb)
    852           seiA.lpVerb = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpVerb);
     854          seiA.lpVerb = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpVerb);
    853855
    854856        if (sei->lpFile)
    855           seiA.lpFile = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpFile);
     857          seiA.lpFile = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpFile);
    856858
    857859        if (sei->lpParameters)
    858           seiA.lpParameters = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpParameters);
    859 
    860         if (sei->lpDirectory)
    861           seiA.lpDirectory = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpDirectory);
     860          seiA.lpParameters = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpParameters);
     861
     862        if (sei->lpDirectory)
     863          seiA.lpDirectory = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpDirectory);
    862864
    863865        if ((sei->fMask & SEE_MASK_CLASSNAME) && sei->lpClass)
    864           seiA.lpClass = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpClass);
    865         else
    866           seiA.lpClass = NULL;
    867                
    868         ret = ShellExecuteExA(&seiA);
    869 
    870         if (seiA.lpVerb)        HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpVerb );
    871         if (seiA.lpFile)        HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpFile );
    872         if (seiA.lpParameters)  HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpParameters );
    873         if (seiA.lpDirectory)   HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpDirectory );
    874         if (seiA.lpClass)       HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpClass );
    875 
    876         return ret;
     866          seiA.lpClass = HEAP_strdupWtoA( GetProcessHeap(), 0, sei->lpClass);
     867        else
     868          seiA.lpClass = NULL;
     869
     870        ret = ShellExecuteExA(&seiA);
     871
     872        if (seiA.lpVerb)        HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpVerb );
     873        if (seiA.lpFile)        HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpFile );
     874        if (seiA.lpParameters)  HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpParameters );
     875        if (seiA.lpDirectory)   HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpDirectory );
     876        if (seiA.lpClass)       HeapFree( GetProcessHeap(), 0, (LPSTR) seiA.lpClass );
     877
     878        return ret;
    877879}
    878880
    879881static LPUNKNOWN SHELL32_IExplorerInterface=0;
    880882/*************************************************************************
    881  * SHSetInstanceExplorer                        [SHELL32.176]
     883 * SHSetInstanceExplorer                        [SHELL32.176]
    882884 *
    883885 * NOTES
     
    885887 */
    886888HRESULT WINAPI SHSetInstanceExplorer (LPUNKNOWN lpUnknown)
    887 {       TRACE("%p\n", lpUnknown);
    888         SHELL32_IExplorerInterface = lpUnknown;
    889         return (HRESULT) lpUnknown;
    890 }
    891 /*************************************************************************
    892  * SHGetInstanceExplorer                        [SHELL32.256]
     889{       TRACE("%p\n", lpUnknown);
     890        SHELL32_IExplorerInterface = lpUnknown;
     891        return (HRESULT) lpUnknown;
     892}
     893/*************************************************************************
     894 * SHGetInstanceExplorer                        [SHELL32.256]
    893895 *
    894896 * NOTES
     
    896898 */
    897899HRESULT WINAPI SHGetInstanceExplorer (LPUNKNOWN * lpUnknown)
    898 {       TRACE("%p\n", lpUnknown);
    899 
    900         *lpUnknown = SHELL32_IExplorerInterface;
    901 
    902         if (!SHELL32_IExplorerInterface)
    903           return E_FAIL;
    904 
    905         IUnknown_AddRef(SHELL32_IExplorerInterface);
    906         return NOERROR;
    907 }
    908 /*************************************************************************
    909  * SHFreeUnusedLibraries                        [SHELL32.123]
     900{       TRACE("%p\n", lpUnknown);
     901
     902        *lpUnknown = SHELL32_IExplorerInterface;
     903
     904        if (!SHELL32_IExplorerInterface)
     905          return E_FAIL;
     906
     907        IUnknown_AddRef(SHELL32_IExplorerInterface);
     908        return NOERROR;
     909}
     910/*************************************************************************
     911 * SHFreeUnusedLibraries                        [SHELL32.123]
    910912 *
    911913 * NOTES
     
    913915 */
    914916HRESULT WINAPI SHFreeUnusedLibraries (void)
    915 {       FIXME("stub\n");
    916         return TRUE;
    917 }
    918 /*************************************************************************
    919  * DAD_SetDragImage                             [SHELL32.136]
     917{       FIXME("stub\n");
     918        return TRUE;
     919}
     920/*************************************************************************
     921 * DAD_SetDragImage                             [SHELL32.136]
    920922 *
    921923 * NOTES
     
    927929}
    928930/*************************************************************************
    929  * DAD_ShowDragImage                            [SHELL32.137]
     931 * DAD_ShowDragImage                            [SHELL32.137]
    930932 *
    931933 * NOTES
     
    937939}
    938940/*************************************************************************
    939  * SHRegCloseKey                        [NT4.0:SHELL32.505]
     941 * SHRegCloseKey                        [NT4.0:SHELL32.505]
    940942 *
    941943 */
    942944HRESULT WINAPI SHRegCloseKey (HKEY hkey)
    943 {       TRACE("0x%04x\n",hkey);
    944         return RegCloseKey( hkey );
    945 }
    946 /*************************************************************************
    947  * SHRegOpenKeyA                                [SHELL32.506]
     945{       TRACE("0x%04x\n",hkey);
     946        return RegCloseKey( hkey );
     947}
     948/*************************************************************************
     949 * SHRegOpenKeyA                                [SHELL32.506]
    948950 *
    949951 */
    950952HRESULT WINAPI SHRegOpenKeyA(HKEY hKey, LPSTR lpSubKey, LPHKEY phkResult)
    951953{
    952         TRACE("(0x%08x, %s, %p)\n", hKey, debugstr_a(lpSubKey), phkResult);
    953         return RegOpenKeyA(hKey, lpSubKey, phkResult);
    954 }
    955 
    956 /*************************************************************************
    957  * SHRegOpenKeyW                                [NT4.0:SHELL32.507]
     954        TRACE("(0x%08x, %s, %p)\n", hKey, debugstr_a(lpSubKey), phkResult);
     955        return RegOpenKeyA(hKey, lpSubKey, phkResult);
     956}
     957
     958/*************************************************************************
     959 * SHRegOpenKeyW                                [NT4.0:SHELL32.507]
    958960 *
    959961 */
    960962HRESULT WINAPI SHRegOpenKeyW (HKEY hkey, LPCWSTR lpszSubKey, LPHKEY retkey)
    961 {       WARN("0x%04x %s %p\n",hkey,debugstr_w(lpszSubKey),retkey);
    962         return RegOpenKeyW( hkey, lpszSubKey, retkey );
    963 }
    964 /*************************************************************************
    965  * SHRegQueryValueExA                           [SHELL32.509]
     963{       WARN("0x%04x %s %p\n",hkey,debugstr_w(lpszSubKey),retkey);
     964        return RegOpenKeyW( hkey, lpszSubKey, retkey );
     965}
     966/*************************************************************************
     967 * SHRegQueryValueExA                           [SHELL32.509]
    966968 *
    967969 */
    968970HRESULT WINAPI SHRegQueryValueExA(
    969         HKEY hkey,
    970         LPSTR lpValueName,
    971         LPDWORD lpReserved,
    972         LPDWORD lpType,
    973         LPBYTE lpData,
    974         LPDWORD lpcbData)
    975 {
    976         TRACE("0x%04x %s %p %p %p %p\n", hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
    977         return RegQueryValueExA (hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
    978 }
    979 /*************************************************************************
    980  * SHRegQueryValueW                             [NT4.0:SHELL32.510]
     971        HKEY hkey,
     972        LPSTR lpValueName,
     973        LPDWORD lpReserved,
     974        LPDWORD lpType,
     975        LPBYTE lpData,
     976        LPDWORD lpcbData)
     977{
     978        TRACE("0x%04x %s %p %p %p %p\n", hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
     979        return RegQueryValueExA (hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
     980}
     981/*************************************************************************
     982 * SHRegQueryValueW                             [NT4.0:SHELL32.510]
    981983 *
    982984 */
    983985HRESULT WINAPI SHRegQueryValueW (HKEY hkey, LPWSTR lpszSubKey,
    984                                 LPWSTR lpszData, LPDWORD lpcbData )
    985 {       WARN("0x%04x %s %p %p semi-stub\n",
    986                 hkey, debugstr_w(lpszSubKey), lpszData, lpcbData);
    987         return RegQueryValueW( hkey, lpszSubKey, lpszData, (LPLONG)lpcbData );
    988 }
    989 
    990 /*************************************************************************
    991  * SHRegQueryValueExW                           [NT4.0:SHELL32.511]
     986                                LPWSTR lpszData, LPDWORD lpcbData )
     987{       WARN("0x%04x %s %p %p semi-stub\n",
     988                hkey, debugstr_w(lpszSubKey), lpszData, lpcbData);
     989        return RegQueryValueW( hkey, lpszSubKey, lpszData, (LPLONG)lpcbData );
     990}
     991
     992/*************************************************************************
     993 * SHRegQueryValueExW                           [NT4.0:SHELL32.511]
    992994 *
    993995 * FIXME
     
    996998 */
    997999HRESULT WINAPI SHRegQueryValueExW (HKEY hkey, LPWSTR pszValue, LPDWORD pdwReserved,
    998                 LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
    999 {       DWORD ret;
    1000         WARN("0x%04x %s %p %p %p %p semi-stub\n",
    1001                 hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData);
    1002         ret = RegQueryValueExW ( hkey, pszValue, pdwReserved, pdwType, (LPBYTE)pvData, pcbData);
    1003         return ret;
    1004 }
    1005 
    1006 /*************************************************************************
    1007  * ReadCabinetState                             [NT 4.0:SHELL32.651]
     1000                LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
     1001{       DWORD ret;
     1002        WARN("0x%04x %s %p %p %p %p semi-stub\n",
     1003                hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData);
     1004        ret = RegQueryValueExW ( hkey, pszValue, pdwReserved, pdwType, (LPBYTE)pvData, pcbData);
     1005        return ret;
     1006}
     1007
     1008/*************************************************************************
     1009 * ReadCabinetState                             [NT 4.0:SHELL32.651]
    10081010 *
    10091011 */
    10101012HRESULT WINAPI ReadCabinetState(DWORD u, DWORD v)
    1011 {       FIXME("0x%04lx 0x%04lx stub\n",u,v);
    1012         return 0;
    1013 }
    1014 /*************************************************************************
    1015  * WriteCabinetState                            [NT 4.0:SHELL32.652]
     1013{       FIXME("0x%04lx 0x%04lx stub\n",u,v);
     1014        return 0;
     1015}
     1016/*************************************************************************
     1017 * WriteCabinetState                            [NT 4.0:SHELL32.652]
    10161018 *
    10171019 */
    10181020HRESULT WINAPI WriteCabinetState(DWORD u)
    1019 {       FIXME("0x%04lx stub\n",u);
    1020         return 0;
    1021 }
    1022 /*************************************************************************
    1023  * FileIconInit                                 [SHELL32.660]
     1021{       FIXME("0x%04lx stub\n",u);
     1022        return 0;
     1023}
     1024/*************************************************************************
     1025 * FileIconInit                                 [SHELL32.660]
    10241026 *
    10251027 */
    10261028BOOL WINAPI FileIconInit(BOOL bFullInit)
    1027 {       FIXME("(%s)\n", bFullInit ? "true" : "false");
    1028         return 0;
    1029 }
    1030 /*************************************************************************
    1031  * IsUserAdmin                                  [NT 4.0:SHELL32.680]
     1029{       FIXME("(%s)\n", bFullInit ? "true" : "false");
     1030        return 0;
     1031}
     1032/*************************************************************************
     1033 * IsUserAdmin                                  [NT 4.0:SHELL32.680]
    10321034 *
    10331035 */
    10341036HRESULT WINAPI IsUserAdmin(void)
    1035 {       FIXME("stub\n");
    1036         return TRUE;
    1037 }
    1038 /*************************************************************************
    1039  * StrRetToStrN                                 [SHELL32.96]
     1037{       FIXME("stub\n");
     1038        return TRUE;
     1039}
     1040/*************************************************************************
     1041 * StrRetToStrN                                 [SHELL32.96]
    10401042 *
    10411043 * converts a STRRET to a normal string
     
    10461048HRESULT WINAPI StrRetToBufA (LPSTRRET src, LPITEMIDLIST pidl, LPSTR dest, DWORD len)
    10471049{
    1048         return StrRetToStrNA(dest, len, src, pidl);
     1050        return StrRetToStrNA(dest, len, src, pidl);
    10491051}
    10501052
    10511053HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
    10521054{
    1053         TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
    1054 
    1055         switch (src->uType)
    1056         {
    1057           case STRRET_WSTR:
    1058             WideCharToMultiByte(CP_ACP, 0, src->u.pOleStr, -1, (LPSTR)dest, len, NULL, NULL);
    1059             SHFree(src->u.pOleStr);
    1060             break;
    1061 
    1062           case STRRET_CSTRA:
    1063             lstrcpynA((LPSTR)dest, src->u.cStr, len);
    1064             break;
    1065 
    1066           case STRRET_OFFSETA:
    1067             lstrcpynA((LPSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
    1068             break;
    1069 
    1070           default:
    1071             FIXME("unknown type!\n");
    1072             if (len)
    1073             {
    1074               *(LPSTR)dest = '\0';
    1075             }
    1076             return(FALSE);
    1077         }
    1078         return S_OK;
     1055        TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
     1056
     1057        switch (src->uType)
     1058        {
     1059          case STRRET_WSTR:
     1060            WideCharToMultiByte(CP_ACP, 0, src->u.pOleStr, -1, (LPSTR)dest, len, NULL, NULL);
     1061            SHFree(src->u.pOleStr);
     1062            break;
     1063
     1064          case STRRET_CSTRA:
     1065            lstrcpynA((LPSTR)dest, src->u.cStr, len);
     1066            break;
     1067
     1068          case STRRET_OFFSETA:
     1069            lstrcpynA((LPSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
     1070            break;
     1071
     1072          default:
     1073            FIXME("unknown type!\n");
     1074            if (len)
     1075            {
     1076              *(LPSTR)dest = '\0';
     1077            }
     1078            return(FALSE);
     1079        }
     1080        return S_OK;
    10791081}
    10801082
    10811083HRESULT WINAPI StrRetToBufW (LPSTRRET src, LPITEMIDLIST pidl, LPWSTR dest, DWORD len)
    10821084{
    1083         return StrRetToStrNW(dest, len, src, pidl);
     1085        return StrRetToStrNW(dest, len, src, pidl);
    10841086}
    10851087
    10861088HRESULT WINAPI StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
    10871089{
    1088         TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
    1089 
    1090         switch (src->uType)
    1091         {
    1092           case STRRET_WSTR:
    1093             lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
    1094             SHFree(src->u.pOleStr);
    1095             break;
    1096 
    1097           case STRRET_CSTRA:
    1098             lstrcpynAtoW((LPWSTR)dest, src->u.cStr, len);
    1099             break;
    1100 
    1101           case STRRET_OFFSETA:
    1102             if (pidl)
    1103             {
    1104               lstrcpynAtoW((LPWSTR)dest, ((LPSTR)&pidl->mkid)+src->u.uOffset, len);
    1105             }
    1106             break;
    1107 
    1108           default:
    1109             FIXME("unknown type!\n");
    1110             if (len)
    1111             { *(LPSTR)dest = '\0';
    1112             }
    1113             return(FALSE);
    1114         }
    1115         return S_OK;
     1090        TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
     1091
     1092        switch (src->uType)
     1093        {
     1094          case STRRET_WSTR:
     1095            lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
     1096            SHFree(src->u.pOleStr);
     1097            break;
     1098
     1099          case STRRET_CSTRA:
     1100            lstrcpynAtoW((LPWSTR)dest, src->u.cStr, len);
     1101            break;
     1102
     1103          case STRRET_OFFSETA:
     1104            if (pidl)
     1105            {
     1106              lstrcpynAtoW((LPWSTR)dest, ((LPSTR)&pidl->mkid)+src->u.uOffset, len);
     1107            }
     1108            break;
     1109
     1110          default:
     1111            FIXME("unknown type!\n");
     1112            if (len)
     1113            { *(LPSTR)dest = '\0';
     1114            }
     1115            return(FALSE);
     1116        }
     1117        return S_OK;
    11161118}
    11171119HRESULT WINAPI StrRetToStrNAW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
    11181120{
    1119         if(VERSION_OsIsUnicode())
    1120           return StrRetToStrNW (dest, len, src, pidl);
    1121         return StrRetToStrNA (dest, len, src, pidl);
    1122 }
    1123 
    1124 /*************************************************************************
    1125  * StrChrA                                      [NT 4.0:SHELL32.651]
     1121        if(VERSION_OsIsUnicode())
     1122          return StrRetToStrNW (dest, len, src, pidl);
     1123        return StrRetToStrNA (dest, len, src, pidl);
     1124}
     1125
     1126/*************************************************************************
     1127 * StrChrA                                      [NT 4.0:SHELL32.651]
    11261128 *
    11271129 */
    11281130LPSTR WINAPI StrChrA (LPSTR str, CHAR x )
    1129 {       LPSTR ptr=str;
    1130        
    1131         do
    1132         {  if (*ptr==x)
    1133            { return ptr;
    1134            }
    1135            ptr++;
    1136         } while (*ptr);
    1137         return NULL;
    1138 }
    1139 
    1140 /*************************************************************************
    1141  * StrChrW                                      [NT 4.0:SHELL32.651]
     1131{       LPSTR ptr=str;
     1132
     1133        do
     1134        {  if (*ptr==x)
     1135           { return ptr;
     1136           }
     1137           ptr++;
     1138        } while (*ptr);
     1139        return NULL;
     1140}
     1141
     1142/*************************************************************************
     1143 * StrChrW                                      [NT 4.0:SHELL32.651]
    11421144 *
    11431145 */
    11441146LPWSTR WINAPI StrChrW (LPWSTR str, WCHAR x )
    1145 {       LPWSTR ptr=str;
    1146        
    1147         TRACE("%s 0x%04x\n",debugstr_w(str),x);
    1148         do
    1149         {  if (*ptr==x)
    1150            { return ptr;
    1151            }
    1152            ptr++;
    1153         } while (*ptr);
    1154         return NULL;
    1155 }
    1156 
    1157 /*************************************************************************
    1158  * StrCmpNIW                                    [NT 4.0:SHELL32.*]
     1147{       LPWSTR ptr=str;
     1148
     1149        TRACE("%s 0x%04x\n",debugstr_w(str),x);
     1150        do
     1151        {  if (*ptr==x)
     1152           { return ptr;
     1153           }
     1154           ptr++;
     1155        } while (*ptr);
     1156        return NULL;
     1157}
     1158
     1159/*************************************************************************
     1160 * StrCmpNIW                                    [NT 4.0:SHELL32.*]
    11591161 *
    11601162 */
    11611163INT WINAPI StrCmpNIW ( LPWSTR wstr1, LPWSTR wstr2, INT len)
    1162 {       FIXME("%s %s %i stub\n", debugstr_w(wstr1),debugstr_w(wstr2),len);
    1163         return 0;
    1164 }
    1165 
    1166 /*************************************************************************
    1167  * StrCmpNIA                                    [NT 4.0:SHELL32.*]
     1164{       FIXME("%s %s %i stub\n", debugstr_w(wstr1),debugstr_w(wstr2),len);
     1165        return 0;
     1166}
     1167
     1168/*************************************************************************
     1169 * StrCmpNIA                                    [NT 4.0:SHELL32.*]
    11681170 *
    11691171 */
    11701172INT WINAPI StrCmpNIA ( LPSTR wstr1, LPSTR wstr2, INT len)
    1171 {       FIXME("%s %s %i stub\n", wstr1,wstr2,len);
    1172         return 0;
    1173 }
    1174 
    1175 /*************************************************************************
    1176  * SHAllocShared                                [SHELL32.520]
     1173{       FIXME("%s %s %i stub\n", wstr1,wstr2,len);
     1174        return 0;
     1175}
     1176
     1177/*************************************************************************
     1178 * SHAllocShared                                [SHELL32.520]
    11771179 *
    11781180 * NOTES
     
    11861188 */
    11871189HGLOBAL WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID)
    1188 {       HGLOBAL hmem;
    1189         LPVOID pmem;
    1190        
    1191         TRACE("ptr=%p size=0x%04lx procID=0x%04lx\n",psrc,size,procID);
    1192         hmem = GlobalAlloc(GMEM_FIXED, size);
    1193         if (!hmem)
    1194           return 0;
    1195        
    1196         pmem =  GlobalLock (hmem);
    1197 
    1198         if (! pmem)
    1199           return 0;
    1200        
    1201         memcpy (pmem, psrc, size);
    1202         GlobalUnlock(hmem);
    1203         return hmem;
    1204 }
    1205 /*************************************************************************
    1206  * SHLockShared                                 [SHELL32.521]
     1190{       HGLOBAL hmem;
     1191        LPVOID pmem;
     1192
     1193        TRACE("ptr=%p size=0x%04lx procID=0x%04lx\n",psrc,size,procID);
     1194        hmem = GlobalAlloc(GMEM_FIXED, size);
     1195        if (!hmem)
     1196          return 0;
     1197
     1198        pmem =  GlobalLock (hmem);
     1199
     1200        if (! pmem)
     1201          return 0;
     1202
     1203        memcpy (pmem, psrc, size);
     1204        GlobalUnlock(hmem);
     1205        return hmem;
     1206}
     1207/*************************************************************************
     1208 * SHLockShared                                 [SHELL32.521]
    12071209 *
    12081210 * NOTES
     
    12131215 */
    12141216LPVOID WINAPI SHLockShared(HANDLE hmem, DWORD procID)
    1215 {       TRACE("handle=0x%04x procID=0x%04lx\n",hmem,procID);
    1216         return GlobalLock(hmem);
    1217 }
    1218 /*************************************************************************
    1219  * SHUnlockShared                               [SHELL32.522]
     1217{       TRACE("handle=0x%04x procID=0x%04lx\n",hmem,procID);
     1218        return GlobalLock(hmem);
     1219}
     1220/*************************************************************************
     1221 * SHUnlockShared                               [SHELL32.522]
    12201222 *
    12211223 * NOTES
     
    12231225 */
    12241226BOOL WINAPI SHUnlockShared(HANDLE pmem)
    1225 {       TRACE("handle=0x%04x\n",pmem);
    1226         return GlobalUnlock(pmem);
    1227 }
    1228 /*************************************************************************
    1229  * SHFreeShared                                 [SHELL32.523]
     1227{       TRACE("handle=0x%04x\n",pmem);
     1228        return GlobalUnlock(pmem);
     1229}
     1230/*************************************************************************
     1231 * SHFreeShared                                 [SHELL32.523]
    12301232 *
    12311233 * NOTES
     
    12341236 */
    12351237HANDLE WINAPI SHFreeShared(HANDLE hmem, DWORD procID)
    1236 {       TRACE("handle=0x%04x 0x%04lx\n",hmem,procID);
    1237         return GlobalFree(hmem);
    1238 }
    1239 
    1240 /*************************************************************************
    1241  * SetAppStartingCursor                         [SHELL32.99]
     1238{       TRACE("handle=0x%04x 0x%04lx\n",hmem,procID);
     1239        return GlobalFree(hmem);
     1240}
     1241
     1242/*************************************************************************
     1243 * SetAppStartingCursor                         [SHELL32.99]
    12421244 *
    12431245 */
    12441246HRESULT WINAPI SetAppStartingCursor(HWND u, DWORD v)
    1245 {       FIXME("hwnd=0x%04x 0x%04lx stub\n",u,v );
    1246         return 0;
    1247 }
    1248 /*************************************************************************
    1249  * SHLoadOLE                                    [SHELL32.151]
     1247{       FIXME("hwnd=0x%04x 0x%04lx stub\n",u,v );
     1248        return 0;
     1249}
     1250/*************************************************************************
     1251 * SHLoadOLE                                    [SHELL32.151]
    12501252 *
    12511253 */
    12521254HRESULT WINAPI SHLoadOLE(DWORD u)
    1253 {       FIXME("0x%04lx stub\n",u);
    1254         return S_OK;
    1255 }
    1256 /*************************************************************************
    1257  * DriveType                                    [SHELL32.64]
     1255{       FIXME("0x%04lx stub\n",u);
     1256        return S_OK;
     1257}
     1258/*************************************************************************
     1259 * DriveType                                    [SHELL32.64]
    12581260 *
    12591261 */
    12601262HRESULT WINAPI DriveType(DWORD u)
    1261 {       FIXME("0x%04lx stub\n",u);
    1262         return 0;
    1263 }
    1264 /*************************************************************************
    1265  * SHAbortInvokeCommand                         [SHELL32.198]
     1263{       FIXME("0x%04lx stub\n",u);
     1264        return 0;
     1265}
     1266/*************************************************************************
     1267 * SHAbortInvokeCommand                         [SHELL32.198]
    12661268 *
    12671269 */
    12681270HRESULT WINAPI SHAbortInvokeCommand(void)
    1269 {       FIXME("stub\n");
    1270         return 1;
    1271 }
    1272 /*************************************************************************
    1273  * SHOutOfMemoryMessageBox                      [SHELL32.126]
     1271{       FIXME("stub\n");
     1272        return 1;
     1273}
     1274/*************************************************************************
     1275 * SHOutOfMemoryMessageBox                      [SHELL32.126]
    12741276 *
    12751277 */
    12761278HRESULT WINAPI SHOutOfMemoryMessageBox(DWORD u, DWORD v, DWORD w)
    1277 {       FIXME("0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w);
    1278         return 0;
    1279 }
    1280 /*************************************************************************
    1281  * SHFlushClipboard                             [SHELL32.121]
     1279{       FIXME("0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w);
     1280        return 0;
     1281}
     1282/*************************************************************************
     1283 * SHFlushClipboard                             [SHELL32.121]
    12821284 *
    12831285 */
    12841286HRESULT WINAPI SHFlushClipboard(void)
    1285 {       FIXME("stub\n");
    1286         return 1;
    1287 }
    1288 /*************************************************************************
    1289  * StrRChrA                                     [SHELL32.346]
     1287{       FIXME("stub\n");
     1288        return 1;
     1289}
     1290/*************************************************************************
     1291 * StrRChrA                                     [SHELL32.346]
    12901292 *
    12911293 */
    12921294LPSTR WINAPI StrRChrA(LPCSTR lpStart, LPCSTR lpEnd, DWORD wMatch)
    12931295{
    1294         if (!lpStart)
    1295             return NULL;
    1296 
    1297         /* if the end not given, search*/
    1298         if (!lpEnd)
    1299         { lpEnd=lpStart;
    1300           while (*lpEnd)
    1301             lpEnd++;
    1302         }
    1303 
    1304         for (--lpEnd;lpStart <= lpEnd; lpEnd--)
    1305             if (*lpEnd==(char)wMatch)
    1306                 return (LPSTR)lpEnd;
    1307 
    1308         return NULL;
    1309 }
    1310 /*************************************************************************
    1311  * StrRChrW                                     [SHELL32.320]
     1296        if (!lpStart)
     1297            return NULL;
     1298
     1299        /* if the end not given, search*/
     1300        if (!lpEnd)
     1301        { lpEnd=lpStart;
     1302          while (*lpEnd)
     1303            lpEnd++;
     1304        }
     1305
     1306        for (--lpEnd;lpStart <= lpEnd; lpEnd--)
     1307            if (*lpEnd==(char)wMatch)
     1308                return (LPSTR)lpEnd;
     1309
     1310        return NULL;
     1311}
     1312/*************************************************************************
     1313 * StrRChrW                                     [SHELL32.320]
    13121314 *
    13131315 */
    13141316LPWSTR WINAPI StrRChrW(LPWSTR lpStart, LPWSTR lpEnd, DWORD wMatch)
    1315 {       LPWSTR wptr=NULL;
    1316         TRACE("%s %s 0x%04x\n",debugstr_w(lpStart),debugstr_w(lpEnd), (WCHAR)wMatch );
    1317 
    1318         /* if the end not given, search*/
    1319         if (!lpEnd)
    1320         { lpEnd=lpStart;
    1321           while (*lpEnd)
    1322             lpEnd++;
    1323         }
    1324 
    1325         do
    1326         { if (*lpStart==(WCHAR)wMatch)
    1327             wptr = lpStart;
    1328           lpStart++;
    1329         } while ( lpStart<=lpEnd );
    1330         return wptr;
    1331 }
    1332 /*************************************************************************
    1333 * StrFormatByteSize                             [SHLWAPI]
     1317{       LPWSTR wptr=NULL;
     1318        TRACE("%s %s 0x%04x\n",debugstr_w(lpStart),debugstr_w(lpEnd), (WCHAR)wMatch );
     1319
     1320        /* if the end not given, search*/
     1321        if (!lpEnd)
     1322        { lpEnd=lpStart;
     1323          while (*lpEnd)
     1324            lpEnd++;
     1325        }
     1326
     1327        do
     1328        { if (*lpStart==(WCHAR)wMatch)
     1329            wptr = lpStart;
     1330          lpStart++;
     1331        } while ( lpStart<=lpEnd );
     1332        return wptr;
     1333}
     1334/*************************************************************************
     1335* StrFormatByteSize                             [SHLWAPI]
    13341336*/
    13351337LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf )
    1336 {       char buf[64];
    1337         TRACE("%lx %p %i\n", dw, pszBuf, cchBuf);
    1338         if ( dw<1024L )
    1339         { sprintf (buf,"%3.1f bytes", (FLOAT)dw);
    1340         }
    1341         else if ( dw<1048576L)
    1342         { sprintf (buf,"%3.1f KB", (FLOAT)dw/1024);
    1343         }
    1344         else if ( dw < 1073741824L)
    1345         { sprintf (buf,"%3.1f MB", (FLOAT)dw/1048576L);
    1346         }
    1347         else
    1348         { sprintf (buf,"%3.1f GB", (FLOAT)dw/1073741824L);
    1349         }
    1350         lstrcpynA (pszBuf, buf, cchBuf);
    1351         return pszBuf; 
     1338{       char buf[64];
     1339        TRACE("%lx %p %i\n", dw, pszBuf, cchBuf);
     1340        if ( dw<1024L )
     1341        { sprintf (buf,"%3.0f bytes", (FLOAT)dw);
     1342        }
     1343        else if ( dw<1048576L)
     1344        { sprintf (buf,"%3.2f KB", (FLOAT)dw/1024);
     1345        }
     1346        else if ( dw < 1073741824L)
     1347        { sprintf (buf,"%3.2f MB", (FLOAT)dw/1048576L);
     1348        }
     1349        else
     1350        { sprintf (buf,"%3.2f GB", (FLOAT)dw/1073741824L);
     1351        }
     1352        lstrcpynA (pszBuf, buf, cchBuf);
     1353        return pszBuf;
    13521354}
    13531355LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf )
    1354 {       char buf[64];
    1355         TRACE("%lx %p %i\n", dw, pszBuf, cchBuf);
    1356         if ( dw<1024L )
    1357         { sprintf (buf,"%3.1f bytes", (FLOAT)dw);
    1358         }
    1359         else if ( dw<1048576L)
    1360         { sprintf (buf,"%3.1f KB", (FLOAT)dw/1024);
    1361         }
    1362         else if ( dw < 1073741824L)
    1363         { sprintf (buf,"%3.1f MB", (FLOAT)dw/1048576L);
    1364         }
    1365         else
    1366         { sprintf (buf,"%3.1f GB", (FLOAT)dw/1073741824L);
    1367         }
    1368         lstrcpynAtoW (pszBuf, buf, cchBuf);
    1369         return pszBuf; 
    1370 }
    1371 /*************************************************************************
    1372  * SHWaitForFileToOpen                          [SHELL32.97]
     1356{       char buf[64];
     1357        TRACE("%lx %p %i\n", dw, pszBuf, cchBuf);
     1358        if ( dw<1024L )
     1359        { sprintf (buf,"%3.0f bytes", (FLOAT)dw);
     1360        }
     1361        else if ( dw<1048576L)
     1362        { sprintf (buf,"%3.2f KB", (FLOAT)dw/1024);
     1363        }
     1364        else if ( dw < 1073741824L)
     1365        { sprintf (buf,"%3.2f MB", (FLOAT)dw/1048576L);
     1366        }
     1367        else
     1368        { sprintf (buf,"%3.2f GB", (FLOAT)dw/1073741824L);
     1369        }
     1370        lstrcpynAtoW (pszBuf, buf, cchBuf);
     1371        return pszBuf;
     1372}
     1373/*************************************************************************
     1374 * SHWaitForFileToOpen                          [SHELL32.97]
    13731375 *
    13741376 */
    13751377HRESULT WINAPI SHWaitForFileToOpen(DWORD u, DWORD v, DWORD w)
    1376 {       FIXME("0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w);
    1377         return 0;
    1378 }
    1379 /*************************************************************************
    1380  * Control_FillCache_RunDLL                     [SHELL32.8]
     1378{       FIXME("0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w);
     1379        return 0;
     1380}
     1381/*************************************************************************
     1382 * Control_FillCache_RunDLL                     [SHELL32.8]
    13811383 *
    13821384 */
    13831385HRESULT WINAPI Control_FillCache_RunDLL(HWND hWnd, HANDLE hModule, DWORD w, DWORD x)
    1384 {       FIXME("0x%04x 0x%04x 0x%04lx 0x%04lx stub\n",hWnd, hModule,w,x);
    1385         return 0;
    1386 }
    1387 /*************************************************************************
    1388  * RunDLL_CallEntry16                           [SHELL32.122]
     1386{       FIXME("0x%04x 0x%04x 0x%04lx 0x%04lx stub\n",hWnd, hModule,w,x);
     1387        return 0;
     1388}
     1389/*************************************************************************
     1390 * RunDLL_CallEntry16                           [SHELL32.122]
    13891391 * the name is propably wrong
    13901392 */
    13911393HRESULT WINAPI RunDLL_CallEntry16(DWORD v, DWORD w, DWORD x, DWORD y, DWORD z)
    1392 {       FIXME("0x%04lx 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",v,w,x,y,z);
    1393         return 0;
     1394{       FIXME("0x%04lx 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",v,w,x,y,z);
     1395        return 0;
    13941396}
    13951397
    13961398/************************************************************************
    1397  *      shell32_654                             [SHELL32.654]
     1399 *      shell32_654                             [SHELL32.654]
    13981400 *
    13991401 * NOTES: first parameter seems to be a pointer (same as passed to WriteCabinetState)
     
    14031405 */
    14041406HRESULT WINAPI shell32_654 (DWORD x, DWORD y)
    1405 {       FIXME("0x%08lx 0x%08lx stub\n",x,y);
    1406         return 0;
     1407{       FIXME("0x%08lx 0x%08lx stub\n",x,y);
     1408        return 0;
    14071409}
    14081410
    14091411/************************************************************************
    1410  *      RLBuildListOfPaths                      [SHELL32.146]
     1412 *      RLBuildListOfPaths                      [SHELL32.146]
    14111413 *
    14121414 * NOTES
     
    14141416 */
    14151417DWORD WINAPI RLBuildListOfPaths (void)
    1416 {       FIXME("stub\n");
    1417         return 0;
     1418{       FIXME("stub\n");
     1419        return 0;
    14181420}
    14191421/************************************************************************
    1420  *      StrToOleStr                     [SHELL32.163]
     1422 *      StrToOleStr                     [SHELL32.163]
    14211423 *
    14221424 */
    14231425int WINAPI StrToOleStrA (LPWSTR lpWideCharStr, LPCSTR lpMultiByteString)
    14241426{
    1425         TRACE("%p %p(%s)\n",
    1426         lpWideCharStr, lpMultiByteString, lpMultiByteString);
    1427 
    1428         return MultiByteToWideChar(0, 0, lpMultiByteString, -1, lpWideCharStr, MAX_PATH);
     1427        TRACE("%p %p(%s)\n",
     1428        lpWideCharStr, lpMultiByteString, lpMultiByteString);
     1429
     1430        return MultiByteToWideChar(0, 0, lpMultiByteString, -1, lpWideCharStr, MAX_PATH);
    14291431
    14301432}
    14311433int WINAPI StrToOleStrW (LPWSTR lpWideCharStr, LPCWSTR lpWString)
    14321434{
    1433         TRACE("%p %p(%s)\n",
    1434         lpWideCharStr, lpWString, debugstr_w(lpWString));
    1435 
    1436         if (lstrcpyW (lpWideCharStr, lpWString ))
    1437         { return lstrlenW (lpWideCharStr);
    1438         }
    1439         return 0;
     1435        TRACE("%p %p(%s)\n",
     1436        lpWideCharStr, lpWString, debugstr_w(lpWString));
     1437
     1438        if (lstrcpyW (lpWideCharStr, lpWString ))
     1439        { return lstrlenW (lpWideCharStr);
     1440        }
     1441        return 0;
    14401442}
    14411443
    14421444BOOL WINAPI StrToOleStrAW (LPWSTR lpWideCharStr, LPCVOID lpString)
    14431445{
    1444         if (VERSION_OsIsUnicode())
    1445           return StrToOleStrW (lpWideCharStr, (LPCWSTR)lpString);
    1446         return StrToOleStrA (lpWideCharStr, (LPCSTR)lpString);
     1446        if (VERSION_OsIsUnicode())
     1447          return StrToOleStrW (lpWideCharStr, (LPCWSTR)lpString);
     1448        return StrToOleStrA (lpWideCharStr, (LPCSTR)lpString);
    14471449}
    14481450
    14491451/************************************************************************
    1450  *      SHValidateUNC                           [SHELL32.173]
     1452 *      SHValidateUNC                           [SHELL32.173]
    14511453 *
    14521454 */
    14531455HRESULT WINAPI SHValidateUNC (DWORD x, DWORD y, DWORD z)
    14541456{
    1455         FIXME("0x%08lx 0x%08lx 0x%08lx stub\n",x,y,z);
    1456         return 0;
     1457        FIXME("0x%08lx 0x%08lx 0x%08lx stub\n",x,y,z);
     1458        return 0;
    14571459}
    14581460
    14591461/************************************************************************
    1460  *      DoEnvironmentSubstW                     [SHELL32.53]
     1462 *      DoEnvironmentSubstW                     [SHELL32.53]
    14611463 *
    14621464 */
    14631465HRESULT WINAPI DoEnvironmentSubstA(LPSTR x, LPSTR y)
    14641466{
    1465         FIXME("%p(%s) %p(%s) stub\n", x, x, y, y);
    1466         return 0;
     1467        FIXME("%p(%s) %p(%s) stub\n", x, x, y, y);
     1468        return 0;
    14671469}
    14681470
    14691471HRESULT WINAPI DoEnvironmentSubstW(LPWSTR x, LPWSTR y)
    14701472{
    1471         FIXME("%p(%s) %p(%s) stub\n", x, debugstr_w(x), y, debugstr_w(y));
    1472         return 0;
     1473        FIXME("%p(%s) %p(%s) stub\n", x, debugstr_w(x), y, debugstr_w(y));
     1474        return 0;
    14731475}
    14741476
    14751477HRESULT WINAPI DoEnvironmentSubstAW(LPVOID x, LPVOID y)
    14761478{
    1477         if (VERSION_OsIsUnicode())
    1478           return DoEnvironmentSubstW((LPWSTR)x, (LPWSTR)y);
    1479         return DoEnvironmentSubstA((LPSTR)x, (LPSTR)y);
     1479        if (VERSION_OsIsUnicode())
     1480          return DoEnvironmentSubstW((LPWSTR)x, (LPWSTR)y);
     1481        return DoEnvironmentSubstA((LPSTR)x, (LPSTR)y);
    14801482}
    14811483
  • trunk/src/shell32/shellpath.cpp

    r3193 r3243  
    1 /* $Id: shellpath.cpp,v 1.6 2000-03-22 16:55:51 cbratschi Exp $ */
     1/* $Id: shellpath.cpp,v 1.7 2000-03-26 16:34:52 cbratschi Exp $ */
    22
    33/*
     
    1212 * Many of this functions are in SHLWAPI.DLL also
    1313 *
     14 * Corel WINE 20000324 level (without CRTDLL_* calls)
    1415 */
    1516
     
    4748ODINDEBUGCHANNEL(SHELL32-SHELLPATH)
    4849
     50/* Supported protocols for PathIsURL */
     51LPSTR SupportedProtocol[] = {"http","https","ftp","gopher","file","mailto",""};
    4952
    5053/*************************************************************************
     
    5659   if (*(x+1)==':' && *(x+2)=='\\')         /* "X:\" */
    5760     return 1;
    58    if (*x=='\\')                         /* "\" */
    59      return 0;
     61   if (*x=='\\' || *x=='/')                         /* "\" */
     62     return 1;
    6063   if (x[0]=='\\' && x[1]=='\\')            /* UNC "\\<xx>\" */
    6164   { int foundbackslash = 0;
     
    7578   if (*(x+1)==':' && *(x+2)=='\\')         /* "X:\" */
    7679     return 1;
    77    if (*x == (WCHAR) '\\')                  /* "\" */
    78      return 0;
     80   if (*x == (WCHAR) '\\' || *x == (WCHAR) '/')                  /* "\" */
     81     return 1;
    7982   if (x[0]==(WCHAR)'\\' && x[1]==(WCHAR)'\\') /* UNC "\\<xx>\" */
    8083   { int foundbackslash = 0;
     
    817820ODINFUNCTION1(HRESULT, PathGetDriveNumberW,
    818821              LPWSTR, u)
    819 {
     822{  FIXME("%s stub\n",debugstr_a(u));
    820823   return 0;
    821824}
     
    965968   FIXME("%p(%s) %p 0x%04lx 0x%04lx stub\n",
    966969   lpCommand, lpCommand, v, w,x );
     970   lstrcpyA(v,lpCommand);
    967971   return 0;
    968972}
     
    10851089       hRootKey = HKEY_CURRENT_USER;
    10861090       strcpy(szValueName, "Programs");
    1087        strcpy(szDefaultPath, "StatrMenu\\Programs");
     1091       strcpy(szDefaultPath, "StartMenu\\Programs");
    10881092       break;
    10891093
     
    12391243}
    12401244
     1245/*
     1246   shlwapi functions that have found their way in because most of
     1247   shlwapi is unimplemented and doesn't have a home.
     1248
     1249   FIXME: move to a more appropriate file( when one exists )
     1250*/
     1251
     1252 /* SHGetValue: Gets a value from the registry */
     1253
     1254
     1255BOOL WINAPI PathIsURLA(LPCSTR lpstrPath)
     1256{
     1257  LPSTR lpstrRes;
     1258  char lpstrFileType[10] = "";
     1259  int iSize;
     1260  int i = 0;
     1261  /* sanity check */
     1262  if(!lpstrPath)
     1263    return FALSE;
     1264
     1265  /* get protocol        */
     1266  /* protocol://location */
     1267  if(!(lpstrRes = strchr(lpstrPath,':')))
     1268  {
     1269    return FALSE;
     1270  }
     1271  iSize = lpstrRes - lpstrPath;
     1272  if(iSize > sizeof(lpstrFileType))
     1273    return FALSE;
     1274
     1275  strncpy(lpstrFileType,lpstrPath,iSize);
     1276
     1277  while(strlen(SupportedProtocol[i]))
     1278  {
     1279    if(!stricmp(lpstrFileType,SupportedProtocol[i++]))
     1280      return TRUE;
     1281  }
     1282
     1283  return FALSE;
     1284}
     1285
     1286DWORD WINAPI SHGetValueA(
     1287    HKEY     hkey,
     1288    LPCSTR   pSubKey,
     1289    LPCSTR   pValue,
     1290    LPDWORD  pwType,
     1291    LPVOID   pvData,
     1292    LPDWORD  pbData
     1293    )
     1294{
     1295    FIXME("(%p),stub!\n", pSubKey);
     1296
     1297        return ERROR_SUCCESS;  /* return success */
     1298}
     1299
     1300DWORD WINAPI SHGetValueW(
     1301    HKEY     hkey,
     1302    LPCWSTR  pSubKey,
     1303    LPCWSTR  pValue,
     1304    LPDWORD  pwType,
     1305    LPVOID   pvData,
     1306    LPDWORD  pbData
     1307    )
     1308{
     1309    FIXME("(%p),stub!\n", pSubKey);
     1310
     1311        return ERROR_SUCCESS;  /* return success */
     1312}
     1313
     1314/* gets a user-specific registry value. */
     1315
     1316LONG WINAPI SHRegGetUSValueA(
     1317    LPCSTR   pSubKey,
     1318    LPCSTR   pValue,
     1319    LPDWORD  pwType,
     1320    LPVOID   pvData,
     1321    LPDWORD  pbData,
     1322    BOOL     fIgnoreHKCU,
     1323    LPVOID   pDefaultData,
     1324    DWORD    wDefaultDataSize
     1325    )
     1326{
     1327    FIXME("(%p),stub!\n", pSubKey);
     1328
     1329        return ERROR_SUCCESS;  /* return success */
     1330}
     1331
     1332LONG WINAPI SHRegGetUSValueW(
     1333    LPCWSTR  pSubKey,
     1334    LPCWSTR  pValue,
     1335    LPDWORD  pwType,
     1336    LPVOID   pvData,
     1337    LPDWORD  pbData,
     1338    BOOL     flagIgnoreHKCU,
     1339    LPVOID   pDefaultData,
     1340    DWORD    wDefaultDataSize
     1341    )
     1342{
     1343    FIXME("(%p),stub!\n", pSubKey);
     1344
     1345        return ERROR_SUCCESS;  /* return success */
     1346}
     1347
  • trunk/src/shell32/shlfolder.cpp

    r3217 r3243  
    1 /* $Id: shlfolder.cpp,v 1.8 2000-03-24 17:17:27 cbratschi Exp $ */
     1/* $Id: shlfolder.cpp,v 1.9 2000-03-26 16:34:52 cbratschi Exp $ */
    22/*
    33 * Shell Folder stuff
     
    88 * IShellFolder2 and related interfaces
    99 *
     10 * Corel WINE 20000324 level
    1011 */
    1112
     
    3637DEFAULT_DEBUG_CHANNEL(shell)
    3738
    38 #define MEM_DEBUG 1
     39/***************************************************************************
     40 * debughelper: print out the return adress
     41 *  helps especially to track down unbalanced AddRef/Release
     42 */
     43#define MEM_DEBUG 0
     44
     45#if MEM_DEBUG
     46#define _CALL_TRACE TRACE("called from: 0x%08x\n", *( ((UINT*)&iface)-1 ));
     47#else
     48#define _CALL_TRACE
     49#endif
    3950
    4051typedef struct
     
    96107   HRESULT     hr = E_OUTOFMEMORY;
    97108   LPITEMIDLIST   pidlOut, pidlTemp = NULL;
    98    IShellFolder  *psfChild;
     109   IShellFolder  *psfChild = NULL;
    99110
    100111   TRACE("(%p %p %s)\n",psf, pidlInOut? *pidlInOut: NULL, debugstr_w(szNext));
     
    103114   /* get the shellfolder for the child pidl and let it analyse further */
    104115   hr = IShellFolder_BindToObject(psf, *pidlInOut, NULL, &IID_IShellFolder, (LPVOID*)&psfChild);
    105 
     116dprintf(("C 1"));
    106117   if (psfChild)
    107    {
     118   {  dprintf(("C 1a %d",psfChild/*,(psfChild)->fnParseDisplayName()*/));
    108119     hr = IShellFolder_ParseDisplayName(psfChild, hwndOwner, NULL, szNext, pEaten, &pidlOut, pdwAttributes);
     120dprintf(("C 1b"));
    109121     IShellFolder_Release(psfChild);
    110 
     122dprintf(("C 2"));
    111123     pidlTemp = ILCombine(*pidlInOut, pidlOut);
    112 
     124dprintf(("C 3"));
    113125     if (pidlOut)
    114126       ILFree(pidlOut);
    115127   }
    116 
     128dprintf(("C 4"));
    117129   ILFree(*pidlInOut);
    118130   *pidlInOut = pidlTemp;
     
    207219typedef struct
    208220{
    209    ICOM_VTABLE(IShellFolder2)*            lpvtbl;
     221   ICOM_VTABLE(IUnknown)* lpVtbl;
    210222   DWORD          ref;
    211223
     224   ICOM_VTABLE(IShellFolder2)*           lpvtblShellFolder;
    212225   ICOM_VTABLE(IPersistFolder)*          lpvtblPersistFolder;
    213226   ICOM_VTABLE(IDropTarget)*             lpvtblDropTarget;
     227
     228   IUnknown                     *pUnkOuter;     /* used for aggregation */
    214229
    215230   CLSID*                                pclsid;
     
    222237} IGenericSFImpl;
    223238
     239extern struct ICOM_VTABLE(IUnknown) unkvt;
    224240extern struct ICOM_VTABLE(IShellFolder2) sfvt;
    225241extern struct ICOM_VTABLE(IPersistFolder) psfvt;
    226 extern struct ICOM_VTABLE(IDropTarget) dt2vt;
     242extern struct ICOM_VTABLE(IDropTarget) dtvt;
    227243
    228244static IShellFolder * ISF_MyComputer_Constructor(void);
     245
     246#define _IShellFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpvtblShellFolder)))
     247#define _ICOM_THIS_From_IShellFolder2(class, name) class* This = (class*)(((char*)name)-_IShellFolder2_Offset);
    229248
    230249#define _IPersistFolder_Offset ((int)(&(((IGenericSFImpl*)0)->lpvtblPersistFolder)))
     
    233252#define _IDropTarget_Offset ((int)(&(((IGenericSFImpl*)0)->lpvtblDropTarget)))
    234253#define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset);
     254
     255/*
     256  converts This to a interface pointer
     257*/
     258#define _IUnknown_(This)        (IUnknown*)&(This->lpVtbl)
     259#define _IShellFolder_(This)    (IShellFolder*)&(This->lpvtblShellFolder)
     260#define _IShellFolder2_(This)   (IShellFolder2*)&(This->lpvtblShellFolder)
     261#define _IPersist_(This)        (IPersist*)&(This->lpvtblPersistFolder)
     262#define _IPersistFolder_(This)  (IPersistFolder*)&(This->lpvtblPersistFolder)
     263#define _IDropTarget_(This)     (IDropTarget*)&(This->lpvtblDropTarget)
     264
     265/**************************************************************************
     266*       registers clipboardformat once
     267*/
     268static void SF_RegisterClipFmt (IGenericSFImpl * This)
     269{
     270        TRACE("(%p)\n", This);
     271
     272        if (!This->cfShellIDList)
     273        {
     274          This->cfShellIDList = RegisterClipboardFormatA(CFSTR_SHELLIDLIST);
     275        }
     276}
     277
     278/**************************************************************************
     279*       we need a seperate IUnknown to handle aggregation
     280*       (inner IUnknown)
     281*/
     282static HRESULT WINAPI IUnknown_fnQueryInterface(
     283        IUnknown * iface,
     284        REFIID riid,
     285        LPVOID *ppvObj)
     286{
     287        ICOM_THIS(IGenericSFImpl, iface);
     288
     289        char    xriid[50];
     290        WINE_StringFromCLSID((LPCLSID)riid,xriid);
     291
     292        _CALL_TRACE
     293        TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     294
     295        *ppvObj = NULL;
     296
     297        if(IsEqualIID(riid, &IID_IUnknown))             *ppvObj = _IUnknown_(This);
     298        else if(IsEqualIID(riid, &IID_IShellFolder))    *ppvObj = _IShellFolder_(This);
     299        else if(IsEqualIID(riid, &IID_IShellFolder2))   *ppvObj = _IShellFolder_(This);
     300        else if(IsEqualIID(riid, &IID_IPersist))        *ppvObj = _IPersist_(This);
     301        else if(IsEqualIID(riid, &IID_IPersistFolder))  *ppvObj = _IPersistFolder_(This);
     302        else if(IsEqualIID(riid, &IID_IDropTarget))
     303        {
     304          *ppvObj = _IDropTarget_(This);
     305          SF_RegisterClipFmt(This);
     306        }
     307
     308        if(*ppvObj)
     309        {
     310          IUnknown_AddRef((IUnknown*)(*ppvObj));
     311          TRACE("-- Interface = %p\n", *ppvObj);
     312          return S_OK;
     313        }
     314        TRACE("-- Interface: E_NOINTERFACE\n");
     315        return E_NOINTERFACE;
     316}
     317
     318static ULONG WINAPI IUnknown_fnAddRef(IUnknown * iface)
     319{
     320        ICOM_THIS(IGenericSFImpl, iface);
     321
     322        _CALL_TRACE
     323        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     324
     325        shell32_ObjCount++;
     326        return ++(This->ref);
     327}
     328
     329static ULONG WINAPI IUnknown_fnRelease(IUnknown * iface)
     330{
     331        ICOM_THIS(IGenericSFImpl, iface);
     332
     333        _CALL_TRACE
     334        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     335
     336        shell32_ObjCount--;
     337        if (!--(This->ref))
     338        {
     339          TRACE("-- destroying IShellFolder(%p)\n",This);
     340
     341          if (pdesktopfolder == _IShellFolder_(This))
     342          {
     343            pdesktopfolder=NULL;
     344            TRACE("-- destroyed IShellFolder(%p) was Desktopfolder\n",This);
     345          }
     346          if(This->absPidl) SHFree(This->absPidl);
     347          if(This->sMyPath) SHFree(This->sMyPath);
     348          HeapFree(GetProcessHeap(),0,This);
     349          return 0;
     350        }
     351        return This->ref;
     352}
     353
     354struct ICOM_VTABLE(IUnknown) unkvt =
     355{
     356        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     357        IUnknown_fnQueryInterface,
     358        IUnknown_fnAddRef,
     359        IUnknown_fnRelease,
     360};
    235361
    236362static shvheader GenericSFHeader [] =
     
    245371
    246372/**************************************************************************
    247 *  registers clipboardformat once
    248 */
    249 static void SF_RegisterClipFmt (IShellFolder2 * iface)
    250 {
    251    ICOM_THIS(IGenericSFImpl, iface);
    252 
    253    TRACE("(%p)\n", This);
    254 
    255    if (!This->cfShellIDList)
    256    {
    257      This->cfShellIDList = RegisterClipboardFormatA(CFSTR_SHELLIDLIST);
    258    }
     373*       IShellFolder_Constructor
     374*
     375* NOTES
     376*  creating undocumented ShellFS_Folder as part of an aggregation
     377*  {F3364BA0-65B9-11CE-A9BA-00AA004AE837}
     378*
     379* FIXME
     380*       when pUnkOuter = 0 then rrid = IID_IShellFolder is returned
     381*/
     382HRESULT IFSFolder_Constructor(
     383        IUnknown * pUnkOuter,
     384        REFIID riid,
     385        LPVOID * ppv)
     386{
     387        IGenericSFImpl *        sf;
     388        char    xriid[50];
     389        HRESULT hr = S_OK;
     390        WINE_StringFromCLSID((LPCLSID)riid,xriid);
     391
     392        TRACE("unkOut=%p riid=%s\n",pUnkOuter, xriid);
     393
     394        if(pUnkOuter && ! IsEqualIID(riid, &IID_IUnknown))
     395        {
     396          hr = CLASS_E_NOAGGREGATION;   /* forbidden by definition */
     397        }
     398        else
     399        {
     400          sf=(IGenericSFImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IGenericSFImpl));
     401          if (sf)
     402          {
     403            sf->ref=1;
     404            ICOM_VTBL(sf)=&unkvt;
     405            sf->lpvtblShellFolder=&sfvt;
     406            sf->lpvtblPersistFolder=&psfvt;
     407            sf->lpvtblDropTarget=&dtvt;
     408            sf->pclsid = (CLSID*)&CLSID_SFFile;
     409            sf->pUnkOuter = pUnkOuter ? pUnkOuter : _IUnknown_(sf);
     410            *ppv = _IUnknown_(sf);
     411            hr = S_OK;
     412            shell32_ObjCount++;
     413          }
     414          else
     415          {
     416            hr = E_OUTOFMEMORY;
     417          }
     418        }
     419        return hr;
    259420}
    260421
     
    262423*    IShellFolder_Constructor
    263424*
     425* NOTES
     426*       THIS points to the parent folder
    264427*/
    265428
    266429static IShellFolder * IShellFolder_Constructor(
    267    IShellFolder * psf,
     430   IShellFolder2 * iface,
    268431   LPITEMIDLIST pidl)
    269432{
    270433   IGenericSFImpl *                      sf;
    271    IGenericSFImpl *                      sfParent = (IGenericSFImpl*) psf;
    272434   DWORD       dwSize=0;
     435
     436   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    273437
    274438   sf=(IGenericSFImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IGenericSFImpl));
    275439   sf->ref=1;
    276440
    277    sf->lpvtbl=&sfvt;
     441   ICOM_VTBL(sf)=&unkvt;
     442   sf->lpvtblShellFolder=&sfvt;
    278443   sf->lpvtblPersistFolder=&psfvt;
    279    sf->lpvtblDropTarget=&dt2vt;
     444   sf->lpvtblDropTarget=&dtvt;
    280445   sf->pclsid = (CLSID*)&CLSID_SFFile;
    281    sf->cfShellIDList=0;
    282    sf->fAcceptFmt=FALSE;
    283 
    284    TRACE("(%p)->(parent=%p, pidl=%p)\n",sf,sfParent, pidl);
     446   sf->pUnkOuter = _IUnknown_(sf);
     447
     448   TRACE("(%p)->(parent=%p, pidl=%p)\n",sf,This, pidl);
    285449   pdump(pidl);
    286450
    287    if(pidl)                                    /* do we have a pidl? */
     451   if(pidl && iface)                                    /* do we have a pidl? */
    288452   {
    289453     int len;
    290454
    291      sf->absPidl = ILCombine(sfParent->absPidl, pidl);  /* build a absolute pidl */
     455     sf->absPidl = ILCombine(This->absPidl, pidl);  /* build a absolute pidl */
    292456
    293457     if (!_ILIsSpecialFolder(pidl))               /* only file system paths */
    294458     {
    295        if(sfParent->sMyPath)                      /* get the size of the parents path */
     459       if(This->sMyPath)                      /* get the size of the parents path */
    296460       {
    297          dwSize += strlen(sfParent->sMyPath) ;
    298          TRACE("-- (%p)->(parent's path=%s)\n",sf, debugstr_a(sfParent->sMyPath));
     461         dwSize += strlen(This->sMyPath) ;
     462         TRACE("-- (%p)->(parent's path=%s)\n",sf, debugstr_a(This->sMyPath));
    299463       }
    300464
     
    305469       *(sf->sMyPath)=0x00;
    306470
    307        if(sfParent->sMyPath)                      /* if the parent has a path, get it*/
     471       if(This->sMyPath)                      /* if the parent has a path, get it*/
    308472       {
    309          strcpy(sf->sMyPath, sfParent->sMyPath);
     473         strcpy(sf->sMyPath, This->sMyPath);
    310474         PathAddBackslashA (sf->sMyPath);
    311475       }
     
    321485
    322486   shell32_ObjCount++;
    323    return (IShellFolder *)sf;
     487   return _IShellFolder_(sf);
    324488}
    325489/**************************************************************************
     
    335499   LPVOID *ppvObj)
    336500{
    337    ICOM_THIS(IGenericSFImpl, iface);
    338 
    339    char  xriid[50];
    340    WINE_StringFromCLSID((LPCLSID)riid,xriid);
    341    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    342 
    343    *ppvObj = NULL;
    344 
    345    if(IsEqualIID(riid, &IID_IUnknown))
    346    { *ppvObj = This;
    347    }
    348    else if(IsEqualIID(riid, &IID_IShellFolder))
    349    {
    350      *ppvObj = (IShellFolder*)This;
    351    }
    352    else if(IsEqualIID(riid, &IID_IShellFolder2))
    353    {
    354      *ppvObj = (IShellFolder2*)This;
    355    }
    356    else if(IsEqualIID(riid, &IID_IPersist))
    357    {
    358      *ppvObj = (IPersistFolder*)&(This->lpvtblPersistFolder);
    359    }
    360    else if(IsEqualIID(riid, &IID_IPersistFolder))
    361    {
    362      *ppvObj = (IPersistFolder*)&(This->lpvtblPersistFolder);
    363    }
    364    else if(IsEqualIID(riid, &IID_IDropTarget))
    365    {
    366      *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
    367      SF_RegisterClipFmt((IShellFolder2*)This);
    368    }
    369 
    370    if(*ppvObj)
    371    {
    372      IUnknown_AddRef((IUnknown*)(*ppvObj));
    373      TRACE("-- Interface = %p\n", *ppvObj);
    374      return S_OK;
    375    }
    376    TRACE("-- Interface: E_NOINTERFACE\n");
    377    return E_NOINTERFACE;
     501  _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     502
     503  char  xriid[50];
     504  WINE_StringFromCLSID((LPCLSID)riid,xriid);
     505  _CALL_TRACE
     506  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     507
     508  return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObj);
    378509}
    379510
     
    384515static ULONG WINAPI IShellFolder_fnAddRef(IShellFolder2 * iface)
    385516{
    386    ICOM_THIS(IGenericSFImpl, iface);
    387 
    388 #ifdef MEM_DEBUG
    389    TRACE("called from: 0x%08x\n", *( ((UINT*)&iface)-1 ));
    390 #endif
    391    TRACE("(%p)->(count=%lu)\n",This,This->ref);
    392 
    393    shell32_ObjCount++;
    394    return ++(This->ref);
     517  _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     518
     519  _CALL_TRACE
     520  TRACE("(%p)->(count=%lu)\n",This,This->ref);
     521
     522  return IUnknown_AddRef(This->pUnkOuter);
    395523}
    396524
     
    400528static ULONG WINAPI IShellFolder_fnRelease(IShellFolder2 * iface)
    401529{
    402    ICOM_THIS(IGenericSFImpl, iface);
    403 
    404 #ifdef MEM_DEBUG
    405    TRACE("called from: 0x%08x\n", *( ((UINT*)&iface)-1 ));
    406 #endif
    407    TRACE("(%p)->(count=%lu)\n",This,This->ref);
    408 
    409    shell32_ObjCount--;
    410    if (!--(This->ref))
    411    { TRACE("-- destroying IShellFolder(%p)\n",This);
    412 
    413      if (pdesktopfolder == (IShellFolder*)iface)
    414      { pdesktopfolder=NULL;
    415        TRACE("-- destroyed IShellFolder(%p) was Desktopfolder\n",This);
    416      }
    417      if(This->absPidl)
    418      { SHFree(This->absPidl);
    419      }
    420      if(This->sMyPath)
    421      { SHFree(This->sMyPath);
    422      }
    423 
    424      HeapFree(GetProcessHeap(),0,This);
    425 
    426      return 0;
    427    }
    428    return This->ref;
     530  _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     531
     532  _CALL_TRACE
     533  TRACE("(%p)->(count=%lu)\n",This,This->ref);
     534
     535  return IUnknown_Release(This->pUnkOuter);
    429536}
    430537/**************************************************************************
     
    459566   DWORD *pdwAttributes)
    460567{
    461    ICOM_THIS(IGenericSFImpl, iface);
     568   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    462569
    463570   HRESULT     hr = E_OUTOFMEMORY;
     
    494601       if (szNext && *szNext)
    495602       {
    496          hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
     603         hr = SHELL32_ParseNextElement(hwndOwner, iface, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
    497604       }
    498605       else
     
    523630   LPENUMIDLIST* ppEnumIDList)
    524631{
    525    ICOM_THIS(IGenericSFImpl, iface);
    526 
    527    TRACE("(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",This,hwndOwner,dwFlags,ppEnumIDList);
    528 
    529    *ppEnumIDList = NULL;
    530    *ppEnumIDList = IEnumIDList_Constructor (This->sMyPath, dwFlags, EIDL_FILE);
    531 
    532    TRACE("-- (%p)->(new ID List: %p)\n",This,*ppEnumIDList);
    533 
    534    if(!*ppEnumIDList) return E_OUTOFMEMORY;
    535 
    536    return S_OK;
     632  _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     633
     634  TRACE("(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",This,hwndOwner,dwFlags,ppEnumIDList);
     635
     636  *ppEnumIDList = NULL;
     637
     638  if (This->sMyPath)
     639     *ppEnumIDList = IEnumIDList_Constructor (This->sMyPath, dwFlags, EIDL_FILE);
     640  else
     641  {
     642   /* if This->sMyPath is NULL, we will start enumerating objects
     643      at MyComputer level */
     644    *ppEnumIDList = IEnumIDList_Constructor (NULL, dwFlags, EIDL_MYCOMP);
     645  }
     646
     647
     648  TRACE("-- (%p)->(new ID List: %p)\n",This,*ppEnumIDList);
     649
     650  if(!*ppEnumIDList) return E_OUTOFMEMORY;
     651
     652  return S_OK;
    537653}
    538654
     
    548664         LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
    549665{
    550    ICOM_THIS(IGenericSFImpl, iface);
     666   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    551667   GUID     const * iid;
    552668   char     xriid[50];
     
    559675   TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,xriid,ppvOut);
    560676
    561    if(!pidl || !ppvOut) return E_INVALIDARG;
     677   if(!ppvOut) return E_INVALIDARG;
    562678
    563679   *ppvOut = NULL;
     680
     681   if (!pidl) return E_INVALIDARG;
    564682
    565683   iid = _ILGetGUIDPointer(pidl);
     
    583701   {
    584702     LPITEMIDLIST pidltemp = ILCloneFirst(pidl);
    585      pShellFolder = IShellFolder_Constructor((IShellFolder*)This, pidltemp);
     703     pShellFolder = IShellFolder_Constructor(iface, pidltemp);
    586704     ILFree(pidltemp);
    587705   }
     
    618736   LPVOID *ppvOut)
    619737{
    620    ICOM_THIS(IGenericSFImpl, iface);
     738   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    621739
    622740   char xriid[50];
     
    651769   LPCITEMIDLIST pidl2)
    652770{
    653    ICOM_THIS(IGenericSFImpl, iface);
     771   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    654772
    655773   CHAR szTemp1[MAX_PATH];
     
    706824           pidl2 = ILGetNext(pidl2);
    707825
    708            hr = IShellFolder_BindToObject((IShellFolder*)This, pidlTemp, NULL, &IID_IShellFolder, (LPVOID*)&psf);
     826           hr = IShellFolder_BindToObject(iface, pidlTemp, NULL, &IID_IShellFolder, (LPVOID*)&psf);
    709827           if (SUCCEEDED(hr))
    710828           {
     
    737855       HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
    738856{
    739    ICOM_THIS(IGenericSFImpl, iface);
     857   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    740858
    741859   LPSHELLVIEW pShellView;
     
    752870     if(IsEqualIID(riid, &IID_IDropTarget))
    753871     {
    754        hr = IShellFolder_QueryInterface((IShellFolder*)This, &IID_IDropTarget, ppvOut);
     872       hr = IShellFolder_QueryInterface(iface, &IID_IDropTarget, ppvOut);
    755873     }
    756874     else if(IsEqualIID(riid, &IID_IContextMenu))
     
    761879     else if(IsEqualIID(riid, &IID_IShellView))
    762880     {
    763        pShellView = IShellView_Constructor((IShellFolder *) This);
     881       pShellView = IShellView_Constructor((IShellFolder*)iface);
    764882       if(pShellView)
    765883       {
     
    784902static HRESULT WINAPI IShellFolder_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
    785903{
    786    ICOM_THIS(IGenericSFImpl, iface);
     904   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    787905
    788906   HRESULT hr = S_OK;
    789907
    790908   TRACE("(%p)->(cidl=%d apidl=%p mask=0x%08lx)\n",This,cidl,apidl,*rgfInOut);
     909
     910   if( !cidl && !apidl && rgfInOut )
     911   {    //      return default
     912        *rgfInOut = SFGAO_CAPABILITYMASK|SFGAO_FILESYSTEM;
     913        return hr;
     914   }
     915
    791916
    792917   if ( (!cidl) || (!apidl) || (!rgfInOut))
     
    846971   LPVOID * ppvOut)
    847972{
    848    ICOM_THIS(IGenericSFImpl, iface);
     973   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    849974
    850975   char     xclsid[50];
     
    864989     if(IsEqualIID(riid, &IID_IContextMenu) && (cidl >= 1))
    865990     {
    866        pObj  = (LPUNKNOWN)IContextMenu_Constructor((IShellFolder *)This, This->absPidl, apidl, cidl);
     991       pObj  = (LPUNKNOWN)IContextMenu_Constructor((IShellFolder *)iface, This->absPidl, apidl, cidl);
    867992       hr = S_OK;
    868993     }
     
    8811006     else if (IsEqualIID(riid, &IID_IDropTarget) && (cidl >= 1))
    8821007     {
    883        hr = IShellFolder_QueryInterface((IShellFolder*)This, &IID_IDropTarget, (LPVOID*)&pObj);
     1008       hr = IShellFolder_QueryInterface(iface, &IID_IDropTarget, (LPVOID*)&pObj);
    8841009     }
    8851010     else
     
    9181043   LPSTRRET strRet)
    9191044{
    920    ICOM_THIS(IGenericSFImpl, iface);
     1045   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    9211046
    9221047   CHAR     szPath[MAX_PATH]= "";
     
    9551080     len = strlen(szPath);
    9561081
    957      if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags, szPath + len, MAX_PATH - len)))
     1082     if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, szPath + len, MAX_PATH - len)))
    9581083       return E_OUTOFMEMORY;
    9591084   }
     
    9851110   LPITEMIDLIST *pPidlOut)
    9861111{
    987    ICOM_THIS(IGenericSFImpl, iface);
     1112   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    9881113
    9891114   FIXME("(%p)->(%u,pidl=%p,%s,%lu,%p),stub!\n",
     
    9981123static HRESULT WINAPI IShellFolder_fnGetFolderPath(IShellFolder2 * iface, LPSTR lpszOut, DWORD dwOutSize)
    9991124{
    1000    ICOM_THIS(IGenericSFImpl, iface);
     1125   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    10011126
    10021127   TRACE("(%p)->(%p %lu)\n",This, lpszOut, dwOutSize);
     
    10181143   GUID *pguid)
    10191144{
    1020    ICOM_THIS(IGenericSFImpl, iface);
    1021    TRACE("(%p)\n",This);
     1145   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     1146   FIXME("(%p)\n",This);
    10221147   return E_NOTIMPL;
    10231148}
     
    10261151   IEnumExtraSearch **ppenum)
    10271152{
    1028    ICOM_THIS(IGenericSFImpl, iface);
    1029    TRACE("(%p)\n",This);
     1153   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     1154   FIXME("(%p)\n",This);
    10301155   return E_NOTIMPL;
    10311156}
     
    10361161   ULONG *pDisplay)
    10371162{
    1038    ICOM_THIS(IGenericSFImpl, iface);
     1163   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    10391164
    10401165   TRACE("(%p)\n",This);
     
    10501175   DWORD *pcsFlags)
    10511176{
    1052    ICOM_THIS(IGenericSFImpl, iface);
     1177   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    10531178
    10541179   TRACE("(%p)\n",This);
     
    10661191   VARIANT *pv)
    10671192{
    1068    ICOM_THIS(IGenericSFImpl, iface);
    1069    TRACE("(%p)\n",This);
     1193   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     1194   FIXME("(%p)\n",This);
    10701195   return E_NOTIMPL;
    10711196}
     
    10761201   SHELLDETAILS *psd)
    10771202{
    1078    ICOM_THIS(IGenericSFImpl, iface);
     1203   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    10791204   HRESULT hr = E_FAIL;
    10801205
     
    11101235         break;
    11111236       case 4: /* attributes */
    1112          _ILGetAttributeStr(pidl, psd->str.u.cStr, MAX_PATH);
     1237         _ILGetFileAttributes(pidl, psd->str.u.cStr, MAX_PATH);
    11131238         break;
    11141239     }
     
    11241249   SHCOLUMNID *pscid)
    11251250{
    1126    ICOM_THIS(IGenericSFImpl, iface);
    1127    TRACE("(%p)\n",This);
     1251   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     1252   FIXME("(%p)\n",This);
    11281253   return E_NOTIMPL;
    11291254}
     
    11831308   sf=(IGenericSFImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IGenericSFImpl));
    11841309   sf->ref=1;
    1185    sf->lpvtbl=&sfdvt;
     1310   ICOM_VTBL(sf)=&unkvt;
     1311   sf->lpvtblShellFolder=&sfdvt;
    11861312   sf->absPidl=_ILCreateDesktop();       /* my qualified pidl */
     1313   sf->pUnkOuter = (IUnknown *) &sf->lpVtbl;
    11871314
    11881315   TRACE("(%p)\n",sf);
    11891316
    11901317   shell32_ObjCount++;
    1191    return (IShellFolder *)sf;
     1318   return _IShellFolder_(sf);
    11921319}
    11931320
     
    12021329   LPVOID *ppvObj)
    12031330{
    1204    ICOM_THIS(IGenericSFImpl, iface);
    1205 
    1206    char  xriid[50];
    1207    WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1208    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    1209 
    1210    *ppvObj = NULL;
    1211 
    1212    if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
    1213    { *ppvObj = This;
    1214    }
    1215    else if(IsEqualIID(riid, &IID_IShellFolder))  /*IShellFolder*/
    1216    {    *ppvObj = (IShellFolder*)This;
    1217    }
    1218    else if(IsEqualIID(riid, &IID_IShellFolder2))  /*IShellFolder2*/
    1219    {    *ppvObj = (IShellFolder2*)This;
    1220    }
    1221 
    1222    if(*ppvObj)
    1223    {
    1224      IUnknown_AddRef((IUnknown*)(*ppvObj));
    1225      TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
    1226      return S_OK;
    1227    }
    1228    TRACE("-- Interface: E_NOINTERFACE\n");
    1229    return E_NOINTERFACE;
     1331  _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
     1332
     1333  char  xriid[50];
     1334  WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1335  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     1336
     1337  *ppvObj = NULL;
     1338
     1339  if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
     1340  {
     1341    *ppvObj = _IUnknown_(This);
     1342  }
     1343  else if(IsEqualIID(riid, &IID_IShellFolder))  /*IShellFolder*/
     1344  {
     1345    *ppvObj = _IShellFolder_(This);
     1346  }
     1347  else if(IsEqualIID(riid, &IID_IShellFolder2))  /*IShellFolder2*/
     1348  {
     1349    *ppvObj = _IShellFolder_(This);
     1350  }
     1351
     1352  if(*ppvObj)
     1353  {
     1354    IUnknown_AddRef((IUnknown*)(*ppvObj));
     1355    TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
     1356    return S_OK;
     1357  }
     1358  TRACE("-- Interface: E_NOINTERFACE\n");
     1359  return E_NOINTERFACE;
    12301360}
    12311361
     
    12461376   DWORD *pdwAttributes)
    12471377{
    1248    ICOM_THIS(IGenericSFImpl, iface);
     1378   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    12491379
    12501380   LPCWSTR     szNext=NULL;
     
    12651395   if (szNext && *szNext)
    12661396   {
    1267      hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
     1397     hr = SHELL32_ParseNextElement(hwndOwner,iface, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
    12681398   }
    12691399   else
     
    12881418   LPENUMIDLIST* ppEnumIDList)
    12891419{
    1290    ICOM_THIS(IGenericSFImpl, iface);
     1420   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    12911421
    12921422   TRACE("(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",This,hwndOwner,dwFlags,ppEnumIDList);
     
    13081438         LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
    13091439{
    1310    ICOM_THIS(IGenericSFImpl, iface);
     1440   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    13111441   GUID     const * clsid;
    13121442   char     xriid[50];
     
    13221452   if (clsid)
    13231453   {
    1324      if ( IsEqualIID(clsid, &IID_MyComputer))
     1454     if ( IsEqualIID(clsid, &CLSID_MyComputer))
    13251455     {
    13261456       pShellFolder = ISF_MyComputer_Constructor();
     
    13381468   {
    13391469     /* file system folder on the desktop */
    1340      LPITEMIDLIST pidltemp = ILCloneFirst(pidl);
    1341      pShellFolder = IShellFolder_Constructor((IShellFolder*)This, pidltemp);
    1342      ILFree(pidltemp);
     1470     LPITEMIDLIST deskpidl, firstpidl, completepidl;
     1471     IPersistFolder * ppf;
     1472
     1473     /* combine pidls */
     1474     SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &deskpidl);
     1475     firstpidl = ILCloneFirst(pidl);
     1476     completepidl = ILCombine(deskpidl, firstpidl);
     1477
     1478     pShellFolder = IShellFolder_Constructor(NULL, NULL);
     1479     if (SUCCEEDED(IShellFolder_QueryInterface(pShellFolder, &IID_IPersistFolder, (LPVOID*)&ppf)))
     1480     {
     1481       IPersistFolder_Initialize(ppf, completepidl);
     1482       IPersistFolder_Release(ppf);
     1483     }
     1484     ILFree(completepidl);
     1485     ILFree(deskpidl);
     1486     ILFree(firstpidl);
    13431487   }
    13441488
     
    13651509       HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
    13661510{
    1367    ICOM_THIS(IGenericSFImpl, iface);
     1511   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    13681512
    13691513   LPSHELLVIEW pShellView;
     
    13901534     else if(IsEqualIID(riid, &IID_IShellView))
    13911535     {
    1392        pShellView = IShellView_Constructor((IShellFolder *) This);
     1536       pShellView = IShellView_Constructor((IShellFolder*)iface);
    13931537       if(pShellView)
    13941538       {
     
    14071551static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
    14081552{
    1409    ICOM_THIS(IGenericSFImpl, iface);
     1553   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    14101554
    14111555   GUID     const * clsid;
     
    14251569     if (clsid)
    14261570     {
    1427        if (IsEqualIID(clsid, &IID_MyComputer))
     1571       if (IsEqualIID(clsid, &CLSID_MyComputer))
    14281572       {
    14291573         *rgfInOut &= 0xb0000154;
     
    14731617   LPSTRRET strRet)
    14741618{
    1475    ICOM_THIS(IGenericSFImpl, iface);
     1619   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    14761620
    14771621   CHAR     szPath[MAX_PATH]= "";
     
    14921636   else
    14931637   {
    1494      if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags, szPath, MAX_PATH)))
     1638     if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, szPath, MAX_PATH)))
    14951639       return E_OUTOFMEMORY;
    14961640   }
     
    15071651   GUID *pguid)
    15081652{
    1509    ICOM_THIS(IGenericSFImpl, iface);
     1653   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15101654   FIXME("(%p)\n",This);
    15111655   return E_NOTIMPL;
     
    15151659   IEnumExtraSearch **ppenum)
    15161660{
    1517    ICOM_THIS(IGenericSFImpl, iface);
     1661   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15181662   FIXME("(%p)\n",This);
    15191663   return E_NOTIMPL;
     
    15251669   ULONG *pDisplay)
    15261670{
    1527    ICOM_THIS(IGenericSFImpl, iface);
     1671   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15281672
    15291673   TRACE("(%p)\n",This);
     
    15391683   DWORD *pcsFlags)
    15401684{
    1541    ICOM_THIS(IGenericSFImpl, iface);
     1685   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15421686
    15431687   TRACE("(%p)\n",This);
     
    15551699   VARIANT *pv)
    15561700{
    1557    ICOM_THIS(IGenericSFImpl, iface);
     1701   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15581702   FIXME("(%p)\n",This);
    15591703
     
    15661710   SHELLDETAILS *psd)
    15671711{
    1568    ICOM_THIS(IGenericSFImpl, iface);
     1712   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    15691713   HRESULT hr = E_FAIL;;
    15701714
     
    15991743         break;
    16001744       case 4: /* attributes */
    1601          _ILGetAttributeStr(pidl, psd->str.u.cStr, MAX_PATH);
     1745         _ILGetFileAttributes(pidl, psd->str.u.cStr, MAX_PATH);
    16021746         break;
    16031747     }
     
    16131757   SHCOLUMNID *pscid)
    16141758{
    1615    ICOM_THIS(IGenericSFImpl, iface);
     1759   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    16161760   FIXME("(%p)\n",This);
    16171761   return E_NOTIMPL;
     
    16711815   sf->ref=1;
    16721816
    1673    sf->lpvtbl = &sfmcvt;
     1817   ICOM_VTBL(sf)=&unkvt;
     1818   sf->lpvtblShellFolder=&sfmcvt;
    16741819   sf->lpvtblPersistFolder = &psfvt;
    16751820   sf->pclsid = (CLSID*)&CLSID_SFMyComp;
    16761821   sf->absPidl=_ILCreateMyComputer();    /* my qualified pidl */
     1822   sf->pUnkOuter = (IUnknown *) &sf->lpVtbl;
    16771823
    16781824   TRACE("(%p)\n",sf);
    16791825
    16801826   shell32_ObjCount++;
    1681    return (IShellFolder *)sf;
     1827   return _IShellFolder_(sf);
    16821828}
    16831829
     
    16941840   DWORD *pdwAttributes)
    16951841{
    1696    ICOM_THIS(IGenericSFImpl, iface);
     1842   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    16971843
    16981844   HRESULT     hr = E_OUTOFMEMORY;
     
    17171863     if (szNext && *szNext)
    17181864     {
    1719        hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
     1865       hr = SHELL32_ParseNextElement(hwndOwner,iface, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
    17201866     }
    17211867     else
     
    17401886   LPENUMIDLIST* ppEnumIDList)
    17411887{
    1742    ICOM_THIS(IGenericSFImpl, iface);
     1888   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    17431889
    17441890   TRACE("(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",This,hwndOwner,dwFlags,ppEnumIDList);
     
    17601906         LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
    17611907{
    1762    ICOM_THIS(IGenericSFImpl, iface);
     1908   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    17631909   GUID     const * clsid;
    17641910   char     xriid[50];
     
    17701916   TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,xriid,ppvOut);
    17711917
    1772    if(!pidl || !ppvOut) return E_INVALIDARG;
     1918   if(!ppvOut) return E_INVALIDARG;
    17731919
    17741920   *ppvOut = NULL;
    17751921
    1776    if ((clsid=_ILGetGUIDPointer(pidl)) && !IsEqualIID(clsid, &IID_MyComputer))
     1922   if (!pidl) return E_INVALIDARG;
     1923
     1924   if ((clsid=_ILGetGUIDPointer(pidl)) && !IsEqualIID(clsid, &CLSID_MyComputer))
    17771925   {
    17781926      if (!SUCCEEDED(SHELL32_CoCreateInitSF (This->absPidl, pidl, clsid, riid, (LPVOID*)&pShellFolder)))
     
    17861934
    17871935     pidltemp = ILCloneFirst(pidl);
    1788      pShellFolder = IShellFolder_Constructor((IShellFolder*)This, pidltemp);
     1936     pShellFolder = IShellFolder_Constructor(iface, pidltemp);
    17891937     ILFree(pidltemp);
    17901938   }
     
    18121960       HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
    18131961{
    1814    ICOM_THIS(IGenericSFImpl, iface);
     1962   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    18151963
    18161964   LPSHELLVIEW pShellView;
     
    18371985     else if(IsEqualIID(riid, &IID_IShellView))
    18381986     {
    1839        pShellView = IShellView_Constructor((IShellFolder *) This);
     1987       pShellView = IShellView_Constructor((IShellFolder*)iface);
    18401988       if(pShellView)
    18411989       {
     
    18542002static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
    18552003{
    1856    ICOM_THIS(IGenericSFImpl, iface);
     2004   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    18572005
    18582006   GUID     const * clsid;
     
    19102058   LPSTRRET strRet)
    19112059{
    1912    ICOM_THIS(IGenericSFImpl, iface);
     2060   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    19132061
    19142062   char     szPath[MAX_PATH], szDrive[18];
     
    19622110     len = strlen(szPath);
    19632111
    1964      if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags | SHGDN_FORPARSING, szPath + len, MAX_PATH - len)))
     2112     if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_FORPARSING, szPath + len, MAX_PATH - len)))
    19652113       return E_OUTOFMEMORY;
    19662114   }
     
    19772125   GUID *pguid)
    19782126{
    1979    ICOM_THIS(IGenericSFImpl, iface);
     2127   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    19802128   FIXME("(%p)\n",This);
    19812129   return E_NOTIMPL;
     
    19852133   IEnumExtraSearch **ppenum)
    19862134{
    1987    ICOM_THIS(IGenericSFImpl, iface);
     2135   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    19882136   FIXME("(%p)\n",This);
    19892137   return E_NOTIMPL;
     
    19952143   ULONG *pDisplay)
    19962144{
    1997    ICOM_THIS(IGenericSFImpl, iface);
     2145   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    19982146
    19992147   TRACE("(%p)\n",This);
     
    20092157   DWORD *pcsFlags)
    20102158{
    2011    ICOM_THIS(IGenericSFImpl, iface);
     2159   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    20122160
    20132161   TRACE("(%p)\n",This);
     
    20252173   VARIANT *pv)
    20262174{
    2027    ICOM_THIS(IGenericSFImpl, iface);
     2175   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    20282176   FIXME("(%p)\n",This);
    20292177
     
    20382186   SHELLDETAILS *psd)
    20392187{
    2040    ICOM_THIS(IGenericSFImpl, iface);
     2188   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    20412189   HRESULT hr;
    20422190
     
    20732221           _ILSimpleGetText(pidl, szPath, MAX_PATH);
    20742222           GetDiskFreeSpaceExA(szPath, NULL, &ulBytes, NULL);
     2223           //CB: WINE uses ulBytes.s.LowPart
    20752224           StrFormatByteSizeA(ulBytes.LowPart, psd->str.u.cStr, MAX_PATH);
    20762225         }
     
    20812230           _ILSimpleGetText(pidl, szPath, MAX_PATH);
    20822231           GetDiskFreeSpaceExA(szPath, &ulBytes, NULL, NULL);
     2232           //CB: WINE uses ulBytes.s.LowPart
    20832233           StrFormatByteSizeA(ulBytes.LowPart, psd->str.u.cStr, MAX_PATH);
    20842234         }
     
    20952245   SHCOLUMNID *pscid)
    20962246{
    2097    ICOM_THIS(IGenericSFImpl, iface);
     2247   _ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
    20982248   FIXME("(%p)\n",This);
    20992249   return E_NOTIMPL;
     
    21412291   TRACE("(%p)\n", This);
    21422292
    2143    return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);
     2293   return IUnknown_QueryInterface(This->pUnkOuter, iid, ppvObj);
    21442294}
    21452295
     
    21512301   IPersistFolder *                      iface)
    21522302{
    2153    _ICOM_THIS_From_IPersistFolder(IShellFolder, iface);
    2154 
    2155    TRACE("(%p)\n", This);
    2156 
    2157    return IShellFolder_AddRef((IShellFolder*)This);
     2303  _ICOM_THIS_From_IPersistFolder(IGenericSFImpl, iface);
     2304
     2305  TRACE("(%p)\n", This);
     2306
     2307  return IUnknown_AddRef(This->pUnkOuter);
    21582308}
    21592309
     
    21692319   TRACE("(%p)\n", This);
    21702320
    2171    return IShellFolder_Release((IShellFolder*)This);
     2321   return IUnknown_Release(This->pUnkOuter);
    21722322}
    21732323
     
    21992349   LPCITEMIDLIST                         pidl)
    22002350{
     2351   char sTemp[MAX_PATH];
    22012352   _ICOM_THIS_From_IPersistFolder(IGenericSFImpl, iface);
    22022353
    2203    TRACE("(%p)\n", This);
    2204 
    2205    if(This->absPidl)
    2206    {
    2207      SHFree(This->absPidl);
    2208      This->absPidl = NULL;
    2209    }
    2210    This->absPidl = ILClone(pidl);
    2211    return S_OK;
     2354  TRACE("(%p)->(%p)\n", This, pidl);
     2355
     2356  /* free the old stuff */
     2357  if(This->absPidl)
     2358  {
     2359    SHFree(This->absPidl);
     2360    This->absPidl = NULL;
     2361  }
     2362  if(This->sMyPath)
     2363  {
     2364    SHFree(This->sMyPath);
     2365    This->sMyPath = NULL;
     2366  }
     2367
     2368  /* set my pidl */
     2369  This->absPidl = ILClone(pidl);
     2370
     2371  /* set my path */
     2372  if (SHGetPathFromIDListA(pidl, sTemp))
     2373  {
     2374    This->sMyPath = (CHAR*)SHAlloc(strlen(sTemp+1));
     2375    strcpy(This->sMyPath, sTemp);
     2376  }
     2377
     2378  TRACE("--(%p)->(%s)\n", This, This->sMyPath);
     2379
     2380  return S_OK;
    22122381}
    22132382
     
    22582427   TRACE("(%p)\n", This);
    22592428
    2260    return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     2429   return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObj);
    22612430}
    22622431
     
    22672436   TRACE("(%p)\n", This);
    22682437
    2269    return IShellFolder_AddRef((IShellFolder*)This);
     2438   return IUnknown_AddRef(This->pUnkOuter);
    22702439}
    22712440
     
    22762445   TRACE("(%p)\n", This);
    22772446
    2278    return IShellFolder_Release((IShellFolder*)This);
     2447   return IUnknown_Release(This->pUnkOuter);
    22792448}
    22802449
  • trunk/src/shell32/shlmenu.cpp

    r1558 r3243  
    1 /* $Id: shlmenu.cpp,v 1.4 1999-11-02 20:38:47 phaller Exp $ */
     1/* $Id: shlmenu.cpp,v 1.5 2000-03-26 16:34:53 cbratschi Exp $ */
    22
    33/*
     
    1111 * Many of this functions are in SHLWAPI.DLL also
    1212 *
     13 * Corel WINE 20000324 level
    1314 */
    1415
     
    251252 * FileMenu_Create                                [SHELL32.114]
    252253 *
     254 * NOTES
     255 *  for non-root menus values are
     256 *  (ffffffff,00000000,00000000,00000000,00000000)
    253257 */
    254258ODINFUNCTION5(HMENU, FileMenu_Create,
     
    427431 * FileMenu_ReplaceUsingPidl                   [SHELL32.113]
    428432 *
     433 * FIXME: the static items are deleted but wont be refreshed
    429434 */
    430435ODINFUNCTION5(int, FileMenu_ReplaceUsingPidl,
     
    805810
    806811/*************************************************************************
    807  * SHFind_InitMenuPopup                           [SHELL32.149]
     812 * SHFind_InitMenuPopup                         [SHELL32.149]
    808813 *
    809814 *
    810815 * PARAMETERS
    811  *  hMenu      [in] handel of menu previously created
    812  *  hWndParent [in] parent window
    813  *  w       [in] no pointer
    814  *  x       [in] no pointer
     816 *  hMenu               [in] handle of menu previously created
     817 *  hWndParent  [in] parent window
     818 *  w                   [in] no pointer (0x209 over here) perhaps menu IDs ???
     819 *  x                   [in] no pointer (0x226 over here)
     820 *
     821 * RETURNS
     822 *  LPXXXXX                      pointer to struct containing a func addr at offset 8
     823 *                                       or NULL at failure.
    815824 */
    816825ODINFUNCTION4(HRESULT, SHFind_InitMenuPopup,
     
    821830{  FIXME("hmenu=0x%08x hwnd=0x%08x 0x%08lx 0x%08lx stub\n",
    822831      hMenu,hWndParent,w,x);
    823    return TRUE;
     832        return NULL; /* this is supposed to be a pointer */
    824833}
    825834
  • trunk/src/shell32/shlview.cpp

    r3217 r3243  
    1 /* $Id: shlview.cpp,v 1.8 2000-03-24 17:17:28 cbratschi Exp $ */
     1/* $Id: shlview.cpp,v 1.9 2000-03-26 16:34:54 cbratschi Exp $ */
    22/*
    33 * ShellView
    44 *
     5 * Copyright 2000 Christoph Bratschi (cbratschi@datacomm.ch)
     6 *
    57 * Copyright 1998,1999                   <juergen.schmied@metronet.de>
    68 *
    7  *  FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
    8  *  Release() ???
    9  *
    10  *  FIXME: There is still a design problem in this implementation.
    11  * This implementation is more or less ok for file system folders
    12  * but there are many more kinds of folders.
    13  * The shellview is not supposed to know much about the colums
    14  * appearing in the view. To fix this it should use the IShellFolder2
    15  * interface when possible to get the informations dynamically
    16  * this will take a lot of work to implement and wont likely not
    17  * be done in near future
    18  * Please considder this when code new features. Mail me if you
    19  * are in doubt how to do things. (jsch 25/10/99)
    20  *
    21  * FIXME: Set the buttons in the filedialog according to the view state
    22 
     9 * This is the view visualizing the data provied by the shellfolder.
     10 * No direct access to data from pidls should be done from here.
     11 *
     12 * FIXME: There is not jet a official interface defined to manipulate
     13 * the objects shown in the view (rename, move...). This should be
     14 * implemented as additional interface to IShellFolder.
     15 *
     16 * FIXME: The order by part of the background context menu should be
     17 * buily according to the columns shown.
     18 *
     19 * FIXME: Load/Save the view state from/into the stream provied by
     20 * the ShellBrowser
     21 *
     22 * FIXME: CheckToolbar: handle the "new folder" and "folder up" button
     23 *
     24 * FIXME: ShellView_FillList: consider sort orders
     25 *
     26 * FIXME: implement the drag and drop in the old (msg-based) way
     27 *
     28 * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
     29 * Release() ???
     30 *
     31 * Corel WINE 20000324 level
    2332 */
    2433
     
    8392
    8493extern struct ICOM_VTABLE(IShellView) svvt;
     94
    8595extern struct ICOM_VTABLE(IOleCommandTarget) ctvt;
    8696#define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget)))
    87 #define _ICOM_THIS_From_IOleCommandTarget(myClass, name) myClass* This = (myClass*)(((char*)name)-_IOleCommandTarget_Offset);
     97#define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset);
    8898
    8999extern struct ICOM_VTABLE(IDropTarget) dtvt;
    90100#define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget)))
    91 #define _ICOM_THIS_From_IDropTarget(myClass, name) myClass* This = (myClass*)(((char*)name)-_IDropTarget_Offset);
     101#define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset);
    92102
    93103extern struct ICOM_VTABLE(IDropSource) dsvt;
    94104#define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource)))
    95 #define _ICOM_THIS_From_IDropSource(myClass, name) myClass* This = (myClass*)(((char*)name)-_IDropSource_Offset);
     105#define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset);
    96106
    97107extern struct ICOM_VTABLE(IViewObject) vovt;
    98108#define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject)))
    99 #define _ICOM_THIS_From_IViewObject(myClass, name) myClass* This = (myClass*)(((char*)name)-_IViewObject_Offset);
     109#define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset);
    100110
    101111/* ListView Header ID's */
    102 #define LISTVIEW_COLUMN_NAME 0
    103 #define LISTVIEW_COLUMN_SIZE 1
    104 #define LISTVIEW_COLUMN_TYPE 2
    105 #define LISTVIEW_COLUMN_TIME 3
    106 #define LISTVIEW_COLUMN_ATTRIB 4
     112#define FILEDIALOG_COLUMN_NAME 0
     113#define FILEDIALOG_COLUMN_SIZE 1
     114#define FILEDIALOG_COLUMN_TYPE 2
     115#define FILEDIALOG_COLUMN_TIME 3
     116#define FILEDIALOG_COLUMN_ATTRIB 4
    107117//CB: todo: drive view!
    108118
     
    215225   return ret;
    216226}
    217 /**********************************************************
    218  *
    219  * ##### helperfunctions for initializing the view #####
    220  */
    221 /**********************************************************
    222  * set the toolbar buttons
     227
     228/**********************************************************
     229 *      set the toolbar of the filedialog buttons
     230 *
     231 * - activates the buttons from the shellbrowser according to
     232 *   the view state
    223233 */
    224234static void CheckToolbar(IShellViewImpl * This)
     
    242252
    243253/**********************************************************
     254 *
     255 * ##### helperfunctions for initializing the view #####
     256 */
     257
     258/**********************************************************
    244259 * change the style of the listview control
    245260 */
     
    257272* ShellView_CreateList()
    258273*
     274* - creates the list view window
    259275*/
    260276static BOOL ShellView_CreateList (IShellViewImpl * This)
     
    275291   }
    276292
    277    if (This->FolderSettings.fFlags && FWF_AUTOARRANGE)  dwStyle |= LVS_AUTOARRANGE;
     293   if (This->FolderSettings.fFlags & FWF_AUTOARRANGE)  dwStyle |= LVS_AUTOARRANGE;
    278294   /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/
    279    if (This->FolderSettings.fFlags && FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL;
     295   if (This->FolderSettings.fFlags & FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL;
     296
     297   This->ListViewSortInfo.bIsAscending = TRUE;
     298   This->ListViewSortInfo.nHeaderID = -1;
     299   This->ListViewSortInfo.nLastHeaderID = -1;
    280300
    281301   This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,
     
    292312     return FALSE;
    293313
    294         This->ListViewSortInfo.bIsAscending = TRUE;
    295         This->ListViewSortInfo.nHeaderID = -1;
    296         This->ListViewSortInfo.nLastHeaderID = -1;
    297 
    298314   /*  UpdateShellSettings(); */
     315
     316   /* Bring window to the Top
     317      if there is any user defined template then we cannot
     318      see this list control
     319   */
     320   BringWindowToTop(This->hWnd);
     321   BringWindowToTop(This->hWndList);
     322
    299323   return TRUE;
    300324}
     
    302326* ShellView_InitList()
    303327*
    304 * NOTES
    305 *  FIXME: the headers should depend on the kind of shellfolder
    306 *  thats creating the shellview. this hack implements only the
    307 *  correct headers for a filesystem folder (jsch 25/10/99)
     328* - adds all needed columns to the shellview
    308329*/
    309330static BOOL ShellView_InitList(IShellViewImpl * This)
     
    409430        /* Sort by Time: Folders or Files can be sorted */
    410431
    411         if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME)
     432        if(pSortInfo->nHeaderID == FILEDIALOG_COLUMN_TIME)
    412433        {
    413434            _ILGetFileDateTime(pItemIdList1, &fd1);
     
    416437        }
    417438        /* Sort by Attribute: Folder or Files can be sorted */
    418         else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_ATTRIB)
     439        else if(pSortInfo->nHeaderID == FILEDIALOG_COLUMN_ATTRIB)
    419440        {
    420             _ILGetAttributeStr(pItemIdList1, strName1, MAX_PATH);
    421             _ILGetAttributeStr(pItemIdList2, strName2, MAX_PATH);
     441            _ILGetFileAttributes(pItemIdList1, strName1, MAX_PATH);
     442            _ILGetFileAttributes(pItemIdList2, strName2, MAX_PATH);
    422443            nDiff = strcmp(strName1, strName2);
    423444        }
    424445        /* Sort by FileName: Folder or Files can be sorted */
    425         else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_NAME || bIsBothFolder)
     446        else if(pSortInfo->nHeaderID == FILEDIALOG_COLUMN_NAME || bIsBothFolder)
    426447        {
    427448            /* Sort by Text */
     
    431452        }
    432453        /* Sort by File Size, Only valid for Files */
    433         else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_SIZE)
     454        else if(pSortInfo->nHeaderID == FILEDIALOG_COLUMN_SIZE)
    434455        {
    435456            nDiff = (INT)(_ILGetFileSize(pItemIdList1, NULL, 0) - _ILGetFileSize(pItemIdList2, NULL, 0));
    436457        }
    437458        /* Sort by File Type, Only valid for Files */
    438         else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TYPE)
     459        else if(pSortInfo->nHeaderID == FILEDIALOG_COLUMN_TYPE)
    439460        {
    440461            /* Sort by Type */
     
    465486* ShellView_FillList()
    466487*
    467 * NOTES
    468 *  internal
     488* - gets the objectlist from the shellfolder
     489* - sorts the list
     490* - fills the list into the view
    469491*/
    470492
     
    540562   /*turn the listview's redrawing back on and force it to draw*/
    541563   SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
    542    InvalidateRect(This->hWndList, NULL, TRUE);
    543    UpdateWindow(This->hWndList);
    544564
    545565   IEnumIDList_Release(pEnumIDList); /* destroy the list*/
     
    777797          ZeroMemory(&cmi, sizeof(cmi));
    778798          cmi.cbSize = sizeof(cmi);
    779           cmi.hwnd = This->hWndParent;
     799          cmi.hwnd = This->hWnd;
    780800          cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
    781801          IContextMenu_InvokeCommand(pContextMenu, &cmi);
     
    10171037       break;
    10181038
     1039     case ID_NEWFOLDER:
     1040       PostMessageA (GetParent (This->hWnd), WM_COMMAND, ID_NEWFOLDER, 0L);
     1041       break;
     1042
     1043
    10191044     default:
    10201045       TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);
    10211046   }
    10221047   return 0;
     1048}
     1049
     1050/*************************************************************************
     1051 * ShellView_OnEndLabelEdit [Internal]
     1052 *
     1053 * Message handling for LVN_ENDLABELEDIT.  This function will rename a
     1054 * file and rename the pidl to match it's new name.
     1055 *
     1056 * PARAMS
     1057 *     This        [I] ShellView structure
     1058 *     lpdi        [I] Listview Display info struct
     1059 *
     1060 * RETURNS
     1061 *     TRUE if the listview should keep the edit text otherwise FALSE
     1062 *
     1063 * NOTES
     1064 *     This funciton will pop a message box if an error occures
     1065 */
     1066static LRESULT ShellView_OnEndLabelEdit(IShellViewImpl *This, NMLVDISPINFOA *lpdi)
     1067{
     1068    char strOldPath[MAX_PATH];
     1069    char strNewPath[MAX_PATH];
     1070    char strMsgTitle[256];
     1071    char strMsgText[256];
     1072
     1073    LPSTR strDestName;
     1074    BOOL bRet = FALSE;
     1075    LPITEMIDLIST pidl = (LPITEMIDLIST)lpdi->item.lParam;
     1076    DWORD type;
     1077    STRRET   str;
     1078
     1079    if(lpdi->item.pszText != NULL && lpdi->item.cchTextMax > 0)
     1080    {
     1081        strDestName = lpdi->item.pszText;
     1082
     1083        /* Check for valid Destnation Name */
     1084        if(strpbrk(strDestName,"/\\:*?\"<>|") != NULL)
     1085        {
     1086            LoadStringA(shell32_hInstance, IDS_SHV_INVALID_FILENAME_TITLE, strMsgTitle, sizeof(strMsgTitle));
     1087            LoadStringA(shell32_hInstance, IDS_SHV_INVALID_FILENAME, strMsgText, sizeof(strMsgText));
     1088            MessageBoxA(This->hWnd,strMsgText, strMsgTitle, MB_OK | MB_ICONHAND);
     1089            return FALSE;
     1090        }
     1091
     1092        if(SUCCEEDED(IShellFolder_GetDisplayNameOf(This->pSFParent,pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &str)))
     1093        {
     1094            char *pLastSlash;
     1095            StrRetToStrNA(strOldPath, MAX_PATH, &str, pidl);
     1096
     1097
     1098            /* Set the complete path of the new filename */
     1099            strcpy(strNewPath, strOldPath);
     1100            pLastSlash = strrchr(strNewPath, '\\');
     1101            if(pLastSlash != NULL)
     1102            {
     1103              pLastSlash[1] = 0;
     1104            }
     1105            strcat(strNewPath, strDestName);
     1106
     1107            /* Are the string the same */
     1108            if(strcmp(strNewPath, strOldPath) != 0)
     1109            {
     1110                if(MoveFileA(strOldPath, strNewPath) != 0)
     1111                {
     1112                    /* Update the pidl with the new filename */
     1113                    type   = _ILGetDataPointer(pidl)->type;
     1114                    LPSTR pStr = _ILGetTextPointer(type,_ILGetDataPointer(pidl));
     1115                    strcpy(pStr, strDestName);
     1116
     1117                    /* Remove the current selection from the listview */
     1118                    ListView_SetItemState(This->hWndList,lpdi->item.iItem,0,LVIS_SELECTED);
     1119                    bRet = TRUE;
     1120                }
     1121                else
     1122                {
     1123                    /* Cannot move file, so display a message */
     1124                    char pBuffer[256+MAX_PATH];
     1125                    LoadStringA(shell32_hInstance, IDS_SHV_INVALID_MOVE_TITLE, strMsgTitle, sizeof(strMsgTitle));
     1126                    LoadStringA(shell32_hInstance, IDS_SHV_INVALID_MOVE, strMsgText, sizeof(strMsgText));
     1127                    sprintf(pBuffer, strMsgText, strDestName);
     1128                    MessageBoxA(This->hWnd,pBuffer,strMsgTitle, MB_OK | MB_ICONHAND);
     1129                }
     1130            }
     1131        }
     1132
     1133    }
     1134    return bRet;
    10231135}
    10241136
     
    11061218
    11071219     case LVN_ITEMCHANGED:
    1108        TRACE("-- LVN_ITEMCHANGED %p\n",This);
    1109        OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1220       if (ListView_GetNextItem(This->hWndList, -1, LVNI_FOCUSED) == lpnmlv->iItem)
     1221       {
     1222         TRACE("-- LVN_ITEMCHANGED %p\n",This);
     1223         OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1224       }
    11101225       break;
    11111226
     
    11431258
    11441259     case LVN_BEGINLABELEDITA:
     1260       return FALSE;
     1261
    11451262     case LVN_ENDLABELEDITA:
    1146         FIXME("labeledit\n");
    1147         break;
     1263       {
     1264         return ShellView_OnEndLabelEdit(This,lpdi);
     1265       }
    11481266
    11491267     default:
     
    13291447static HRESULT WINAPI IShellView_fnTranslateAccelerator(IShellView * iface,LPMSG lpmsg)
    13301448{
     1449#if 0
    13311450   ICOM_THIS(IShellViewImpl, iface);
    13321451
    1333 #if 0
    13341452   FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
    13351453#endif
     
    15311649}
    15321650
     1651/*************************************************************************
     1652 * IShellView_fnSelectItem
     1653 *
     1654 * Changes the selection state of one or more items within the shell
     1655 * view window.
     1656 *
     1657 * PARAMS
     1658 *     iFace       [I] The IShellView structure
     1659 *     pidlItem    [I] Address of the ITEMIDLIST structure
     1660 *     uFlags      [I] Flag specifying what type of selection to apply.
     1661 *
     1662 * RETURNS
     1663 *  Returns NOERROR if successful otherwise S_FALSE
     1664 *
     1665 * NOTES
     1666 *   CB: can't use ListView_SetItemState return value: MS's macro doesn't return a value
     1667 */
    15331668static HRESULT WINAPI IShellView_fnSelectItem(IShellView * iface, LPCITEMIDLIST pidlItem, UINT uFlags)
    1534 {  ICOM_THIS(IShellViewImpl, iface);
    1535 
    1536    FIXME("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidlItem, uFlags);
    1537 
    1538    return E_NOTIMPL;
     1669{       ICOM_THIS(IShellViewImpl, iface);
     1670
     1671    LVITEMA lvItem;
     1672    int iItem=-1;
     1673    BOOL bIsFound = FALSE;
     1674    HRESULT hResult = NOERROR;
     1675
     1676    /* Find the Listview item index */
     1677    ZeroMemory(&lvItem, sizeof(lvItem));
     1678    lvItem.mask = LVIF_PARAM;
     1679    lvItem.iItem = 0;
     1680    while(ListView_GetItemA(This->hWndList, &lvItem) && !bIsFound)
     1681    {
     1682        if(ILIsEqual((LPCITEMIDLIST)lvItem.lParam, pidlItem))
     1683        {
     1684            iItem = lvItem.iItem;
     1685            bIsFound = TRUE;
     1686        }
     1687        lvItem.iItem++;
     1688    }
     1689
     1690    if(!bIsFound)
     1691    {
     1692        return S_FALSE;
     1693    }
     1694
     1695    /* Perform flag operations */
     1696    if(SVSI_DESELECT & uFlags)
     1697    {
     1698        ListView_SetItemState(This->hWndList,iItem,0,LVIS_SELECTED);
     1699    }
     1700
     1701    if(SVSI_DESELECTOTHERS & uFlags)
     1702    {
     1703        int iOtherItems=-1;
     1704        iOtherItems = ListView_GetNextItem(This->hWndList, iOtherItems, LVNI_ALL);
     1705        while(iOtherItems != -1)
     1706        {
     1707            if(iOtherItems != iItem)
     1708            {
     1709                ListView_SetItemState(This->hWndList,iOtherItems,0,LVIS_SELECTED);
     1710            }
     1711            iOtherItems = ListView_GetNextItem(This->hWndList, iOtherItems, LVNI_ALL);
     1712        }
     1713    }
     1714
     1715    if(SVSI_ENSUREVISIBLE & uFlags)
     1716    {
     1717        if(ListView_EnsureVisible(This->hWndList, iItem, FALSE) != TRUE)
     1718        {
     1719            hResult = S_FALSE;
     1720        }
     1721    }
     1722
     1723    if(SVSI_FOCUSED  & uFlags)
     1724    {
     1725        ListView_SetItemState(This->hWndList,iItem,LVIS_FOCUSED,LVIS_FOCUSED);
     1726    }
     1727
     1728    if(SVSI_SELECT & uFlags)
     1729    {
     1730        ListView_SetItemState(This->hWndList,iItem,LVIS_FOCUSED,LVIS_FOCUSED);
     1731    }
     1732
     1733    if(SVSI_EDIT & uFlags)
     1734    {
     1735        if(ListView_EditLabelA(This->hWndList, iItem) != 0)
     1736        {
     1737            hResult = S_FALSE;
     1738        }
     1739    }
     1740    return NOERROR;
    15391741}
    15401742
  • trunk/src/shell32/shpolicy.cpp

    r1551 r3243  
    1 /* $Id: shpolicy.cpp,v 1.1 1999-11-02 19:17:16 phaller Exp $ */
     1/* $Id: shpolicy.cpp,v 1.2 2000-03-26 16:34:55 cbratschi Exp $ */
    22
    33/*
     
    1919 *
    2020 * Up to date as of SHELL32 v4.72 (Win98, Win95 with MSIE 5)
     21 *
     22 * Corel WINE 20000324 level
    2123 */
    2224
  • trunk/src/shell32/shpolicy.h

    r1551 r3243  
    1 /* 
     1/*
    22 *  shpolicy.h - contains defs of policy data for SHRestricted
    3  * 
     3 *
    44 *  Created 1999 by Ian Schmidt, <ischmidt@cfl.rr.com>
    55 *  Up to date as of SHELL32 v4.72 (Win98, Win95 with MSIE 5)
     6 *
     7 * Corel WINE 20000324 level
    68 */
    79
  • trunk/src/shell32/shres.orc

    r3217 r3243  
    1 /* $Id: shres.orc,v 1.2 2000-03-24 17:17:29 cbratschi Exp $ */
     1/* $Id: shres.orc,v 1.3 2000-03-26 16:34:55 cbratschi Exp $ */
    22/*
    33 * Top level resource file for Common Dialogs
     
    4646          END
    4747          MENUITEM SEPARATOR
     48          /* PATCH, the grayed items are unimplemented features */
    4849          POPUP "Arrange &Icons"
    4950          BEGIN
     
    5354            MENUITEM "By &Date",        0x33
    5455            MENUITEM SEPARATOR
    55             MENUITEM "&Auto Arrange",   FCIDM_SHVIEW_AUTOARRANGE
     56            MENUITEM "&Auto Arrange",   FCIDM_SHVIEW_AUTOARRANGE, GRAYED
    5657          END
    57           MENUITEM "Line up Icons",     FCIDM_SHVIEW_SNAPTOGRID
     58          MENUITEM "Line up Icons",     FCIDM_SHVIEW_SNAPTOGRID, GRAYED
    5859          MENUITEM SEPARATOR
    59           MENUITEM "Paste",             FCIDM_SHVIEW_INSERT
    60           MENUITEM "Paste as Link",     FCIDM_SHVIEW_INSERTLINK
     60          MENUITEM "Paste",             FCIDM_SHVIEW_INSERT, GRAYED
     61          MENUITEM "Paste as Link",     FCIDM_SHVIEW_INSERTLINK, GRAYED
    6162          POPUP "New"
    6263          BEGIN
    63             MENUITEM "New &Folder",     0x7053
    64             MENUITEM "New &Link",       0x7052
     64            MENUITEM "New &Folder",     ID_NEWFOLDER
     65            MENUITEM "New &Link",       0x7052, GRAYED
    6566            MENUITEM SEPARATOR
    6667          END
    67           MENUITEM "Properties",        FCIDM_SHVIEW_PROPERTIES
     68          MENUITEM "Properties",        FCIDM_SHVIEW_PROPERTIES, GRAYED
    6869        END
    6970END
     
    8485END
    8586SHBRSFORFOLDER_MSGBOX DIALOG 15, 40, 128, 152
    86 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
     87STYLE WS_THICKFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    8788CAPTION "Choose a Directory:"
    8889FONT 8, "Helv"
     
    9495        WS_BORDER | WS_TABSTOP,
    9596        4, 4, 120, 120
    96 }
    97 
    98 /*
    99         columns in the shellview
    100 */
    101 STRINGTABLE DISCARDABLE
    102 {
    103         IDS_SHV_COLUMN1         "File"
    104         IDS_SHV_COLUMN2         "Size"
    105         IDS_SHV_COLUMN3         "Type"
    106         IDS_SHV_COLUMN4         "Modified"
    107         IDS_SHV_COLUMN5         "Attrs"
    108         IDS_SHV_COLUMN3DV       "Size"           /* drive view */
    109         IDS_SHV_COLUMN4DV       "Size available" /* drive view */
    11097}
    11198
     
    1711580       ICON
    172159{'
    173 00 00 01 00 04 00 10 10 10 00 00 00 00 00 28 01
    174 00 00 46 00 00 00 10 10 00 00 00 00 00 00 68 05
    175 00 00 6e 01 00 00 20 20 10 00 00 00 00 00 e8 02
    176 00 00 d6 06 00 00 20 20 00 00 00 00 00 00 a8 08
    177 00 00 be 09 00 00 28 00 00 00 10 00 00 00 20 00
    178 00 00 01 00 04 00 00 00 00 00 c0 00 00 00 00 00
    179 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
     16000 00 01 00 02 00 20 20 00 00 00 00 00 00 a8 08
     16100 00 26 00 00 00 10 10 00 00 00 00 00 00 68 05
     16200 00 ce 08 00 00 28 00 00 00 20 00 00 00 40 00
     16300 00 01 00 08 00 00 00 00 00 80 04 00 00 00 00
     16400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    18016500 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    181 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
     16600 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 c0 dc
     167c0 00 f0 ca a6 00 04 04 04 00 08 08 08 00 0c 0c
     1680c 00 11 11 11 00 16 16 16 00 1c 1c 1c 00 22 22
     16922 00 29 29 29 00 55 55 55 00 4d 4d 4d 00 42 42
     17042 00 39 39 39 00 80 7c ff 00 50 50 ff 00 93 00
     171d6 00 ff ec cc 00 c6 d6 ef 00 d6 e7 e7 00 90 a9
     172ad 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00
     173cc 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33
     17499 00 00 33 cc 00 00 33 ff 00 00 66 00 00 00 66
     17533 00 00 66 66 00 00 66 99 00 00 66 cc 00 00 66
     176ff 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99
     17799 00 00 99 cc 00 00 99 ff 00 00 cc 00 00 00 cc
     17833 00 00 cc 66 00 00 cc 99 00 00 cc cc 00 00 cc
     179ff 00 00 ff 66 00 00 ff 99 00 00 ff cc 00 33 00
     18000 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00
     181cc 00 33 00 ff 00 33 33 00 00 33 33 33 00 33 33
     18266 00 33 33 99 00 33 33 cc 00 33 33 ff 00 33 66
     18300 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66
     184cc 00 33 66 ff 00 33 99 00 00 33 99 33 00 33 99
     18566 00 33 99 99 00 33 99 cc 00 33 99 ff 00 33 cc
     18600 00 33 cc 33 00 33 cc 66 00 33 cc 99 00 33 cc
     187cc 00 33 cc ff 00 33 ff 33 00 33 ff 66 00 33 ff
     18899 00 33 ff cc 00 33 ff ff 00 66 00 00 00 66 00
     18933 00 66 00 66 00 66 00 99 00 66 00 cc 00 66 00
     190ff 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33
     19199 00 66 33 cc 00 66 33 ff 00 66 66 00 00 66 66
     19233 00 66 66 66 00 66 66 99 00 66 66 cc 00 66 99
     19300 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
     194cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
     19599 00 66 cc cc 00 66 cc ff 00 66 ff 00 00 66 ff
     19633 00 66 ff 99 00 66 ff cc 00 cc 00 ff 00 ff 00
     197cc 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00
     198cc 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33
     199cc 00 99 00 ff 00 99 66 00 00 99 66 33 00 99 33
     20066 00 99 66 99 00 99 66 cc 00 99 33 ff 00 99 99
     20133 00 99 99 66 00 99 99 99 00 99 99 cc 00 99 99
     202ff 00 99 cc 00 00 99 cc 33 00 66 cc 66 00 99 cc
     20399 00 99 cc cc 00 99 cc ff 00 99 ff 00 00 99 ff
     20433 00 99 cc 66 00 99 ff 99 00 99 ff cc 00 99 ff
     205ff 00 cc 00 00 00 99 00 33 00 cc 00 66 00 cc 00
     20699 00 cc 00 cc 00 99 33 00 00 cc 33 33 00 cc 33
     20766 00 cc 33 99 00 cc 33 cc 00 cc 33 ff 00 cc 66
     20800 00 cc 66 33 00 99 66 66 00 cc 66 99 00 cc 66
     209cc 00 99 66 ff 00 cc 99 00 00 cc 99 33 00 cc 99
     21066 00 cc 99 99 00 cc 99 cc 00 cc 99 ff 00 cc cc
     21100 00 cc cc 33 00 cc cc 66 00 cc cc 99 00 cc cc
     212cc 00 cc cc ff 00 cc ff 00 00 cc ff 33 00 99 ff
     21366 00 cc ff 99 00 cc ff cc 00 cc ff ff 00 cc 00
     21433 00 ff 00 66 00 ff 00 99 00 cc 33 00 00 ff 33
     21533 00 ff 33 66 00 ff 33 99 00 ff 33 cc 00 ff 33
     216ff 00 ff 66 00 00 ff 66 33 00 cc 66 66 00 ff 66
     21799 00 ff 66 cc 00 cc 66 ff 00 ff 99 00 00 ff 99
     21833 00 ff 99 66 00 ff 99 99 00 ff 99 cc 00 ff 99
     219ff 00 ff cc 00 00 ff cc 33 00 ff cc 66 00 ff cc
     22099 00 ff cc cc 00 ff cc ff 00 ff ff 33 00 cc ff
     22166 00 ff ff 99 00 ff ff cc 00 66 66 ff 00 66 ff
     22266 00 66 ff ff 00 ff 66 66 00 ff 66 ff 00 ff ff
     22366 00 21 00 a5 00 5f 5f 5f 00 77 77 77 00 86 86
     22486 00 96 96 96 00 cb cb cb 00 b2 b2 b2 00 d7 d7
     225d7 00 dd dd dd 00 e3 e3 e3 00 ea ea ea 00 f1 f1
     226f1 00 f8 f8 f8 00 f0 fb ff 00 a4 a0 a0 00 80 80
    18222780 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    183 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 77 77
    184 77 77 77 77 77 77 77 77 77 88 88 88 88 77 77 77
    185 78 88 88 88 88 87 78 88 87 88 77 77 f8 88 78 88
    186 88 88 88 77 f8 88 7f 88 88 8f f8 88 f8 88 7f 87
    187 77 77 f8 77 f8 88 7f 88 88 88 f8 88 f8 88 7f 77
    188 77 7f f8 87 f8 88 7f 88 88 88 f8 88 f8 88 7f 77
    189 77 77 f8 77 f8 88 7f 88 88 87 f8 88 f8 88 7f 78
    190 77 77 f8 ff f8 88 7f 88 88 88 f8 ff ff 87 7f ff
    191 ff ff f8 77 77 77 77 77 77 77 77 77 77 77 00 00
    192 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    193 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    194 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    195 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 28 00
     22800 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
     22900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23500 00 00 00 00 00 00 00 00 00 00 00 92 6d 00 00
     23600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23700 00 00 00 00 00 00 00 00 00 6d 92 dd dd 00 00
     23800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     23900 00 00 00 00 00 00 00 6d 92 dd dd dd dd 00 00
     24000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     24100 00 00 00 00 00 92 6d dd dd dd dd dd dd 00 00
     24200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     24300 00 00 00 92 6d dd dd dd dd dd dd dd dd 00 00
     24400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     24500 00 6d 92 dd dd dd dd dd dd dd dd dd dd 00 00
     24600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     24700 00 dd dd dd dd 5f 5f dd dd dd dd dd dd 00 00
     24800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     24900 00 dd dd 5f 5f dd dd dd dd 5f 5f dd dd 00 00
     25000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     25100 00 dd dd dd dd dd dd 5f 5f dd dd dd dd 00 00
     25200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     25300 00 ff dd dd dd 5f 5f dd dd dd dd dd dd 00 00
     25400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     25500 00 ff dd 5f 5f dd dd dd dd dd dd dd dd 00 00
     25600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     25700 00 ff dd dd dd dd dd 5f 5f dd dd dd dd 00 00
     25800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     25900 00 ff ff ff dd 5f 5f dd dd dd dd dd dd 00 00
     26000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     26100 00 ff ff 5f 5f dd dd dd dd 5f 5f dd dd 00 00
     26200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     26300 00 ff ff ff ff ff dd 5f 5f dd dd dd dd 00 00
     26400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     26500 00 ff ff ff ff 5f 5f dd dd dd dd dd dd 00 00
     26600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     26700 00 ff ff 5f 5f ff ff ff dd 5f 5f dd dd 00 00
     26800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     26900 00 ff ff ff ff ff ff 5f 5f dd dd dd dd 00 00
     27000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     27100 00 ff ff ff ff 5f 5f ff ff ff ff dd dd 00 00
     27200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     27300 00 ff 00 00 00 ff ff ff ff 5f 5f ff dd 00 00
     27400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     27500 00 00 ff ff 00 ff ff 5f 5f ff ff ff ff 00 00
     27600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     27700 00 ff ff 00 d6 5f 5f ff ff ff ff ff ff 00 00
     27800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     27900 00 00 ff 00 d6 ff ff ff ff ff ff 00 00 00 00
     28000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28100 00 00 00 00 d6 ff ff ff ff 00 00 00 00 00 00
     28200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28300 00 00 00 00 d6 d6 ff 00 00 00 00 00 00 00 00
     28400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     28900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     29000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     29100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     29200 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
     293ff ff ff ff ff ff ff fc 7f ff ff f0 1f ff ff c0
     29407 ff ff 00 01 ff fc 00 00 7f f0 00 00 1f e0 00
     29500 07 e0 00 00 03 e0 00 00 07 e0 00 00 1f e0 00
     29600 7f e0 00 01 ff e0 00 07 ff e0 00 5f ff e0 00
     2977f ff e0 00 7f ff e0 00 7f ff e0 00 7f ff e0 00
     2987f ff e0 00 7f ff e0 00 7f ff e0 00 7f ff e0 00
     2997f ff f0 00 ff ff f8 03 ff ff fc 0f ff ff fe 3f
     300ff ff ff ff ff ff ff ff ff ff ff ff ff ff 28 00
    19630100 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00
    197 00 00 40 01 00 00 00 00 00 00 00 00 00 00 00 01
    198 00 00 00 00 00 00 00 00 00 00 00 00 33 00 00 00
    199 66 00 00 00 99 00 00 00 cc 00 00 00 ff 00 00 33
    200 00 00 00 33 33 00 00 33 66 00 00 33 99 00 00 33
    201 cc 00 00 33 ff 00 00 66 00 00 00 66 33 00 00 66
    202 66 00 00 66 99 00 00 66 cc 00 00 66 ff 00 00 99
    203 00 00 00 99 33 00 00 99 66 00 00 99 99 00 00 99
    204 cc 00 00 99 ff 00 00 cc 00 00 00 cc 33 00 00 cc
    205 66 00 00 cc 99 00 00 cc cc 00 00 cc ff 00 00 ff
    206 00 00 00 ff 33 00 00 ff 66 00 00 ff 99 00 00 ff
    207 cc 00 00 ff ff 00 33 00 00 00 33 00 33 00 33 00
     30200 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00
     30300 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
     30400 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
     30500 00 c0 c0 c0 00 c0 dc c0 00 f0 ca a6 00 04 04
     30604 00 08 08 08 00 0c 0c 0c 00 11 11 11 00 16 16
     30716 00 1c 1c 1c 00 22 22 22 00 29 29 29 00 55 55
     30855 00 4d 4d 4d 00 42 42 42 00 39 39 39 00 80 7c
     309ff 00 50 50 ff 00 93 00 d6 00 ff ec cc 00 c6 d6
     310ef 00 d6 e7 e7 00 90 a9 ad 00 00 00 33 00 00 00
     31166 00 00 00 99 00 00 00 cc 00 00 33 00 00 00 33
     31233 00 00 33 66 00 00 33 99 00 00 33 cc 00 00 33
     313ff 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66
     31499 00 00 66 cc 00 00 66 ff 00 00 99 00 00 00 99
     31533 00 00 99 66 00 00 99 99 00 00 99 cc 00 00 99
     316ff 00 00 cc 00 00 00 cc 33 00 00 cc 66 00 00 cc
     31799 00 00 cc cc 00 00 cc ff 00 00 ff 66 00 00 ff
     31899 00 00 ff cc 00 33 00 00 00 33 00 33 00 33 00
    20831966 00 33 00 99 00 33 00 cc 00 33 00 ff 00 33 33
    20932000 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33
     
    213324cc 00 33 99 ff 00 33 cc 00 00 33 cc 33 00 33 cc
    21432566 00 33 cc 99 00 33 cc cc 00 33 cc ff 00 33 ff
    215 00 00 33 ff 33 00 33 ff 66 00 33 ff 99 00 33 ff
    216 cc 00 33 ff ff 00 66 00 00 00 66 00 33 00 66 00
    217 66 00 66 00 99 00 66 00 cc 00 66 00 ff 00 66 33
    218 00 00 66 33 33 00 66 33 66 00 66 33 99 00 66 33
    219 cc 00 66 33 ff 00 66 66 00 00 66 66 33 00 66 66
    220 66 00 66 66 99 00 66 66 cc 00 66 66 ff 00 66 99
    221 00 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
    222 cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
    223 66 00 66 cc 99 00 66 cc cc 00 66 cc ff 00 66 ff
    224 00 00 66 ff 33 00 66 ff 66 00 66 ff 99 00 66 ff
    225 cc 00 66 ff ff 00 99 00 00 00 99 00 33 00 99 00
    226 66 00 99 00 99 00 99 00 cc 00 99 00 ff 00 99 33
    227 00 00 99 33 33 00 99 33 66 00 99 33 99 00 99 33
    228 cc 00 99 33 ff 00 99 66 00 00 99 66 33 00 99 66
    229 66 00 99 66 99 00 99 66 cc 00 99 66 ff 00 99 99
    230 00 00 99 99 33 00 99 99 66 00 99 99 99 00 99 99
    231 cc 00 99 99 ff 00 99 cc 00 00 99 cc 33 00 99 cc
    232 66 00 99 cc 99 00 99 cc cc 00 99 cc ff 00 99 ff
    233 00 00 99 ff 33 00 99 ff 66 00 99 ff 99 00 99 ff
    234 cc 00 99 ff ff 00 cc 00 00 00 cc 00 33 00 cc 00
    235 66 00 cc 00 99 00 cc 00 cc 00 cc 00 ff 00 cc 33
     32633 00 33 ff 66 00 33 ff 99 00 33 ff cc 00 33 ff
     327ff 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00
     32899 00 66 00 cc 00 66 00 ff 00 66 33 00 00 66 33
     32933 00 66 33 66 00 66 33 99 00 66 33 cc 00 66 33
     330ff 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66
     33199 00 66 66 cc 00 66 99 00 00 66 99 33 00 66 99
     33266 00 66 99 99 00 66 99 cc 00 66 99 ff 00 66 cc
     33300 00 66 cc 33 00 66 cc 99 00 66 cc cc 00 66 cc
     334ff 00 66 ff 00 00 66 ff 33 00 66 ff 99 00 66 ff
     335cc 00 cc 00 ff 00 ff 00 cc 00 99 99 00 00 99 33
     33699 00 99 00 99 00 99 00 cc 00 99 00 00 00 99 33
     33733 00 99 00 66 00 99 33 cc 00 99 00 ff 00 99 66
     33800 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66
     339cc 00 99 33 ff 00 99 99 33 00 99 99 66 00 99 99
     34099 00 99 99 cc 00 99 99 ff 00 99 cc 00 00 99 cc
     34133 00 66 cc 66 00 99 cc 99 00 99 cc cc 00 99 cc
     342ff 00 99 ff 00 00 99 ff 33 00 99 cc 66 00 99 ff
     34399 00 99 ff cc 00 99 ff ff 00 cc 00 00 00 99 00
     34433 00 cc 00 66 00 cc 00 99 00 cc 00 cc 00 99 33
    23634500 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
    237 cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 cc 66
    238 66 00 cc 66 99 00 cc 66 cc 00 cc 66 ff 00 cc 99
     346cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 99 66
     34766 00 cc 66 99 00 cc 66 cc 00 99 66 ff 00 cc 99
    23934800 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
    240349cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
    24135066 00 cc cc 99 00 cc cc cc 00 cc cc ff 00 cc ff
    242 00 00 cc ff 33 00 cc ff 66 00 cc ff 99 00 cc ff
    243 cc 00 cc ff ff 00 ff 00 00 00 ff 00 33 00 ff 00
    244 66 00 ff 00 99 00 ff 00 cc 00 ff 00 ff 00 ff 33
    245 00 00 ff 33 33 00 ff 33 66 00 ff 33 99 00 ff 33
    246 cc 00 ff 33 ff 00 ff 66 00 00 ff 66 33 00 ff 66
    247 66 00 ff 66 99 00 ff 66 cc 00 ff 66 ff 00 ff 99
    248 00 00 ff 99 33 00 ff 99 66 00 ff 99 99 00 ff 99
    249 cc 00 ff 99 ff 00 ff cc 00 00 ff cc 33 00 ff cc
    250 66 00 ff cc 99 00 ff cc cc 00 ff cc ff 00 ff ff
    251 00 00 ff ff 33 00 ff ff 66 00 ff ff 99 00 ff ff
    252 cc 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
    253 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    254 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    255 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    256 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    257 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    258 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    259 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    262 00 00 00 00 00 00 ac ac ac ac ac ac ac ac ac ac
    263 ac ac ac ac ac ac ac ac ac ac ac a5 81 81 81 81
    264 81 81 81 81 ac ac ac ac ac ac ac 81 81 81 81 81
    265 81 81 81 56 81 ab ac 56 56 56 81 ac 81 81 ac ac
    266 ac ac d7 56 56 81 ab 81 81 81 81 81 81 81 81 56
    267 ac ac d7 81 81 81 ac d7 81 81 81 81 81 d7 d7 56
    268 56 81 d7 81 81 81 ac d7 81 ac ac 88 ac ac d7 56
    269 ac ac d7 81 81 81 ac d7 56 56 56 56 56 56 d7 56
    270 56 56 d7 81 81 81 ac d7 ac ac ac ac ac d7 d7 56
    271 81 ac d7 81 81 81 ac d7 56 56 56 56 81 56 d7 56
    272 56 56 d7 81 81 81 ac d7 ac ac ac ac ac ac d7 56
    273 ac ac d7 7a 81 81 ac d7 56 56 81 56 81 a6 d7 56
    274 7b 81 d7 7a 81 81 ac d7 ac 81 ac ac ac ac d7 56
    275 d7 d7 d7 81 81 81 ac d7 56 56 81 56 7b 81 d7 56
    276 d7 ad ad d7 81 a5 ac d7 d7 d7 d7 d7 d7 d7 d7 81
    277 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    278 ac ac ac ac ac ac 00 00 ff ff 00 00 ff ff 00 00
    279 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    280 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    281 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    282 ff ff 00 00 ff ff 28 00 00 00 20 00 00 00 40 00
    283 00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00
    284 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
     35100 00 cc ff 33 00 99 ff 66 00 cc ff 99 00 cc ff
     352cc 00 cc ff ff 00 cc 00 33 00 ff 00 66 00 ff 00
     35399 00 cc 33 00 00 ff 33 33 00 ff 33 66 00 ff 33
     35499 00 ff 33 cc 00 ff 33 ff 00 ff 66 00 00 ff 66
     35533 00 cc 66 66 00 ff 66 99 00 ff 66 cc 00 cc 66
     356ff 00 ff 99 00 00 ff 99 33 00 ff 99 66 00 ff 99
     35799 00 ff 99 cc 00 ff 99 ff 00 ff cc 00 00 ff cc
     35833 00 ff cc 66 00 ff cc 99 00 ff cc cc 00 ff cc
     359ff 00 ff ff 33 00 cc ff 66 00 ff ff 99 00 ff ff
     360cc 00 66 66 ff 00 66 ff 66 00 66 ff ff 00 ff 66
     36166 00 ff 66 ff 00 ff ff 66 00 21 00 a5 00 5f 5f
     3625f 00 77 77 77 00 86 86 86 00 96 96 96 00 cb cb
     363cb 00 b2 b2 b2 00 d7 d7 d7 00 dd dd dd 00 e3 e3
     364e3 00 ea ea ea 00 f1 f1 f1 00 f8 f8 f8 00 f0 fb
     365ff 00 a4 a0 a0 00 80 80 80 00 00 00 ff 00 00 ff
     36600 00 00 ff ff 00 ff 00 00 00 ff 00 ff 00 ff ff
     36700 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
     36800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     36900 00 00 00 00 00 00 00 00 dd dd dd dd dd dd dd
     370dd 00 00 00 00 00 00 00 00 ff dd dd dd dd dd dd
     371dd 00 00 00 00 00 00 00 00 ff 92 92 92 92 92 92
     372dd 00 00 00 00 00 00 00 00 ff ff ff ff dd dd dd
     373dd 00 00 00 00 00 00 00 00 ff 92 92 92 92 92 92
     374dd 00 00 00 00 00 00 00 00 ff ff ff ff ff ff dd
     375dd 00 00 00 00 00 00 00 00 ff 92 92 92 ff 92 92
     376dd 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff
     377dd 00 00 00 00 00 00 00 00 dd dd dd dd 92 92 92
     378dd 00 00 00 00 00 00 00 00 00 00 00 dd ff ff ff
     379dd 00 00 00 00 00 00 00 00 00 ff 00 dd 92 92 92
     380dd 00 00 00 00 00 00 00 00 00 00 00 dd ff ff ff
     381dd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     38200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     38300 00 00 00 00 00 ff ff 00 00 c0 0f 00 00 c0 07
     38400 00 c0 03 00 00 c0 01 00 00 c0 07 00 00 c0 0f
     38500 00 c0 0f 00 00 c0 0f 00 00 c0 0f 00 00 c0 0f
     38600 00 c0 0f 00 00 e0 0f 00 00 f0 0f 00 00 f8 0f
     38700 00 ff ff 00 00
     388'}
     389
     390/* folder */
     3913       ICON
     392{'
     39300 00 01 00 02 00 20 20 00 00 00 00 00 00 a8 08
     39400 00 26 00 00 00 10 10 00 00 00 00 00 00 68 05
     39500 00 ce 08 00 00 28 00 00 00 20 00 00 00 40 00
     39600 00 01 00 08 00 00 00 00 00 80 04 00 00 00 00
     39700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    28539800 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    286 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
     39900 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 c0 dc
     400c0 00 f0 ca a6 00 04 04 04 00 08 08 08 00 0c 0c
     4010c 00 11 11 11 00 16 16 16 00 1c 1c 1c 00 22 22
     40222 00 29 29 29 00 55 55 55 00 4d 4d 4d 00 42 42
     40342 00 39 39 39 00 80 7c ff 00 50 50 ff 00 93 00
     404d6 00 ff ec cc 00 c6 d6 ef 00 d6 e7 e7 00 90 a9
     405ad 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00
     406cc 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33
     40799 00 00 33 cc 00 00 33 ff 00 00 66 00 00 00 66
     40833 00 00 66 66 00 00 66 99 00 00 66 cc 00 00 66
     409ff 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99
     41099 00 00 99 cc 00 00 99 ff 00 00 cc 00 00 00 cc
     41133 00 00 cc 66 00 00 cc 99 00 00 cc cc 00 00 cc
     412ff 00 00 ff 66 00 00 ff 99 00 00 ff cc 00 33 00
     41300 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00
     414cc 00 33 00 ff 00 33 33 00 00 33 33 33 00 33 33
     41566 00 33 33 99 00 33 33 cc 00 33 33 ff 00 33 66
     41600 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66
     417cc 00 33 66 ff 00 33 99 00 00 33 99 33 00 33 99
     41866 00 33 99 99 00 33 99 cc 00 33 99 ff 00 33 cc
     41900 00 33 cc 33 00 33 cc 66 00 33 cc 99 00 33 cc
     420cc 00 33 cc ff 00 33 ff 33 00 33 ff 66 00 33 ff
     42199 00 33 ff cc 00 33 ff ff 00 66 00 00 00 66 00
     42233 00 66 00 66 00 66 00 99 00 66 00 cc 00 66 00
     423ff 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33
     42499 00 66 33 cc 00 66 33 ff 00 66 66 00 00 66 66
     42533 00 66 66 66 00 66 66 99 00 66 66 cc 00 66 99
     42600 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
     427cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
     42899 00 66 cc cc 00 66 cc ff 00 66 ff 00 00 66 ff
     42933 00 66 ff 99 00 66 ff cc 00 cc 00 ff 00 ff 00
     430cc 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00
     431cc 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33
     432cc 00 99 00 ff 00 99 66 00 00 99 66 33 00 99 33
     43366 00 99 66 99 00 99 66 cc 00 99 33 ff 00 99 99
     43433 00 99 99 66 00 99 99 99 00 99 99 cc 00 99 99
     435ff 00 99 cc 00 00 99 cc 33 00 66 cc 66 00 99 cc
     43699 00 99 cc cc 00 99 cc ff 00 99 ff 00 00 99 ff
     43733 00 99 cc 66 00 99 ff 99 00 99 ff cc 00 99 ff
     438ff 00 cc 00 00 00 99 00 33 00 cc 00 66 00 cc 00
     43999 00 cc 00 cc 00 99 33 00 00 cc 33 33 00 cc 33
     44066 00 cc 33 99 00 cc 33 cc 00 cc 33 ff 00 cc 66
     44100 00 cc 66 33 00 99 66 66 00 cc 66 99 00 cc 66
     442cc 00 99 66 ff 00 cc 99 00 00 cc 99 33 00 cc 99
     44366 00 cc 99 99 00 cc 99 cc 00 cc 99 ff 00 cc cc
     44400 00 cc cc 33 00 cc cc 66 00 cc cc 99 00 cc cc
     445cc 00 cc cc ff 00 cc ff 00 00 cc ff 33 00 99 ff
     44666 00 cc ff 99 00 cc ff cc 00 cc ff ff 00 cc 00
     44733 00 ff 00 66 00 ff 00 99 00 cc 33 00 00 ff 33
     44833 00 ff 33 66 00 ff 33 99 00 ff 33 cc 00 ff 33
     449ff 00 ff 66 00 00 ff 66 33 00 cc 66 66 00 ff 66
     45099 00 ff 66 cc 00 cc 66 ff 00 ff 99 00 00 ff 99
     45133 00 ff 99 66 00 ff 99 99 00 ff 99 cc 00 ff 99
     452ff 00 ff cc 00 00 ff cc 33 00 ff cc 66 00 ff cc
     45399 00 ff cc cc 00 ff cc ff 00 ff ff 33 00 cc ff
     45466 00 ff ff 99 00 ff ff cc 00 66 66 ff 00 66 ff
     45566 00 66 ff ff 00 ff 66 66 00 ff 66 ff 00 ff ff
     45666 00 21 00 a5 00 5f 5f 5f 00 77 77 77 00 86 86
     45786 00 96 96 96 00 cb cb cb 00 b2 b2 b2 00 d7 d7
     458d7 00 dd dd dd 00 e3 e3 e3 00 ea ea ea 00 f1 f1
     459f1 00 f8 f8 f8 00 f0 fb ff 00 a4 a0 a0 00 80 80
    28746080 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    288 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 77 77
    289 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77
    290 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77
    291 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77
    292 77 77 77 78 88 88 88 88 88 88 88 88 77 77 77 77
    293 77 77 78 88 88 88 88 88 88 88 88 00 77 77 77 77
    294 77 77 7f ff ff ff ff ff ff ff ff 80 88 87 77 88
    295 88 88 8f ff ff ff ff ff ff ff ff 80 80 87 77 00
    296 00 00 88 88 88 88 88 88 88 87 ff 88 f8 87 78 88
    297 88 88 88 88 88 88 88 00 87 7f ff 88 f8 87 77 ff
    298 ff ff ff ff ff ff ff 80 87 7f ff 88 f8 87 77 ff
    299 ff ff ff ff ff ff ff 80 88 87 ff 88 f8 87 77 ff
    300 88 88 88 88 88 ff ff 80 88 88 ff 88 f8 87 77 ff
    301 88 77 77 77 77 77 ff 80 77 7f ff 88 f8 87 77 ff
    302 88 77 77 77 77 77 ff 80 77 7f ff 88 f8 87 77 ff
    303 88 88 88 88 88 88 ff 80 88 88 ff 88 f8 87 77 ff
    304 88 88 88 88 88 88 ff 80 88 88 ff 88 f8 87 77 ff
    305 87 78 77 78 f7 7f ff 80 88 77 ff 88 f8 87 77 ff
    306 87 78 77 78 f7 7f ff 80 88 77 ff 88 f8 87 77 ff
    307 88 88 88 88 88 87 ff 80 88 88 ff 88 f8 87 77 ff
    308 88 88 88 88 88 88 ff 80 88 87 ff 88 f8 87 77 ff
    309 77 78 77 78 78 77 ff 80 77 87 ff 88 f8 87 77 ff
    310 77 78 77 78 78 77 ff 80 77 87 ff 88 f8 87 77 ff
    311 88 88 88 88 78 7f ff 80 88 88 ff 86 f8 87 77 ff
    312 88 88 88 88 88 87 ff 80 78 7f ff 86 f8 87 77 ff
    313 77 88 78 77 77 87 ff 80 ff ff ff 86 f8 87 77 ff
    314 77 88 78 77 77 87 ff 80 ff ff ff 88 f8 87 77 ff
    315 88 88 88 88 88 88 ff 84 f7 77 77 7f f8 87 77 ff
    316 88 88 88 88 78 7f ff 80 ff ff ff ff f8 77 77 ff
    317 ff ff ff ff ff ff ff 88 77 77 77 77 77 77 77 ff
    318 ff ff ff ff ff ff ff 88 77 77 77 77 77 77 77 77
    319 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77
    320 77 77 77 77 77 77 77 77 77 77 77 77 77 77 00 00
    321 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    322 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    323 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    324 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    325 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    326 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    327 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    328 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00
    329 00 00 20 00 00 00 40 00 00 00 01 00 08 00 00 00
    330 00 00 80 04 00 00 00 00 00 00 00 00 00 00 00 01
    331 00 00 00 00 00 00 00 00 00 00 00 00 33 00 00 00
    332 66 00 00 00 99 00 00 00 cc 00 00 00 ff 00 00 33
    333 00 00 00 33 33 00 00 33 66 00 00 33 99 00 00 33
    334 cc 00 00 33 ff 00 00 66 00 00 00 66 33 00 00 66
    335 66 00 00 66 99 00 00 66 cc 00 00 66 ff 00 00 99
    336 00 00 00 99 33 00 00 99 66 00 00 99 99 00 00 99
    337 cc 00 00 99 ff 00 00 cc 00 00 00 cc 33 00 00 cc
    338 66 00 00 cc 99 00 00 cc cc 00 00 cc ff 00 00 ff
    339 00 00 00 ff 33 00 00 ff 66 00 00 ff 99 00 00 ff
    340 cc 00 00 ff ff 00 33 00 00 00 33 00 33 00 33 00
     46100 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
     46200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     46300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     46400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     46500 00 6d 92 00 86 00 00 00 00 00 00 00 00 00 00
     46600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     46792 6d d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     46800 00 00 00 00 00 00 00 00 00 00 00 00 00 92 6d
     469d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     47000 00 00 00 00 00 00 00 00 00 00 00 6d 92 d6 d6
     471d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     47200 00 00 00 00 00 00 00 00 00 6d 92 d6 d6 dd d6
     473d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     47400 00 00 00 00 00 00 00 92 6d d6 dd d6 d6 d6 d6
     475d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     47600 00 00 00 00 00 92 6d dd d6 d6 d6 d6 d6 d6 d6
     477d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     47800 00 00 00 6d 92 dd d6 d6 dd dd d6 d6 dd d6 d6
     479d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     48000 00 6d 92 dd dd dd dd dd d6 dd d6 d6 d6 d6 d6
     481d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     48292 6d dd dd dd d6 dd d6 dd dd d6 dd dd d6 d6 d6
     483d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     484dd dd dd dd dd dd d6 dd dd d6 dd d6 dd d6 d6 d6
     485d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     486dd dd dd dd dd dd dd dd dd dd dd dd d6 dd d6 dd
     487d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     488dd dd dd dd dd dd dd d6 dd dd d6 d6 dd d6 d6 d6
     489d6 d6 d6 d6 00 86 00 00 00 00 00 00 00 00 00 00
     490dd dd dd dd dd dd dd dd dd d6 dd dd d6 dd dd dd
     491d6 d6 d6 d6 00 d6 00 00 00 00 00 00 00 00 00 00
     492dd dd dd dd dd dd dd dd dd dd dd dd dd d6 d6 dd
     493d6 dd d6 d6 00 d6 00 00 00 00 00 00 00 00 00 00
     494dd dd dd dd dd dd dd dd dd dd d6 d6 dd dd dd dd
     495d6 d6 d6 d6 00 d6 00 00 00 00 00 00 00 00 00 00
     496dd dd dd dd dd dd dd dd d6 dd dd dd dd dd d6 dd
     497d6 d6 00 00 d6 d6 00 00 00 00 00 00 00 00 00 00
     498dd dd dd dd dd dd dd dd dd dd dd d6 dd dd dd d6
     49900 00 d6 d6 d6 d6 00 00 00 00 00 00 00 00 00 00
     500dd dd dd dd dd dd dd dd dd dd dd dd dd d6 00 00
     501d6 d6 d6 d6 00 00 00 00 00 00 00 00 00 00 00 00
     502dd dd dd dd dd dd dd dd dd dd dd dd 00 00 d6 d6
     503d6 d6 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     504dd dd dd dd dd dd dd dd dd dd 00 00 d6 d6 d6 d6
     50500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     506dd dd dd dd dd dd dd dd 00 00 d6 d6 d6 d6 00 00
     50700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     508dd dd dd dd dd dd 00 00 d6 d6 d6 d6 00 00 00 00
     50900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     510dd dd dd dd 00 00 d6 d6 d6 d6 d6 00 00 00 00 00
     51100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     512dd dd 00 00 d6 d6 d6 d6 d6 d6 d6 00 00 00 00 00
     51300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     51400 00 d6 d6 d6 d6 d6 d6 d6 d6 00 00 00 00 00 00
     51500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     51600 00 d6 d6 d6 d6 d6 d6 d6 d6 00 00 00 00 00 00
     51700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     51800 00 00 d6 d6 d6 d6 d6 00 00 00 00 00 00 00 00
     51900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     52000 00 00 d6 d6 00 00 00 00 00 00 00 00 00 00 00
     52100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     52200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     52300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     52400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     52500 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
     526f0 ff ff ff c0 7f ff ff 00 3f ff fc 00 1f ff f0
     52700 0f ff c0 00 03 ff 00 00 01 fc 00 00 00 f0 00
     52800 01 c0 00 00 07 80 00 00 0f 80 00 00 3f 80 00
     52900 7f 80 00 00 7f 80 00 00 7f 80 00 00 7f 80 00
     53000 7f 80 00 00 7f 80 00 00 7f 80 00 00 ff 80 00
     53103 ff 80 00 0f ff 80 00 3f ff 80 00 ff ff 80 03
     532ff ff 80 03 ff ff 80 03 ff ff e0 07 ff ff e0 07
     533ff ff f0 1f ff ff f8 ff ff ff ff ff ff ff 28 00
     53400 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00
     53500 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00
     53600 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
     53700 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
     53800 00 c0 c0 c0 00 c0 dc c0 00 f0 ca a6 00 04 04
     53904 00 08 08 08 00 0c 0c 0c 00 11 11 11 00 16 16
     54016 00 1c 1c 1c 00 22 22 22 00 29 29 29 00 55 55
     54155 00 4d 4d 4d 00 42 42 42 00 39 39 39 00 80 7c
     542ff 00 50 50 ff 00 93 00 d6 00 ff ec cc 00 c6 d6
     543ef 00 d6 e7 e7 00 90 a9 ad 00 00 00 33 00 00 00
     54466 00 00 00 99 00 00 00 cc 00 00 33 00 00 00 33
     54533 00 00 33 66 00 00 33 99 00 00 33 cc 00 00 33
     546ff 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66
     54799 00 00 66 cc 00 00 66 ff 00 00 99 00 00 00 99
     54833 00 00 99 66 00 00 99 99 00 00 99 cc 00 00 99
     549ff 00 00 cc 00 00 00 cc 33 00 00 cc 66 00 00 cc
     55099 00 00 cc cc 00 00 cc ff 00 00 ff 66 00 00 ff
     55199 00 00 ff cc 00 33 00 00 00 33 00 33 00 33 00
    34155266 00 33 00 99 00 33 00 cc 00 33 00 ff 00 33 33
    34255300 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33
     
    346557cc 00 33 99 ff 00 33 cc 00 00 33 cc 33 00 33 cc
    34755866 00 33 cc 99 00 33 cc cc 00 33 cc ff 00 33 ff
    348 00 00 33 ff 33 00 33 ff 66 00 33 ff 99 00 33 ff
    349 cc 00 33 ff ff 00 66 00 00 00 66 00 33 00 66 00
    350 66 00 66 00 99 00 66 00 cc 00 66 00 ff 00 66 33
    351 00 00 66 33 33 00 66 33 66 00 66 33 99 00 66 33
    352 cc 00 66 33 ff 00 66 66 00 00 66 66 33 00 66 66
    353 66 00 66 66 99 00 66 66 cc 00 66 66 ff 00 66 99
     55933 00 33 ff 66 00 33 ff 99 00 33 ff cc 00 33 ff
     560ff 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00
     56199 00 66 00 cc 00 66 00 ff 00 66 33 00 00 66 33
     56233 00 66 33 66 00 66 33 99 00 66 33 cc 00 66 33
     563ff 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66
     56499 00 66 66 cc 00 66 99 00 00 66 99 33 00 66 99
     56566 00 66 99 99 00 66 99 cc 00 66 99 ff 00 66 cc
     56600 00 66 cc 33 00 66 cc 99 00 66 cc cc 00 66 cc
     567ff 00 66 ff 00 00 66 ff 33 00 66 ff 99 00 66 ff
     568cc 00 cc 00 ff 00 ff 00 cc 00 99 99 00 00 99 33
     56999 00 99 00 99 00 99 00 cc 00 99 00 00 00 99 33
     57033 00 99 00 66 00 99 33 cc 00 99 00 ff 00 99 66
     57100 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66
     572cc 00 99 33 ff 00 99 99 33 00 99 99 66 00 99 99
     57399 00 99 99 cc 00 99 99 ff 00 99 cc 00 00 99 cc
     57433 00 66 cc 66 00 99 cc 99 00 99 cc cc 00 99 cc
     575ff 00 99 ff 00 00 99 ff 33 00 99 cc 66 00 99 ff
     57699 00 99 ff cc 00 99 ff ff 00 cc 00 00 00 99 00
     57733 00 cc 00 66 00 cc 00 99 00 cc 00 cc 00 99 33
     57800 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
     579cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 99 66
     58066 00 cc 66 99 00 cc 66 cc 00 99 66 ff 00 cc 99
     58100 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
     582cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
     58366 00 cc cc 99 00 cc cc cc 00 cc cc ff 00 cc ff
     58400 00 cc ff 33 00 99 ff 66 00 cc ff 99 00 cc ff
     585cc 00 cc ff ff 00 cc 00 33 00 ff 00 66 00 ff 00
     58699 00 cc 33 00 00 ff 33 33 00 ff 33 66 00 ff 33
     58799 00 ff 33 cc 00 ff 33 ff 00 ff 66 00 00 ff 66
     58833 00 cc 66 66 00 ff 66 99 00 ff 66 cc 00 cc 66
     589ff 00 ff 99 00 00 ff 99 33 00 ff 99 66 00 ff 99
     59099 00 ff 99 cc 00 ff 99 ff 00 ff cc 00 00 ff cc
     59133 00 ff cc 66 00 ff cc 99 00 ff cc cc 00 ff cc
     592ff 00 ff ff 33 00 cc ff 66 00 ff ff 99 00 ff ff
     593cc 00 66 66 ff 00 66 ff 66 00 66 ff ff 00 ff 66
     59466 00 ff 66 ff 00 ff ff 66 00 21 00 a5 00 5f 5f
     5955f 00 77 77 77 00 86 86 86 00 96 96 96 00 cb cb
     596cb 00 b2 b2 b2 00 d7 d7 d7 00 dd dd dd 00 e3 e3
     597e3 00 ea ea ea 00 f1 f1 f1 00 f8 f8 f8 00 f0 fb
     598ff 00 a4 a0 a0 00 80 80 80 00 00 00 ff 00 00 ff
     59900 00 00 ff ff 00 ff 00 00 00 ff 00 ff 00 ff ff
     60000 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
     60100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     60200 00 00 00 00 00 00 00 92 6d 92 92 6d 92 92 6d
     60392 92 6d 92 6d 00 00 00 00 00 00 00 00 00 00 00
     60400 00 00 00 92 00 00 00 ff dd dd dd dd d6 d6 d6
     605d6 d6 d6 00 92 00 00 00 ff dd dd dd dd dd dd d6
     606d6 d6 d6 00 6d 00 00 00 ff dd dd dd dd dd dd dd
     607d6 d6 d6 00 92 00 00 00 ff dd dd dd dd dd dd dd
     608d6 d6 d6 00 92 00 00 00 ff dd dd dd dd dd dd dd
     609d6 d6 d6 00 6d 00 00 00 ff dd dd dd dd dd dd dd
     610dd dd d6 00 92 00 00 00 ff ff ff ff ff ff ff ff
     611ff ff c3 00 00 00 00 00 d6 d6 d6 d6 d6 d6 d6 00
     61200 00 00 00 00 00 00 00 00 d6 d6 d6 d6 d6 00 00
     61300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     61400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     61500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     61600 00 00 00 00 00 ff ff 00 00 ff ff 00 00 c0 01
     61700 00 80 01 00 00 80 01 00 00 80 01 00 00 80 01
     61800 00 80 01 00 00 80 01 00 00 80 01 00 00 80 03
     61900 00 80 03 00 00 c0 7f 00 00 e0 ff 00 00 ff ff
     62000 00 ff ff 00 00
     621'}
     622
     623/* drive */
     6248       ICON
     625{'
     62600 00 01 00 02 00 20 20 00 00 00 00 00 00 a8 08
     62700 00 26 00 00 00 10 10 00 00 00 00 00 00 68 05
     62800 00 ce 08 00 00 28 00 00 00 20 00 00 00 40 00
     62900 00 01 00 08 00 00 00 00 00 80 04 00 00 00 00
     63000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     63100 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
     63200 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 c0 dc
     633c0 00 f0 ca a6 00 04 04 04 00 08 08 08 00 0c 0c
     6340c 00 11 11 11 00 16 16 16 00 1c 1c 1c 00 22 22
     63522 00 29 29 29 00 55 55 55 00 4d 4d 4d 00 42 42
     63642 00 39 39 39 00 80 7c ff 00 50 50 ff 00 93 00
     637d6 00 ff ec cc 00 c6 d6 ef 00 d6 e7 e7 00 90 a9
     638ad 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00
     639cc 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33
     64099 00 00 33 cc 00 00 33 ff 00 00 66 00 00 00 66
     64133 00 00 66 66 00 00 66 99 00 00 66 cc 00 00 66
     642ff 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99
     64399 00 00 99 cc 00 00 99 ff 00 00 cc 00 00 00 cc
     64433 00 00 cc 66 00 00 cc 99 00 00 cc cc 00 00 cc
     645ff 00 00 ff 66 00 00 ff 99 00 00 ff cc 00 33 00
     64600 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00
     647cc 00 33 00 ff 00 33 33 00 00 33 33 33 00 33 33
     64866 00 33 33 99 00 33 33 cc 00 33 33 ff 00 33 66
     64900 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66
     650cc 00 33 66 ff 00 33 99 00 00 33 99 33 00 33 99
     65166 00 33 99 99 00 33 99 cc 00 33 99 ff 00 33 cc
     65200 00 33 cc 33 00 33 cc 66 00 33 cc 99 00 33 cc
     653cc 00 33 cc ff 00 33 ff 33 00 33 ff 66 00 33 ff
     65499 00 33 ff cc 00 33 ff ff 00 66 00 00 00 66 00
     65533 00 66 00 66 00 66 00 99 00 66 00 cc 00 66 00
     656ff 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33
     65799 00 66 33 cc 00 66 33 ff 00 66 66 00 00 66 66
     65833 00 66 66 66 00 66 66 99 00 66 66 cc 00 66 99
    35465900 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
    355660cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
    356 66 00 66 cc 99 00 66 cc cc 00 66 cc ff 00 66 ff
    357 00 00 66 ff 33 00 66 ff 66 00 66 ff 99 00 66 ff
    358 cc 00 66 ff ff 00 99 00 00 00 99 00 33 00 99 00
    359 66 00 99 00 99 00 99 00 cc 00 99 00 ff 00 99 33
    360 00 00 99 33 33 00 99 33 66 00 99 33 99 00 99 33
    361 cc 00 99 33 ff 00 99 66 00 00 99 66 33 00 99 66
    362 66 00 99 66 99 00 99 66 cc 00 99 66 ff 00 99 99
    363 00 00 99 99 33 00 99 99 66 00 99 99 99 00 99 99
    364 cc 00 99 99 ff 00 99 cc 00 00 99 cc 33 00 99 cc
    365 66 00 99 cc 99 00 99 cc cc 00 99 cc ff 00 99 ff
    366 00 00 99 ff 33 00 99 ff 66 00 99 ff 99 00 99 ff
    367 cc 00 99 ff ff 00 cc 00 00 00 cc 00 33 00 cc 00
    368 66 00 cc 00 99 00 cc 00 cc 00 cc 00 ff 00 cc 33
    369 00 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
    370 cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 cc 66
    371 66 00 cc 66 99 00 cc 66 cc 00 cc 66 ff 00 cc 99
    372 00 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
    373 cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
    374 66 00 dc c0 b2 00 cc cc cc 00 cc cc ff 00 cc ff
    375 00 00 cc ff 33 00 cc ff 66 00 cc ff 99 00 cc ff
    376 cc 00 cc ff ff 00 ff 00 00 00 ff 00 33 00 ff 00
    377 66 00 ff 00 99 00 ff 00 cc 00 ff 00 ff 00 ff 33
    378 00 00 ff 33 33 00 ff 33 66 00 ff 33 99 00 ff 33
    379 cc 00 ff 33 ff 00 ff 66 00 00 ff 66 33 00 ff 66
    380 66 00 ff 66 99 00 ff 66 cc 00 ff 66 ff 00 ff 99
    381 00 00 ff 99 33 00 ff 99 66 00 ff 99 99 00 ff 99
    382 cc 00 ff 99 ff 00 ff cc 00 00 ff cc 33 00 ff cc
    383 66 00 ff cc 99 00 ff cc cc 00 ff cc ff 00 ff ff
    384 00 00 ff ff 33 00 ff ff 66 00 ff ff 99 00 ff ff
    385 cc 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
    386 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    387 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    388 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    389 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    391 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    392 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    393 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    394 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    395 00 00 00 00 00 00 ac ac ac ac ac ac ac ac ac ac
    396 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    397 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    398 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    399 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    400 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    401 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    402 a5 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56
    403 56 56 ac ac ac ac ac ac ac ac ac ac ac ac ac 81
    404 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56
    405 2b 2b ac ac ac ac ac ac ac ac ac ac ac ac ac d7
    406 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    407 81 2b 56 56 81 ac ac ac 81 81 81 81 81 81 81 d7
    408 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    409 81 2b 56 00 56 ac ac ac 2b 2b 2b 2b 2b 2b 56 81
    410 81 81 56 56 56 56 57 56 57 56 81 81 56 ac d7 d7
    411 81 56 d7 56 56 ac ac 81 56 56 56 56 56 56 56 56
    412 56 56 56 56 56 56 56 56 2b 2b 81 ac ac d7 d7 d7
    413 81 56 d7 56 56 ac ac ac d7 d7 d7 d7 d7 d7 d7 d7
    414 d7 d7 d7 d7 d7 d7 d7 d7 81 2b 81 ac ac d7 d7 d7
    415 81 56 d7 56 56 ac ac ac d7 d7 d7 d7 d7 d7 d7 d7
    416 d7 d7 d7 d7 d7 d7 d7 d7 81 2b 56 56 56 ac d7 d7
    417 81 56 d7 56 56 ac ac ac d7 d7 56 56 56 56 56 56
    418 56 56 56 56 d7 d7 d7 d7 81 2b 56 56 56 81 d7 d7
    419 81 56 d7 56 56 ac ac ac d7 d7 81 81 ac ac ac 88
    420 88 88 ac ac 88 ac d7 d7 81 2b ac ac ac d7 d7 d7
    421 81 56 d7 56 56 ac ac ac d7 d7 81 81 ac ac ac ac
    422 ac ac ac ac ac ac d7 d7 81 2b ac ac ac d7 d7 d7
    423 81 56 d7 56 56 ac ac ac d7 d7 56 81 56 56 56 56
    424 56 81 56 81 56 56 d7 d7 81 00 56 56 56 81 d7 d7
    425 81 56 d7 56 56 ac ac ac d7 d7 56 56 56 56 56 56
    426 56 56 56 56 56 81 d7 d7 81 00 81 56 56 56 d7 d7
    427 81 56 d7 56 56 ac ac ac d7 d7 81 ac ac 81 ac ac
    428 ac 81 ad ac ac d7 d7 d7 81 2b 81 81 ac ac d7 d7
    429 81 56 d7 56 56 ac ac ac d7 d7 81 ac ac 81 ac ac
    430 ac 81 ad ac ac d7 d7 d7 81 2b 81 81 ac ac d7 d7
    431 81 56 d7 56 56 ac ac ac d7 d7 56 56 56 56 81 56
    432 56 56 81 56 56 82 d7 d7 81 2b 56 56 56 56 d7 d7
    433 81 56 d7 56 56 ac ac ac d7 d7 56 81 56 56 56 56
    434 56 81 56 81 56 56 d7 d7 81 00 81 56 56 82 d7 d7
    435 81 56 d7 56 56 ac ac ac d7 d7 ac ac ac 81 ac ac
    436 ac 81 ac 81 ac ac d7 d7 81 2b ac ac 81 ac d7 d7
    437 81 56 d7 56 56 ac ac ac d7 d7 ac ac ac 81 ac ac
    438 ac 81 ac 81 ac ac d7 d7 81 2b ac ac 81 ac d7 d7
    439 81 56 d7 56 56 ac ac ac d7 d7 56 56 56 56 81 81
    440 56 56 ac 56 a6 d7 d7 d7 81 00 56 56 56 81 d7 d7
    441 81 55 d7 56 56 ac ac ac d7 d7 56 56 56 56 81 56
    442 56 56 81 56 56 82 d7 d7 81 00 ac 56 a6 d7 d7 d7
    443 81 55 d7 56 56 ac ac ac d7 d7 ac ac 81 81 ac 81
    444 ac ac ac ac 81 ac d7 d7 81 2b d7 d7 d7 d7 d7 d7
    445 81 55 d7 56 56 ac ac ac d7 d7 ac ac 81 81 ac 81
    446 ac ac ac ac 81 ac d7 d7 81 2b d7 d7 d7 d7 d7 d7
    447 81 81 d7 56 56 ac ac ac d7 d7 56 56 56 56 56 56
    448 56 56 56 56 56 81 d7 d7 81 4f d7 ac ac ac ac ac
    449 ac d7 d7 56 56 ac ac ac d7 d7 56 56 56 56 81 81
    450 56 56 ac 56 a6 d7 d7 d7 81 2b d7 d7 d7 d7 d7 d7
    451 d7 d7 d7 56 a5 ac ac ac d7 d7 d7 d7 d7 d7 d7 d7
    452 d7 d7 d7 d7 d7 d7 d7 d7 81 80 ac ac ac ac ac ac
    453 ac ac ac ac ac ac ac ac d7 d7 d7 d7 d7 d7 d7 d7
    454 d7 d7 d7 d7 d7 d7 d7 d7 81 80 ac ac ac ac ac ac
    455 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    456 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    457 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    458 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
    459 ac ac ac ac ac ac 00 00 00 00 00 00 00 00 00 00
    460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    461 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    462 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    463 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    465 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    467 00 00 00 00 00 00
    468 '}
    469 
    470 /* folder */
    471 3       ICON
    472 {'
    473 00 00 01 00 04 00 10 10 10 00 00 00 00 00 28 01
    474 00 00 46 00 00 00 10 10 00 00 00 00 00 00 68 05
    475 00 00 6e 01 00 00 20 20 10 00 00 00 00 00 e8 02
    476 00 00 d6 06 00 00 20 20 00 00 00 00 00 00 a8 08
    477 00 00 be 09 00 00 28 00 00 00 10 00 00 00 20 00
    478 00 00 01 00 04 00 00 00 00 00 c0 00 00 00 00 00
    479 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
    480 00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    481 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
     66199 00 66 cc cc 00 66 cc ff 00 66 ff 00 00 66 ff
     66233 00 66 ff 99 00 66 ff cc 00 cc 00 ff 00 ff 00
     663cc 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00
     664cc 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33
     665cc 00 99 00 ff 00 99 66 00 00 99 66 33 00 99 33
     66666 00 99 66 99 00 99 66 cc 00 99 33 ff 00 99 99
     66733 00 99 99 66 00 99 99 99 00 99 99 cc 00 99 99
     668ff 00 99 cc 00 00 99 cc 33 00 66 cc 66 00 99 cc
     66999 00 99 cc cc 00 99 cc ff 00 99 ff 00 00 99 ff
     67033 00 99 cc 66 00 99 ff 99 00 99 ff cc 00 99 ff
     671ff 00 cc 00 00 00 99 00 33 00 cc 00 66 00 cc 00
     67299 00 cc 00 cc 00 99 33 00 00 cc 33 33 00 cc 33
     67366 00 cc 33 99 00 cc 33 cc 00 cc 33 ff 00 cc 66
     67400 00 cc 66 33 00 99 66 66 00 cc 66 99 00 cc 66
     675cc 00 99 66 ff 00 cc 99 00 00 cc 99 33 00 cc 99
     67666 00 cc 99 99 00 cc 99 cc 00 cc 99 ff 00 cc cc
     67700 00 cc cc 33 00 cc cc 66 00 cc cc 99 00 cc cc
     678cc 00 cc cc ff 00 cc ff 00 00 cc ff 33 00 99 ff
     67966 00 cc ff 99 00 cc ff cc 00 cc ff ff 00 cc 00
     68033 00 ff 00 66 00 ff 00 99 00 cc 33 00 00 ff 33
     68133 00 ff 33 66 00 ff 33 99 00 ff 33 cc 00 ff 33
     682ff 00 ff 66 00 00 ff 66 33 00 cc 66 66 00 ff 66
     68399 00 ff 66 cc 00 cc 66 ff 00 ff 99 00 00 ff 99
     68433 00 ff 99 66 00 ff 99 99 00 ff 99 cc 00 ff 99
     685ff 00 ff cc 00 00 ff cc 33 00 ff cc 66 00 ff cc
     68699 00 ff cc cc 00 ff cc ff 00 ff ff 33 00 cc ff
     68766 00 ff ff 99 00 ff ff cc 00 66 66 ff 00 66 ff
     68866 00 66 ff ff 00 ff 66 66 00 ff 66 ff 00 ff ff
     68966 00 21 00 a5 00 5f 5f 5f 00 77 77 77 00 86 86
     69086 00 96 96 96 00 cb cb cb 00 b2 b2 b2 00 d7 d7
     691d7 00 dd dd dd 00 e3 e3 e3 00 ea ea ea 00 f1 f1
     692f1 00 f8 f8 f8 00 f0 fb ff 00 a4 a0 a0 00 80 80
    48269380 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    483 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 ff ff
    484 ff ff ff 80 08 ff ff ff ff ff 80 80 30 08 ff ff
    485 ff 80 88 80 30 8f ff ff 80 88 88 80 3f ff ff 80
    486 88 88 88 80 3f ff 80 87 77 88 88 80 3f ff 87 77
    487 77 78 88 80 3f ff 87 77 77 77 88 80 3f ff 87 77
    488 77 77 78 80 3f ff 8f 77 77 77 77 81 3f ff 8f f7
    489 77 78 10 37 8f ff 8f ff 77 83 87 78 ff ff 8f ff
    490 78 37 77 88 ff ff 8f 78 37 88 88 8f ff ff 88 37
    491 88 ff ff ff ff ff f8 88 ff ff ff ff ff ff 00 00
    492 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    493 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    494 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    495 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 28 00
     69400 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
     69500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     69600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     69700 00 00 00 00 00 00 00 00 00 00 00 00 00 6d 6d
     69800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     69900 00 00 00 00 00 00 00 00 00 00 00 92 6d 00 6d
     7006d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     70100 00 00 00 00 00 00 00 00 00 00 92 00 6d 6d 00
     7026d 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     70300 00 00 00 00 00 00 00 00 6d 00 00 92 6d 6d 43
     70400 6d 6d 00 00 00 00 00 00 00 00 00 00 00 00 00
     70500 00 00 00 00 00 00 00 00 6d 00 00 35 6d 6d 43
     7066d 00 6d 6d 00 00 00 00 00 00 00 00 00 00 00 00
     70700 00 00 00 00 00 00 00 00 6d 00 f9 92 6d 6d 43
     7086d 6d 00 6d 6d 00 00 00 00 00 00 00 00 00 00 00
     70900 00 92 00 00 00 00 00 00 6d 00 92 92 6d 6d 43
     7106d 6d 6d 00 6d 6d 00 00 00 00 00 00 00 00 00 00
     71100 00 92 00 00 00 00 00 00 6d 00 92 ff ff 6d 43
     7126d 6d 6d 6d 00 6d 6d 00 00 00 00 00 00 00 00 00
     71300 00 92 00 00 00 00 00 00 6d ff ff 92 92 92 43
     7146d 6d 6d 6d 6d 00 6d 6d 00 00 00 00 00 00 00 00
     71500 00 92 00 00 00 00 00 ff ff 92 92 ff ff ff 00
     7166d 6d 6d 6d 6d 6d 00 6d 6d 00 00 00 00 00 00 00
     71700 00 92 00 00 00 ff ff 92 ff ff ff 00 00 ff 00
     71800 6d 6d 6d 6d 6d 6d 00 6d 6d 00 00 00 00 00 00
     71900 00 92 00 ff ff ff ff ff 00 00 00 00 00 00 ff
     72000 00 6d 6d 6d 6d 6d 00 6d 6d 6d 00 00 00 00 00
     72100 00 ff ff ff ff ff 00 00 00 00 00 00 00 00 00
     722ff 00 00 6d 6d 6d 6d 00 6d 00 00 00 00 00 00 00
     72300 00 00 92 ff 00 00 00 00 00 00 00 00 00 00 00
     72400 ff 00 00 6d 6d 6d 00 00 00 00 00 00 00 00 00
     72500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     72600 00 00 00 00 6d 6d 00 00 00 00 00 00 00 00 00
     72700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     72800 00 00 00 00 00 6d 00 00 00 00 00 00 00 00 00
     72900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     73000 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00
     73100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     73200 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00
     73300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     73400 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
     73500 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
     736ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     73700 00 00 00 00 00 00 00 00 00 00 00 ff ff ff 00
     73800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     73900 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 00
     74000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     74800 00 43 00 00 00 00 00 00 00 00 00 00 00 00 00
     74900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     75000 00 00 43 43 00 00 00 00 00 00 00 00 00 00 00
     75100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     75200 00 00 43 6d 6d 00 00 00 00 00 00 00 00 00 00
     75300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     75400 00 00 00 6d 00 6d 00 00 00 00 00 00 00 00 00
     75500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     75600 00 00 00 00 6d 00 00 00 00 00 00 00 00 00 00
     75700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     75800 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
     759ff ff ff fc 3f ff ff f0 1f ff ff ca 0f ff ff 2c
     76007 ff fc ec 03 ff f3 e8 01 ff e7 e8 00 ff e7 e8
     76100 7f e7 e0 00 3f e7 c0 40 1f e7 03 60 0f e4 1f
     762b0 07 e0 7f d8 1f f1 ff ec 3f fb ff fe 3f fd ff
     763ff 3f fe ff ff 3f ff 7f fa 7f ff bf e0 7f ff df
     76406 7f ff ec 1c 7f ff f4 70 ff ff f9 c3 ff ff ff
     765cf ff ff ff c7 ff ff ff e3 ff ff ff f1 ff ff ff
     766f8 ff ff ff fd 7f ff ff fe ff ff ff ff ff 28 00
    49676700 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00
    497 00 00 40 01 00 00 00 00 00 00 00 00 00 00 00 01
    498 00 00 00 00 00 00 00 00 00 00 00 00 33 00 00 00
    499 66 00 00 00 99 00 00 00 cc 00 00 00 ff 00 00 33
    500 00 00 00 33 33 00 00 33 66 00 00 33 99 00 00 33
    501 cc 00 00 33 ff 00 00 66 00 00 00 66 33 00 00 66
    502 66 00 00 66 99 00 00 66 cc 00 00 66 ff 00 00 99
    503 00 00 00 99 33 00 00 99 66 00 00 99 99 00 00 99
    504 cc 00 00 99 ff 00 00 cc 00 00 00 cc 33 00 00 cc
    505 66 00 00 cc 99 00 00 cc cc 00 00 cc ff 00 00 ff
    506 00 00 00 ff 33 00 00 ff 66 00 00 ff 99 00 00 ff
    507 cc 00 00 ff ff 00 33 00 00 00 33 00 33 00 33 00
     76800 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00
     76900 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
     77000 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
     77100 00 c0 c0 c0 00 c0 dc c0 00 f0 ca a6 00 04 04
     77204 00 08 08 08 00 0c 0c 0c 00 11 11 11 00 16 16
     77316 00 1c 1c 1c 00 22 22 22 00 29 29 29 00 55 55
     77455 00 4d 4d 4d 00 42 42 42 00 39 39 39 00 80 7c
     775ff 00 50 50 ff 00 93 00 d6 00 ff ec cc 00 c6 d6
     776ef 00 d6 e7 e7 00 90 a9 ad 00 00 00 33 00 00 00
     77766 00 00 00 99 00 00 00 cc 00 00 33 00 00 00 33
     77833 00 00 33 66 00 00 33 99 00 00 33 cc 00 00 33
     779ff 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66
     78099 00 00 66 cc 00 00 66 ff 00 00 99 00 00 00 99
     78133 00 00 99 66 00 00 99 99 00 00 99 cc 00 00 99
     782ff 00 00 cc 00 00 00 cc 33 00 00 cc 66 00 00 cc
     78399 00 00 cc cc 00 00 cc ff 00 00 ff 66 00 00 ff
     78499 00 00 ff cc 00 33 00 00 00 33 00 33 00 33 00
    50878566 00 33 00 99 00 33 00 cc 00 33 00 ff 00 33 33
    50978600 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33
     
    513790cc 00 33 99 ff 00 33 cc 00 00 33 cc 33 00 33 cc
    51479166 00 33 cc 99 00 33 cc cc 00 33 cc ff 00 33 ff
    515 00 00 33 ff 33 00 33 ff 66 00 33 ff 99 00 33 ff
    516 cc 00 33 ff ff 00 66 00 00 00 66 00 33 00 66 00
    517 66 00 66 00 99 00 66 00 cc 00 66 00 ff 00 66 33
    518 00 00 66 33 33 00 66 33 66 00 66 33 99 00 66 33
    519 cc 00 66 33 ff 00 66 66 00 00 66 66 33 00 66 66
    520 66 00 66 66 99 00 66 66 cc 00 66 66 ff 00 66 99
    521 00 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
    522 cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
    523 66 00 66 cc 99 00 66 cc cc 00 66 cc ff 00 66 ff
    524 00 00 66 ff 33 00 66 ff 66 00 66 ff 99 00 66 ff
    525 cc 00 66 ff ff 00 99 00 00 00 99 00 33 00 99 00
    526 66 00 99 00 99 00 99 00 cc 00 99 00 ff 00 99 33
    527 00 00 99 33 33 00 99 33 66 00 99 33 99 00 99 33
    528 cc 00 99 33 ff 00 99 66 00 00 99 66 33 00 99 66
    529 66 00 99 66 99 00 99 66 cc 00 99 66 ff 00 99 99
    530 00 00 99 99 33 00 99 99 66 00 99 99 99 00 99 99
    531 cc 00 99 99 ff 00 99 cc 00 00 99 cc 33 00 99 cc
    532 66 00 99 cc 99 00 99 cc cc 00 99 cc ff 00 99 ff
    533 00 00 99 ff 33 00 99 ff 66 00 99 ff 99 00 99 ff
    534 cc 00 99 ff ff 00 cc 00 00 00 cc 00 33 00 cc 00
    535 66 00 cc 00 99 00 cc 00 cc 00 cc 00 ff 00 cc 33
     79233 00 33 ff 66 00 33 ff 99 00 33 ff cc 00 33 ff
     793ff 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00
     79499 00 66 00 cc 00 66 00 ff 00 66 33 00 00 66 33
     79533 00 66 33 66 00 66 33 99 00 66 33 cc 00 66 33
     796ff 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66
     79799 00 66 66 cc 00 66 99 00 00 66 99 33 00 66 99
     79866 00 66 99 99 00 66 99 cc 00 66 99 ff 00 66 cc
     79900 00 66 cc 33 00 66 cc 99 00 66 cc cc 00 66 cc
     800ff 00 66 ff 00 00 66 ff 33 00 66 ff 99 00 66 ff
     801cc 00 cc 00 ff 00 ff 00 cc 00 99 99 00 00 99 33
     80299 00 99 00 99 00 99 00 cc 00 99 00 00 00 99 33
     80333 00 99 00 66 00 99 33 cc 00 99 00 ff 00 99 66
     80400 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66
     805cc 00 99 33 ff 00 99 99 33 00 99 99 66 00 99 99
     80699 00 99 99 cc 00 99 99 ff 00 99 cc 00 00 99 cc
     80733 00 66 cc 66 00 99 cc 99 00 99 cc cc 00 99 cc
     808ff 00 99 ff 00 00 99 ff 33 00 99 cc 66 00 99 ff
     80999 00 99 ff cc 00 99 ff ff 00 cc 00 00 00 99 00
     81033 00 cc 00 66 00 cc 00 99 00 cc 00 cc 00 99 33
    53681100 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
    537 cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 cc 66
    538 66 00 cc 66 99 00 cc 66 cc 00 cc 66 ff 00 cc 99
     812cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 99 66
     81366 00 cc 66 99 00 cc 66 cc 00 99 66 ff 00 cc 99
    53981400 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
    540815cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
    54181666 00 cc cc 99 00 cc cc cc 00 cc cc ff 00 cc ff
    542 00 00 cc ff 33 00 cc ff 66 00 cc ff 99 00 cc ff
    543 cc 00 cc ff ff 00 ff 00 00 00 ff 00 33 00 ff 00
    544 66 00 ff 00 99 00 ff 00 cc 00 ff 00 ff 00 ff 33
    545 00 00 ff 33 33 00 ff 33 66 00 ff 33 99 00 ff 33
    546 cc 00 ff 33 ff 00 ff 66 00 00 ff 66 33 00 ff 66
    547 66 00 ff 66 99 00 ff 66 cc 00 ff 66 ff 00 ff 99
    548 00 00 ff 99 33 00 ff 99 66 00 ff 99 99 00 ff 99
    549 cc 00 ff 99 ff 00 ff cc 00 00 ff cc 33 00 ff cc
    550 66 00 ff cc 99 00 ff cc cc 00 ff cc ff 00 ff ff
    551 00 00 ff ff 33 00 ff ff 66 00 ff ff 99 00 ff ff
    552 cc 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
    553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    554 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    555 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    556 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    557 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    558 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    559 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    561 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    562 00 00 00 00 00 00 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    563 56 00 07 56 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 56 2b
    564 56 2b 32 00 00 81 d7 d7 d7 d7 d7 d7 56 2b 56 81
    565 81 2b 32 00 56 d7 d7 d7 d7 d7 56 2b 56 81 81 81
    566 81 2b 32 d7 d7 d7 d7 d7 56 2b 56 81 81 81 81 81
    567 81 2b 32 d7 d7 d7 81 2b 56 ac ac ac 81 81 81 81
    568 81 2b 32 d7 d7 d7 56 ac ac ac ac ac ac 81 81 81
    569 81 2b 32 d7 d7 d7 56 ac ac ac ac ac ac ac 81 81
    570 81 2b 32 d7 d7 d7 56 ac ac ac ac ac ac ac ac 81
    571 81 2b 32 d7 d7 d7 56 d7 ac ac ac ac ac ac ac ac
    572 81 2c 32 d7 d7 d7 56 d7 d7 ac ac ac ac 56 2c 2b
    573 32 89 56 d7 d7 d7 56 d7 d7 d7 ac ac 56 34 5f 89
    574 89 56 d7 d7 d7 d7 56 d7 d7 d7 ac 56 32 89 89 89
    575 5e 56 d7 d7 d7 d7 56 d7 ac 56 32 89 56 56 56 56
    576 81 d7 d7 d7 d7 d7 56 56 32 89 56 56 d7 d7 d7 d7
    577 d7 d7 d7 d7 d7 d7 d7 56 56 56 d7 d7 d7 d7 d7 d7
    578 d7 d7 d7 d7 d7 d7 00 00 ff ff 00 00 ff ff 00 00
    579 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    580 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    581 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    582 ff ff 00 00 ff ff 28 00 00 00 20 00 00 00 40 00
    583 00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00
    584 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
     81700 00 cc ff 33 00 99 ff 66 00 cc ff 99 00 cc ff
     818cc 00 cc ff ff 00 cc 00 33 00 ff 00 66 00 ff 00
     81999 00 cc 33 00 00 ff 33 33 00 ff 33 66 00 ff 33
     82099 00 ff 33 cc 00 ff 33 ff 00 ff 66 00 00 ff 66
     82133 00 cc 66 66 00 ff 66 99 00 ff 66 cc 00 cc 66
     822ff 00 ff 99 00 00 ff 99 33 00 ff 99 66 00 ff 99
     82399 00 ff 99 cc 00 ff 99 ff 00 ff cc 00 00 ff cc
     82433 00 ff cc 66 00 ff cc 99 00 ff cc cc 00 ff cc
     825ff 00 ff ff 33 00 cc ff 66 00 ff ff 99 00 ff ff
     826cc 00 66 66 ff 00 66 ff 66 00 66 ff ff 00 ff 66
     82766 00 ff 66 ff 00 ff ff 66 00 21 00 a5 00 5f 5f
     8285f 00 77 77 77 00 86 86 86 00 96 96 96 00 cb cb
     829cb 00 b2 b2 b2 00 d7 d7 d7 00 dd dd dd 00 e3 e3
     830e3 00 ea ea ea 00 f1 f1 f1 00 f8 f8 f8 00 f0 fb
     831ff 00 a4 a0 a0 00 80 80 80 00 00 00 ff 00 00 ff
     83200 00 00 ff ff 00 ff 00 00 00 ff 00 ff 00 ff ff
     83300 00 ff ff ff 00 00 00 00 00 00 00 00 6d 6d 00
     83400 00 00 00 00 00 00 00 00 00 00 92 6d 00 6d 6d
     83500 00 00 00 00 00 00 00 00 00 92 35 6d 6d 00 6d
     8366d 00 00 00 00 00 00 92 6d 00 f9 92 6d 6d 43 00
     8376d 6d 00 00 00 00 00 92 6d 00 92 92 6d 6d 43 6d
     83800 6d 6d 00 00 00 00 92 6d 00 92 ff ff 6d 43 6d
     8396d 00 6d 6d 00 00 00 92 6d ff ff 92 92 92 43 6d
     8406d 6d 00 6d 6d 00 00 ff ff 92 92 ff ff ff 00 6d
     8416d 6d 00 6d 6d 6d 00 00 92 ff ff 00 00 00 00 00
     8426d 6d 00 6d 00 00 00 00 00 00 00 00 00 00 00 00
     84300 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     84400 ff 00 00 00 00 00 00 00 00 00 00 00 00 ff 00
     84500 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00
     84600 00 6d 00 00 00 00 00 00 00 00 00 00 00 00 00
     84700 6d 00 6d 00 00 00 00 00 00 00 00 00 00 00 00
     84800 00 6d 00 00 00 00 00 00 00 00 00 00 00 00 00
     84900 00 00 00 00 00 f8 7f 00 00 e0 3f 00 00 90 1f
     85000 00 10 0f 00 00 10 07 00 00 10 03 00 00 00 01
     85100 00 00 80 00 00 87 c3 00 00 df e3 00 00 ef e1
     85200 00 f7 4d 00 00 fa 31 00 00 fc e3 00 00 ff e7
     85300 00 ff f7 00 00
     854'}
     855
     856/* mycomputer */
     85715      ICON
     858{'
     85900 00 01 00 02 00 20 20 00 00 00 00 00 00 a8 08
     86000 00 26 00 00 00 10 10 00 00 00 00 00 00 68 05
     86100 00 ce 08 00 00 28 00 00 00 20 00 00 00 40 00
     86200 00 01 00 08 00 00 00 00 00 80 04 00 00 00 00
     86300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    58586400 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    586 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
     86500 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 c0 dc
     866c0 00 f0 ca a6 00 04 04 04 00 08 08 08 00 0c 0c
     8670c 00 11 11 11 00 16 16 16 00 1c 1c 1c 00 22 22
     86822 00 29 29 29 00 55 55 55 00 4d 4d 4d 00 42 42
     86942 00 39 39 39 00 80 7c ff 00 50 50 ff 00 93 00
     870d6 00 ff ec cc 00 c6 d6 ef 00 d6 e7 e7 00 90 a9
     871ad 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00
     872cc 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33
     87399 00 00 33 cc 00 00 33 ff 00 00 66 00 00 00 66
     87433 00 00 66 66 00 00 66 99 00 00 66 cc 00 00 66
     875ff 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99
     87699 00 00 99 cc 00 00 99 ff 00 00 cc 00 00 00 cc
     87733 00 00 cc 66 00 00 cc 99 00 00 cc cc 00 00 cc
     878ff 00 00 ff 66 00 00 ff 99 00 00 ff cc 00 33 00
     87900 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00
     880cc 00 33 00 ff 00 33 33 00 00 33 33 33 00 33 33
     88166 00 33 33 99 00 33 33 cc 00 33 33 ff 00 33 66
     88200 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66
     883cc 00 33 66 ff 00 33 99 00 00 33 99 33 00 33 99
     88466 00 33 99 99 00 33 99 cc 00 33 99 ff 00 33 cc
     88500 00 33 cc 33 00 33 cc 66 00 33 cc 99 00 33 cc
     886cc 00 33 cc ff 00 33 ff 33 00 33 ff 66 00 33 ff
     88799 00 33 ff cc 00 33 ff ff 00 66 00 00 00 66 00
     88833 00 66 00 66 00 66 00 99 00 66 00 cc 00 66 00
     889ff 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33
     89099 00 66 33 cc 00 66 33 ff 00 66 66 00 00 66 66
     89133 00 66 66 66 00 66 66 99 00 66 66 cc 00 66 99
     89200 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
     893cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
     89499 00 66 cc cc 00 66 cc ff 00 66 ff 00 00 66 ff
     89533 00 66 ff 99 00 66 ff cc 00 cc 00 ff 00 ff 00
     896cc 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00
     897cc 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33
     898cc 00 99 00 ff 00 99 66 00 00 99 66 33 00 99 33
     89966 00 99 66 99 00 99 66 cc 00 99 33 ff 00 99 99
     90033 00 99 99 66 00 99 99 99 00 99 99 cc 00 99 99
     901ff 00 99 cc 00 00 99 cc 33 00 66 cc 66 00 99 cc
     90299 00 99 cc cc 00 99 cc ff 00 99 ff 00 00 99 ff
     90333 00 99 cc 66 00 99 ff 99 00 99 ff cc 00 99 ff
     904ff 00 cc 00 00 00 99 00 33 00 cc 00 66 00 cc 00
     90599 00 cc 00 cc 00 99 33 00 00 cc 33 33 00 cc 33
     90666 00 cc 33 99 00 cc 33 cc 00 cc 33 ff 00 cc 66
     90700 00 cc 66 33 00 99 66 66 00 cc 66 99 00 cc 66
     908cc 00 99 66 ff 00 cc 99 00 00 cc 99 33 00 cc 99
     90966 00 cc 99 99 00 cc 99 cc 00 cc 99 ff 00 cc cc
     91000 00 cc cc 33 00 cc cc 66 00 cc cc 99 00 cc cc
     911cc 00 cc cc ff 00 cc ff 00 00 cc ff 33 00 99 ff
     91266 00 cc ff 99 00 cc ff cc 00 cc ff ff 00 cc 00
     91333 00 ff 00 66 00 ff 00 99 00 cc 33 00 00 ff 33
     91433 00 ff 33 66 00 ff 33 99 00 ff 33 cc 00 ff 33
     915ff 00 ff 66 00 00 ff 66 33 00 cc 66 66 00 ff 66
     91699 00 ff 66 cc 00 cc 66 ff 00 ff 99 00 00 ff 99
     91733 00 ff 99 66 00 ff 99 99 00 ff 99 cc 00 ff 99
     918ff 00 ff cc 00 00 ff cc 33 00 ff cc 66 00 ff cc
     91999 00 ff cc cc 00 ff cc ff 00 ff ff 33 00 cc ff
     92066 00 ff ff 99 00 ff ff cc 00 66 66 ff 00 66 ff
     92166 00 66 ff ff 00 ff 66 66 00 ff 66 ff 00 ff ff
     92266 00 21 00 a5 00 5f 5f 5f 00 77 77 77 00 86 86
     92386 00 96 96 96 00 cb cb cb 00 b2 b2 b2 00 d7 d7
     924d7 00 dd dd dd 00 e3 e3 e3 00 ea ea ea 00 f1 f1
     925f1 00 f8 f8 f8 00 f0 fb ff 00 a4 a0 a0 00 80 80
    58792680 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    588 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 ff ff
    589 ff ff ff ff ff ff ff ff ff 00 00 ff ff ff ff ff
    590 ff ff ff ff ff ff ff ff 00 80 b0 00 ff ff ff ff
    591 ff ff ff ff ff ff ff 00 88 80 b0 00 00 ff ff ff
    592 ff ff ff ff ff ff 00 88 77 80 b0 00 00 0f ff ff
    593 ff ff ff ff ff 00 88 77 77 80 b0 00 00 ff ff ff
    594 ff ff ff ff 00 88 77 77 77 80 b0 00 ff ff ff ff
    595 ff ff ff 00 88 77 77 77 77 80 b0 ff ff ff ff ff
    596 ff ff 00 88 77 77 77 77 77 80 b0 ff ff ff ff ff
    597 ff 00 88 77 77 77 77 77 77 80 b0 ff ff ff ff ff
    598 00 88 77 77 77 77 77 77 77 80 b0 ff ff ff ff 00
    599 88 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 88
    600 77 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 77
    601 77 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 77
    602 77 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 77
    603 77 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 f7
    604 f7 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 7f
    605 77 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 f7
    606 f7 f7 77 77 77 77 77 77 77 80 b0 ff ff ff f0 ff
    607 7f 77 77 77 77 77 77 77 77 80 b0 ff ff ff f0 f7
    608 f7 f7 f7 77 77 77 77 77 78 0b b0 ff ff ff f0 ff
    609 ff 7f 77 77 77 77 80 88 00 bf 0f ff ff ff f0 ff
    610 f7 f7 f7 f7 77 80 0b 00 bb bf 0f ff ff ff f0 ff
    611 ff ff 7f 77 78 0b bb bb bf f0 ff ff ff ff f0 ff
    612 ff f7 f7 77 70 bb bb ff ff f0 ff ff ff ff f0 ff
    613 ff ff ff f8 00 bf ff ff ff 0f ff ff ff ff f0 ff
    614 ff ff f8 00 bf ff ff ff f0 0f ff ff ff ff f0 ff
    615 ff f8 00 bf ff 00 ff f0 0f ff ff ff ff ff f0 ff
    616 f8 00 bf ff 00 ff 00 0f ff ff ff ff ff ff f0 f8
    617 00 bf ff 00 ff ff ff ff ff ff ff ff ff ff f0 00
    618 bf ff 00 ff ff ff ff ff ff ff ff ff ff ff ff f0
    619 ff 00 ff ff ff ff ff ff ff ff ff ff ff ff ff f0
    620 00 ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00
    621 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    622 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    623 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    624 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    625 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    626 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    627 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    628 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00
    629 00 00 20 00 00 00 40 00 00 00 01 00 08 00 00 00
    630 00 00 80 04 00 00 00 00 00 00 00 00 00 00 00 01
    631 00 00 00 00 00 00 ff ff ff 00 a8 dc ff 00 58 a8
    632 ff 00 c0 c0 c0 00 a4 a0 a0 00 58 58 58 00 30 30
    633 30 00 00 00 40 00 00 00 00 00 dc c0 b2 00 00 00
    634 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    635 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    636 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    637 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    638 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    639 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    641 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    642 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    643 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    644 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    645 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    646 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    647 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    648 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    649 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    650 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    651 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    652 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    653 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    654 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    655 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    656 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    657 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    658 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    659 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    661 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    662 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    663 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    664 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    665 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    666 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    667 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    668 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    669 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    671 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    672 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    673 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    674 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    675 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    676 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    677 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    678 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    679 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    681 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    682 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    683 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    684 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    685 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    686 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    687 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    688 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    689 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    691 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    692 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    693 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    694 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    695 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    696 00 00 00 00 00 00 00 00 00 00 00 00 08 08 08 08
    697 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    698 00 00 00 00 00 00 00 00 00 00 08 08 05 08 02 08
    699 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    700 00 00 00 00 00 00 00 00 08 08 05 05 05 08 02 08
    701 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00
    702 00 00 00 00 00 00 08 08 05 05 04 04 05 08 02 08
    703 08 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00
    704 00 00 00 00 08 08 05 05 04 04 04 04 05 08 02 08
    705 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00
    706 00 00 08 08 05 05 04 04 04 04 04 04 05 08 02 08
    707 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    708 08 08 05 05 04 04 04 04 04 04 04 04 05 08 02 08
    709 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08
    710 05 05 04 04 04 04 04 04 04 04 04 04 05 08 02 08
    711 00 00 00 00 00 00 00 00 00 00 00 00 08 08 05 05
    712 04 04 04 04 04 04 04 04 04 04 04 04 05 08 02 08
    713 00 00 00 00 00 00 00 00 00 00 08 08 05 05 04 04
    714 04 03 04 04 04 04 04 04 04 04 04 04 05 08 02 08
    715 00 00 00 00 00 00 00 00 08 08 05 05 04 04 03 04
    716 03 04 04 04 04 04 04 04 04 04 04 04 05 08 02 08
    717 00 00 00 00 00 00 00 08 05 05 04 04 03 03 03 03
    718 04 03 04 03 04 04 04 04 04 04 04 04 05 08 02 08
    719 00 00 00 00 00 00 00 08 04 04 03 03 03 03 03 04
    720 03 04 03 04 04 04 04 04 04 04 04 04 05 08 02 08
    721 00 00 00 00 00 00 00 08 03 03 03 03 03 03 03 03
    722 03 03 04 03 04 03 04 04 04 04 04 04 05 08 02 08
    723 00 00 00 00 00 00 00 08 03 03 03 03 03 03 03 03
    724 03 04 03 04 03 04 04 04 04 04 04 04 05 07 02 08
    725 00 00 00 00 00 00 00 08 00 03 00 03 03 03 03 03
    726 03 03 03 03 04 03 04 03 04 04 04 04 05 08 02 08
    727 00 00 00 00 00 00 00 08 03 00 03 03 03 03 03 03
    728 03 03 03 04 03 04 03 04 04 04 04 04 05 08 02 08
    729 00 00 00 00 00 00 00 08 00 03 00 03 00 03 03 03
    730 03 03 03 03 03 03 04 03 04 03 04 04 05 08 02 08
    731 00 00 00 00 00 00 00 08 00 00 03 00 03 03 03 03
    732 03 03 03 03 03 04 03 04 03 04 03 04 05 08 02 08
    733 00 00 00 00 00 00 00 08 00 03 00 03 00 03 00 03
    734 03 03 03 03 03 03 03 03 04 03 04 05 08 02 02 08
    735 00 00 00 00 00 00 00 08 00 00 00 00 03 00 03 03
    736 03 03 03 03 03 04 05 08 05 05 08 08 02 01 08 00
    737 00 00 00 00 00 00 00 08 00 00 00 03 00 03 00 03
    738 00 03 03 04 05 08 08 02 07 08 02 02 02 01 08 00
    739 00 00 00 00 00 00 00 08 00 00 00 00 00 00 03 00
    740 03 03 03 05 08 02 02 02 02 02 02 01 01 08 00 00
    741 00 00 00 00 00 00 00 08 00 00 00 00 00 03 00 03
    742 03 04 04 08 02 02 02 02 01 01 01 01 01 08 00 00
    743 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
    744 00 05 08 08 02 01 01 01 01 01 01 01 08 00 00 00
    745 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 05
    746 08 08 02 01 01 01 01 01 01 01 01 08 08 00 00 00
    747 00 00 00 00 00 00 00 08 00 00 00 00 00 05 08 08
    748 02 01 01 01 08 08 01 01 01 08 08 00 00 00 00 00
    749 00 00 00 00 00 00 00 08 00 00 00 05 08 08 02 01
    750 01 01 08 08 00 00 08 08 06 00 00 00 00 00 00 00
    751 00 00 00 00 00 00 00 08 00 05 08 08 02 01 01 01
    752 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    753 00 00 00 00 00 00 00 08 08 08 02 01 01 01 08 08
    754 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    755 00 00 00 00 00 00 00 00 00 08 01 01 08 08 00 00
    756 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    757 00 00 00 00 00 00 00 00 00 08 08 08 00 00 00 00
    758 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    759 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    761 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    762 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    763 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    764 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    765 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    766 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    767 00 00 00 00 00 00
    768 '}
    769 
    770 /* drive */
    771 8       ICON
    772 {'
    773 00 00 01 00 04 00 10 10 10 00 00 00 00 00 28 01
    774 00 00 46 00 00 00 10 10 00 00 00 00 00 00 68 05
    775 00 00 6e 01 00 00 20 20 10 00 00 00 00 00 e8 02
    776 00 00 d6 06 00 00 20 20 00 00 00 00 00 00 a8 08
    777 00 00 be 09 00 00 28 00 00 00 10 00 00 00 20 00
    778 00 00 01 00 04 00 00 00 00 00 c0 00 00 00 00 00
    779 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
    780 00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    781 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
    782 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    783 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 ff ff
    784 ff ff ff ff ff ff ff ff 78 88 ff ff ff ff ff 86
    785 07 78 8f ff ff ff f8 88 88 77 88 ff ff ff 88 88
    786 87 77 78 8f ff ff 88 88 77 77 77 88 ff ff 87 88
    787 87 77 77 78 8f ff f8 88 88 77 77 77 88 ff ff 88
    788 88 87 77 77 78 ff ff f8 88 87 77 77 78 ff ff ff
    789 87 77 77 77 88 ff ff ff f8 77 77 88 88 ff ff ff
    790 ff 87 80 88 88 ff ff ff ff f8 f8 88 88 ff ff ff
    791 ff ff ff ff 88 ff ff ff ff ff ff ff 78 ff 00 00
    792 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    793 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    794 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    795 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 28 00
     92700 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
     92800 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 6d
     92900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     93000 00 00 00 00 00 00 00 00 00 00 00 ff ff 92 00
     9316d 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     93200 00 00 00 00 00 00 00 00 00 ff ff 92 00 ff 92
     93300 6d 6d 6d 00 00 00 00 00 00 00 00 00 00 00 00
     93400 00 00 00 00 00 00 00 ff ff 92 00 ff 92 00 ff
     93592 00 6d 6d 6d 00 00 00 00 00 00 00 00 00 00 00
     93600 00 00 00 00 00 ff ff 92 00 ff 92 00 ff 92 00
     937ff 92 00 6d 6d 00 00 00 00 00 00 00 00 00 00 00
     93800 00 00 00 ff ff 92 00 ff 92 00 ff 92 00 ff 92
     93900 ff ff 00 00 ff 00 00 6d 6d 00 00 00 00 00 00
     94000 00 ff ff 92 00 ff 92 00 ff 92 00 ff 92 00 ff
     941ff 00 00 ff 00 00 92 6d 00 6d 6d 00 00 00 00 00
     942ff ff 92 00 ff 92 00 ff 92 00 ff 92 00 ff ff 00
     94300 ff 00 00 00 00 92 6d 6d 00 6d 6d 00 00 6d ff
     94492 00 ff 92 00 ff 92 00 ff 92 00 ff ff 00 00 ff
     94500 00 00 00 ff ff 92 6d 6d 6d 00 6d 6d 00 00 6d
     946ff 92 00 ff 92 00 ff 92 00 ff ff 00 00 ff 00 00
     94700 00 ff ff 85 ff 92 6d 6d 6d 00 6d 6d 6d 00 00
     9486d ff 92 00 ff 92 00 ff ff 00 00 ff 00 00 00 00
     949ff ff 85 92 92 ff 92 6d 6d 6d 00 6d 6d 6d 00 00
     95000 6d ff 92 00 ff ff 00 00 ff 00 00 00 00 ff ff
     95186 92 92 ff 92 ff 92 6d 6d 6d 00 6d 6d 6d 00 00
     95200 00 6d ff ff 00 00 ff 00 00 00 00 ff ff 86 92
     95392 ff ff ff 92 ff 92 6d 6d 6d 00 6d 6d 00 00 00
     95400 00 00 6d 00 00 00 00 00 00 ff ff 86 86 92 ff
     955ff ff ff ff 92 ff 92 6d 6d 6d 00 00 00 00 00 00
     95600 00 00 00 00 00 00 00 ff ff ae ae 86 00 92 ff
     957ff ff ff ff 92 ff 92 6d 6d 6d 00 00 00 00 00 00
     95800 00 00 00 00 43 6d 00 cf cf ae 00 00 ff 92 ff
     959ff ff ff ff 85 ff 92 6d 6d 6d 00 00 00 00 00 00
     96000 00 00 00 00 43 6d 6d cf 00 00 ff ff ff 92 ff
     961ff ff 85 85 86 ff 92 6d 6d 6d 00 00 00 00 00 00
     96200 00 00 00 00 43 6d 6d cf 00 ff ff ff ff 92 ff
     96385 85 ff 00 86 ff 92 6d 6d 6d 00 00 00 00 00 00
     96400 00 00 00 00 43 6d 6d b5 00 ff ff ff ff 85 85
     965ff ff ff 85 86 ff 92 6d 6d 6d 00 00 00 00 00 00
     96600 00 00 00 00 43 6d 6d b5 00 ff ff ff ff ff ff
     967ff 85 85 86 86 ff 92 6d 6d 6d 00 00 00 00 00 00
     96800 00 00 00 00 43 6d 6d b5 00 ff ff ff ff ff 85
     96985 ae ae 92 92 ff 00 92 6d 6d 00 00 00 00 00 00
     97000 00 00 00 00 43 6d 6d b5 00 ff ff ff 85 85 cf
     971cf 92 92 ff ff 00 ff 00 92 6d 00 00 00 00 00 00
     97200 00 00 00 00 43 6d 6d b5 00 ff 85 85 b5 cf 92
     97392 ff ff ff 00 ff 00 ff 00 92 00 00 00 00 00 00
     97400 00 00 00 00 43 6d 6d b5 85 85 b5 b5 92 92 ff
     975ff 00 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00
     97600 00 00 00 00 43 6d 6d b5 b5 b5 92 92 ff ff ff
     97700 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00
     97800 00 00 00 00 43 6d 6d 6d 92 92 ff ff 00 ff 00
     979ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00
     98000 00 00 00 00 43 6d 6d 92 ff ff ff 00 ff 00 ff
     98100 ff 00 00 ff 00 ff 00 00 00 00 00 00 00 00 00
     98200 00 00 00 00 43 6d ff ff 00 ff 00 ff 00 ff 00
     98300 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00
     98400 00 00 00 00 43 ff 00 00 ff 00 ff 00 ff 00 00
     985ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00
     98600 00 00 00 00 00 00 00 ff 00 ff 00 00 00 00 ff
     98700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     98800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     98900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     99000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     99100 00 00 00 00 00 00 00 00 00 00 00 00 00 ff fc
     9920f ff ff f0 03 ff ff c0 00 ff ff 00 00 ff fc 00
     99300 ff f0 00 00 0f c0 00 00 07 00 00 03 03 00 00
     9940c 01 80 00 30 00 c0 00 c0 00 e0 03 00 00 f0 0c
     99500 01 f8 30 00 07 fe 41 00 07 fe 46 00 07 fe 18
     99600 07 fe 10 04 07 fe 10 00 07 fe 10 00 07 fe 10
     99700 87 fe 10 01 47 fe 10 02 a7 fe 00 15 4f fe 00
     9982a 3f fe 01 54 bf fe 02 a1 3f fe 15 4a 7f fe 6a
     99911 ff ff 54 a7 ff ff 83 1f ff ff ff ff ff 28 00
    796100000 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00
    797 00 00 40 01 00 00 00 00 00 00 00 00 00 00 00 01
    798 00 00 00 00 00 00 00 00 00 00 00 00 33 00 00 00
    799 66 00 00 00 99 00 00 00 cc 00 00 00 ff 00 00 33
    800 00 00 00 33 33 00 00 33 66 00 00 33 99 00 00 33
    801 cc 00 00 33 ff 00 00 66 00 00 00 66 33 00 00 66
    802 66 00 00 66 99 00 00 66 cc 00 00 66 ff 00 00 99
    803 00 00 00 99 33 00 00 99 66 00 00 99 99 00 00 99
    804 cc 00 00 99 ff 00 00 cc 00 00 00 cc 33 00 00 cc
    805 66 00 00 cc 99 00 00 cc cc 00 00 cc ff 00 00 ff
    806 00 00 00 ff 33 00 00 ff 66 00 00 ff 99 00 00 ff
    807 cc 00 00 ff ff 00 33 00 00 00 33 00 33 00 33 00
     100100 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00
     100200 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
     100300 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
     100400 00 c0 c0 c0 00 c0 dc c0 00 f0 ca a6 00 04 04
     100504 00 08 08 08 00 0c 0c 0c 00 11 11 11 00 16 16
     100616 00 1c 1c 1c 00 22 22 22 00 29 29 29 00 55 55
     100755 00 4d 4d 4d 00 42 42 42 00 39 39 39 00 80 7c
     1008ff 00 50 50 ff 00 93 00 d6 00 ff ec cc 00 c6 d6
     1009ef 00 d6 e7 e7 00 90 a9 ad 00 00 00 33 00 00 00
     101066 00 00 00 99 00 00 00 cc 00 00 33 00 00 00 33
     101133 00 00 33 66 00 00 33 99 00 00 33 cc 00 00 33
     1012ff 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66
     101399 00 00 66 cc 00 00 66 ff 00 00 99 00 00 00 99
     101433 00 00 99 66 00 00 99 99 00 00 99 cc 00 00 99
     1015ff 00 00 cc 00 00 00 cc 33 00 00 cc 66 00 00 cc
     101699 00 00 cc cc 00 00 cc ff 00 00 ff 66 00 00 ff
     101799 00 00 ff cc 00 33 00 00 00 33 00 33 00 33 00
    808101866 00 33 00 99 00 33 00 cc 00 33 00 ff 00 33 33
    809101900 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33
     
    8131023cc 00 33 99 ff 00 33 cc 00 00 33 cc 33 00 33 cc
    814102466 00 33 cc 99 00 33 cc cc 00 33 cc ff 00 33 ff
    815 00 00 33 ff 33 00 33 ff 66 00 33 ff 99 00 33 ff
    816 cc 00 33 ff ff 00 66 00 00 00 66 00 33 00 66 00
    817 66 00 66 00 99 00 66 00 cc 00 66 00 ff 00 66 33
    818 00 00 66 33 33 00 66 33 66 00 66 33 99 00 66 33
    819 cc 00 66 33 ff 00 66 66 00 00 66 66 33 00 66 66
    820 66 00 66 66 99 00 66 66 cc 00 66 66 ff 00 66 99
    821 00 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
    822 cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
    823 66 00 66 cc 99 00 66 cc cc 00 66 cc ff 00 66 ff
    824 00 00 66 ff 33 00 66 ff 66 00 66 ff 99 00 66 ff
    825 cc 00 66 ff ff 00 99 00 00 00 99 00 33 00 99 00
    826 66 00 99 00 99 00 99 00 cc 00 99 00 ff 00 99 33
    827 00 00 99 33 33 00 99 33 66 00 99 33 99 00 99 33
    828 cc 00 99 33 ff 00 99 66 00 00 99 66 33 00 99 66
    829 66 00 99 66 99 00 99 66 cc 00 99 66 ff 00 99 99
    830 00 00 99 99 33 00 99 99 66 00 99 99 99 00 99 99
    831 cc 00 99 99 ff 00 99 cc 00 00 99 cc 33 00 99 cc
    832 66 00 99 cc 99 00 99 cc cc 00 99 cc ff 00 99 ff
    833 00 00 99 ff 33 00 99 ff 66 00 99 ff 99 00 99 ff
    834 cc 00 99 ff ff 00 cc 00 00 00 cc 00 33 00 cc 00
    835 66 00 cc 00 99 00 cc 00 cc 00 cc 00 ff 00 cc 33
     102533 00 33 ff 66 00 33 ff 99 00 33 ff cc 00 33 ff
     1026ff 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00
     102799 00 66 00 cc 00 66 00 ff 00 66 33 00 00 66 33
     102833 00 66 33 66 00 66 33 99 00 66 33 cc 00 66 33
     1029ff 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66
     103099 00 66 66 cc 00 66 99 00 00 66 99 33 00 66 99
     103166 00 66 99 99 00 66 99 cc 00 66 99 ff 00 66 cc
     103200 00 66 cc 33 00 66 cc 99 00 66 cc cc 00 66 cc
     1033ff 00 66 ff 00 00 66 ff 33 00 66 ff 99 00 66 ff
     1034cc 00 cc 00 ff 00 ff 00 cc 00 99 99 00 00 99 33
     103599 00 99 00 99 00 99 00 cc 00 99 00 00 00 99 33
     103633 00 99 00 66 00 99 33 cc 00 99 00 ff 00 99 66
     103700 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66
     1038cc 00 99 33 ff 00 99 99 33 00 99 99 66 00 99 99
     103999 00 99 99 cc 00 99 99 ff 00 99 cc 00 00 99 cc
     104033 00 66 cc 66 00 99 cc 99 00 99 cc cc 00 99 cc
     1041ff 00 99 ff 00 00 99 ff 33 00 99 cc 66 00 99 ff
     104299 00 99 ff cc 00 99 ff ff 00 cc 00 00 00 99 00
     104333 00 cc 00 66 00 cc 00 99 00 cc 00 cc 00 99 33
    836104400 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
    837 cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 cc 66
    838 66 00 cc 66 99 00 cc 66 cc 00 cc 66 ff 00 cc 99
     1045cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 99 66
     104666 00 cc 66 99 00 cc 66 cc 00 99 66 ff 00 cc 99
    839104700 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
    8401048cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
    841104966 00 cc cc 99 00 cc cc cc 00 cc cc ff 00 cc ff
    842 00 00 cc ff 33 00 cc ff 66 00 cc ff 99 00 cc ff
    843 cc 00 cc ff ff 00 ff 00 00 00 ff 00 33 00 ff 00
    844 66 00 ff 00 99 00 ff 00 cc 00 ff 00 ff 00 ff 33
    845 00 00 ff 33 33 00 ff 33 66 00 ff 33 99 00 ff 33
    846 cc 00 ff 33 ff 00 ff 66 00 00 ff 66 33 00 ff 66
    847 66 00 ff 66 99 00 ff 66 cc 00 ff 66 ff 00 ff 99
    848 00 00 ff 99 33 00 ff 99 66 00 ff 99 99 00 ff 99
    849 cc 00 ff 99 ff 00 ff cc 00 00 ff cc 33 00 ff cc
    850 66 00 ff cc 99 00 ff cc cc 00 ff cc ff 00 ff ff
    851 00 00 ff ff 33 00 ff ff 66 00 ff ff 99 00 ff ff
    852 cc 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
    853 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    854 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    855 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    856 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    857 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    858 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    859 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    861 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    862 00 00 00 00 00 00 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    863 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 a5 56 56 81 d7 d7
    864 d7 d7 d7 d7 d7 d7 d7 d7 81 55 2b ac ac 81 81 d7
    865 d7 d7 d7 d7 d7 d7 d7 56 56 81 56 58 ac ac 81 81
    866 d7 d7 d7 d7 d7 d7 56 81 81 81 81 ac ac ac ac 81
    867 81 d7 d7 d7 d7 d7 56 81 81 81 ac ac ac ac ac ac
    868 81 81 d7 d7 d7 d7 56 ac 81 81 81 ac ac ac ac ac
    869 ac 81 81 d7 d7 d7 d7 56 81 81 81 81 ac ac ac ac
    870 ac ac 81 81 d7 d7 d7 d7 56 81 81 81 81 ac ac ac
    871 ac ac ac 56 d7 d7 d7 d7 d7 56 81 81 81 ac ac ac
    872 ac ac ac 56 d7 d7 d7 d7 d7 d7 56 ac ac ac ac ac
    873 ac ac 56 81 d7 d7 d7 d7 d7 d7 d7 56 ac ac ac ac
    874 56 56 56 81 d7 d7 d7 d7 d7 d7 d7 d7 56 ac 56 2b
    875 81 81 56 81 d7 d7 d7 d7 d7 d7 d7 d7 d7 56 d7 81
    876 56 56 56 81 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    877 d7 d7 56 56 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7 d7
    878 d7 d7 a5 56 d7 d7 00 00 ff ff 00 00 ff ff 00 00
    879 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    880 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    881 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    882 ff ff 00 00 ff ff 28 00 00 00 20 00 00 00 40 00
    883 00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00
    884 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
    885 00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    886 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
    887 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    888 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 ff ff
    889 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    890 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    891 ff ff ff f0 00 ff ff ff ff ff ff ff ff ff ff ff
    892 ff ff f8 07 7f 0f ff ff ff ff ff ff ff ff ff ff
    893 ff f0 08 77 7f 70 ff ff ff ff ff ff ff ff ff ff
    894 f0 08 88 77 7f 77 0f ff ff ff ff ff ff ff ff f0
    895 07 88 88 79 7f 77 70 ff ff ff ff ff ff ff ff 07
    896 77 88 88 79 7f 77 77 0f ff ff ff ff ff ff f0 77
    897 77 88 88 7f f7 f7 77 70 ff ff ff ff ff ff f0 77
    898 77 88 87 77 77 7f 77 77 0f ff ff ff ff ff f0 77
    899 77 87 77 77 77 77 f7 77 70 ff ff ff ff ff f0 77
    900 77 77 77 77 77 77 7f 77 77 0f ff ff ff ff f0 77
    901 77 77 77 77 77 77 77 f7 77 70 ff ff ff ff f0 77
    902 77 77 77 77 77 77 77 7f 77 77 0f ff ff ff ff 07
    903 77 77 77 77 77 77 77 77 f7 77 70 ff ff ff ff f0
    904 77 77 77 77 77 77 77 77 7f 77 77 0f ff ff ff ff
    905 07 77 77 77 77 77 77 77 77 f7 77 0f ff ff ff ff
    906 f0 77 77 77 77 77 77 77 77 7f 77 0f ff ff ff ff
    907 ff 07 77 77 77 77 77 77 77 77 f7 0f ff ff ff ff
    908 ff f0 77 77 77 ff 77 77 77 77 7f 0f ff ff ff ff
    909 ff ff 07 77 ff 77 77 77 77 77 77 0f ff ff ff ff
    910 ff ff f0 7f 77 77 77 77 77 77 00 ff ff ff ff ff
    911 ff ff ff 07 77 77 77 77 77 00 70 ff ff ff ff ff
    912 ff ff ff f0 77 77 77 77 00 7f 77 0f ff ff ff ff
    913 ff ff ff ff 07 77 77 00 77 77 f7 0f ff ff ff ff
    914 ff ff ff ff f0 77 00 07 77 77 00 ff ff ff ff ff
    915 ff ff ff ff ff 00 ff f0 77 00 70 ff ff ff ff ff
    916 ff ff ff ff ff ff ff ff 00 ff 07 0f ff ff ff ff
    917 ff ff ff ff ff ff ff ff ff ff f0 70 ff ff ff ff
    918 ff ff ff ff ff ff ff ff ff ff f0 70 ff ff ff ff
    919 ff ff ff ff ff ff ff ff ff ff f8 70 ff ff ff ff
    920 ff ff ff ff ff ff ff ff ff ff ff 8f ff ff 00 00
    921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    927 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    928 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00
    929 00 00 20 00 00 00 40 00 00 00 01 00 08 00 00 00
    930 00 00 80 04 00 00 00 00 00 00 00 00 00 00 00 01
    931 00 00 00 00 00 00 00 00 00 00 ff ff ff 00 80 80
    932 80 00 c0 c0 c0 00 a4 a0 a0 00 58 58 58 00 00 00
    933 ff 00 dc c0 b2 00 00 00 00 00 00 00 00 00 00 00
    934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    935 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    936 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    937 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    938 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    939 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    941 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    942 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    943 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    944 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    945 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    946 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    947 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    954 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    955 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    956 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    957 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    958 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    959 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    961 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    962 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    963 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    964 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    965 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    966 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    967 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    968 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    969 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    970 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    971 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    972 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    973 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    974 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    975 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    976 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    977 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    978 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    979 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    981 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    982 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    983 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    984 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    985 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    986 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    987 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    988 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    989 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    991 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    992 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    993 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    994 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    995 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01
    996 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    997 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    998 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    999 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1000 01 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01
    1001 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 05
    1002 00 03 03 01 00 01 01 01 01 01 01 01 01 01 01 01
    1003 01 01 01 01 01 01 01 01 01 01 01 01 01 00 00 05
    1004 03 03 03 01 03 00 01 01 01 01 01 01 01 01 01 01
    1005 01 01 01 01 01 01 01 01 01 01 01 00 00 02 02 05
    1006 03 03 03 01 03 03 00 01 01 01 01 01 01 01 01 01
    1007 01 01 01 01 01 01 01 01 01 00 00 04 02 02 02 05
    1008 03 06 03 01 03 03 03 00 01 01 01 01 01 01 01 01
    1009 01 01 01 01 01 01 01 01 00 04 04 04 02 02 02 05
    1010 03 06 03 01 03 03 03 03 00 01 01 01 01 01 01 01
    1011 01 01 01 01 01 01 01 00 04 04 04 04 02 02 02 05
    1012 03 01 01 03 01 03 03 03 03 00 01 01 01 01 01 01
    1013 01 01 01 01 01 01 01 00 04 04 04 04 02 02 02 03
    1014 03 03 03 03 03 01 03 03 03 03 00 01 01 01 01 01
    1015 01 01 01 01 01 01 01 00 04 04 04 04 02 03 03 03
    1016 03 03 03 03 03 03 01 03 03 03 03 00 01 01 01 01
    1017 01 01 01 01 01 01 01 00 04 04 04 03 03 04 04 03
    1018 03 03 03 03 03 03 03 01 03 03 03 03 00 01 01 01
    1019 01 01 01 01 01 01 01 00 04 03 03 04 04 04 04 04
    1020 03 03 03 03 03 03 03 03 01 03 03 03 03 00 01 01
    1021 01 01 01 01 01 01 01 00 03 04 04 04 04 04 04 04
    1022 04 03 03 03 03 03 03 03 03 01 03 03 03 03 00 01
    1023 01 01 01 01 01 01 01 01 00 04 04 04 04 04 04 04
    1024 04 04 03 03 03 03 03 03 03 03 01 03 03 03 03 00
    1025 01 01 01 01 01 01 01 01 01 00 04 04 04 04 04 04
    1026 04 04 04 03 03 03 03 03 03 03 03 01 03 03 03 03
    1027 00 01 01 01 01 01 01 01 01 01 00 04 04 04 04 04
    1028 04 04 04 04 03 03 03 03 03 03 03 03 01 03 03 03
    1029 00 01 01 01 01 01 01 01 01 01 01 00 04 04 04 04
    1030 04 04 04 04 04 03 03 03 03 03 03 03 03 01 03 03
    1031 00 01 01 01 01 01 01 01 01 01 01 01 00 04 04 04
    1032 04 04 04 04 04 04 03 03 03 03 03 03 03 03 01 03
    1033 00 01 01 01 01 01 01 01 01 01 01 01 01 00 04 04
    1034 04 04 04 04 01 01 03 03 03 03 03 03 03 03 03 01
    1035 00 01 01 01 01 01 01 01 01 01 01 01 01 01 00 04
    1036 04 04 01 01 03 03 03 03 03 03 03 03 03 03 03 03
    1037 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00
    1038 03 01 03 03 03 03 03 03 03 03 03 03 03 03 00 00
    1039 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1040 00 03 03 03 03 03 03 03 03 03 03 03 00 00 04 00
    1041 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1042 01 00 03 03 03 03 03 03 03 03 00 00 04 01 04 04
    1043 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1044 01 01 00 03 03 03 03 03 00 00 04 04 04 04 01 04
    1045 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1046 01 01 01 00 03 03 00 00 00 04 04 04 04 04 00 00
    1047 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1048 01 01 01 01 00 00 01 01 01 00 04 04 00 00 04 00
    1049 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1050 01 01 01 01 01 01 01 01 01 01 00 00 01 01 00 04
    1051 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1052 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00
    1053 04 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1054 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00
    1055 04 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1056 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 05
    1057 04 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1058 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
    1059 05 01 01 01 01 01 00 00 00 00 00 00 00 00 00 00
    1060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1061 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1062 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1063 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1065 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1066 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1067 00 00 00 00 00 00
    1068 '}
    1069 
    1070 /* mycomputer */
    1071 15      ICON
    1072 {'
    1073 00 00 01 00 02 00 10 10 10 00 00 00 00 00 28 01
    1074 00 00 26 00 00 00 20 20 10 00 00 00 00 00 e8 02
    1075 00 00 4e 01 00 00 28 00 00 00 10 00 00 00 20 00
    1076 00 00 01 00 04 00 00 00 00 00 c0 00 00 00 00 00
    1077 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
    1078 00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    1079 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
    1080 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    1081 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
    1082 00 00 00 00 00 00 07 77 77 77 77 77 77 70 07 77
    1083 77 77 77 77 77 70 00 00 00 00 00 00 00 00 f0 00
    1084 00 00 00 00 00 0f f0 77 77 77 77 77 77 0f f0 70
    1085 00 00 00 00 07 0f f0 70 cc cc cc cc 07 0f f0 70
    1086 cc cc cc cc 07 0f f0 70 cc cc cc cc 07 0f f0 70
    1087 cc cc cc cc 07 0f f0 70 cc cc cc cc 07 0f f0 70
    1088 cc cc cc cc 07 0f f0 70 00 00 00 00 07 0f f0 77
    1089 77 77 77 77 77 0f f0 00 00 00 00 00 00 0f 00 00
    1090 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1091 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1092 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1093 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 28 00
    1094 00 00 20 00 00 00 40 00 00 00 01 00 04 00 00 00
    1095 00 00 80 02 00 00 00 00 00 00 00 00 00 00 10 00
    1096 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
    1097 00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
    1098 00 00 c0 c0 c0 00 80 80 80 00 00 00 ff 00 00 ff
     105000 00 cc ff 33 00 99 ff 66 00 cc ff 99 00 cc ff
     1051cc 00 cc ff ff 00 cc 00 33 00 ff 00 66 00 ff 00
     105299 00 cc 33 00 00 ff 33 33 00 ff 33 66 00 ff 33
     105399 00 ff 33 cc 00 ff 33 ff 00 ff 66 00 00 ff 66
     105433 00 cc 66 66 00 ff 66 99 00 ff 66 cc 00 cc 66
     1055ff 00 ff 99 00 00 ff 99 33 00 ff 99 66 00 ff 99
     105699 00 ff 99 cc 00 ff 99 ff 00 ff cc 00 00 ff cc
     105733 00 ff cc 66 00 ff cc 99 00 ff cc cc 00 ff cc
     1058ff 00 ff ff 33 00 cc ff 66 00 ff ff 99 00 ff ff
     1059cc 00 66 66 ff 00 66 ff 66 00 66 ff ff 00 ff 66
     106066 00 ff 66 ff 00 ff ff 66 00 21 00 a5 00 5f 5f
     10615f 00 77 77 77 00 86 86 86 00 96 96 96 00 cb cb
     1062cb 00 b2 b2 b2 00 d7 d7 d7 00 dd dd dd 00 e3 e3
     1063e3 00 ea ea ea 00 f1 f1 f1 00 f8 f8 f8 00 f0 fb
     1064ff 00 a4 a0 a0 00 80 80 80 00 00 00 ff 00 00 ff
    1099106500 00 00 ff ff 00 ff 00 00 00 ff 00 ff 00 ff ff
    1100 00 00 ff ff ff 00 ff ff ff ff ff ff ff ff ff ff
    1101 ff ff ff ff ff ff f0 00 00 00 00 00 00 00 00 00
    1102 00 00 00 00 00 0f f0 77 77 77 77 77 77 77 77 77
    1103 77 77 77 77 77 0f f0 77 77 77 77 77 77 77 77 77
    1104 77 77 77 77 77 0f f0 77 77 77 77 77 77 77 77 77
    1105 77 77 77 77 77 0f f0 77 77 77 77 77 77 77 77 77
    1106 77 77 77 77 77 0f f0 77 77 77 77 77 77 77 77 77
    1107 77 77 77 77 77 0f f0 00 00 00 00 00 00 00 00 00
    1108 00 00 00 00 00 0f ff f0 00 00 00 00 00 00 00 00
    1109 00 00 00 00 0f ff ff f0 77 77 77 77 77 77 77 77
    1110 77 77 77 77 0f ff ff f0 77 77 77 77 77 77 77 77
    1111 77 77 77 77 0f ff ff f0 77 00 00 00 00 00 00 00
    1112 00 00 00 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1113 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1114 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1115 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1116 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1117 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1118 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1119 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1120 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1121 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1122 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1123 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1124 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1125 cc cc c0 77 0f ff ff f0 77 0c cc cc cc cc cc cc
    1126 cc cc c0 77 0f ff ff f0 77 00 00 00 00 00 00 00
    1127 00 00 00 77 0f ff ff f0 77 77 77 77 77 77 77 77
    1128 77 77 77 77 0f ff ff f0 77 77 77 77 77 77 77 77
    1129 77 77 77 77 0f ff ff f0 00 00 00 00 00 00 00 00
    1130 00 00 00 00 0f ff ff ff ff ff ff ff ff ff ff ff
    1131 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1132 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
    1133 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1135 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1136 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1137 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1138 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1139 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1140 00 00 00 00 00 00
     106600 00 ff ff ff 00 00 00 00 00 00 00 00 00 00 00
     106700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6d
     106800 00 00 00 00 00 00 00 00 00 00 00 00 ff 6d 00
     10696d 00 00 00 00 00 00 00 00 00 00 ff 6d 00 ff 6d
     107000 00 00 00 00 00 00 00 00 ff 6d 00 ff 6d 00 00
     107192 00 6d 00 00 00 6d ff 6d 00 ff 6d 00 00 92 00
     107286 86 6d 6d 00 00 00 6d ff 6d 00 00 92 00 86 86
     1073ff 86 6d 6d 6d 00 00 00 6d 00 00 00 86 86 ff ff
     1074ff 86 6d 6d 6d 00 00 00 00 6d 92 86 86 ff ff ff
     1075ff 86 6d 6d 6d 00 00 00 00 6d 92 86 ff ff ff ff
     107686 86 6d 6d 6d 00 00 00 00 6d 92 86 ff ff 86 86
     107786 ff 92 6d 6d 00 00 00 00 6d 92 86 86 86 86 ff
     107800 00 ff 00 6d 00 00 00 00 6d 92 86 86 ff 00 00
     1079ff 00 92 92 6d 00 00 00 00 6d 92 ff 00 00 ff 00
     108092 92 6d 6d 00 00 00 00 00 6d 00 00 ff 00 92 92
     10816d 6d 00 00 00 00 00 00 00 00 6d 6d 6d 6d 6d 6d
     108200 00 00 00 00 00 fe 3f 00 00 f9 9f 00 00 e6 4f
     108300 00 99 07 00 00 64 13 00 00 10 40 00 00 81 00
     108400 00 c4 01 00 00 e0 01 00 00 e0 01 00 00 e0 01
     108500 00 e0 35 00 00 e0 d1 00 00 e3 43 00 00 ed 0f
     108600 00 f0 3f 00 00
    11411087'}
    11421088
     
    1144109034      ICON
    11451091{'
    1146 00 00 01 00 02 00 10 10 10 00 00 00 00 00 28 01
    1147 00 00 26 00 00 00 20 20 10 00 00 00 00 00 e8 02
    1148 00 00 4e 01 00 00 28 00 00 00 10 00 00 00 20 00
    1149 00 00 01 00 04 00 00 00 00 00 c0 00 00 00 00 00
    1150 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00
     109200 00 01 00 02 00 20 20 00 00 00 00 00 00 a8 08
     109300 00 26 00 00 00 10 10 00 00 00 00 00 00 68 05
     109400 00 ce 08 00 00 28 00 00 00 20 00 00 00 40 00
     109500 00 01 00 08 00 00 00 00 00 80 04 00 00 00 00
     109600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1151109700 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00
    1152 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 80 80
     109800 00 80 00 80 00 80 80 00 00 c0 c0 c0 00 c0 dc
     1099c0 00 f0 ca a6 00 04 04 04 00 08 08 08 00 0c 0c
     11000c 00 11 11 11 00 16 16 16 00 1c 1c 1c 00 22 22
     110122 00 29 29 29 00 55 55 55 00 4d 4d 4d 00 42 42
     110242 00 39 39 39 00 80 7c ff 00 50 50 ff 00 93 00
     1103d6 00 ff ec cc 00 c6 d6 ef 00 d6 e7 e7 00 90 a9
     1104ad 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00
     1105cc 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33
     110699 00 00 33 cc 00 00 33 ff 00 00 66 00 00 00 66
     110733 00 00 66 66 00 00 66 99 00 00 66 cc 00 00 66
     1108ff 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99
     110999 00 00 99 cc 00 00 99 ff 00 00 cc 00 00 00 cc
     111033 00 00 cc 66 00 00 cc 99 00 00 cc cc 00 00 cc
     1111ff 00 00 ff 66 00 00 ff 99 00 00 ff cc 00 33 00
     111200 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00
     1113cc 00 33 00 ff 00 33 33 00 00 33 33 33 00 33 33
     111466 00 33 33 99 00 33 33 cc 00 33 33 ff 00 33 66
     111500 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66
     1116cc 00 33 66 ff 00 33 99 00 00 33 99 33 00 33 99
     111766 00 33 99 99 00 33 99 cc 00 33 99 ff 00 33 cc
     111800 00 33 cc 33 00 33 cc 66 00 33 cc 99 00 33 cc
     1119cc 00 33 cc ff 00 33 ff 33 00 33 ff 66 00 33 ff
     112099 00 33 ff cc 00 33 ff ff 00 66 00 00 00 66 00
     112133 00 66 00 66 00 66 00 99 00 66 00 cc 00 66 00
     1122ff 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33
     112399 00 66 33 cc 00 66 33 ff 00 66 66 00 00 66 66
     112433 00 66 66 66 00 66 66 99 00 66 66 cc 00 66 99
     112500 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99
     1126cc 00 66 99 ff 00 66 cc 00 00 66 cc 33 00 66 cc
     112799 00 66 cc cc 00 66 cc ff 00 66 ff 00 00 66 ff
     112833 00 66 ff 99 00 66 ff cc 00 cc 00 ff 00 ff 00
     1129cc 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00
     1130cc 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33
     1131cc 00 99 00 ff 00 99 66 00 00 99 66 33 00 99 33
     113266 00 99 66 99 00 99 66 cc 00 99 33 ff 00 99 99
     113333 00 99 99 66 00 99 99 99 00 99 99 cc 00 99 99
     1134ff 00 99 cc 00 00 99 cc 33 00 66 cc 66 00 99 cc
     113599 00 99 cc cc 00 99 cc ff 00 99 ff 00 00 99 ff
     113633 00 99 cc 66 00 99 ff 99 00 99 ff cc 00 99 ff
     1137ff 00 cc 00 00 00 99 00 33 00 cc 00 66 00 cc 00
     113899 00 cc 00 cc 00 99 33 00 00 cc 33 33 00 cc 33
     113966 00 cc 33 99 00 cc 33 cc 00 cc 33 ff 00 cc 66
     114000 00 cc 66 33 00 99 66 66 00 cc 66 99 00 cc 66
     1141cc 00 99 66 ff 00 cc 99 00 00 cc 99 33 00 cc 99
     114266 00 cc 99 99 00 cc 99 cc 00 cc 99 ff 00 cc cc
     114300 00 cc cc 33 00 cc cc 66 00 cc cc 99 00 cc cc
     1144cc 00 cc cc ff 00 cc ff 00 00 cc ff 33 00 99 ff
     114566 00 cc ff 99 00 cc ff cc 00 cc ff ff 00 cc 00
     114633 00 ff 00 66 00 ff 00 99 00 cc 33 00 00 ff 33
     114733 00 ff 33 66 00 ff 33 99 00 ff 33 cc 00 ff 33
     1148ff 00 ff 66 00 00 ff 66 33 00 cc 66 66 00 ff 66
     114999 00 ff 66 cc 00 cc 66 ff 00 ff 99 00 00 ff 99
     115033 00 ff 99 66 00 ff 99 99 00 ff 99 cc 00 ff 99
     1151ff 00 ff cc 00 00 ff cc 33 00 ff cc 66 00 ff cc
     115299 00 ff cc cc 00 ff cc ff 00 ff ff 33 00 cc ff
     115366 00 ff ff 99 00 ff ff cc 00 66 66 ff 00 66 ff
     115466 00 66 ff ff 00 ff 66 66 00 ff 66 ff 00 ff ff
     115566 00 21 00 a5 00 5f 5f 5f 00 77 77 77 00 86 86
     115686 00 96 96 96 00 cb cb cb 00 b2 b2 b2 00 d7 d7
     1157d7 00 dd dd dd 00 e3 e3 e3 00 ea ea ea 00 f1 f1
     1158f1 00 f8 f8 f8 00 f0 fb ff 00 a4 a0 a0 00 80 80
    1153115980 00 00 00 ff 00 00 ff 00 00 00 ff ff 00 ff 00
    1154 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 ff ff
    1155 ff ff ff ff ff ff ff ff ff ff ff ff ff ff f0 00
    1156 00 00 00 00 00 00 f0 99 00 aa 00 cc 0b b0 f0 99
    1157 00 aa 00 cc 0b b0 f0 99 00 aa 00 cc 0b b0 f0 99
    1158 00 aa 00 cc 0b b0 f0 99 00 aa 00 cc 0b b0 f0 99
    1159 00 aa 00 cc 0b b0 f0 99 00 aa 00 cc 0b b0 f0 99
    1160 00 00 00 cc 0b b0 f0 99 0f ff f0 cc 0b b0 f0 99
    1161 0f ff f0 cc 00 00 f0 00 0f ff f0 cc 0f ff ff ff
    1162 ff ff f0 cc 0f ff ff ff ff ff f0 00 0f ff 00 00
    1163 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1164 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1165 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00
    1166 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 28 00
    1167 00 00 20 00 00 00 40 00 00 00 01 00 04 00 00 00
    1168 00 00 80 02 00 00 00 00 00 00 00 00 00 00 10 00
     116000 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00 00 00
     116100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     116200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     116300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     116400 9a 4b 00 00 00 00 00 00 00 00 00 00 00 00 00
     116500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74
     11664c 9a 4b 4b 4b 4b 4b 00 00 00 00 00 00 00 00 00
     116700 00 00 00 00 00 00 00 00 00 00 00 93 9a 74 74
     11684c bd 4b 4b 4b 4b 4b 4b 4b 4c 00 00 00 00 00 00
     116900 00 00 00 00 00 00 00 00 00 74 4c 74 93 74 52
     11704b 9a 4c 4b 4b 4b 4b 4b 4b 4c 00 00 00 00 00 00
     117100 00 00 00 00 00 00 00 00 00 4b 00 22 44 4b 44
     117223 9a 4c 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     117300 00 3d 00 00 00 00 00 00 3d 4b 00 00 00 1d 00
     117400 bd 4c 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     117500 00 00 00 00 00 00 00 00 3d 4b 00 00 1d 1d 1d
     11761d bd 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     117700 00 22 23 23 00 00 00 00 3d 4b 00 00 1d 1d 1d
     11781d bd 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     117900 00 23 23 23 23 23 23 1d 22 4c 1d 1d 1d 1d 00
     118000 c3 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     118100 00 23 23 23 23 23 23 23 4b 4c 1d 1d 1d 1d 00
     118200 c3 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     118300 00 23 23 23 23 23 23 23 4a 4c 1d 1d 1d 1d 00
     118400 c3 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     118500 00 23 23 23 23 23 23 23 44 4c 1d 00 00 00 00
     118600 c3 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     118700 00 23 23 23 23 23 23 23 44 4c 1d 00 00 00 00
     118823 c3 4c 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     118900 00 23 23 23 23 23 23 23 44 4c 00 22 4b 4b 4a
     119044 93 4b 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     119100 00 23 23 23 23 23 23 23 23 93 4a 4b 4b 93 c3
     119274 74 4b 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     119300 00 23 23 23 23 23 23 23 23 4b c3 c3 c3 bd bd
     11944b 74 4b 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     119500 00 23 23 23 23 23 23 23 22 4b c3 bd 9a 9a 4c
     119600 75 4a 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     119700 00 22 23 23 23 23 22 22 1d 44 44 44 43 44 74
     11989a c3 4b 4b 4b 4b 4b 4b 4c 4c 00 00 00 00 00 00
     119900 00 00 22 22 22 1d 1d 22 44 bd bd bd bd bd bd
     12009a 93 52 4b 4b 4b 4b 4b 4b 4b 00 00 00 00 00 00
     120100 00 00 23 4b 74 99 c3 ff ff ff c3 bd bd 9a 7a
     120274 74 74 74 74 4c 44 22 00 00 00 00 00 00 00 00
     120300 00 ff ff ff ff ff 9a 74 74 74 52 4c 4c 4c 4c
     12044b 44 1d 00 00 00 61 00 00 00 00 00 00 00 00 00
     120500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     120600 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     120700 00 00 00 00 00 00 6d 6d 92 43 00 00 00 00 00
     120800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     120900 00 00 00 00 00 6d 6d 6d 6d 43 6d 6d 00 00 00
     121000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     121100 00 00 00 00 00 43 00 43 00 6d 6d 6d 43 00 00
     121200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     121300 00 00 00 00 00 00 00 00 00 92 92 6d 43 00 00
     121400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     121500 00 00 00 00 00 92 ff 00 00 92 92 6d 43 00 00
     121600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     121700 00 00 00 00 00 92 92 00 00 92 00 00 00 00 00
     121800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     121900 00 00 00 00 3d 92 92 92 43 43 00 00 00 00 00
     122000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     122100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     122200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     122300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     122400 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
     1225c3 ff ff ff 00 3f ff fc 00 07 ff e0 00 07 ff e0
     122600 07 ff e0 00 07 e7 e0 00 07 e0 e0 00 07 e0 20
     122700 07 e0 00 00 07 e0 00 00 07 e0 00 00 07 e0 00
     122800 07 e0 00 00 07 e0 00 00 07 e0 00 00 07 e0 00
     122900 07 e0 00 00 07 e0 00 00 07 e0 00 00 07 e0 00
     123000 07 e0 00 00 7f e0 00 0f ff fe 00 ff ff fe 00
     12317f ff fe 00 7f ff fe e0 7f ff fe 20 7f ff fe 24
     12327f ff fe 01 ff ff fe 07 ff ff ff ff ff ff 28 00
     123300 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00
     123400 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00
    1169123500 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
    1170123600 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
    1171 00 00 c0 c0 c0 00 80 80 80 00 00 00 ff 00 00 ff
     123700 00 c0 c0 c0 00 c0 dc c0 00 f0 ca a6 00 04 04
     123804 00 08 08 08 00 0c 0c 0c 00 11 11 11 00 16 16
     123916 00 1c 1c 1c 00 22 22 22 00 29 29 29 00 55 55
     124055 00 4d 4d 4d 00 42 42 42 00 39 39 39 00 80 7c
     1241ff 00 50 50 ff 00 93 00 d6 00 ff ec cc 00 c6 d6
     1242ef 00 d6 e7 e7 00 90 a9 ad 00 00 00 33 00 00 00
     124366 00 00 00 99 00 00 00 cc 00 00 33 00 00 00 33
     124433 00 00 33 66 00 00 33 99 00 00 33 cc 00 00 33
     1245ff 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66
     124699 00 00 66 cc 00 00 66 ff 00 00 99 00 00 00 99
     124733 00 00 99 66 00 00 99 99 00 00 99 cc 00 00 99
     1248ff 00 00 cc 00 00 00 cc 33 00 00 cc 66 00 00 cc
     124999 00 00 cc cc 00 00 cc ff 00 00 ff 66 00 00 ff
     125099 00 00 ff cc 00 33 00 00 00 33 00 33 00 33 00
     125166 00 33 00 99 00 33 00 cc 00 33 00 ff 00 33 33
     125200 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33
     1253cc 00 33 33 ff 00 33 66 00 00 33 66 33 00 33 66
     125466 00 33 66 99 00 33 66 cc 00 33 66 ff 00 33 99
     125500 00 33 99 33 00 33 99 66 00 33 99 99 00 33 99
     1256cc 00 33 99 ff 00 33 cc 00 00 33 cc 33 00 33 cc
     125766 00 33 cc 99 00 33 cc cc 00 33 cc ff 00 33 ff
     125833 00 33 ff 66 00 33 ff 99 00 33 ff cc 00 33 ff
     1259ff 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00
     126099 00 66 00 cc 00 66 00 ff 00 66 33 00 00 66 33
     126133 00 66 33 66 00 66 33 99 00 66 33 cc 00 66 33
     1262ff 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66
     126399 00 66 66 cc 00 66 99 00 00 66 99 33 00 66 99
     126466 00 66 99 99 00 66 99 cc 00 66 99 ff 00 66 cc
     126500 00 66 cc 33 00 66 cc 99 00 66 cc cc 00 66 cc
     1266ff 00 66 ff 00 00 66 ff 33 00 66 ff 99 00 66 ff
     1267cc 00 cc 00 ff 00 ff 00 cc 00 99 99 00 00 99 33
     126899 00 99 00 99 00 99 00 cc 00 99 00 00 00 99 33
     126933 00 99 00 66 00 99 33 cc 00 99 00 ff 00 99 66
     127000 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66
     1271cc 00 99 33 ff 00 99 99 33 00 99 99 66 00 99 99
     127299 00 99 99 cc 00 99 99 ff 00 99 cc 00 00 99 cc
     127333 00 66 cc 66 00 99 cc 99 00 99 cc cc 00 99 cc
     1274ff 00 99 ff 00 00 99 ff 33 00 99 cc 66 00 99 ff
     127599 00 99 ff cc 00 99 ff ff 00 cc 00 00 00 99 00
     127633 00 cc 00 66 00 cc 00 99 00 cc 00 cc 00 99 33
     127700 00 cc 33 33 00 cc 33 66 00 cc 33 99 00 cc 33
     1278cc 00 cc 33 ff 00 cc 66 00 00 cc 66 33 00 99 66
     127966 00 cc 66 99 00 cc 66 cc 00 99 66 ff 00 cc 99
     128000 00 cc 99 33 00 cc 99 66 00 cc 99 99 00 cc 99
     1281cc 00 cc 99 ff 00 cc cc 00 00 cc cc 33 00 cc cc
     128266 00 cc cc 99 00 cc cc cc 00 cc cc ff 00 cc ff
     128300 00 cc ff 33 00 99 ff 66 00 cc ff 99 00 cc ff
     1284cc 00 cc ff ff 00 cc 00 33 00 ff 00 66 00 ff 00
     128599 00 cc 33 00 00 ff 33 33 00 ff 33 66 00 ff 33
     128699 00 ff 33 cc 00 ff 33 ff 00 ff 66 00 00 ff 66
     128733 00 cc 66 66 00 ff 66 99 00 ff 66 cc 00 cc 66
     1288ff 00 ff 99 00 00 ff 99 33 00 ff 99 66 00 ff 99
     128999 00 ff 99 cc 00 ff 99 ff 00 ff cc 00 00 ff cc
     129033 00 ff cc 66 00 ff cc 99 00 ff cc cc 00 ff cc
     1291ff 00 ff ff 33 00 cc ff 66 00 ff ff 99 00 ff ff
     1292cc 00 66 66 ff 00 66 ff 66 00 66 ff ff 00 ff 66
     129366 00 ff 66 ff 00 ff ff 66 00 21 00 a5 00 5f 5f
     12945f 00 77 77 77 00 86 86 86 00 96 96 96 00 cb cb
     1295cb 00 b2 b2 b2 00 d7 d7 d7 00 dd dd dd 00 e3 e3
     1296e3 00 ea ea ea 00 f1 f1 f1 00 f8 f8 f8 00 f0 fb
     1297ff 00 a4 a0 a0 00 80 80 80 00 00 00 ff 00 00 ff
    1172129800 00 00 ff ff 00 ff 00 00 00 ff 00 ff 00 ff ff
    1173 00 00 ff ff ff 00 ff ff ff ff ff ff ff ff ff ff
    1174 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1175 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1176 ff ff ff ff ff ff ff ff f0 00 00 00 00 00 00 00
    1177 00 00 00 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1178 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1179 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1180 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1181 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1182 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1183 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1184 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1185 d0 0a a0 ff ff ff ff ff f0 c0 c0 02 20 0b b0 0d
    1186 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1187 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1188 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1189 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1190 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1191 d0 0a a0 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1192 d0 00 00 ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1193 d0 ff ff ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1194 d0 ff ff ff ff ff ff ff f0 cc c0 02 20 0b b0 0d
    1195 d0 ff ff ff ff ff ff ff f0 cc c0 00 00 0b b0 0d
    1196 d0 ff ff ff ff ff ff ff f0 cc c0 ff ff 0b b0 0d
    1197 d0 ff ff ff ff ff ff ff f0 cc c0 ff ff 00 00 0d
    1198 d0 ff ff ff ff ff ff ff f0 00 00 ff ff ff ff 0d
    1199 d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0d
    1200 d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00
    1201 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1202 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1203 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1204 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    1205 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
    1206 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1207 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1208 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1211 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1212 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    1213 00 00 00 00 00 00
     129900 00 ff ff ff 00 00 00 00 00 00 00 43 22 43 22
     130022 22 22 22 00 00 00 00 00 00 00 44 74 bd 74 93
     13014b 4c 52 22 00 00 00 00 00 00 44 93 22 4b 00 9a
     13024a 4b 4b 22 00 00 00 00 00 00 22 93 22 4b 44 bd
     13034a 4b 4b 22 00 00 00 00 24 00 22 93 22 44 23 bd
     13044a 4b 4b 22 00 00 00 00 4b 23 22 93 00 22 44 bd
     13054a 4b 4c 22 00 00 00 00 4b 4b 22 93 00 22 44 99
     13064b 4b 4c 22 00 00 00 00 4b 4b 22 93 1d 23 9a 9a
     13074b 4b 4b 22 00 00 00 00 00 1d 1d 93 9a 00 9a 93
     130844 4b 52 22 00 00 00 00 6e 00 99 9a 6e 74 74 74
     130974 4b 22 00 00 00 00 43 00 92 4a 22 22 22 1d 3d
     13103d 61 00 00 00 00 00 00 00 00 6d 43 43 00 00 00
     131100 00 00 00 00 00 00 00 00 43 6d 43 92 00 00 00
     131200 00 00 00 00 00 00 00 00 43 ff 43 92 00 00 00
     131300 00 00 00 00 00 00 00 00 67 43 00 00 00 00 00
     131400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     131500 00 00 00 00 00 fc 03 00 00 f8 03 00 00 f0 03
     131600 00 90 03 00 00 80 03 00 00 80 03 00 00 80 03
     131700 00 80 03 00 00 81 03 00 00 90 03 00 00 a0 0f
     131800 00 c0 ff 00 00 e0 ff 00 00 e0 ff 00 00 e1 ff
     131900 00 ff ff 00 00
    12141320'}
    12151321
     
    12321338 */
    12331339#include "shell32_En.orc"
     1340
     1341/* CB: the new about dialog isn't implemented for these languages */
     1342
    12341343//#include "shell32_Ca.orc"
    12351344//#include "shell32_Cs.orc"
  • trunk/src/shell32/shresdef.h

    r3217 r3243  
    1 /* $Id: shresdef.h,v 1.3 2000-03-24 17:17:30 cbratschi Exp $ */
     1/* $Id: shresdef.h,v 1.4 2000-03-26 16:34:56 cbratschi Exp $ */
    22
    33/*
     
    3030#define IDS_SHV_COLUMN4DV       13
    3131
    32 #define IDS_DESKTOP             20
    33 #define IDS_MYCOMPUTER          21
    34 
    3532#define IDS_SELECT              22
    3633#define IDS_OPEN                23
     
    4037#define IDS_VIEW_DETAILS        27
    4138
     39#define IDS_SHV_INVALID_FILENAME_TITLE 28
     40#define IDS_SHV_INVALID_FILENAME       29
     41#define IDS_SHV_INVALID_MOVE_TITLE     30
     42#define IDS_SHV_INVALID_MOVE           31
     43
     44#define ID_LISTVIEW     2000
     45#define ID_NEWFOLDER    0x7053
     46
     47#define IDS_ABOUTBOX                    101
     48#define IDS_DOCUMENTFOLDERS             102
     49#define IDS_PERSONAL                    103
     50#define IDS_FAVORITES                   104
     51#define IDS_PATH                        105
     52#define IDS_DESKTOP                     106
     53
     54#define IDS_FONTS                       108
     55#define IDS_MYCOMPUTER                  110
     56#define IDS_SYSTEMFOLDERS               112
     57#define IDS_LOCALHARDRIVES              113
     58#define IDS_FILENOTFOUND                114
    4259
    4360#endif /* __WINE_SHELL_RES_H */
  • trunk/src/shell32/shv_bg_cmenu.cpp

    r1558 r3243  
    1 /* $Id: shv_bg_cmenu.cpp,v 1.2 1999-11-02 20:38:48 phaller Exp $ */
     1/* $Id: shv_bg_cmenu.cpp,v 1.3 2000-03-26 16:34:56 cbratschi Exp $ */
    22
    33/*
     
    55 * Win32 SHELL32 Subsystem for OS/2
    66 * 1998/05/19 PH Patrick Haller (haller@zebra.fh-weingarten.de)
     7 *
     8 * Corel WINE 20000324 level
    79 */
    810
Note: See TracChangeset for help on using the changeset viewer.