source: trunk/src/kernel32/cvticongrp.cpp@ 1036

Last change on this file since 1036 was 997, checked in by sandervl, 26 years ago

Fixes for icon(group) + cursorgroup conversion

File size: 3.6 KB
Line 
1/* $Id: cvticongrp.cpp,v 1.4 1999-09-21 08:24:53 sandervl Exp $ */
2
3/*
4 * PE2LX Icon group code
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#define INCL_GPIBITMAPS
13#define INCL_BITMAPFILEFORMAT
14#define INCL_DOSFILEMGR /* File Manager values */
15#define INCL_DOSERRORS /* DOS Error values */
16#define INCL_DOSPROCESS /* DOS Process values */
17#define INCL_DOSMISC /* DOS Miscellanous values */
18#define INCL_WIN
19#include <os2wrap.h>
20#include <stdio.h>
21#include <string.h>
22#include <stdlib.h>
23#include <string.h>
24#include <win32type.h>
25#include <winicon.h>
26#include <winres.h>
27#include <misc.h>
28#include "cvtresource.h"
29
30HRSRC WIN32API FindResourceA(HINSTANCE hModule, LPCSTR lpszName, LPCSTR lpszType);
31
32//******************************************************************************
33//******************************************************************************
34void *ConvertIconGroup(IconHeader *ihdr, int size, Win32ImageBase *module)
35{
36 ResourceDirectory *rdir = (ResourceDirectory *)(ihdr + 1);
37 int i, groupsize = 0, os2iconsize;
38 BITMAPARRAYFILEHEADER2 *bafh, *orgbafh;
39 WINBITMAPINFOHEADER *iconhdr;
40 Win32Resource *winres;
41 void *os2icon;
42
43 dprintf(("Icon Group type :%d", ihdr->wType));
44 dprintf(("Icon Group count:%d", ihdr->wCount));
45 for(i=0;i<ihdr->wCount;i++) {
46 dprintf(("Icon : %d", rdir->wNameOrdinal));
47 dprintf(("Width : %d", (int)rdir->bWidth));
48 dprintf(("Height : %d", (int)rdir->bHeight));
49 dprintf(("Colors : %d", (int)rdir->bColorCount));
50 dprintf(("Bits : %d", rdir->wBitCount));
51 dprintf(("ResBytes: %d", rdir->lBytesInRes));
52 winres = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
53 (LPCSTR)rdir->wNameOrdinal,
54 (LPSTR)NTRT_ICON);
55 groupsize += winres->getOS2Size();
56 rdir++;
57 }
58 bafh = (BITMAPARRAYFILEHEADER2 *)malloc(groupsize+ihdr->wCount*sizeof(BITMAPARRAYFILEHEADER2));
59 orgbafh = bafh;
60
61 rdir = (ResourceDirectory *)(ihdr + 1);
62 for(i=0;i<ihdr->wCount;i++) {
63 bafh->usType = BFT_BITMAPARRAY;
64 bafh->cbSize = sizeof(BITMAPARRAYFILEHEADER2);
65 bafh->cxDisplay = 0;
66 bafh->cyDisplay = 0;
67 winres = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
68 (LPCSTR)rdir->wNameOrdinal,
69 (LPSTR)NTRT_ICON);
70 if(winres == NULL) {
71 dprintf(("Can't find icon!"));
72 rdir++;
73 continue;
74 }
75
76 iconhdr = (WINBITMAPINFOHEADER *)winres->lockResource();
77 os2icon = ConvertIcon(iconhdr, winres->getSize(), &os2iconsize, (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER2)-sizeof(BITMAPFILEHEADER2));
78
79 if(os2icon == NULL) {
80 dprintf(("Can't convert icon!"));
81 delete winres;
82 rdir++;
83 continue;
84 }
85
86 if(i != ihdr->wCount -1) {
87 bafh->offNext = (int)&bafh->bfh2 - (int)orgbafh + os2iconsize;
88 }
89 else bafh->offNext = 0;
90
91 memcpy((char *)&bafh->bfh2, os2icon, os2iconsize);
92 free(os2icon);
93
94 bafh = (BITMAPARRAYFILEHEADER2 *)((int)&bafh->bfh2 + os2iconsize);
95 delete winres;
96
97 rdir++;
98 }
99 return (void *)orgbafh;
100}
101//******************************************************************************
102//******************************************************************************
Note: See TracBrowser for help on using the repository browser.