Пример #1
0
void VDDumpChangeLog() {
    HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_CHANGES), "STUFF");

    if (!hResource)
        return;

    HGLOBAL hGlobal = LoadResource(NULL, hResource);
    if (!hGlobal)
        return;

    LPVOID lpData = LockResource(hGlobal);
    if (!lpData)
        return;

    const char *s = (const char *)lpData;

    while(*s!='\r') ++s;

    s+=2;

    tTextStream lineBuffer;
    VDStringA breakLineBuffer;

    bool foundNonIndentedLine = false;

    while(*s) {
        // parse line
        if (*s != ' ') {
            if (foundNonIndentedLine)
                break;

            foundNonIndentedLine = true;
        }

        const char *end = s;
        while(*end && *end != '\r' && *end != '\n')
            ++end;

        lineBuffer.clear();
        append_cooked(lineBuffer, s, end, false);

        // skip line termination
        s = end;
        if (*s == '\r' || *s == '\n') {
            ++s;
            if ((s[0] ^ s[-1]) == ('\r' ^ '\n'))
                ++s;
        }

        lineBuffer.push_back(0);

        // break into lines
        const char *t = lineBuffer.data();
        int maxLine = 78;

        breakLineBuffer.clear();

        do {
            const char *lineStart = t;
            const char *break1 = NULL;
            const char *break2 = NULL;

            do {
                while(*t && *t != ' ')
                    ++t;

                const char *u = t;

                while(*t && *t == ' ')
                    ++t;

                if (u - lineStart > maxLine) {
                    if (!break1) {
                        break1 = u + maxLine;
                        break2 = break1;
                    }

                    break;
                }

                break1 = u;
                break2 = t;
            } while(*t);

            breakLineBuffer.append(lineStart, break1);
            VDLog(kVDLogInfo, VDTextAToW(breakLineBuffer.data(), breakLineBuffer.size()));

            t = break2;
            breakLineBuffer.clear();
            breakLineBuffer.resize(5, ' ');

            maxLine = 73;
        } while(*t);
    }
}
Пример #2
0
size_t VDRegistryProviderMemory::Key::KeyHash::operator()(const VDStringA& s) const {
	return VDHashString32I(s.data(), s.size());
}