diff --git a/reactos/base/applications/winhelp/callback.c b/reactos/base/applications/winhelp/callback.c index ade0db729d6..510bd704864 100644 --- a/reactos/base/applications/winhelp/callback.c +++ b/reactos/base/applications/winhelp/callback.c @@ -39,7 +39,7 @@ static HANDLE CALLBACK WHD_Open(LPSTR name, BYTE flags) { unsigned mode = 0; - //WINE_FIXME("(%s %x)\n", wine_dbgstr_a(name), flags); + WINE_FIXME("(%s %x)\n", wine_dbgstr_a(name), flags); switch (flags) { case 0: mode = GENERIC_READ | GENERIC_WRITE; break; @@ -160,19 +160,19 @@ static LONG CALLBACK WHD_API(LPSTR x, WORD xx, DWORD xxx) FARPROC Callbacks[] = { - (FARPROC)WHD_GetFSError, - (FARPROC)WHD_Open, - (FARPROC)WHD_Close, - (FARPROC)WHD_OpenBag, + (FARPROC)WHD_GetFSError, + (FARPROC)WHD_Open, + (FARPROC)WHD_Close, + (FARPROC)WHD_OpenBag, (FARPROC)WHD_CloseBag, (FARPROC)WHD_ReadBag, (FARPROC)WHD_TellBag, (FARPROC)WHD_SeekBag, - (FARPROC)WHD_IsEofBag, + (FARPROC)WHD_IsEofBag, (FARPROC)WHD_SizeBag, (FARPROC)WHD_Access, - (FARPROC)WHD_LLInfoFromBag, - (FARPROC)WHD_LLInfoFromFile, + (FARPROC)WHD_LLInfoFromBag, + (FARPROC)WHD_LLInfoFromFile, (FARPROC)WHD_Error, (FARPROC)WHD_ErrorString, (FARPROC)WHD_GetInfo, diff --git a/reactos/base/applications/winhelp/hlpfile.c b/reactos/base/applications/winhelp/hlpfile.c index 7b0da832e5e..59efdcffd87 100644 --- a/reactos/base/applications/winhelp/hlpfile.c +++ b/reactos/base/applications/winhelp/hlpfile.c @@ -3,6 +3,7 @@ * * Copyright 1996 Ulrich Schmid * 2002 Eric Pouech + * 2007 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -50,6 +51,7 @@ static inline unsigned GET_UINT(const BYTE* buffer, unsigned i) static HLPFILE *first_hlpfile = 0; static BYTE *file_buffer; +static UINT file_buffer_size; static struct { @@ -84,6 +86,7 @@ static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE*); static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE*); static BOOL HLPFILE_Uncompress_Topic(HLPFILE*); static BOOL HLPFILE_GetContext(HLPFILE*); +static BOOL HLPFILE_GetKeywords(HLPFILE*); static BOOL HLPFILE_GetMap(HLPFILE*); static BOOL HLPFILE_AddPage(HLPFILE*, BYTE*, BYTE*, unsigned); static BOOL HLPFILE_AddParagraph(HLPFILE*, BYTE *, BYTE*, unsigned*); @@ -92,27 +95,22 @@ static BOOL HLPFILE_Uncompress3(char*, const char*, const BYTE*, const BYTE*); static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, unsigned dstsz); static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile); -#if 0 /*********************************************************************** * * HLPFILE_PageByNumber */ -static HLPFILE_PAGE *HLPFILE_PageByNumber(LPCSTR lpszPath, UINT wNum) +static HLPFILE_PAGE *HLPFILE_PageByNumber(HLPFILE* hlpfile, UINT wNum) { HLPFILE_PAGE *page; - HLPFILE *hlpfile = HLPFILE_ReadHlpFile(lpszPath); + UINT temp = wNum; - if (!hlpfile) return 0; - - WINE_TRACE("[%s/%u]\n", lpszPath, wNum); - - for (page = hlpfile->first_page; page && wNum; page = page->next) wNum--; - - /* HLPFILE_FreeHlpFile(lpszPath); */ + WINE_TRACE("<%s>[%u]\n", hlpfile->lpszPath, wNum); + for (page = hlpfile->first_page; page && temp; page = page->next) temp--; + if (!page) + WINE_ERR("Page of number %u not found in file %s\n", wNum, hlpfile->lpszPath); return page; } -#endif /* FIXME: * this finds the page containing the offset. The offset can either @@ -151,26 +149,49 @@ HLPFILE_PAGE *HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset) return found; } +/************************************************************************** + * comp_PageByHash + * + * HLPFILE_BPTreeCompare function for '|CONTEXT' B+ tree file + * + */ +static int comp_PageByHash(void *p, const void *key, + int leaf, void** next) +{ + LONG lKey = (LONG)key; + LONG lTest = GET_UINT(p, 0); + + *next = (char *)p+(leaf?8:6); + WINE_TRACE("Comparing '%u' with '%u'\n", lKey, lTest); + if (lTest < lKey) return -1; + if (lTest > lKey) return 1; + return 0; +} + /*********************************************************************** * * HLPFILE_HlpFilePageByHash */ HLPFILE_PAGE *HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash) { - int i; + BYTE *ptr; if (!hlpfile) return 0; WINE_TRACE("<%s>[%x]\n", hlpfile->lpszPath, lHash); - for (i = 0; i < hlpfile->wContextLen; i++) + /* For win 3.0 files hash values are really page numbers */ + if (hlpfile->version <= 16) + return HLPFILE_PageByNumber(hlpfile, lHash); + + ptr = HLPFILE_BPTreeSearch(hlpfile->Context, (void*)lHash, comp_PageByHash); + if (!ptr) { - if (hlpfile->Context[i].lHash == lHash) - return HLPFILE_PageByOffset(hlpfile, hlpfile->Context[i].offset); + WINE_ERR("Page of hash %x not found in file %s\n", lHash, hlpfile->lpszPath); + return NULL; } - WINE_ERR("Page of hash %x not found in file %s\n", lHash, hlpfile->lpszPath); - return NULL; + return HLPFILE_PageByOffset(hlpfile, GET_UINT(ptr, 4)); } /*********************************************************************** @@ -179,7 +200,7 @@ HLPFILE_PAGE *HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash) */ HLPFILE_PAGE *HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap) { - int i; + unsigned int i; if (!hlpfile) return 0; @@ -250,32 +271,15 @@ HLPFILE *HLPFILE_ReadHlpFile(LPCSTR lpszPath) } } - hlpfile = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE) + lstrlen(lpszPath) + 1); + hlpfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(HLPFILE) + lstrlen(lpszPath) + 1); if (!hlpfile) return 0; hlpfile->lpszPath = (char*)hlpfile + sizeof(HLPFILE); - hlpfile->lpszTitle = NULL; - hlpfile->lpszCopyright = NULL; - hlpfile->first_page = NULL; - hlpfile->first_macro = NULL; - hlpfile->wContextLen = 0; - hlpfile->Context = NULL; - hlpfile->wMapLen = 0; - hlpfile->Map = NULL; hlpfile->contents_start = 0xFFFFFFFF; - hlpfile->prev = NULL; hlpfile->next = first_hlpfile; hlpfile->wRefCount = 1; - hlpfile->numBmps = 0; - hlpfile->bmps = NULL; - - hlpfile->numFonts = 0; - hlpfile->fonts = NULL; - - hlpfile->numWindows = 0; - hlpfile->windows = NULL; - strcpy(hlpfile->lpszPath, lpszPath); first_hlpfile = hlpfile; @@ -337,9 +341,23 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) { BYTE* end; - /* FIXME this depends on the blocksize, can be 2k in some cases */ - index = (ref - 0x0C) >> 14; - offset = (ref - 0x0C) & 0x3fff; + if (hlpfile->version <= 16) + { + index = (ref - 0x0C) / hlpfile->dsize; + offset = (ref - 0x0C) % hlpfile->dsize; + } + else + { + index = (ref - 0x0C) >> 14; + offset = (ref - 0x0C) & 0x3FFF; + } + + if (hlpfile->version <= 16 && index != old_index && index != 0) + { + /* we jumped to the next block, adjust pointers */ + ref -= 12; + offset -= 12; + } WINE_TRACE("ref=%08x => [%u/%u]\n", ref, index, offset); @@ -355,11 +373,8 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) if (!HLPFILE_AddPage(hlpfile, buf, end, index * 0x8000L + offs)) return FALSE; break; + case 0x01: case 0x20: - if (!HLPFILE_AddParagraph(hlpfile, buf, end, &len)) return FALSE; - offs += len; - break; - case 0x23: if (!HLPFILE_AddParagraph(hlpfile, buf, end, &len)) return FALSE; offs += len; @@ -369,10 +384,19 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) WINE_ERR("buf[0x14] = %x\n", buf[0x14]); } - ref = GET_UINT(buf, 0xc); + if (hlpfile->version <= 16) + { + ref += GET_UINT(buf, 0xc); + if (GET_UINT(buf, 0xc) == 0) + break; + } + else + ref = GET_UINT(buf, 0xc); } while (ref != 0xffffffff); + HLPFILE_GetKeywords(hlpfile); HLPFILE_GetMap(hlpfile); + if (hlpfile->version <= 16) return TRUE; return HLPFILE_GetContext(hlpfile); } @@ -384,12 +408,13 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned off { HLPFILE_PAGE* page; BYTE* title; - UINT titlesize; + UINT titlesize, blocksize, datalen; char* ptr; HLPFILE_MACRO*macro; - if (buf + 0x31 > end) {WINE_WARN("page1\n"); return FALSE;}; - title = buf + GET_UINT(buf, 0x10); + blocksize = GET_UINT(buf, 0); + datalen = GET_UINT(buf, 0x10); + title = buf + datalen; if (title > end) {WINE_WARN("page2\n"); return FALSE;}; titlesize = GET_UINT(buf, 4); @@ -397,37 +422,35 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned off if (!page) return FALSE; page->lpszTitle = (char*)page + sizeof(HLPFILE_PAGE); - if (hlpfile->hasPhrases) + if (titlesize > blocksize - datalen) { - HLPFILE_Uncompress2(title, end, (BYTE*)page->lpszTitle, (BYTE*)page->lpszTitle + titlesize); - } - else - { - if (GET_UINT(buf, 0x4) > GET_UINT(buf, 0) - GET_UINT(buf, 0x10)) - { - /* need to decompress */ - HLPFILE_Uncompress3(page->lpszTitle, page->lpszTitle + titlesize, - title, end); - } + /* need to decompress */ + if (hlpfile->hasPhrases) + HLPFILE_Uncompress2(title, end, (BYTE*)page->lpszTitle, (BYTE*)page->lpszTitle + titlesize); + else if (hlpfile->hasPhrases40) + HLPFILE_Uncompress3(page->lpszTitle, page->lpszTitle + titlesize, title, end); else { + WINE_FIXME("Text size is too long, splitting\n"); + titlesize = blocksize - datalen; memcpy(page->lpszTitle, title, titlesize); } } + else + memcpy(page->lpszTitle, title, titlesize); page->lpszTitle[titlesize] = '\0'; if (hlpfile->first_page) { - HLPFILE_PAGE *p; - - for (p = hlpfile->first_page; p->next; p = p->next); - page->prev = p; - p->next = page; + hlpfile->last_page->next = page; + page->prev = hlpfile->last_page; + hlpfile->last_page = page; } else { hlpfile->first_page = page; + hlpfile->last_page = page; page->prev = NULL; } @@ -442,7 +465,7 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned off page->browse_fwd = GET_UINT(buf, 0x1D); WINE_TRACE("Added page[%d]: title='%s' %08x << %08x >> %08x\n", - page->wNumber, page->lpszTitle, + page->wNumber, page->lpszTitle, page->browse_bwd, page->offset, page->browse_fwd); memset(&attributes, 0, sizeof(attributes)); @@ -502,7 +525,7 @@ static unsigned long fetch_ulong(BYTE** ptr) (*ptr) += 2; } return ret; -} +} static short fetch_short(BYTE** ptr) { @@ -580,7 +603,11 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE if (!tmp) return FALSE; HLPFILE_UncompressLZ77(src, src + csz, tmp); dst = tmp2 = HeapAlloc(GetProcessHeap(), 0, sz); - if (!dst) return FALSE; + if (!dst) + { + HeapFree(GetProcessHeap(), 0, tmp); + return FALSE; + } HLPFILE_UncompressRLE(tmp, tmp + sz77, &tmp2, sz); if (tmp2 - dst != sz) WINE_WARN("Bogus gfx sizes (LZ77+RunLen): %u / %u\n", tmp2 - dst, sz); @@ -598,7 +625,7 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE * * */ -static BOOL HLPFILE_LoadBitmap(BYTE* beg, BYTE type, BYTE pack, +static BOOL HLPFILE_LoadBitmap(BYTE* beg, BYTE type, BYTE pack, HLPFILE_PARAGRAPH* paragraph) { BYTE* ptr; @@ -626,7 +653,7 @@ static BOOL HLPFILE_LoadBitmap(BYTE* beg, BYTE type, BYTE pack, if (bi->bmiHeader.biPlanes != 1) WINE_FIXME("Unsupported planes %u\n", bi->bmiHeader.biPlanes); bi->bmiHeader.biSizeImage = (((bi->bmiHeader.biWidth * bi->bmiHeader.biBitCount + 31) & ~31) / 8) * bi->bmiHeader.biHeight; WINE_TRACE("planes=%d bc=%d size=(%d,%d)\n", - bi->bmiHeader.biPlanes, bi->bmiHeader.biBitCount, + bi->bmiHeader.biPlanes, bi->bmiHeader.biBitCount, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight); csz = fetch_ulong(&ptr); @@ -634,17 +661,17 @@ static BOOL HLPFILE_LoadBitmap(BYTE* beg, BYTE type, BYTE pack, off = GET_UINT(ptr, 0); ptr += 4; /* GET_UINT(ptr, 0); hotspot offset */ ptr += 4; - + /* now read palette info */ if (type == 0x06) { unsigned nc = bi->bmiHeader.biClrUsed; unsigned i; - + /* not quite right, especially for bitfields type of compression */ if (!nc && bi->bmiHeader.biBitCount <= 8) nc = 1 << bi->bmiHeader.biBitCount; - + bi = HeapReAlloc(GetProcessHeap(), 0, bi, sizeof(*bi) + nc * sizeof(RGBQUAD)); if (!bi) return FALSE; for (i = 0; i < nc; i++) @@ -657,14 +684,14 @@ static BOOL HLPFILE_LoadBitmap(BYTE* beg, BYTE type, BYTE pack, } } pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack); - - paragraph->u.gfx.u.bmp.hBitmap = CreateDIBitmap(hdc = GetDC(0), &bi->bmiHeader, - CBM_INIT, pict_beg, + + paragraph->u.gfx.u.bmp.hBitmap = CreateDIBitmap(hdc = GetDC(0), &bi->bmiHeader, + CBM_INIT, pict_beg, bi, DIB_RGB_COLORS); - ReleaseDC(0, hdc); + ReleaseDC(0, hdc); if (!paragraph->u.gfx.u.bmp.hBitmap) WINE_ERR("Couldn't create bitmap\n"); - + HeapFree(GetProcessHeap(), 0, bi); if (pict_beg != beg + off) HeapFree(GetProcessHeap(), 0, pict_beg); @@ -726,13 +753,13 @@ static BOOL HLPFILE_LoadMetaFile(BYTE* beg, BYTE pack, HLPFILE_PARAGRAPH* pa * */ static BOOL HLPFILE_LoadGfxByAddr(HLPFILE *hlpfile, BYTE* ref, - unsigned long size, + unsigned long size, HLPFILE_PARAGRAPH* paragraph) { unsigned i, numpict; numpict = GET_USHORT(ref, 2); - WINE_TRACE("Got picture magic=%04x #=%d\n", + WINE_TRACE("Got picture magic=%04x #=%d\n", GET_USHORT(ref, 0), numpict); for (i = 0; i < numpict; i++) @@ -746,14 +773,14 @@ static BOOL HLPFILE_LoadGfxByAddr(HLPFILE *hlpfile, BYTE* ref, type = *ptr++; pack = *ptr++; - + switch (type) { case 5: /* device dependent bmp */ case 6: /* device independent bmp */ HLPFILE_LoadBitmap(beg, type, pack, paragraph); break; - case 8: + case 8: HLPFILE_LoadMetaFile(beg, pack, paragraph); break; default: WINE_FIXME("Unknown type %u\n", type); return FALSE; @@ -773,7 +800,7 @@ static BOOL HLPFILE_LoadGfxByAddr(HLPFILE *hlpfile, BYTE* ref, * * */ -static BOOL HLPFILE_LoadGfxByIndex(HLPFILE *hlpfile, unsigned index, +static BOOL HLPFILE_LoadGfxByIndex(HLPFILE *hlpfile, unsigned index, HLPFILE_PARAGRAPH* paragraph) { char tmp[16]; @@ -803,10 +830,10 @@ static BOOL HLPFILE_LoadGfxByIndex(HLPFILE *hlpfile, unsigned index, { hlpfile->numBmps = index + 1; if (hlpfile->bmps) - hlpfile->bmps = HeapReAlloc(GetProcessHeap(), 0, hlpfile->bmps, + hlpfile->bmps = HeapReAlloc(GetProcessHeap(), 0, hlpfile->bmps, hlpfile->numBmps * sizeof(hlpfile->bmps[0])); else - hlpfile->bmps = HeapAlloc(GetProcessHeap(), 0, + hlpfile->bmps = HeapAlloc(GetProcessHeap(), 0, hlpfile->numBmps * sizeof(hlpfile->bmps[0])); } @@ -841,7 +868,7 @@ static HLPFILE_LINK* HLPFILE_AllocLink(int cookie, const char* str, LONG h link->wRefCount = 1; WINE_TRACE("Link[%d] to %s@%08x:%d\n", - link->cookie, link->lpszString, + link->cookie, link->lpszString, link->lHash, link->window); return link; } @@ -856,45 +883,51 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne HLPFILE_PARAGRAPH *paragraph, **paragraphptr; UINT textsize; BYTE *format, *format_end; - char *text, *text_end; - long size; + char *text, *text_base, *text_end; + long size, blocksize, datalen; unsigned short bits; unsigned nc, ncol = 1; - if (!hlpfile->first_page) {WINE_WARN("no page\n"); return FALSE;}; - - for (page = hlpfile->first_page; page->next; page = page->next) /* Nothing */; + if (!hlpfile->last_page) {WINE_WARN("no page\n"); return FALSE;}; + page = hlpfile->last_page; for (paragraphptr = &page->first_paragraph; *paragraphptr; paragraphptr = &(*paragraphptr)->next) /* Nothing */; if (buf + 0x19 > end) {WINE_WARN("header too small\n"); return FALSE;}; + blocksize = GET_UINT(buf, 0); size = GET_UINT(buf, 0x4); - text = HeapAlloc(GetProcessHeap(), 0, size); + datalen = GET_UINT(buf, 0x10); + text = text_base = HeapAlloc(GetProcessHeap(), 0, size); if (!text) return FALSE; - if (hlpfile->hasPhrases) + if (size > blocksize - datalen) { - HLPFILE_Uncompress2(buf + GET_UINT(buf, 0x10), end, (BYTE*)text, (BYTE*)text + size); - } - else - { - if (GET_UINT(buf, 0x4) > GET_UINT(buf, 0) - GET_UINT(buf, 0x10)) - { - /* block is compressed */ - HLPFILE_Uncompress3(text, text + size, buf + GET_UINT(buf, 0x10), end); - } + /* need to decompress */ + if (hlpfile->hasPhrases) + HLPFILE_Uncompress2(buf + datalen, end, (BYTE*)text, (BYTE*)text + size); + else if (hlpfile->hasPhrases40) + HLPFILE_Uncompress3(text, text + size, buf + datalen, end); else { - text = (char*)buf + GET_UINT(buf, 0x10); + WINE_FIXME("Text size is too long, splitting\n"); + size = blocksize - datalen; + memcpy(text, buf + datalen, size); } } + else + memcpy(text, buf + datalen, size); + text_end = text + size; format = buf + 0x15; format_end = buf + GET_UINT(buf, 0x10); - fetch_long(&format); - *len = fetch_ushort(&format); + if (buf[0x14] == 0x20 || buf[0x14] == 0x23) + { + fetch_long(&format); + *len = fetch_ushort(&format); + } + else *len = end-buf-15; if (buf[0x14] == 0x23) { @@ -914,7 +947,10 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne WINE_TRACE("looking for format at offset %u for column %d\n", format - (buf + 0x15), nc); if (buf[0x14] == 0x23) format += 5; - format += 4; + if (buf[0x14] == 0x01) + format += 6; + else + format += 4; bits = GET_USHORT(format, 0); format += 2; if (bits & 0x0001) fetch_long(&format); if (bits & 0x0002) fetch_short(&format); @@ -936,12 +972,12 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne } } /* 0x0400, 0x0800 and 0x1000 don't need space */ - if ((bits & 0xE080) != 0) + if ((bits & 0xE080) != 0) WINE_FIXME("Unsupported bits %04x, potential trouble ahead\n", bits); while (text < text_end && format < format_end) { - //WINE_TRACE("Got text: %s (%p/%p - %p/%p)\n", wine_dbgstr_a(text), text, text_end, format, format_end); + WINE_TRACE("Got text: %s (%p/%p - %p/%p)\n", wine_dbgstr_a(text), text, text_end, format, format_end); textsize = strlen(text) + 1; if (textsize > 1) { @@ -1046,14 +1082,14 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne switch (GET_SHORT(format, 0)) { case 0: - HLPFILE_LoadGfxByIndex(hlpfile, GET_SHORT(format, 2), + HLPFILE_LoadGfxByIndex(hlpfile, GET_SHORT(format, 2), paragraph); break; case 1: - WINE_FIXME("does it work ??? %x<%lu>#%u\n", - GET_SHORT(format, 0), + WINE_FIXME("does it work ??? %x<%lu>#%u\n", + GET_SHORT(format, 0), size, GET_SHORT(format, 2)); - HLPFILE_LoadGfxByAddr(hlpfile, format + 2, size - 4, + HLPFILE_LoadGfxByAddr(hlpfile, format + 2, size - 4, paragraph); break; default: @@ -1096,7 +1132,7 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne case 0xCC: WINE_TRACE("macro => %s\n", format + 3); HLPFILE_FreeLink(attributes.link); - attributes.link = HLPFILE_AllocLink(hlp_link_macro, (const char*)format + 3, + attributes.link = HLPFILE_AllocLink(hlp_link_macro, (const char*)format + 3, 0, !(*format & 4), -1); format += 3 + GET_USHORT(format, 1); break; @@ -1104,6 +1140,13 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne case 0xE0: case 0xE1: WINE_WARN("jump topic 1 => %u\n", GET_UINT(format, 1)); + HLPFILE_FreeLink(attributes.link); + attributes.link = HLPFILE_AllocLink((*format & 1) ? hlp_link_link : hlp_link_popup, + hlpfile->lpszPath, + GET_UINT(format, 1)-16, + 1, -1); + + format += 5; break; @@ -1113,8 +1156,8 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne case 0xE7: HLPFILE_FreeLink(attributes.link); attributes.link = HLPFILE_AllocLink((*format & 1) ? hlp_link_link : hlp_link_popup, - hlpfile->lpszPath, - GET_UINT(format, 1), + hlpfile->lpszPath, + GET_UINT(format, 1), !(*format & 4), -1); format += 5; break; @@ -1160,8 +1203,7 @@ static BOOL HLPFILE_AddParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigne } } } - if (text_end != (char*)buf + GET_UINT(buf, 0x10) + size) - HeapFree(GetProcessHeap(), 0, text_end - size); + HeapFree(GetProcessHeap(), 0, text_base); return TRUE; } @@ -1206,7 +1248,7 @@ static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile) flag = ref[dscr_offset + i * 11 + 0]; family = ref[dscr_offset + i * 11 + 2]; - hlpfile->fonts[i].LogFont.lfHeight = -ref[dscr_offset + i * 11 + 1] / 2; + hlpfile->fonts[i].LogFont.lfHeight = -ref[dscr_offset + i * 11 + 1] / 2 - 3; hlpfile->fonts[i].LogFont.lfWidth = 0; hlpfile->fonts[i].LogFont.lfEscapement = 0; hlpfile->fonts[i].LogFont.lfOrientation = 0; @@ -1214,7 +1256,7 @@ static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile) hlpfile->fonts[i].LogFont.lfItalic = (flag & 2) ? TRUE : FALSE; hlpfile->fonts[i].LogFont.lfUnderline = (flag & 4) ? TRUE : FALSE; hlpfile->fonts[i].LogFont.lfStrikeOut = (flag & 8) ? TRUE : FALSE; - hlpfile->fonts[i].LogFont.lfCharSet = ANSI_CHARSET; + hlpfile->fonts[i].LogFont.lfCharSet = DEFAULT_CHARSET; hlpfile->fonts[i].LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS; hlpfile->fonts[i].LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; hlpfile->fonts[i].LogFont.lfQuality = DEFAULT_QUALITY; @@ -1269,7 +1311,6 @@ static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile) static BOOL HLPFILE_ReadFileToBuffer(HFILE hFile) { BYTE header[16], dummy[1]; - UINT size; if (_hread(hFile, header, 16) != 16) {WINE_WARN("header\n"); return FALSE;}; @@ -1277,87 +1318,65 @@ static BOOL HLPFILE_ReadFileToBuffer(HFILE hFile) if (GET_UINT(header, 0) != 0x00035F3F) {WINE_WARN("wrong header\n"); return FALSE;}; - size = GET_UINT(header, 12); - file_buffer = HeapAlloc(GetProcessHeap(), 0, size + 1); + file_buffer_size = GET_UINT(header, 12); + file_buffer = HeapAlloc(GetProcessHeap(), 0, file_buffer_size + 1); if (!file_buffer) return FALSE; memcpy(file_buffer, header, 16); - if (_hread(hFile, file_buffer + 16, size - 16) != size - 16) + if (_hread(hFile, file_buffer + 16, file_buffer_size - 16) != file_buffer_size - 16) {WINE_WARN("filesize1\n"); return FALSE;}; if (_hread(hFile, dummy, 1) != 0) WINE_WARN("filesize2\n"); - file_buffer[size] = '\0'; /* FIXME: was '0', sounds ackward to me */ + file_buffer[file_buffer_size] = '\0'; /* FIXME: was '0', sounds ackward to me */ return TRUE; } +/************************************************************************** + * comp_FindSubFile + * + * HLPFILE_BPTreeCompare function for HLPFILE directory. + * + */ +static int comp_FindSubFile(void *p, const void *key, + int leaf, void** next) +{ + *next = (char *)p+strlen(p)+(leaf?5:3); + WINE_TRACE("Comparing '%s' with '%s'\n", (char *)p, (char *)key); + return strcmp(p, key); +} + /*********************************************************************** * * HLPFILE_FindSubFile */ static BOOL HLPFILE_FindSubFile(LPCSTR name, BYTE **subbuf, BYTE **subend) { - BYTE *root = file_buffer + GET_UINT(file_buffer, 4); - BYTE *end = file_buffer + GET_UINT(file_buffer, 12); BYTE *ptr; - BYTE *bth; - unsigned pgsize; - unsigned pglast; - unsigned nentries; - unsigned i, n; - - bth = root + 9; - - /* FIXME: this should be using the EnumBTree functions from this file */ - pgsize = GET_USHORT(bth, 4); - WINE_TRACE("%s => pgsize=%u #pg=%u rootpg=%u #lvl=%u\n", - name, pgsize, GET_USHORT(bth, 30), GET_USHORT(bth, 26), GET_USHORT(bth, 32)); - - ptr = bth + 38 + GET_USHORT(bth, 26) * pgsize; - - for (n = 1; n < GET_USHORT(bth, 32); n++) + WINE_TRACE("looking for file '%s'\n", name); + ptr = HLPFILE_BPTreeSearch(file_buffer + GET_UINT(file_buffer, 4), + name, comp_FindSubFile); + if (!ptr) return FALSE; + *subbuf = file_buffer + GET_UINT(ptr, strlen(name)+1); + if (*subbuf >= file_buffer + file_buffer_size) { - nentries = GET_USHORT(ptr, 2); - pglast = GET_USHORT(ptr, 4); - WINE_TRACE("[%u]: #entries=%u next=%u\n", n, nentries, pglast); - - ptr += 6; - for (i = 0; i < nentries; i++) - { - char *str = (char*) ptr; - WINE_TRACE("<= %s\n", str); - if (strcmp(name, str) < 0) break; - ptr += strlen(str) + 1; - pglast = GET_USHORT(ptr, 0); - ptr += 2; - } - ptr = bth + 38 + pglast * pgsize; + WINE_ERR("internal file %s does not fit\n", name); + return FALSE; } - - nentries = GET_USHORT(ptr, 2); - ptr += 8; - for (i = 0; i < nentries; i++) + *subend = *subbuf + GET_UINT(*subbuf, 0); + if (*subend > file_buffer + file_buffer_size) { - char* fname = (char*)ptr; - ptr += strlen(fname) + 1; - WINE_TRACE("\\- %s\n", fname); - if (strcmp(fname, name) == 0) - { - *subbuf = file_buffer + GET_UINT(ptr, 0); - *subend = *subbuf + GET_UINT(*subbuf, 0); - if (file_buffer > *subbuf || *subbuf > *subend || *subend > end) - { - WINE_WARN("size mismatch\n"); - return FALSE; - } - return TRUE; - } - ptr += 4; + WINE_ERR("internal file %s does not fit\n", name); + return FALSE; } - - return FALSE; + if (GET_UINT(*subbuf, 0) < GET_UINT(*subbuf, 4) + 9) + { + WINE_ERR("invalid size provided for internal file %s\n", name); + return FALSE; + } + return TRUE; } /*********************************************************************** @@ -1384,8 +1403,31 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) magic, major, minor, flags); if (magic != 0x036C || major != 1) {WINE_WARN("Wrong system header\n"); return FALSE;} - if (minor <= 16) {WINE_WARN("too old file format (NIY)\n"); return FALSE;} - if (flags & 8) {WINE_WARN("Unsupported yet page size\n"); return FALSE;} + if (minor <= 16) + { + hlpfile->tbsize = 0x800; + hlpfile->compressed = 0; + } + else if (flags == 0) + { + hlpfile->tbsize = 0x1000; + hlpfile->compressed = 0; + } + else if (flags == 4) + { + hlpfile->tbsize = 0x1000; + hlpfile->compressed = 1; + } + else + { + hlpfile->tbsize = 0x800; + hlpfile->compressed = 1; + } + + if (hlpfile->compressed) + hlpfile->dsize = 0x4000; + else + hlpfile->dsize = hlpfile->tbsize - 0x0C; hlpfile->version = minor; hlpfile->flags = flags; @@ -1431,13 +1473,13 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) case 6: if (GET_USHORT(ptr, 2) != 90) {WINE_WARN("system6\n");break;} - if (hlpfile->windows) - hlpfile->windows = HeapReAlloc(GetProcessHeap(), 0, hlpfile->windows, + if (hlpfile->windows) + hlpfile->windows = HeapReAlloc(GetProcessHeap(), 0, hlpfile->windows, sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows); - else - hlpfile->windows = HeapAlloc(GetProcessHeap(), 0, + else + hlpfile->windows = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows); - + if (hlpfile->windows) { unsigned flags = GET_USHORT(ptr, 4); @@ -1549,24 +1591,40 @@ static BYTE *HLPFILE_UncompressLZ77(BYTE *ptr, BYTE *end, BYTE *newptr) */ static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE* hlpfile) { - UINT i, num, dec_size; + UINT i, num, dec_size, head_size; BYTE *buf, *end; if (!HLPFILE_FindSubFile("|Phrases", &buf, &end)) return FALSE; + if (hlpfile->version <= 16) + head_size = 13; + else + head_size = 17; + num = phrases.num = GET_USHORT(buf, 9); if (buf + 2 * num + 0x13 >= end) {WINE_WARN("1a\n"); return FALSE;}; - dec_size = HLPFILE_UncompressedLZ77_Size(buf + 0x13 + 2 * num, end); + if (hlpfile->version <= 16) + dec_size = end - buf - 15 - 2 * num; + else + dec_size = HLPFILE_UncompressedLZ77_Size(buf + 0x13 + 2 * num, end); phrases.offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1)); phrases.buffer = HeapAlloc(GetProcessHeap(), 0, dec_size); - if (!phrases.offsets || !phrases.buffer) return FALSE; + if (!phrases.offsets || !phrases.buffer) + { + HeapFree(GetProcessHeap(), 0, phrases.offsets); + HeapFree(GetProcessHeap(), 0, phrases.buffer); + return FALSE; + } for (i = 0; i <= num; i++) - phrases.offsets[i] = GET_USHORT(buf, 0x11 + 2 * i) - 2 * num - 2; + phrases.offsets[i] = GET_USHORT(buf, head_size + 2 * i) - 2 * num - 2; - HLPFILE_UncompressLZ77(buf + 0x13 + 2 * num, end, (BYTE*)phrases.buffer); + if (hlpfile->version <= 16) + memcpy(phrases.buffer, buf + 15 + 2*num, dec_size); + else + HLPFILE_UncompressLZ77(buf + 0x13 + 2 * num, end, (BYTE*)phrases.buffer); hlpfile->hasPhrases = TRUE; return TRUE; @@ -1578,12 +1636,13 @@ static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE* hlpfile) */ static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile) { - UINT num, dec_size, cpr_size; + UINT num; + INT dec_size, cpr_size; BYTE *buf_idx, *end_idx; BYTE *buf_phs, *end_phs; - short i, n; long* ptr, mask = 0; - unsigned short bc; + unsigned int i; + unsigned short bc, n; if (!HLPFILE_FindSubFile("|PhrIndex", &buf_idx, &end_idx) || !HLPFILE_FindSubFile("|PhrImage", &buf_phs, &end_phs)) return FALSE; @@ -1616,7 +1675,12 @@ static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile) phrases.offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1)); phrases.buffer = HeapAlloc(GetProcessHeap(), 0, dec_size); - if (!phrases.offsets || !phrases.buffer) return FALSE; + if (!phrases.offsets || !phrases.buffer) + { + HeapFree(GetProcessHeap(), 0, phrases.offsets); + HeapFree(GetProcessHeap(), 0, phrases.buffer); + return FALSE; + } #define getbit() (ptr += (mask < 0), mask = mask*2 + (mask<=0), (*ptr & mask) != 0) @@ -1638,7 +1702,7 @@ static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile) else HLPFILE_UncompressLZ77(buf_phs + 9, end_phs, (BYTE*)phrases.buffer); - hlpfile->hasPhrases = FALSE; + hlpfile->hasPhrases40 = TRUE; return TRUE; } @@ -1649,28 +1713,26 @@ static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile) static BOOL HLPFILE_Uncompress_Topic(HLPFILE* hlpfile) { BYTE *buf, *ptr, *end, *newptr; - int i, newsize = 0; + unsigned int i, newsize = 0; + unsigned int topic_size; if (!HLPFILE_FindSubFile("|TOPIC", &buf, &end)) {WINE_WARN("topic0\n"); return FALSE;} - switch (hlpfile->flags & (8|4)) + buf += 9; /* Skip file header */ + topic_size = end - buf; + if (hlpfile->compressed) { - case 8: - WINE_FIXME("Unsupported format\n"); - return FALSE; - case 4: - buf += 9; - topic.wMapLen = (end - buf - 1) / 0x1000 + 1; + topic.wMapLen = (topic_size - 1) / hlpfile->tbsize + 1; for (i = 0; i < topic.wMapLen; i++) { - ptr = buf + i * 0x1000; + ptr = buf + i * hlpfile->tbsize; /* I don't know why, it's necessary for printman.hlp */ if (ptr + 0x44 > end) ptr = end - 0x44; - newsize += HLPFILE_UncompressedLZ77_Size(ptr + 0xc, min(end, ptr + 0x1000)); + newsize += HLPFILE_UncompressedLZ77_Size(ptr + 0xc, min(end, ptr + hlpfile->tbsize)); } topic.map = HeapAlloc(GetProcessHeap(), 0, @@ -1681,35 +1743,30 @@ static BOOL HLPFILE_Uncompress_Topic(HLPFILE* hlpfile) for (i = 0; i < topic.wMapLen; i++) { - ptr = buf + i * 0x1000; + ptr = buf + i * hlpfile->tbsize; if (ptr + 0x44 > end) ptr = end - 0x44; topic.map[i] = newptr; - newptr = HLPFILE_UncompressLZ77(ptr + 0xc, min(end, ptr + 0x1000), newptr); + newptr = HLPFILE_UncompressLZ77(ptr + 0xc, min(end, ptr + hlpfile->tbsize), newptr); } - break; - case 0: - /* basically, we need to copy the 0x1000 byte pages (removing the first 0x0C) in - * one single are in memory + } + else + { + /* basically, we need to copy the TopicBlockSize byte pages + * (removing the first 0x0C) in one single area in memory */ -#define DST_LEN (0x1000 - 0x0C) - buf += 9; - newsize = end - buf; - /* number of destination pages */ - topic.wMapLen = (newsize - 1) / DST_LEN + 1; + topic.wMapLen = (topic_size - 1) / hlpfile->tbsize + 1; topic.map = HeapAlloc(GetProcessHeap(), 0, - topic.wMapLen * (sizeof(topic.map[0]) + DST_LEN)); + topic.wMapLen * (sizeof(topic.map[0]) + hlpfile->dsize)); if (!topic.map) return FALSE; newptr = (BYTE*)(topic.map + topic.wMapLen); - topic.end = newptr + newsize; + topic.end = newptr + topic_size; for (i = 0; i < topic.wMapLen; i++) { - topic.map[i] = newptr + i * DST_LEN; - memcpy(topic.map[i], buf + i * 0x1000 + 0x0C, DST_LEN); + topic.map[i] = newptr + i * hlpfile->dsize; + memcpy(topic.map[i], buf + i * hlpfile->tbsize + 0x0C, hlpfile->dsize); } -#undef DST_LEN - break; } return TRUE; } @@ -1739,7 +1796,7 @@ static void HLPFILE_Uncompress2(const BYTE *ptr, const BYTE *end, BYTE *newptr, if (newptr + (phend - phptr) > newend) { - WINE_FIXME("buffer overflow %p > %p for %d bytes\n", + WINE_FIXME("buffer overflow %p > %p for %d bytes\n", newptr, newend, phend - phptr); return; } @@ -1761,19 +1818,19 @@ static void HLPFILE_Uncompress2(const BYTE *ptr, const BYTE *end, BYTE *newptr, static BOOL HLPFILE_Uncompress3(char* dst, const char* dst_end, const BYTE* src, const BYTE* src_end) { - int idx, len; + unsigned int idx, len; for (; src < src_end; src++) { if ((*src & 1) == 0) { idx = *src / 2; - if (idx > phrases.num) + if (idx > phrases.num) { WINE_ERR("index in phrases %d/%d\n", idx, phrases.num); len = 0; } - else + else { len = phrases.offsets[idx + 1] - phrases.offsets[idx]; if (dst + len <= dst_end) @@ -1784,7 +1841,7 @@ static BOOL HLPFILE_Uncompress3(char* dst, const char* dst_end, { idx = (*src + 1) * 64; idx += *++src; - if (idx > phrases.num) + if (idx > phrases.num) { WINE_ERR("index in phrases %d/%d\n", idx, phrases.num); len = 0; @@ -1849,63 +1906,114 @@ static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, *dst - (sdst - dstsz), dstsz); } -/****************************************************************** - * HLPFILE_EnumBTreeLeaves +/************************************************************************** + * HLPFILE_BPTreeSearch * + * Searches for an element in B+ tree + * + * PARAMS + * buf [I] pointer to the embedded file structured as a B+ tree + * key [I] pointer to data to find + * comp [I] compare function + * + * RETURNS + * Pointer to block identified by key, or NULL if failure. * */ -static void HLPFILE_EnumBTreeLeaves(const BYTE* buf, const BYTE* end, unsigned (*fn)(const BYTE*, void*), void* user) +void* HLPFILE_BPTreeSearch(BYTE* buf, const void* key, + HLPFILE_BPTreeCompare comp) { - unsigned psize, pnext; - unsigned num, nlvl; - const BYTE* ptr; + unsigned magic; + unsigned page_size; + unsigned cur_page; + unsigned level; + BYTE *pages, *ptr, *newptr; + int i, entries; + int ret; - num = GET_UINT(buf, 9 + 34); - psize = GET_USHORT(buf, 9 + 4); - nlvl = GET_USHORT(buf, 9 + 32); - pnext = GET_USHORT(buf, 9 + 26); - - WINE_TRACE("BTree: #entries=%u pagSize=%u #levels=%u #pages=%u root=%u struct%16s\n", - num, psize, nlvl, GET_USHORT(buf, 9 + 30), pnext, buf + 9 + 6); - if (!num) return; - - while (--nlvl > 0) + magic = GET_USHORT(buf, 9); + if (magic != 0x293B) { - ptr = (buf + 9 + 38) + pnext * psize; - WINE_TRACE("BTree: (index[%u]) unused=%u #entries=%u <%u\n", - pnext, GET_USHORT(ptr, 0), GET_USHORT(ptr, 2), GET_USHORT(ptr, 4)); - pnext = GET_USHORT(ptr, 4); + WINE_ERR("Invalid magic in B+ tree: 0x%x\n", magic); + return NULL; } - while (pnext != 0xFFFF) + page_size = GET_USHORT(buf, 9+4); + cur_page = GET_USHORT(buf, 9+26); + level = GET_USHORT(buf, 9+32); + pages = buf + 9 + 38; + while (--level > 0) { - const BYTE* node_page; - unsigned short limit; + ptr = pages + cur_page*page_size; + entries = GET_SHORT(ptr, 2); + ptr += 6; + for (i = 0; i < entries; i++) + { + if (comp(ptr, key, 0, (void **)&newptr) > 0) break; + ptr = newptr; + } + cur_page = GET_USHORT(ptr-2, 0); + } + ptr = pages + cur_page*page_size; + entries = GET_SHORT(ptr, 2); + ptr += 8; + for (i = 0; i < entries; i++) + { + ret = comp(ptr, key, 1, (void **)&newptr); + if (ret == 0) return ptr; + if (ret > 0) return NULL; + ptr = newptr; + } + return NULL; +} - node_page = ptr = (buf + 9 + 38) + pnext * psize; - limit = GET_USHORT(ptr, 2); - WINE_TRACE("BTree: (leaf [%u]) unused=%u #entries=%u <%u >%u\n", - pnext, GET_USHORT(ptr, 0), limit, GET_USHORT(ptr, 4), GET_USHORT(ptr, 6)); +/************************************************************************** + * HLPFILE_BPTreeEnum + * + * Enumerates elements in B+ tree. + * + * PARAMS + * buf [I] pointer to the embedded file structured as a B+ tree + * cb [I] compare function + * cookie [IO] cookie for cb function + */ +void HLPFILE_BPTreeEnum(BYTE* buf, HLPFILE_BPTreeCallback cb, void* cookie) +{ + unsigned magic; + unsigned page_size; + unsigned cur_page; + unsigned level; + BYTE *pages, *ptr, *newptr; + int i, entries; + + magic = GET_USHORT(buf, 9); + if (magic != 0x293B) + { + WINE_ERR("Invalid magic in B+ tree: 0x%x\n", magic); + return; + } + page_size = GET_USHORT(buf, 9+4); + cur_page = GET_USHORT(buf, 9+26); + level = GET_USHORT(buf, 9+32); + pages = buf + 9 + 38; + while (--level > 0) + { + ptr = pages + cur_page*page_size; + cur_page = GET_USHORT(ptr, 4); + } + while (cur_page != 0xFFFF) + { + ptr = pages + cur_page*page_size; + entries = GET_SHORT(ptr, 2); ptr += 8; - while (limit--) - ptr += (fn)(ptr, user); - pnext = GET_USHORT(node_page, 6); + for (i = 0; i < entries; i++) + { + cb(ptr, (void **)&newptr, cookie); + ptr = newptr; + } + cur_page = GET_USHORT(pages+cur_page*page_size, 6); } } -struct myfncb { - HLPFILE* hlpfile; - int i; -}; - -static unsigned myfn(const BYTE* ptr, void* user) -{ - struct myfncb* m = user; - - m->hlpfile->Context[m->i].lHash = GET_UINT(ptr, 0); - m->hlpfile->Context[m->i].offset = GET_UINT(ptr, 4); - m->i++; - return 8; -} /*********************************************************************** * @@ -1914,19 +2022,47 @@ static unsigned myfn(const BYTE* ptr, void* user) static BOOL HLPFILE_GetContext(HLPFILE *hlpfile) { BYTE *cbuf, *cend; - struct myfncb m; unsigned clen; if (!HLPFILE_FindSubFile("|CONTEXT", &cbuf, &cend)) {WINE_WARN("context0\n"); return FALSE;} - clen = GET_UINT(cbuf, 0x2b); - hlpfile->Context = HeapAlloc(GetProcessHeap(), 0, clen * sizeof(HLPFILE_CONTEXT)); + clen = cend - cbuf; + hlpfile->Context = HeapAlloc(GetProcessHeap(), 0, clen); if (!hlpfile->Context) return FALSE; - hlpfile->wContextLen = clen; + memcpy(hlpfile->Context, cbuf, clen); - m.hlpfile = hlpfile; - m.i = 0; - HLPFILE_EnumBTreeLeaves(cbuf, cend, myfn, &m); + return TRUE; +} + +/*********************************************************************** + * + * HLPFILE_GetKeywords + */ +static BOOL HLPFILE_GetKeywords(HLPFILE *hlpfile) +{ + BYTE *cbuf, *cend; + unsigned clen; + + if (!HLPFILE_FindSubFile("|KWBTREE", &cbuf, &cend)) return FALSE; + clen = cend - cbuf; + hlpfile->kwbtree = HeapAlloc(GetProcessHeap(), 0, clen); + if (!hlpfile->kwbtree) return FALSE; + memcpy(hlpfile->kwbtree, cbuf, clen); + + if (!HLPFILE_FindSubFile("|KWDATA", &cbuf, &cend)) + { + WINE_ERR("corrupted help file: kwbtree present but kwdata absent\n"); + HeapFree(GetProcessHeap(), 0, hlpfile->kwbtree); + return FALSE; + } + clen = cend - cbuf; + hlpfile->kwdata = HeapAlloc(GetProcessHeap(), 0, clen); + if (!hlpfile->kwdata) + { + HeapFree(GetProcessHeap(), 0, hlpfile->kwdata); + return FALSE; + } + memcpy(hlpfile->kwdata, cbuf, clen); return TRUE; } diff --git a/reactos/base/applications/winhelp/hlpfile.h b/reactos/base/applications/winhelp/hlpfile.h index 38b3c43538d..6dd34e1080f 100644 --- a/reactos/base/applications/winhelp/hlpfile.h +++ b/reactos/base/applications/winhelp/hlpfile.h @@ -3,6 +3,7 @@ * * Copyright 1996 Ulrich Schmid * 2002 Eric Pouech + * 2007 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -21,7 +22,7 @@ struct tagHelpFile; -typedef struct +typedef struct { char type[10]; char name[9]; @@ -63,9 +64,9 @@ typedef struct tagHlpFileParagraph struct { unsigned pos; /* 0: center, 1: left, 2: right */ - union + union { - struct + struct { HBITMAP hBitmap; } bmp; @@ -102,12 +103,6 @@ typedef struct tagHlpFilePage struct tagHlpFileFile* file; } HLPFILE_PAGE; -typedef struct -{ - LONG lHash; - unsigned long offset; -} HLPFILE_CONTEXT; - typedef struct { LONG lMap; @@ -127,9 +122,11 @@ typedef struct tagHlpFileFile LPSTR lpszTitle; LPSTR lpszCopyright; HLPFILE_PAGE* first_page; + HLPFILE_PAGE* last_page; HLPFILE_MACRO* first_macro; - unsigned wContextLen; - HLPFILE_CONTEXT* Context; + BYTE* Context; + BYTE* kwbtree; + BYTE* kwdata; unsigned wMapLen; HLPFILE_MAP* Map; unsigned long contents_start; @@ -141,7 +138,11 @@ typedef struct tagHlpFileFile unsigned short version; unsigned short flags; - unsigned hasPhrases; /* Phrases or PhrIndex/PhrImage */ + unsigned short tbsize; /* topic block size */ + unsigned short dsize; /* decompress size */ + unsigned short compressed; + unsigned hasPhrases; /* file has |Phrases */ + unsigned hasPhrases40; /* file has |PhrIndex/|PhrImage */ unsigned numBmps; HBITMAP* bmps; @@ -153,6 +154,28 @@ typedef struct tagHlpFileFile HLPFILE_WINDOWINFO* windows; } HLPFILE; +/* + * Compare function type for HLPFILE_BPTreeSearch function. + * + * PARAMS + * p [I] pointer to testing block (key + data) + * key [I] pointer to key value to look for + * leaf [I] whether this function called for index of leaf page + * next [O] pointer to pointer to next block + */ +typedef int (*HLPFILE_BPTreeCompare)(void *p, const void *key, + int leaf, void **next); + +/* + * Callback function type for HLPFILE_BPTreeEnum function. + * + * PARAMS + * p [I] pointer to data block + * next [O] pointer to pointer to next block + * cookie [IO] cookie data + */ +typedef void (*HLPFILE_BPTreeCallback)(void *p, void **next, void *cookie); + HLPFILE* HLPFILE_ReadHlpFile(LPCSTR lpszPath); HLPFILE_PAGE* HLPFILE_Contents(HLPFILE* hlpfile); HLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash); @@ -161,3 +184,6 @@ HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset); LONG HLPFILE_Hash(LPCSTR lpszContext); void HLPFILE_FreeLink(HLPFILE_LINK* link); void HLPFILE_FreeHlpFile(HLPFILE*); + +void* HLPFILE_BPTreeSearch(BYTE*, const void*, HLPFILE_BPTreeCompare); +void HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie); diff --git a/reactos/base/applications/winhelp/lang/bg-BG.rc b/reactos/base/applications/winhelp/lang/bg-BG.rc index fb9155d1ba5..d04a9d077da 100644 --- a/reactos/base/applications/winhelp/lang/bg-BG.rc +++ b/reactos/base/applications/winhelp/lang/bg-BG.rc @@ -1,8 +1,7 @@ /* - * Help Viewer + * Help Viewer Bulgarian resource * - * Copyright 1996 Ulrich Schmid - * Copyright 2002 Sylvain Petreolle + * Copyright 2005 Milko Krachounov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,59 +18,52 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&" - BEGIN - MENUITEM "&", MNID_FILE_OPEN +MAIN_MENU MENU LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT +{ + POPUP "&" { + MENUITEM "&", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&", MNID_FILE_PRINT - MENUITEM "& ...", MNID_FILE_SETUP + MENUITEM "& ...", MNID_FILE_SETUP MENUITEM SEPARATOR - MENUITEM "&", MNID_FILE_EXIT - END - POPUP "&" - BEGIN - MENUITEM "&", MNID_EDIT_COPYDLG + MENUITEM "&", MNID_FILE_EXIT + } + POPUP "&" { + MENUITEM "&...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR - MENUITEM "&...", MNID_EDIT_ANNOTATE - END - POPUP "&" - BEGIN - MENUITEM "&...", MNID_BKMK_DEFINE - END - POPUP "&" - BEGIN - MENUITEM " &", MNID_HELP_HELPON - MENUITEM " ", MNID_HELP_HELPTOP + MENUITEM "&...", MNID_EDIT_ANNOTATE + } + POPUP "&" { + MENUITEM "&...", MNID_BKMK_DEFINE + } + POPUP "&" { + MENUITEM " & ", MNID_HELP_HELPON + MENUITEM " &", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&...", MNID_HELP_ABOUT + MENUITEM "&...", MNID_HELP_ABOUT #ifdef WINELIB - MENUITEM "&...", MNID_HELP_WINE + MENUITEM "& WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN -STID_WINE_HELP, "" +STRINGTABLE DISCARDABLE LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT +{ +STID_WINE_HELP, "WINE " STID_WHERROR, "" STID_WARNING, "" -STID_INFO, "" -STID_NOT_IMPLEMENTED, " " -STID_HLPFILE_ERROR_s, " `%s'" +STID_INFO, "" +STID_NOT_IMPLEMENTED, " " +STID_HLPFILE_ERROR_s, " `%s'" STID_CONTENTS, "&" -STID_SEARCH, "&" -STID_BACK, "&" -STID_HISTORY, "&" +STID_SEARCH, "&" +STID_BACK, "&" +STID_HISTORY, "&" STID_TOPICS, "&" STID_ALL_FILES, " (*.*)" STID_HELP_FILES_HLP, " (*.hlp)" -STID_FILE_NOT_FOUND_s " '%s'. ?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/cs-CZ.rc b/reactos/base/applications/winhelp/lang/cs-CZ.rc index 58ba29235ed..06c2e17517c 100644 --- a/reactos/base/applications/winhelp/lang/cs-CZ.rc +++ b/reactos/base/applications/winhelp/lang/cs-CZ.rc @@ -23,33 +23,27 @@ /* Czech strings in CP1250 */ -LANGUAGE LANG_CZECH, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Soubor" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +{ + POPUP "&Soubor" { MENUITEM "&Otevt", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Tisk", MNID_FILE_PRINT MENUITEM "Na&staven tisku...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Konec", MNID_FILE_EXIT - END - POPUP "prav&y" - BEGIN + } + POPUP "prav&y" { MENUITEM "&Koprovat...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "P&oznamenat si...", MNID_EDIT_ANNOTATE - END - POPUP "&Zloka" - BEGIN + } + POPUP "&Zloka" { MENUITEM "Pi&dat...", MNID_BKMK_DEFINE - END - POPUP "&Npovda" - BEGIN + } + POPUP "&Npovda" { MENUITEM "Np&ovda k npovd", MNID_HELP_HELPON MENUITEM "Vdy na &vrchu", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -57,13 +51,12 @@ BEGIN #ifdef WINELIB MENUITEM "O &WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "Npovda WINE" STID_WHERROR, "CHYBA" STID_WARNING, "VAROVN" @@ -78,4 +71,4 @@ STID_TOPICS, "&T STID_ALL_FILES, "Vechny soubory (*.*)" STID_HELP_FILES_HLP, "Soubory npovdy (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/da-DK.rc b/reactos/base/applications/winhelp/lang/da-DK.rc index 11fe277e84f..522cdae99a3 100644 --- a/reactos/base/applications/winhelp/lang/da-DK.rc +++ b/reactos/base/applications/winhelp/lang/da-DK.rc @@ -19,33 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_DANISH, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Filer" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_DANISH, SUBLANG_DEFAULT +{ + POPUP "&Filer" { MENUITEM "&bn...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Udskriv emne", MNID_FILE_PRINT MENUITEM "&Indstil printer", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Afslut", MNID_FILE_EXIT - END - POPUP "&Rediger" - BEGIN + } + POPUP "&Rediger" { MENUITEM "K&opier...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Anmrk...", MNID_EDIT_ANNOTATE - END - POPUP "Bog&mrke" - BEGIN + } + POPUP "Bog&mrke" { MENUITEM "&Definer...", MNID_BKMK_DEFINE - END - POPUP "&Hjlp" - BEGIN + } + POPUP "&Hjlp" { MENUITEM "&Brug af Hjlp", MNID_HELP_HELPON MENUITEM "Altid &verst", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,14 +47,14 @@ BEGIN #ifdef WINELIB MENUITEM "Om &WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_DANISH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Hjlp" STID_WHERROR, "FEJL" STID_WARNING, "ADVARSEL" @@ -75,4 +69,4 @@ STID_TOPICS, "To&pics" STID_ALL_FILES, "Alle filer (*.*)" STID_HELP_FILES_HLP, "Hjlpe filer (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/de-DE.rc b/reactos/base/applications/winhelp/lang/de-DE.rc index 490bafc24be..8ec84cd4fb9 100644 --- a/reactos/base/applications/winhelp/lang/de-DE.rc +++ b/reactos/base/applications/winhelp/lang/de-DE.rc @@ -19,33 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Datei" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL +{ + POPUP "&Datei" { MENUITEM "&ffnen...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Thema &drucken", MNID_FILE_PRINT MENUITEM "Drucker&einrichtung...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Beenden", MNID_FILE_EXIT - END - POPUP "&Bearbeiten" - BEGIN + } + POPUP "&Bearbeiten" { MENUITEM "&Kopieren...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Anmerken...", MNID_EDIT_ANNOTATE - END - POPUP "&Lesezeichen" - BEGIN + } + POPUP "&Lesezeichen" { MENUITEM "&Definieren...", MNID_BKMK_DEFINE - END - POPUP "&Hilfe" - BEGIN + } + POPUP "&Hilfe" { MENUITEM "&Hilfe benutzen", MNID_HELP_HELPON MENUITEM "Immer im &Vordergrund", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,13 +47,13 @@ BEGIN #ifdef WINELIB MENUITEM "&ber WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL +{ STID_WINE_HELP, "WINE Hilfe" STID_WHERROR, "FEHLER" STID_WARNING, "ACHTUNG" @@ -73,5 +67,5 @@ STID_HISTORY, "&Bisher" STID_TOPICS, "&Topics" STID_ALL_FILES, "Alle Dateien (*.*)" STID_HELP_FILES_HLP, "Hilfe-Dateien (*.hlp)" -STID_FILE_NOT_FOUND_s "Kann %s' nicht finden. Wollen Sie nach der Datei suchen?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/en-US.rc b/reactos/base/applications/winhelp/lang/en-US.rc index e715b223fab..464b1859aaa 100644 --- a/reactos/base/applications/winhelp/lang/en-US.rc +++ b/reactos/base/applications/winhelp/lang/en-US.rc @@ -19,33 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&File" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +{ + POPUP "&File" { MENUITEM "&Open", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Print", MNID_FILE_PRINT MENUITEM "Printer &setup...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "E&xit", MNID_FILE_EXIT - END - POPUP "&Edit" - BEGIN + } + POPUP "&Edit" { MENUITEM "&Copy...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annotate...", MNID_EDIT_ANNOTATE - END - POPUP "&Bookmark" - BEGIN + } + POPUP "&Bookmark" { MENUITEM "&Define...", MNID_BKMK_DEFINE - END - POPUP "&Help" - BEGIN + } + POPUP "&Help" { MENUITEM "Help &on help", MNID_HELP_HELPON MENUITEM "Always on &top", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,13 +47,22 @@ BEGIN #ifdef WINELIB MENUITEM "&About WINE", MNID_HELP_WINE #endif - END -END + } +} + +IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Index" +{ + LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER + PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 + PUSHBUTTON "&Cancel", IDCANCEL, 120, 170, 50, 12 +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Help" STID_WHERROR, "ERROR" STID_WARNING, "WARNING" @@ -74,4 +77,4 @@ STID_TOPICS, "&Topics" STID_ALL_FILES, "All files (*.*)" STID_HELP_FILES_HLP, "Help files (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/eo-EO.rc b/reactos/base/applications/winhelp/lang/eo-EO.rc index e2dbe9b1eb9..cc8ef666e46 100644 --- a/reactos/base/applications/winhelp/lang/eo-EO.rc +++ b/reactos/base/applications/winhelp/lang/eo-EO.rc @@ -21,33 +21,27 @@ /* Cxapelitaj literoj estas en Latin-3 iso8859-3 */ -LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Dosiero" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT +{ + POPUP "&Dosiero" { MENUITEM "&Malfermu", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Presu", MNID_FILE_PRINT MENUITEM "&Impozu Printilon...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Finu", MNID_FILE_EXIT - END - POPUP "&Redakto" - BEGIN + } + POPUP "&Redakto" { MENUITEM "&Kopiu...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Notu...", MNID_EDIT_ANNOTATE - END - POPUP "&Legosigno" - BEGIN + } + POPUP "&Legosigno" { MENUITEM "&Difinu...", MNID_BKMK_DEFINE - END - POPUP "&Helpo" - BEGIN + } + POPUP "&Helpo" { MENUITEM "&Helpu pri helpo", MNID_HELP_HELPON MENUITEM "iam &supre", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -55,13 +49,12 @@ BEGIN #ifdef WINELIB MENUITEM "&Pri WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Helpanto" STID_WHERROR, "ERARO" STID_WARNING, "ATENTU" @@ -76,4 +69,4 @@ STID_TOPICS, "&Temoj" STID_ALL_FILES, "Tutaj dosieroj (*.*)" STID_HELP_FILES_HLP, "Helpaj dosieroj (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/es-ES.rc b/reactos/base/applications/winhelp/lang/es-ES.rc index ac9ae31d609..93d9223bd39 100644 --- a/reactos/base/applications/winhelp/lang/es-ES.rc +++ b/reactos/base/applications/winhelp/lang/es-ES.rc @@ -20,33 +20,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Archivo" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL +{ + POPUP "&Archivo" { MENUITEM "A&brir...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Imprimir", MNID_FILE_PRINT MENUITEM "&Configuracin impresora...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Salir", MNID_FILE_EXIT - END - POPUP "&Editar" - BEGIN + } + POPUP "&Editar" { MENUITEM "&Copiar...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Anotar...", MNID_EDIT_ANNOTATE - END - POPUP "&Marcador" - BEGIN + } + POPUP "&Marcador" { MENUITEM "&Definir...", MNID_BKMK_DEFINE - END - POPUP "A&yuda" - BEGIN + } + POPUP "A&yuda" { MENUITEM "&Ayuda sobre la ayuda", MNID_HELP_HELPON MENUITEM "&Siempre visible", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -54,13 +48,12 @@ BEGIN #ifdef WINELIB MENUITEM "&Acerca de WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL +{ STID_WINE_HELP, "Ayuda de WINE" STID_WHERROR, "ERROR" STID_WARNING, "ADVERTENCIA" @@ -75,4 +68,4 @@ STID_TOPICS, "&Temas" STID_ALL_FILES, "Todos los archivos (*.*)" STID_HELP_FILES_HLP, "Archivos de ayuda (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/fi-FI.rc b/reactos/base/applications/winhelp/lang/fi-FI.rc index 0c52db2e383..90de636d2be 100644 --- a/reactos/base/applications/winhelp/lang/fi-FI.rc +++ b/reactos/base/applications/winhelp/lang/fi-FI.rc @@ -20,33 +20,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Tiedosto" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT +{ + POPUP "&Tiedosto" { MENUITEM "&Avaa...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Tulosta", MNID_FILE_PRINT MENUITEM "&Kirjoittimen asetukset...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Lopeta", MNID_FILE_EXIT - END - POPUP "&Muokkaa" - BEGIN + } + POPUP "&Muokkaa" { MENUITEM "&Kopioi...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Huomautus...", MNID_EDIT_ANNOTATE - END - POPUP "&Kirjanmerkki" - BEGIN + } + POPUP "&Kirjanmerkki" { MENUITEM "&Aseta...", MNID_BKMK_DEFINE - END - POPUP "&Ohje" - BEGIN + } + POPUP "&Ohje" { MENUITEM "&Ohjeen kytt", MNID_HELP_HELPON MENUITEM "&Aina pllimmisen", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -54,13 +48,13 @@ BEGIN #ifdef WINELIB MENUITEM "&Tietoja WINEst", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Ohje" STID_WHERROR, "VIRHE" STID_WARNING, "VAROITUS" @@ -75,4 +69,4 @@ STID_TOPICS, "T&opics" STID_ALL_FILES, "Kaikki tiedostot (*.*)" STID_HELP_FILES_HLP, "Ohjetiedostot (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/fr-FR.rc b/reactos/base/applications/winhelp/lang/fr-FR.rc index 6a9649fe324..73185071395 100644 --- a/reactos/base/applications/winhelp/lang/fr-FR.rc +++ b/reactos/base/applications/winhelp/lang/fr-FR.rc @@ -24,28 +24,24 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL MAIN_MENU MENU -BEGIN - POPUP "&Fichier" - BEGIN +{ + POPUP "&Fichier" { MENUITEM "&Ouvrir", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Im&primer", MNID_FILE_PRINT MENUITEM "&Configuration de l'imprimante...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Quitter", MNID_FILE_EXIT - END - POPUP "&dition" - BEGIN + } + POPUP "&dition" { MENUITEM "&Copier...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annotation...", MNID_EDIT_ANNOTATE - END - POPUP "&Signet" - BEGIN + } + POPUP "&Signet" { MENUITEM "&Dfinir...", MNID_BKMK_DEFINE - END - POPUP "Aid&e" - BEGIN + } + POPUP "Aid&e" { MENUITEM "&Utiliser l'aide", MNID_HELP_HELPON MENUITEM "&Toujours visible", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,18 +49,18 @@ BEGIN #ifdef WINELIB MENUITEM " &propos de WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ STRINGTABLE DISCARDABLE -BEGIN +{ STID_WINE_HELP, "Aide de WINE" STID_WHERROR, "ERREUR" STID_WARNING, "ATTENTION" STID_INFO, "Information" STID_NOT_IMPLEMENTED, "Non implment" -STID_HLPFILE_ERROR_s, "Une erreur est survenue en lisant le fichier d'aide %s " +STID_HLPFILE_ERROR_s, "Une erreur est survenue en lisant le fichier d'aide %s" STID_CONTENTS, "&Index" STID_SEARCH, "&Rechercher" STID_BACK, "&Prcdent" @@ -72,5 +68,5 @@ STID_HISTORY, "&Historique" STID_TOPICS, "&Sujets" STID_ALL_FILES, "Tous fichiers (*.*)" STID_HELP_FILES_HLP, "Fichiers d'aide (*.hlp)" -STID_FILE_NOT_FOUND_s "Impossible de trouver '%s'. Voulez-vous rechercher ce fichier ?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/hu-HU.rc b/reactos/base/applications/winhelp/lang/hu-HU.rc index 8a644145635..8f4ef53b073 100644 --- a/reactos/base/applications/winhelp/lang/hu-HU.rc +++ b/reactos/base/applications/winhelp/lang/hu-HU.rc @@ -20,33 +20,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Fjl" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT +{ + POPUP "&Fjl" { MENUITEM "&Megnyits...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Nyomtats", MNID_FILE_PRINT MENUITEM "Nyomtat &bellts...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Kilps", MNID_FILE_EXIT - END - POPUP "&Szerkeszts" - BEGIN + } + POPUP "&Szerkeszts" { MENUITEM "&Msols...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Jegyzet...", MNID_EDIT_ANNOTATE - END - POPUP "&Knyvjelz" - BEGIN + } + POPUP "&Knyvjelz" { MENUITEM "&Definils...", MNID_BKMK_DEFINE - END - POPUP "&Sg" - BEGIN + } + POPUP "&Sg" { MENUITEM "&Hasznlat", MNID_HELP_HELPON MENUITEM "Mindig &legfell", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -54,13 +48,13 @@ BEGIN #ifdef WINELIB MENUITEM "&&A WINE-rl", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE sg" STID_WHERROR, "HIBA" STID_WARNING, "FIGYELMEZTETS" @@ -75,4 +69,4 @@ STID_TOPICS, "&T STID_ALL_FILES, "Minden fjl (*.*)" STID_HELP_FILES_HLP, "Sg fjlok (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/it-IT.rc b/reactos/base/applications/winhelp/lang/it-IT.rc index 71a32085cae..bce3f14ab60 100644 --- a/reactos/base/applications/winhelp/lang/it-IT.rc +++ b/reactos/base/applications/winhelp/lang/it-IT.rc @@ -19,33 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&File" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL +{ + POPUP "&File" { MENUITEM "&Apri...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "S&tampa", MNID_FILE_PRINT MENUITEM "&Setup stampante...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Esci", MNID_FILE_EXIT - END - POPUP "&Modifica" - BEGIN + } + POPUP "&Modifica" { MENUITEM "&Copia...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annota...", MNID_EDIT_ANNOTATE - END - POPUP "&Segnalibro" - BEGIN + } + POPUP "&Segnalibro" { MENUITEM "&Definisci...", MNID_BKMK_DEFINE - END - POPUP "&?" - BEGIN + } + POPUP "&?" { MENUITEM "&Aiuto sulla guida", MNID_HELP_HELPON MENUITEM "Sempre in primo &piano", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,25 +47,25 @@ BEGIN #ifdef WINELIB MENUITEM "&Informazion su WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN -STID_WINE_HELP, "Guida di WINE" -STID_WHERROR, "ERRORE" -STID_WARNING, "ATTENZIONE" -STID_INFO, "Informazione" +STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL +{ +STID_WINE_HELP, "Guida di WINE" +STID_WHERROR, "ERRORE" +STID_WARNING, "ATTENZIONE" +STID_INFO, "Informazione" STID_NOT_IMPLEMENTED, "Non ancora implementato" STID_HLPFILE_ERROR_s, "Errore di lettura del file della Guida `%s'" -STID_CONTENTS, "&Sommario" -STID_SEARCH, "&Trova" -STID_BACK, "&Precedente" -STID_HISTORY, "&Cronologia" -STID_TOPICS, "&Argomenti" -STID_ALL_FILES, "Tutti i file (*.*)" +STID_CONTENTS, "&Sommario" +STID_SEARCH, "&Trova" +STID_BACK, "&Precedente" +STID_HISTORY, "&Cronologia" +STID_TOPICS, "&Argomenti" +STID_ALL_FILES, "Tutti i file (*.*)" STID_HELP_FILES_HLP, "File della Guida (*.hlp)" -STID_FILE_NOT_FOUND_s "Impossibile trovare '%s'. Volete indicare voi dove si trova il file?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/ko-KO.rc b/reactos/base/applications/winhelp/lang/ko-KO.rc index 4f2fd4f38d0..4db5070f056 100644 --- a/reactos/base/applications/winhelp/lang/ko-KO.rc +++ b/reactos/base/applications/winhelp/lang/ko-KO.rc @@ -19,33 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "(&F)" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_KOREAN, SUBLANG_NEUTRAL +{ + POPUP "(&F)" { MENUITEM "(&O)...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "μ(&P)", MNID_FILE_PRINT MENUITEM " (&S)...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "(&E)", MNID_FILE_EXIT - END - POPUP "(&E)" - BEGIN + } + POPUP "(&E)" { MENUITEM "(&C)...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "ּ(&A)...", MNID_EDIT_ANNOTATE - END - POPUP "å(&B)" - BEGIN + } + POPUP "å(&B)" { MENUITEM "(&D)...", MNID_BKMK_DEFINE - END - POPUP "(&H)" - BEGIN + } + POPUP "(&H)" { MENUITEM " (&O)", MNID_HELP_HELPON MENUITEM "׻ (&T)", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,13 +47,13 @@ BEGIN #ifdef WINELIB MENUITEM "Wine Ͽ(&A)", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_KOREAN, SUBLANG_NEUTRAL +{ STID_WINE_HELP, "Wine " STID_WHERROR, "" STID_WARNING, "" @@ -74,4 +68,4 @@ STID_TOPICS, " STID_ALL_FILES, " (*.*)" STID_HELP_FILES_HLP, " (*.hlp)" STID_FILE_NOT_FOUND_s "%s ã ϴ'. ãڽϱ?" -END +} diff --git a/reactos/base/applications/winhelp/lang/nb-NO.rc b/reactos/base/applications/winhelp/lang/nb-NO.rc index 01b7e51b33b..f016efb5792 100644 --- a/reactos/base/applications/winhelp/lang/nb-NO.rc +++ b/reactos/base/applications/winhelp/lang/nb-NO.rc @@ -18,33 +18,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Fil" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL +{ + POPUP "&Fil" { MENUITEM "&pne", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Skriv &ut", MNID_FILE_PRINT MENUITEM "Opp&sett av skriveren . . .", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Avslutt", MNID_FILE_EXIT - END - POPUP "R&ediger" - BEGIN + } + POPUP "R&ediger" { MENUITEM "&Kopier . . .", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "K&ommenter . . .", MNID_EDIT_ANNOTATE - END - POPUP "&Bokmerke" - BEGIN + } + POPUP "&Bokmerke" { MENUITEM "&Definer . . .", MNID_BKMK_DEFINE - END - POPUP "&Hjelp" - BEGIN + } + POPUP "&Hjelp" { MENUITEM "&Hjelp til Hjelp", MNID_HELP_HELPON MENUITEM "All&tid verst", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -52,12 +46,12 @@ BEGIN #ifdef WINELIB MENUITEM "&om WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL +{ STID_WINE_HELP, "Hjelp" STID_WHERROR, "FEIL" STID_WARNING, "ADVARSEL" @@ -72,4 +66,4 @@ STID_TOPICS, "&Emner" STID_ALL_FILES, "Alle filer (*.*)" STID_HELP_FILES_HLP, "Hjelp-filer (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/nl-NL.rc b/reactos/base/applications/winhelp/lang/nl-NL.rc index 26c1cd927c5..44ecd902683 100644 --- a/reactos/base/applications/winhelp/lang/nl-NL.rc +++ b/reactos/base/applications/winhelp/lang/nl-NL.rc @@ -18,33 +18,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Bestand" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +{ + POPUP "&Bestand" { MENUITEM "&Openen", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Af&drukken", MNID_FILE_PRINT MENUITEM "&Printerinstellingen...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Afsluiten", MNID_FILE_EXIT - END - POPUP "&Bewerken" - BEGIN + } + POPUP "&Bewerken" { MENUITEM "&Kopiren...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annoteren...", MNID_EDIT_ANNOTATE - END - POPUP "&Favorieten" - BEGIN + } + POPUP "&Favorieten" { MENUITEM "&Aanmaken...", MNID_BKMK_DEFINE - END - POPUP "&Help" - BEGIN + } + POPUP "&Help" { MENUITEM "Hulp &bij help", MNID_HELP_HELPON MENUITEM "Altijd &zichtbaar", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -52,12 +46,12 @@ BEGIN #ifdef WINELIB MENUITEM "&Over WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +{ STID_WINE_HELP, "WINE Help" STID_WHERROR, "FOUT" STID_WARNING, "WAARSCHUWING" @@ -72,4 +66,4 @@ STID_TOPICS, "&Onderwerpen" STID_ALL_FILES, "Alle bestanden (*.*)" STID_HELP_FILES_HLP, "Helpbestanden (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/pl-PL.rc b/reactos/base/applications/winhelp/lang/pl-PL.rc index 41245dfc307..1c90a0ce43f 100644 --- a/reactos/base/applications/winhelp/lang/pl-PL.rc +++ b/reactos/base/applications/winhelp/lang/pl-PL.rc @@ -20,33 +20,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_POLISH, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Plik" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_POLISH, SUBLANG_DEFAULT +{ + POPUP "&Plik" { MENUITEM "&Otwrz", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Drukuj", MNID_FILE_PRINT MENUITEM "&Ustawienia drukarki...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Wyjcie", MNID_FILE_EXIT - END - POPUP "&Edycja" - BEGIN + } + POPUP "&Edycja" { MENUITEM "&Kopiuj...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Skomentuj...", MNID_EDIT_ANNOTATE - END - POPUP "&Zakadka" - BEGIN + } + POPUP "&Zakadka" { MENUITEM "&Zdefiniuj...", MNID_BKMK_DEFINE - END - POPUP "Pomo&c" - BEGIN + } + POPUP "Pomo&c" { MENUITEM "&Pomoc", MNID_HELP_HELPON MENUITEM "&Zawsze na wierzchu", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -54,12 +48,12 @@ BEGIN #ifdef WINELIB MENUITEM "&O programie WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_POLISH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE - Pomoc" STID_WHERROR, "BD" STID_WARNING, "OSTRZEENIE" @@ -73,5 +67,5 @@ STID_HISTORY, "&Historia" STID_TOPICS, "&Tematy" STID_ALL_FILES, "Wszystkie pliki (*.*)" STID_HELP_FILES_HLP, "Pliki pomocy (*.hlp)" -STID_FILE_NOT_FOUND_s "Nie mona odnale pliku '%s'. Czy chcesz sprbowa zlokalizowa ten plik samodzielnie?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/pt-BR.rc b/reactos/base/applications/winhelp/lang/pt-BR.rc index 228e5991f74..52c8a01f06b 100644 --- a/reactos/base/applications/winhelp/lang/pt-BR.rc +++ b/reactos/base/applications/winhelp/lang/pt-BR.rc @@ -6,7 +6,7 @@ * Portuguese translation by Gustavo Junior Alves * Copyright 2002 Sylvain Petreolle * Copyright 2003 Marcelo Duarte - * Copyright 2004 Amrico Jos Melo + * Copyright 2004,2007 Amrico Jos Melo * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,28 +28,24 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN MAIN_MENU MENU -BEGIN - POPUP "&Arquivo" - BEGIN +{ + POPUP "&Arquivo" { MENUITEM "&Abrir...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Imprimir", MNID_FILE_PRINT MENUITEM "&Configurar Impressora...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "Sai&r", MNID_FILE_EXIT - END - POPUP "&Editar" - BEGIN + } + POPUP "&Editar" { MENUITEM "&Copiar...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Anotar...", MNID_EDIT_ANNOTATE - END - POPUP "In&dicador" - BEGIN + } + POPUP "In&dicador" { MENUITEM "&Definir...", MNID_BKMK_DEFINE - END - POPUP "Aj&uda" - BEGIN + } + POPUP "Aj&uda" { MENUITEM "Ajuda &na ajuda", MNID_HELP_HELPON MENUITEM "Sempre &visvel", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -57,13 +53,46 @@ BEGIN #ifdef WINELIB MENUITEM "&Sobre WINE", MNID_HELP_WINE #endif - END -END + } +} + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +MAIN_MENU MENU +{ + POPUP "&Ficheiro" { + MENUITEM "&Abrir...", MNID_FILE_OPEN + MENUITEM SEPARATOR + MENUITEM "&Imprimir", MNID_FILE_PRINT + MENUITEM "&Configurar Impressora...", MNID_FILE_SETUP + MENUITEM SEPARATOR + MENUITEM "Sai&r", MNID_FILE_EXIT + } + POPUP "&Editar" { + MENUITEM "&Copiar...", MNID_EDIT_COPYDLG + MENUITEM SEPARATOR + MENUITEM "&Anotar...", MNID_EDIT_ANNOTATE + } + POPUP "In&dicador" { + MENUITEM "&Definir...", MNID_BKMK_DEFINE + } + POPUP "Aj&uda" { + MENUITEM "Ajuda &na ajuda", MNID_HELP_HELPON + MENUITEM "Sempre &visvel", MNID_HELP_HELPTOP + MENUITEM SEPARATOR + MENUITEM "&Informaes...", MNID_HELP_ABOUT +#ifdef WINELIB + MENUITEM "&Acerca do WINE", MNID_HELP_WINE +#endif + } +} /* Strings */ +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + STRINGTABLE DISCARDABLE -BEGIN +{ STID_WINE_HELP, "Ajuda WINE" STID_WHERROR, "ERRO" STID_WARNING, "AVISO" @@ -78,4 +107,24 @@ STID_TOPICS, "&T STID_ALL_FILES, "Todos os arquivos (*.*)" STID_HELP_FILES_HLP, "Arquivos de ajuda (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE DISCARDABLE +{ +STID_WINE_HELP, "Ajuda WINE" +STID_WHERROR, "ERRO" +STID_WARNING, "AVISO" +STID_INFO, "Informao" +STID_NOT_IMPLEMENTED, "No implementado" +STID_HLPFILE_ERROR_s, "Erro encontrado na leitura do ficheiro de ajuda '%s'" +STID_CONTENTS, "&Contedo" +STID_SEARCH, "&Procurar" +STID_BACK, "&Voltar" +STID_HISTORY, "&Histrico" +STID_TOPICS, "&Tpicos" +STID_ALL_FILES, "Todos os ficheiros (*.*)" +STID_HELP_FILES_HLP, "Ficheiros de ajuda (*.hlp)" +STID_FILE_NOT_FOUND_s "No possvel encontrar '%s'. Deseja procurar este ficheiro voc mesmo?" +} diff --git a/reactos/base/applications/winhelp/lang/ru-RU.rc b/reactos/base/applications/winhelp/lang/ru-RU.rc index c493e047d89..4767d067fc0 100644 --- a/reactos/base/applications/winhelp/lang/ru-RU.rc +++ b/reactos/base/applications/winhelp/lang/ru-RU.rc @@ -18,33 +18,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +{ + POPUP "&" { MENUITEM "&", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&", MNID_FILE_PRINT MENUITEM " &...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&", MNID_FILE_EXIT - END - POPUP "&" - BEGIN + } + POPUP "&" { MENUITEM "&...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&...", MNID_EDIT_ANNOTATE - END - POPUP "&" - BEGIN + } + POPUP "&" { MENUITEM "&...", MNID_BKMK_DEFINE - END - POPUP "&" - BEGIN + } + POPUP "&" { MENUITEM " & ", MNID_HELP_HELPON MENUITEM " &", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -52,12 +46,22 @@ BEGIN #ifdef WINELIB MENUITEM "& Wine", MNID_HELP_WINE #endif - END -END + } +} + +IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "" +{ + LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER + PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 + PUSHBUTTON "&", IDCANCEL, 120, 170, 50, 12 +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +{ STID_WINE_HELP, " WINE" STID_WHERROR, "" STID_WARNING, "" @@ -72,4 +76,4 @@ STID_TOPICS, "& STID_ALL_FILES, " (*.*)" STID_HELP_FILES_HLP, " (*.hlp)" STID_FILE_NOT_FOUND_s " '%s'. ?" -END +} diff --git a/reactos/base/applications/winhelp/lang/sk-SK.rc b/reactos/base/applications/winhelp/lang/sk-SK.rc index 308b389555e..c8e713f9b38 100644 --- a/reactos/base/applications/winhelp/lang/sk-SK.rc +++ b/reactos/base/applications/winhelp/lang/sk-SK.rc @@ -1,10 +1,3 @@ -/* -* FILE: base/applications/winhelp/lang/sk-SK.rc -* PURPOSE: Slovak Language File for winhelp -* TRANSLATOR: Kario (kario@szm.sk) -* DATE OF TR: 04-08-2007 -*/ - /* * Help Viewer * @@ -25,55 +18,49 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT - -MAIN_MENU MENU -BEGIN - POPUP "&Sbor" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT +{ + POPUP "&Sbor" { MENUITEM "&Otvori...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Tlai", MNID_FILE_PRINT MENUITEM "&Nastavenie tlae...", MNID_FILE_SETUP MENUITEM "U&koni", MNID_FILE_EXIT - END - POPUP "&Upravi" - BEGIN + } + POPUP "&Upravi" { MENUITEM "Kop&rova...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Skomentova...", MNID_EDIT_ANNOTATE - END - POPUP "&Zloka" - BEGIN + } + POPUP "&Zloka" { MENUITEM "&Definova...", MNID_BKMK_DEFINE - END - POPUP "&Pomock" - BEGIN - MENUITEM "&Ako poui Pomocnka", MNID_HELP_HELPON + } + POPUP "&Pomoc" { + MENUITEM "Pomoc &na pomoci", MNID_HELP_HELPON MENUITEM "Vdy na &vrchu", MNID_HELP_HELPTOP MENUITEM SEPARATOR MENUITEM "&Info...", MNID_HELP_ABOUT #ifdef WINELIB - MENUITEM "&o je ReactOS", MNID_HELP_WINE + MENUITEM "O& WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN -STID_WINE_HELP, "Pomocnk ReactOSu" +STRINGTABLE DISCARDABLE LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT +{ +STID_WINE_HELP, "WINE Pomoc" STID_WHERROR, "CHYBA" -STID_WARNING, "UPOZORNENIE" +STID_WARNING, "VAROVANIE" STID_INFO, "Informcie" STID_NOT_IMPLEMENTED, "Neimplementovan" -STID_HLPFILE_ERROR_s, "Pri pokuse otvori sbor pomocnka '%s' sa vyskytla chyba." +STID_HLPFILE_ERROR_s, "Chyba poas tania sboru `%s'" STID_CONTENTS, "&Obsah" STID_SEARCH, "&Hada" STID_BACK, "&Sp" STID_HISTORY, "&Histria" -STID_TOPICS, "&Tmy" +STID_TOPICS, "&Topics" STID_ALL_FILES, "Vetky sbory (*.*)" STID_HELP_FILES_HLP, "Sbory pomoci (*.hlp)" -STID_FILE_NOT_FOUND_s "Sbor '%s' nebol njden. Chcete sa poksi njs tento sbor sami?" -END +STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" +} diff --git a/reactos/base/applications/winhelp/lang/sl-SI.rc b/reactos/base/applications/winhelp/lang/sl-SI.rc index a5f60c85069..d587908cdd9 100644 --- a/reactos/base/applications/winhelp/lang/sl-SI.rc +++ b/reactos/base/applications/winhelp/lang/sl-SI.rc @@ -18,33 +18,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Datoteka" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT +{ + POPUP "&Datoteka" { MENUITEM "&Odpri ...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Na&tisni temo ...", MNID_FILE_PRINT MENUITEM "&Priprava tiskalnika", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "Iz&hod", MNID_FILE_EXIT - END - POPUP "&Urejanje" - BEGIN + } + POPUP "&Urejanje" { MENUITEM "&Kopiraj", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Pripombe ...", MNID_EDIT_ANNOTATE - END - POPUP "&Zaznamek" - BEGIN + } + POPUP "&Zaznamek" { MENUITEM "&Doloi ...", MNID_BKMK_DEFINE - END - POPUP "&Pomo" - BEGIN + } + POPUP "&Pomo" { MENUITEM "&O pomoi", MNID_HELP_HELPON MENUITEM "Vedno na &vrhu", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -52,12 +46,12 @@ BEGIN #ifdef WINELIB MENUITEM "&O WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Pomo" STID_WHERROR, "NAPAKA" STID_WARNING, "OPOZORILO" @@ -72,4 +66,4 @@ STID_TOPICS, "&Vsebina" STID_ALL_FILES, "Vse datiteke (*.*)" STID_HELP_FILES_HLP, "Datoteke s pomojo (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/sv-SE.rc b/reactos/base/applications/winhelp/lang/sv-SE.rc index a5a7ad8e818..37d5a326b64 100644 --- a/reactos/base/applications/winhelp/lang/sv-SE.rc +++ b/reactos/base/applications/winhelp/lang/sv-SE.rc @@ -4,6 +4,7 @@ * Copyright 1996 Ulrich Schmid * Swedish language by Karl Backstrm * Copyright 2002 Sylvain Petreolle + * Copyright 2007 Daniel Nylander * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,59 +21,52 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Arkiv" - BEGIN - MENUITEM "&ppna...", MNID_FILE_OPEN +MAIN_MENU MENU LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT +{ + POPUP "&Arkiv" { + MENUITEM "&Öppna", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Skriv ut", MNID_FILE_PRINT - MENUITEM "Skrivar &instllningar...", MNID_FILE_SETUP + MENUITEM "Skrivar&konfiguration...", MNID_FILE_SETUP MENUITEM SEPARATOR - MENUITEM "&Avsluta", MNID_FILE_EXIT - END - POPUP "&Redigera" - BEGIN + MENUITEM "A&vsluta", MNID_FILE_EXIT + } + POPUP "R&edigera" { MENUITEM "&Kopiera...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR - MENUITEM "&Markera...", MNID_EDIT_ANNOTATE - END - POPUP "&Bokmrke" - BEGIN - MENUITEM "&Defingera...", MNID_BKMK_DEFINE - END - POPUP "&Hjlp" - BEGIN - MENUITEM "Anvndningen &av hjlp", MNID_HELP_HELPON - MENUITEM "Alltid &verst", MNID_HELP_HELPTOP + MENUITEM "&Kommentera...", MNID_EDIT_ANNOTATE + } + POPUP "&Bokmärke" { + MENUITEM "&Definiera...", MNID_BKMK_DEFINE + } + POPUP "&Hjälp" { + MENUITEM "Hjälp &för hjälp", MNID_HELP_HELPON + MENUITEM "Alltid &överst", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&Information...", MNID_HELP_ABOUT + MENUITEM "&Info...", MNID_HELP_ABOUT #ifdef WINELIB MENUITEM "&Om WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ - -STRINGTABLE DISCARDABLE -BEGIN -STID_WINE_HELP, "WINE Hjlp" +STRINGTABLE DISCARDABLE LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT +{ +STID_WINE_HELP, "WINE Hjälp" STID_WHERROR, "FEL" STID_WARNING, "VARNING" STID_INFO, "Information" -STID_NOT_IMPLEMENTED, "Ej implementererat" -STID_HLPFILE_ERROR_s, "FEL vid lsning av hjlp filen `%s'" -STID_CONTENTS, "&Innehll" -STID_SEARCH, "&Sk" -STID_BACK, "&Tillbaka" -STID_HISTORY, "&versikt" -STID_TOPICS, "T&opics" -STID_ALL_FILES, "Alla filer (*.*))" -STID_HELP_FILES_HLP, "Hjlp filer (*.hlp)" -STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +STID_NOT_IMPLEMENTED, "Inte implementerat" +STID_HLPFILE_ERROR_s, "Fel vid läsning av hjälpfilen `%s'" +STID_CONTENTS, "&Innehåll" +STID_SEARCH, "&Sök" +STID_BACK, "&Bakåt" +STID_HISTORY, "&Historik" +STID_TOPICS, "&Ämnen" +STID_ALL_FILES, "Alla filer (*.*)" +STID_HELP_FILES_HLP, "Hjälpfiler (*.hlp)" +STID_FILE_NOT_FOUND_s "Kan inte hitta '%s'. Vill du söka efter denna fil?" +} diff --git a/reactos/base/applications/winhelp/lang/tr-TR.rc b/reactos/base/applications/winhelp/lang/tr-TR.rc index 35241d572d8..9578e8b7e1e 100644 --- a/reactos/base/applications/winhelp/lang/tr-TR.rc +++ b/reactos/base/applications/winhelp/lang/tr-TR.rc @@ -18,33 +18,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT - /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Dosya" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT +{ + POPUP "&Dosya" { MENUITEM "&A", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Ya&zdr", MNID_FILE_PRINT MENUITEM "&Yazc ayarlar...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&k", MNID_FILE_EXIT - END - POPUP "D&zen" - BEGIN + } + POPUP "D&zen" { MENUITEM "K&opyala...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annotate...", MNID_EDIT_ANNOTATE - END - POPUP "Yer &mleri" - BEGIN + } + POPUP "Yer &mleri" { MENUITEM "&Tanmla...", MNID_BKMK_DEFINE - END - POPUP "&Yardm" - BEGIN + } + POPUP "&Yardm" { MENUITEM "&Yardm Kullanm", MNID_HELP_HELPON MENUITEM "&Her Zaman stte", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -52,12 +46,12 @@ BEGIN #ifdef WINELIB MENUITEM "WINE &Hakknda", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT +{ STID_WINE_HELP, "WINE Yardm" STID_WHERROR, "HATA" STID_WARNING, "UYARI" @@ -72,4 +66,4 @@ STID_TOPICS, "&Konular" STID_ALL_FILES, "Tm dosyalar (*.*)" STID_HELP_FILES_HLP, "Yardm dosyalar (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/va-VA.rc b/reactos/base/applications/winhelp/lang/va-VA.rc index 940c96a011e..647c9df5eda 100644 --- a/reactos/base/applications/winhelp/lang/va-VA.rc +++ b/reactos/base/applications/winhelp/lang/va-VA.rc @@ -27,28 +27,24 @@ * not supported today */ MAIN_MENU MENU LANGUAGE LANG_, SUBLANG_DEFAULT -BEGIN - POPUP "&Datoteca" - BEGIN +{ + POPUP "&Datoteca" { MENUITEM "&Rivir", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Stampar tema", MNID_FILE_PRINT MENUITEM "&Installaziun dal stampader...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Finir", MNID_FILE_EXIT - END - POPUP "&Lavurar" - BEGIN + } + POPUP "&Lavurar" { MENUITEM "Capchar", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annotaziun...", MNID_EDIT_ANNOTATE - END - POPUP "&Marca" - BEGIN + } + POPUP "&Marca" { MENUITEM "&Definir...", MNID_BKMK_DEFINE - END - POPUP "&Agd" - BEGIN + } + POPUP "&Agd" { MENUITEM "&Douvrar l'agd", MNID_HELP_HELPON MENUITEM "Adna da&vant", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -56,13 +52,13 @@ BEGIN #ifdef WINELIB MENUITEM "Davart &WINE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ STRINGTABLE DISCARDABLE LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT -BEGIN +{ WINE_HELP, "WINE agd" WHERROR, "SBAGL" WARNING, "ATTENZIUN" @@ -77,4 +73,4 @@ TOPICS, "T&opics" ALL_FILES, "Tuot las datotecas (*.*)" HELP_FILES_HLP, "Datotecas d'agd (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lang/wa-WA.rc b/reactos/base/applications/winhelp/lang/wa-WA.rc index e512508716e..c536d2a3f38 100644 --- a/reactos/base/applications/winhelp/lang/wa-WA.rc +++ b/reactos/base/applications/winhelp/lang/wa-WA.rc @@ -20,33 +20,29 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -LANGUAGE LANG_WALON, SUBLANG_DEFAULT +#ifdef LANG_WALON /* Menu */ -MAIN_MENU MENU -BEGIN - POPUP "&Fitch" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_WALON, SUBLANG_DEFAULT +{ + POPUP "&Fitch" { MENUITEM "&Drov...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Rexhe", MNID_FILE_PRINT MENUITEM "&Apontiaedje del scrirece...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "Mouss &Fo", MNID_FILE_EXIT - END - POPUP "&Candj" - BEGIN + } + POPUP "&Candj" { MENUITEM "&Copy...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Sicrre...", MNID_EDIT_ANNOTATE - END - POPUP "&Rimrkes" - BEGIN + } + POPUP "&Rimrkes" { MENUITEM "&Defini...", MNID_BKMK_DEFINE - END - POPUP "&Aide" - BEGIN + } + POPUP "&Aide" { MENUITEM "&Aide so l' Aide", MNID_HELP_HELPON MENUITEM "Todi &Visibe", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -54,13 +50,13 @@ BEGIN #ifdef WINELIB MENUITEM " &dfait di WINEE", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_WALON, SUBLANG_DEFAULT +{ STID_WINE_HELP, "Aidance di WINE" STID_WHERROR, "AROKE" STID_WARNING, "ADVERTIXHMINT" @@ -75,4 +71,6 @@ STID_TOPICS, "&Topics" STID_ALL_FILES, "Tos les fitchs (*.*)" STID_HELP_FILES_HLP, "Fitchs d' aide (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} + +#endif /* LANG_WALON */ diff --git a/reactos/base/applications/winhelp/lang/zh-CN.rc b/reactos/base/applications/winhelp/lang/zh-CN.rc index 2a242e2ddc5..8c0689b5142 100644 --- a/reactos/base/applications/winhelp/lang/zh-CN.rc +++ b/reactos/base/applications/winhelp/lang/zh-CN.rc @@ -21,31 +21,25 @@ /* Menu */ -LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED - -MAIN_MENU MENU -BEGIN - POPUP "ļ&F" - BEGIN +MAIN_MENU MENU LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +{ + POPUP "ļ&F" { MENUITEM "򿪣&O", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "ӡ&P", MNID_FILE_PRINT MENUITEM "ӡã&S...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "˳&E", MNID_FILE_EXIT - END - POPUP "༭&E" - BEGIN + } + POPUP "༭&E" { MENUITEM "ƣ&C...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "עͣ&A...", MNID_EDIT_ANNOTATE - END - POPUP "ǩ&B" - BEGIN + } + POPUP "ǩ&B" { MENUITEM "壨&D...", MNID_BKMK_DEFINE - END - POPUP "&H" - BEGIN + } + POPUP "&H" { MENUITEM "ʹð&O", MNID_HELP_HELPON MENUITEM "ǰ棨&T", MNID_HELP_HELPTOP MENUITEM SEPARATOR @@ -53,12 +47,12 @@ BEGIN #ifdef WINELIB MENUITEM " WINE&A", MNID_HELP_WINE #endif - END -END + } +} /* Strings */ -STRINGTABLE DISCARDABLE -BEGIN +STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +{ STID_WINE_HELP, "WINE " STID_WHERROR, "" STID_WARNING, "" @@ -73,4 +67,4 @@ STID_TOPICS, " STID_ALL_FILES, "ļ (*.*)" STID_HELP_FILES_HLP, "ļ (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" -END +} diff --git a/reactos/base/applications/winhelp/lex.yy.c b/reactos/base/applications/winhelp/lex.yy.c index 0db38dc2693..e0e5d15686c 100644 --- a/reactos/base/applications/winhelp/lex.yy.c +++ b/reactos/base/applications/winhelp/lex.yy.c @@ -417,7 +417,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhelp); static LPCSTR macroptr; static LPSTR strptr; static int quote_stack[32]; -static int quote_stk_idx = 0; +static unsigned int quote_stk_idx = 0; struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ @@ -1689,8 +1689,8 @@ static int MACRO_CallBoolFunc(FARPROC fn, const char* args, void** ret); */ static int MACRO_CheckArgs(void* pa[], unsigned max, const char* args) { - int t; - int len = 0, idx = 0; + int t; + unsigned int len = 0, idx = 0; WINE_TRACE("Checking %s\n", args); @@ -1706,24 +1706,24 @@ static int MACRO_CheckArgs(void* pa[], unsigned max, const char* args) switch (*args) { - case 'S': + case 'S': if (t != STRING) {WINE_WARN("missing S\n");return -1;} - pa[idx] = (void*)yylval.string; + pa[idx] = (void*)yylval.string; break; case 'U': case 'I': if (t != INTEGER) - {WINE_WARN("missing U\n");return -1;} - pa[idx] = (void*)yylval.integer; + {WINE_WARN("missing U\n");return -1;} + pa[idx] = (void*)yylval.integer; break; case 'B': - if (t != BOOL_FUNCTION) - {WINE_WARN("missing B\n");return -1;} + if (t != BOOL_FUNCTION) + {WINE_WARN("missing B\n");return -1;} if (MACRO_CallBoolFunc(yylval.function, yylval.proto, &pa[idx]) == 0) return -1; break; - default: + default: WINE_WARN("unexpected %s while args is %c\n", ts(t), *args); return -1; } @@ -1802,7 +1802,7 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) { int t; - //WINE_TRACE("%s\n", wine_dbgstr_a(macro)); + WINE_TRACE("%s\n", wine_dbgstr_a(macro)); macroptr = macro; diff --git a/reactos/base/applications/winhelp/macro.c b/reactos/base/applications/winhelp/macro.c index b51f7986219..469cde11cb0 100644 --- a/reactos/base/applications/winhelp/macro.c +++ b/reactos/base/applications/winhelp/macro.c @@ -233,7 +233,7 @@ void CALLBACK MACRO_BackFlush(void) if (win) { - int i; + unsigned int i; for (i = 0; i < win->backIndex; i++) { @@ -523,7 +523,7 @@ void CALLBACK MACRO_Find(void) void CALLBACK MACRO_Finder(void) { - WINE_FIXME("()\n"); + WINHELP_CreateIndexWindow(); } void CALLBACK MACRO_FloatingMenu(void) @@ -807,7 +807,7 @@ void CALLBACK MACRO_RegisterRoutine(LPCSTR dll_name, LPCSTR proc, LPCSTR args) { HANDLE hLib = LoadLibrary(dll_name); - /* FIXME: the library will not be unloaded until exit of program + /* FIXME: the library will not be unloaded until exit of program * We don't send the DW_TERM message */ WINE_TRACE("Loading %s\n", dll_name); diff --git a/reactos/base/applications/winhelp/macro.h b/reactos/base/applications/winhelp/macro.h index a1bfbc61ffb..ade4f1466c7 100644 --- a/reactos/base/applications/winhelp/macro.h +++ b/reactos/base/applications/winhelp/macro.h @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __MACRO_H__ -#define __MACRO_H__ - #include #include "windef.h" @@ -136,5 +133,3 @@ void CALLBACK MACRO_UpdateWindow(LPCSTR, LPCSTR); /* Local Variables: */ /* c-file-style: "GNU" */ /* End: */ - -#endif /* __MACRO_H__ */ diff --git a/reactos/base/applications/winhelp/macro.lex.l b/reactos/base/applications/winhelp/macro.lex.l index f6aa0d92998..c9aee2067b5 100644 --- a/reactos/base/applications/winhelp/macro.lex.l +++ b/reactos/base/applications/winhelp/macro.lex.l @@ -33,7 +33,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhelp); static LPCSTR macroptr; static LPSTR strptr; static int quote_stack[32]; -static int quote_stk_idx = 0; +static unsigned int quote_stk_idx = 0; struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ @@ -143,8 +143,8 @@ static int MACRO_CallBoolFunc(FARPROC fn, const char* args, void** ret); */ static int MACRO_CheckArgs(void* pa[], unsigned max, const char* args) { - int t; - int len = 0, idx = 0; + int t; + unsigned int len = 0, idx = 0; WINE_TRACE("Checking %s\n", args); @@ -256,7 +256,7 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) { int t; - //WINE_TRACE("%s\n", wine_dbgstr_a(macro)); + WINE_TRACE("%s\n", wine_dbgstr_a(macro)); macroptr = macro; diff --git a/reactos/base/applications/winhelp/rsrc.rc b/reactos/base/applications/winhelp/rsrc.rc index af1eb7fa0a6..539a1a47cbd 100644 --- a/reactos/base/applications/winhelp/rsrc.rc +++ b/reactos/base/applications/winhelp/rsrc.rc @@ -19,7 +19,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include +#include +#include + #include "winhelp.h" #include "winhelp_res.h" @@ -41,7 +43,7 @@ #include "lang/nb-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" -#include "lang/pt-PT.rc" +//#include "lang/pt-PT.rc" #include "lang/ru-RU.rc" #include "lang/sl-SI.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/winhelp/winhelp.c b/reactos/base/applications/winhelp/winhelp.c index c1800938b09..c9bf8597a6b 100644 --- a/reactos/base/applications/winhelp/winhelp.c +++ b/reactos/base/applications/winhelp/winhelp.c @@ -178,7 +178,7 @@ HLPFILE_WINDOWINFO* WINHELP_GetWindowInfo(HLPFILE* hlpfile, LPCSTR name) { strcpy(mwi.type, "primary"); strcpy(mwi.name, "main"); - if (!LoadString(Globals.hInstance, STID_WINE_HELP, + if (!LoadString(Globals.hInstance, STID_WINE_HELP, mwi.caption, sizeof(mwi.caption))) strcpy(mwi.caption, hlpfile->lpszTitle); mwi.origin.x = mwi.origin.y = mwi.size.cx = mwi.size.cy = CW_USEDEFAULT; @@ -199,7 +199,7 @@ static HLPFILE_WINDOWINFO* WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile, HWND static HLPFILE_WINDOWINFO wi; RECT parent_rect; - + wi.type[0] = wi.name[0] = wi.caption[0] = '\0'; /* Calculate horizontal size and position of a popup window */ @@ -214,7 +214,7 @@ static HLPFILE_WINDOWINFO* WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile, HWND wi.origin.x = max(wi.origin.x, 0); wi.style = SW_SHOW; - wi.win_style = WS_POPUPWINDOW; + wi.win_style = WS_POPUP | WS_BORDER; wi.sr_color = wi.sr_color = 0xFFFFFF; return &wi; @@ -261,7 +261,7 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show) break; case 'x': - show = SW_HIDE; + show = SW_HIDE; Globals.isBook = FALSE; break; @@ -295,7 +295,7 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show) if (!hlpfile) return 0; } else hlpfile = NULL; - WINHELP_CreateHelpWindowByHash(hlpfile, lHash, + WINHELP_CreateHelpWindowByHash(hlpfile, lHash, WINHELP_GetWindowInfo(hlpfile, wndname), show); /* Message loop */ @@ -326,13 +326,13 @@ static BOOL WINHELP_RegisterWinClasses(void) class_main.hInstance = Globals.hInstance; class_main.hIcon = LoadIcon(0, IDI_APPLICATION); class_main.hCursor = LoadCursor(0, IDC_ARROW); - class_main.hbrBackground = GetStockObject(WHITE_BRUSH); + class_main.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); class_main.lpszMenuName = 0; class_main.lpszClassName = MAIN_WIN_CLASS_NAME; class_button_box = class_main; class_button_box.lpfnWndProc = WINHELP_ButtonBoxWndProc; - class_button_box.hbrBackground = GetStockObject(GRAY_BRUSH); + class_button_box.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); class_button_box.lpszClassName = BUTTON_BOX_WIN_CLASS_NAME; class_text = class_main; @@ -342,7 +342,7 @@ static BOOL WINHELP_RegisterWinClasses(void) class_shadow = class_main; class_shadow.lpfnWndProc = WINHELP_ShadowWndProc; - class_shadow.hbrBackground = GetStockObject(GRAY_BRUSH); + class_shadow.hbrBackground = (HBRUSH)(COLOR_3DDKSHADOW+1); class_shadow.lpszClassName = SHADOW_WIN_CLASS_NAME; class_history = class_main; @@ -440,11 +440,13 @@ static LRESULT WINHELP_HandleCommand(HWND hSrcWnd, LPARAM lParam) /* case HELP_PARTIALKEY: */ /* case HELP_MULTIKEY: */ /* case HELP_SETWINPOS: */ - WINE_FIXME("Unknown command (%x) for remote winhelp control\n", wh->command); + default: + WINE_FIXME("Unhandled command (%x) for remote winhelp control\n", wh->command); break; } } - return 0L; + /* Always return success for now */ + return 1; } /****************************************************************** @@ -452,7 +454,7 @@ static LRESULT WINHELP_HandleCommand(HWND hSrcWnd, LPARAM lParam) * * */ -static BOOL WINHELP_ReuseWindow(WINHELP_WINDOW* win, WINHELP_WINDOW* oldwin, +static BOOL WINHELP_ReuseWindow(WINHELP_WINDOW* win, WINHELP_WINDOW* oldwin, HLPFILE_PAGE* page, int nCmdShow) { unsigned int i; @@ -461,8 +463,8 @@ static BOOL WINHELP_ReuseWindow(WINHELP_WINDOW* win, WINHELP_WINDOW* oldwin, win->hButtonBoxWnd = oldwin->hButtonBoxWnd; win->hTextWnd = oldwin->hTextWnd; win->hHistoryWnd = oldwin->hHistoryWnd; - oldwin->hMainWnd = oldwin->hButtonBoxWnd = oldwin->hTextWnd = oldwin->hHistoryWnd = 0; - win->hBrush = oldwin->hBrush; + oldwin->hMainWnd = oldwin->hButtonBoxWnd = oldwin->hTextWnd = oldwin->hHistoryWnd = 0; + win->hBrush = CreateSolidBrush(win->info->sr_color); SetWindowLong(win->hMainWnd, 0, (LONG)win); SetWindowLong(win->hButtonBoxWnd, 0, (LONG)win); @@ -502,7 +504,7 @@ static BOOL WINHELP_ReuseWindow(WINHELP_WINDOW* win, WINHELP_WINDOW* oldwin, { /* we're full, remove latest entry */ HLPFILE_FreeHlpFile(win->history[0]->file); - memmove(&win->history[0], &win->history[1], + memmove(&win->history[0], &win->history[1], (num - 1) * sizeof(win->history[0])); win->histIndex--; } @@ -522,7 +524,7 @@ static BOOL WINHELP_ReuseWindow(WINHELP_WINDOW* win, WINHELP_WINDOW* oldwin, { /* we're full, remove latest entry */ HLPFILE_FreeHlpFile(win->back[0]->file); - memmove(&win->back[0], &win->back[1], + memmove(&win->back[0], &win->back[1], (num - 1) * sizeof(win->back[0])); win->backIndex--; } @@ -550,6 +552,7 @@ BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE* page, HLPFILE_WINDOWINFO* wi, BOOL bPrimary; BOOL bPopup; LPSTR name; + DWORD ex_style; bPrimary = !lstrcmpi(wi->name, "main"); bPopup = wi->win_style & WS_POPUP; @@ -622,8 +625,10 @@ BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE* page, HLPFILE_WINDOWINFO* wi, } } - hWnd = CreateWindow(bPopup ? TEXT_WIN_CLASS_NAME : MAIN_WIN_CLASS_NAME, - wi->caption, + ex_style = 0; + if (bPopup) ex_style = WS_EX_TOOLWINDOW; + hWnd = CreateWindowEx(ex_style, bPopup ? TEXT_WIN_CLASS_NAME : MAIN_WIN_CLASS_NAME, + wi->caption, bPrimary ? WS_OVERLAPPEDWINDOW : wi->win_style, wi->origin.x, wi->origin.y, wi->size.cx, wi->size.cy, NULL, bPrimary ? LoadMenu(Globals.hInstance, MAKEINTRESOURCE(MAIN_MENU)) : 0, @@ -639,13 +644,13 @@ BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE* page, HLPFILE_WINDOWINFO* wi, * * WINHELP_CreateHelpWindowByHash */ -BOOL WINHELP_CreateHelpWindowByHash(HLPFILE* hlpfile, LONG lHash, +BOOL WINHELP_CreateHelpWindowByHash(HLPFILE* hlpfile, LONG lHash, HLPFILE_WINDOWINFO* wi, int nCmdShow) { HLPFILE_PAGE* page = NULL; if (hlpfile) - page = lHash ? HLPFILE_PageByHash(hlpfile, lHash) : + page = lHash ? HLPFILE_PageByHash(hlpfile, lHash) : HLPFILE_Contents(hlpfile); if (page) page->file->wRefCount++; return WINHELP_CreateHelpWindow(page, wi, nCmdShow); @@ -665,6 +670,20 @@ BOOL WINHELP_CreateHelpWindowByMap(HLPFILE* hlpfile, LONG lMap, return WINHELP_CreateHelpWindow(page, wi, nCmdShow); } +/*********************************************************************** + * + * WINHELP_CreateHelpWindowByOffset + */ +BOOL WINHELP_CreateHelpWindowByOffset(HLPFILE* hlpfile, LONG lOffset, + HLPFILE_WINDOWINFO* wi, int nCmdShow) +{ + HLPFILE_PAGE* page = NULL; + + page = HLPFILE_PageByOffset(hlpfile, lOffset); + if (page) page->file->wRefCount++; + return WINHELP_CreateHelpWindow(page, wi, nCmdShow); +} + /*********************************************************************** * * WINHELP_MainWndProc @@ -776,7 +795,7 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, GetScrollRange(win->hTextWnd, SB_VERT, &min, &max); if (keyDelta == 0) - { + { GetClientRect(win->hTextWnd, &rect); keyDelta = (rect.bottom - rect.top) / 2; if (wParam == VK_PRIOR) @@ -982,7 +1001,7 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam, new_window_size.cy = old_window_size.cy - old_client_size.cy + new_client_size.cy; win->hShadowWnd = - CreateWindow(SHADOW_WIN_CLASS_NAME, "", WS_POPUP, + CreateWindowEx(WS_EX_TOOLWINDOW, SHADOW_WIN_CLASS_NAME, "", WS_POPUP, origin.x + SHADOW_DX, origin.y + SHADOW_DY, new_window_size.cx, new_window_size.cy, 0, 0, Globals.hInstance, 0); @@ -1039,7 +1058,7 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam, INT Min, Max; INT CurPos = GetScrollPos(hWnd, SB_VERT); INT dy; - + GetScrollRange(hWnd, SB_VERT, &Min, &Max); GetClientRect(hWnd, &rect); @@ -1200,7 +1219,7 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam, hlpfile = WINHELP_LookupHelpFile(part->link->lpszString); if (part->link->window == -1) wi = win->info; - else if ((part->link->window >= 0) && (part->link->window < hlpfile->numWindows)) + else if (part->link->window < hlpfile->numWindows) wi = &hlpfile->windows[part->link->window]; else { @@ -1212,7 +1231,7 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam, break; case hlp_link_popup: hlpfile = WINHELP_LookupHelpFile(part->link->lpszString); - if (hlpfile) WINHELP_CreateHelpWindowByHash(hlpfile, part->link->lHash, + if (hlpfile) WINHELP_CreateHelpWindowByHash(hlpfile, part->link->lHash, WINHELP_GetPopupWindowInfo(hlpfile, hWnd, &mouse), SW_NORMAL); break; @@ -1234,7 +1253,6 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam, if (hWnd == Globals.hPopupWnd) Globals.hPopupWnd = 0; bExit = (Globals.wVersion >= 4 && !lstrcmpi(win->lpszName, "main")); - DeleteObject(win->hBrush); WINHELP_DeleteWindow(win); @@ -1300,7 +1318,7 @@ static LRESULT CALLBACK WINHELP_HistoryWndProc(HWND hWnd, UINT msg, WPARAM wPara for (i = 0; i < win->histIndex; i++) { - TextOut(hDc, 0, i * tm.tmHeight, win->history[i]->lpszTitle, + TextOut(hDc, 0, i * tm.tmHeight, win->history[i]->lpszTitle, strlen(win->history[i]->lpszTitle)); } EndPaint(hWnd, &ps); @@ -1677,7 +1695,7 @@ static BOOL WINHELP_SplitLines(HWND hWnd, LPSIZE newsize) if (p->cookie == para_bitmap) { DIBSECTION dibs; - + GetObject(p->u.gfx.u.bmp.hBitmap, sizeof(dibs), &dibs); gfxSize.cx = dibs.dsBm.bmWidth; gfxSize.cy = dibs.dsBm.bmHeight; @@ -1815,6 +1833,8 @@ static void WINHELP_DeleteWindow(WINHELP_WINDOW* win) if (win->hShadowWnd) DestroyWindow(win->hShadowWnd); if (win->hHistoryWnd) DestroyWindow(win->hHistoryWnd); + DeleteObject(win->hBrush); + for (i = 0; i < win->histIndex; i++) { HLPFILE_FreeHlpFile(win->history[i]->file); @@ -1836,13 +1856,13 @@ static void WINHELP_InitFonts(HWND hWnd) { WINHELP_WINDOW *win = (WINHELP_WINDOW*) GetWindowLong(hWnd, 0); LOGFONT logfontlist[] = { - {-10, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - {-12, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - {-12, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - {-12, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - {-12, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - {-10, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}, - { -8, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 32, "Helv"}}; + {-10, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + {-12, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + {-10, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}, + { -8, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, "Helv"}}; #define FONTS_LEN (sizeof(logfontlist)/sizeof(*logfontlist)) static HFONT fonts[FONTS_LEN]; @@ -1914,7 +1934,7 @@ WINHELP_LINE_PART* WINHELP_IsOverLink(WINHELP_WINDOW* win, WPARAM wParam, LPARAM { for (part = &line->first_part; part; part = part->next) { - if (part->link && + if (part->link && part->link->lpszString && part->rect.left <= mouse.x && part->rect.right >= mouse.x && @@ -1928,3 +1948,118 @@ WINHELP_LINE_PART* WINHELP_IsOverLink(WINHELP_WINDOW* win, WPARAM wParam, LPARAM return NULL; } + +/************************************************************************** + * cb_KWBTree + * + * HLPFILE_BPTreeCallback enumeration function for '|KWBTREE' internal file. + * + */ +static void cb_KWBTree(void *p, void **next, void *cookie) +{ + HWND hListWnd = (HWND)cookie; + int count; + + WINE_TRACE("Adding '%s' to search list\n", (char *)p); + SendMessage(hListWnd, LB_INSERTSTRING, -1, (LPARAM)p); + count = SendMessage(hListWnd, LB_GETCOUNT, 0, 0); + SendMessage(hListWnd, LB_SETITEMDATA, count-1, (LPARAM)p); + *next = (char*)p + strlen((char*)p) + 7; +} + +/************************************************************************** + * WINHELP_IndexDlgProc + * + * Index dialog callback function. + * + * nResult passed to EndDialog: + * 1: CANCEL button + * >1: valid offset value +2. + * EndDialog itself can return 0 (error). + */ +INT_PTR CALLBACK WINHELP_SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static HLPFILE *file; + int sel; + ULONG offset = 1; + + switch (msg) + { + case WM_INITDIALOG: + file = (HLPFILE *)lParam; + HLPFILE_BPTreeEnum(file->kwbtree, cb_KWBTree, + GetDlgItem(hWnd, IDC_INDEXLIST)); + return TRUE; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + sel = SendDlgItemMessage(hWnd, IDC_INDEXLIST, LB_GETCURSEL, 0, 0); + if (sel != LB_ERR) + { + BYTE *p; + int count; + + p = (BYTE*)SendDlgItemMessage(hWnd, IDC_INDEXLIST, + LB_GETITEMDATA, sel, 0); + count = *(short*)((char *)p + strlen((char *)p) + 1); + if (count > 1) + { + MessageBox(hWnd, "count > 1 not supported yet", "Error", MB_OK | MB_ICONSTOP); + return TRUE; + } + offset = *(ULONG*)((char *)p + strlen((char *)p) + 3); + offset = *(long*)(file->kwdata + offset + 9); + if (offset == 0xFFFFFFFF) + { + MessageBox(hWnd, "macro keywords not supported yet", "Error", MB_OK | MB_ICONSTOP); + return TRUE; + } + offset += 2; + } + /* Fall through */ + case IDCANCEL: + EndDialog(hWnd, offset); + return TRUE; + default: + break; + } + default: + break; + } + return FALSE; +} + +/************************************************************************** + * WINHELP_CreateIndexWindow + * + * Displays a dialog with keywords of current help file. + * + */ +BOOL WINHELP_CreateIndexWindow(void) +{ + int ret; + HLPFILE *hlpfile; + + if (Globals.active_win && Globals.active_win->page && Globals.active_win->page->file) + hlpfile = Globals.active_win->page->file; + else + return FALSE; + + if (hlpfile->kwbtree == NULL) + { + WINE_TRACE("No index provided\n"); + return FALSE; + } + + ret = DialogBoxParam(Globals.hInstance, MAKEINTRESOURCE(IDD_INDEX), + Globals.active_win->hMainWnd, WINHELP_SearchDlgProc, + (LPARAM)hlpfile); + if (ret > 1) + { + ret -= 2; + WINE_TRACE("got %d as an offset\n", ret); + WINHELP_CreateHelpWindowByOffset(hlpfile, ret, Globals.active_win->info, SW_NORMAL); + } + return TRUE; +} diff --git a/reactos/base/applications/winhelp/winhelp.h b/reactos/base/applications/winhelp/winhelp.h index 80d9a206dca..5ba1604719b 100644 --- a/reactos/base/applications/winhelp/winhelp.h +++ b/reactos/base/applications/winhelp/winhelp.h @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINHELP_H__ -#define __WINHELP_H__ - #define MAX_LANGUAGE_NUMBER 255 #define MAX_STRING_LEN 255 @@ -175,8 +172,10 @@ extern FARPROC Callbacks[]; BOOL WINHELP_CreateHelpWindowByHash(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int); BOOL WINHELP_CreateHelpWindowByMap(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int); +BOOL WINHELP_CreateHelpWindowByOffset(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int); BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE*, HLPFILE_WINDOWINFO*, int); BOOL WINHELP_GetOpenFileName(LPSTR, int); +BOOL WINHELP_CreateIndexWindow(void); INT WINHELP_MessageBoxIDS(UINT, UINT, WORD); INT WINHELP_MessageBoxIDS_s(UINT, LPCSTR, UINT, WORD); HLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile); @@ -194,5 +193,3 @@ extern const char STRING_DIALOG_TEST[]; /* Buttons */ #define WH_FIRST_BUTTON 500 - -#endif /* __WINHELP_H__ */ diff --git a/reactos/base/applications/winhelp/winhelp_res.h b/reactos/base/applications/winhelp/winhelp_res.h index 8ef27fa1a84..2875ae35436 100644 --- a/reactos/base/applications/winhelp/winhelp_res.h +++ b/reactos/base/applications/winhelp/winhelp_res.h @@ -30,3 +30,6 @@ #define STID_HELP_FILES_HLP 0x12C #define STID_DIALOG_TEST 0x12D #define STID_FILE_NOT_FOUND_s 0x12E + +#define IDD_INDEX 0x150 +#define IDC_INDEXLIST 0x151