⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resource.cpp

📁 Wxpython Implemented on Windows CE, Source code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                {
                    ungetc(prev_ch, fd);
                    ungetc(ch, fd);
                    return true;
                }
            }
            break;
        default:
            ungetc(ch, fd);
            return true;

        }
    }
    return false;
}
static bool wxEatWhiteSpace(wxInputStream *is)
{
    char ch = is->GetC() ;
    if ((ch != ' ') && (ch != '/') && (ch != ' ') && (ch != 10) && (ch != 13) && (ch != 9))
    {
        is->Ungetch(ch);
        return true;
    }

    // Eat whitespace
    while (ch == ' ' || ch == 10 || ch == 13 || ch == 9)
        ch = is->GetC();
    // Check for comment
    if (ch == '/')
    {
        ch = is->GetC();
        if (ch == '*')
        {
            bool finished = false;
            while (!finished)
            {
                ch = is->GetC();
                if (is->LastRead() == 0)
                    return false;
                if (ch == '*')
                {
                    int newCh = is->GetC();
                    if (newCh == '/')
                        finished = true;
                    else
                    {
                        is->Ungetch(ch);
                    }
                }
            }
        }
        else // False alarm
            return false;
    }
    else
        is->Ungetch(ch);
    return wxEatWhiteSpace(is);
}

bool wxGetResourceToken(FILE *fd)
{
    if (!wxResourceBuffer)
        wxReallocateResourceBuffer();
    wxResourceBuffer[0] = 0;
    wxEatWhiteSpace(fd);

    int ch = getc(fd);
    if (ch == '"')
    {
        // Get string
        wxResourceBufferCount = 0;
        ch = getc(fd);
        while (ch != '"')
        {
            int actualCh = ch;
            if (ch == EOF)
            {
                wxResourceBuffer[wxResourceBufferCount] = 0;
                return false;
            }
            // Escaped characters
            else if (ch == '\\')
            {
                int newCh = getc(fd);
                if (newCh == '"')
                    actualCh = '"';
                else if (newCh == 10)
                    actualCh = 10;
                else
                {
                    ungetc(newCh, fd);
                }
            }

            if (wxResourceBufferCount >= wxResourceBufferSize-1)
                wxReallocateResourceBuffer();
            wxResourceBuffer[wxResourceBufferCount] = (char)actualCh;
            wxResourceBufferCount ++;
            ch = getc(fd);
        }
        wxResourceBuffer[wxResourceBufferCount] = 0;
    }
    else
    {
        wxResourceBufferCount = 0;
        // Any other token
        while (ch != ' ' && ch != EOF && ch != ' ' && ch != 13 && ch != 9 && ch != 10)
        {
            if (wxResourceBufferCount >= wxResourceBufferSize-1)
                wxReallocateResourceBuffer();
            wxResourceBuffer[wxResourceBufferCount] = (char)ch;
            wxResourceBufferCount ++;

            ch = getc(fd);
        }
        wxResourceBuffer[wxResourceBufferCount] = 0;
        if (ch == EOF)
            return false;
    }
    return true;
}

bool wxGetResourceToken(wxInputStream *is)
{
    if (!wxResourceBuffer)
        wxReallocateResourceBuffer();
    wxResourceBuffer[0] = 0;
    wxEatWhiteSpace(is);

    int ch = is->GetC() ;
    if (ch == '"')
    {
        // Get string
        wxResourceBufferCount = 0;
        ch = is->GetC();
        while (ch != '"')
        {
            int actualCh = ch;
            if (ch == EOF)
            {
                wxResourceBuffer[wxResourceBufferCount] = 0;
                return false;
            }
            // Escaped characters
            else if (ch == '\\')
            {
                char newCh = is->GetC();
                if (newCh == '"')
                    actualCh = '"';
                else if (newCh == 10)
                    actualCh = 10;
                else if (newCh == 13) // mac
                    actualCh = 10;
                else
                {
                    is->Ungetch(newCh);
                }
            }

            if (wxResourceBufferCount >= wxResourceBufferSize-1)
                wxReallocateResourceBuffer();
            wxResourceBuffer[wxResourceBufferCount] = (char)actualCh;
            wxResourceBufferCount ++;
            ch = is->GetC();
        }
        wxResourceBuffer[wxResourceBufferCount] = 0;
    }
    else
    {
        wxResourceBufferCount = 0;
        // Any other token
        while (ch != ' ' && ch != EOF && ch != ' ' && ch != 13 && ch != 9 && ch != 10)
        {
            if (wxResourceBufferCount >= wxResourceBufferSize-1)
                wxReallocateResourceBuffer();
            wxResourceBuffer[wxResourceBufferCount] = (char)ch;
            wxResourceBufferCount ++;

            ch = is->GetC();
        }
        wxResourceBuffer[wxResourceBufferCount] = 0;
        if (ch == EOF)
            return false;
    }
    return true;
}

/*
* Files are in form:
static char *name = "....";
with possible comments.
*/

bool wxResourceReadOneResource(FILE *fd, wxExprDatabase& db, bool *eof, wxResourceTable *table)
{
    if (!table)
        table = wxDefaultResourceTable;

    // static or #define
    if (!wxGetResourceToken(fd))
    {
        *eof = true;
        return false;
    }

    if (strcmp(wxResourceBuffer, "#define") == 0)
    {
        wxGetResourceToken(fd);
        wxChar *name = copystring(wxConvCurrent->cMB2WX(wxResourceBuffer));
        wxGetResourceToken(fd);
        wxChar *value = copystring(wxConvCurrent->cMB2WX(wxResourceBuffer));
        if (wxIsdigit(value[0]))
        {
            int val = (int)wxAtol(value);
            wxResourceAddIdentifier(name, val, table);
        }
        else
        {
            wxLogWarning(_("#define %s must be an integer."), name);
            delete[] name;
            delete[] value;
            return false;
        }
        delete[] name;
        delete[] value;

        return true;
    }
    else if (strcmp(wxResourceBuffer, "#include") == 0)
    {
        wxGetResourceToken(fd);
        wxChar *name = copystring(wxConvCurrent->cMB2WX(wxResourceBuffer));
        wxChar *actualName = name;
        if (name[0] == wxT('"'))
            actualName = name + 1;
        int len = wxStrlen(name);
        if ((len > 0) && (name[len-1] == wxT('"')))
            name[len-1] = 0;
        if (!wxResourceParseIncludeFile(actualName, table))
        {
            wxLogWarning(_("Could not find resource include file %s."), actualName);
        }
        delete[] name;
        return true;
    }
    else if (strcmp(wxResourceBuffer, "static") != 0)
    {
        wxChar buf[300];
        wxStrcpy(buf, _("Found "));
        wxStrncat(buf, wxConvCurrent->cMB2WX(wxResourceBuffer), 30);
        wxStrcat(buf, _(", expected static, #include or #define\nwhile parsing resource."));
        wxLogWarning(buf);
        return false;
    }

    // char
    if (!wxGetResourceToken(fd))
    {
        wxLogWarning(_("Unexpected end of file while parsing resource."));
        *eof = true;
        return false;
    }

    if (strcmp(wxResourceBuffer, "char") != 0)
    {
        wxLogWarning(_("Expected 'char' while parsing resource."));
        return false;
    }

    // *name
    if (!wxGetResourceToken(fd))
    {
        wxLogWarning(_("Unexpected end of file while parsing resource."));
        *eof = true;
        return false;
    }

    if (wxResourceBuffer[0] != '*')
    {
        wxLogWarning(_("Expected '*' while parsing resource."));
        return false;
    }
    wxChar nameBuf[100];
    wxMB2WX(nameBuf, wxResourceBuffer+1, 99);
    nameBuf[99] = 0;

    // =
    if (!wxGetResourceToken(fd))
    {
        wxLogWarning(_("Unexpected end of file while parsing resource."));
        *eof = true;
        return false;
    }

    if (strcmp(wxResourceBuffer, "=") != 0)
    {
        wxLogWarning(_("Expected '=' while parsing resource."));
        return false;
    }

    // String
    if (!wxGetResourceToken(fd))
    {
        wxLogWarning(_("Unexpected end of file while parsing resource."));
        *eof = true;
        return false;
    }
    else
    {
        if (!db.ReadPrologFromString(wxResourceBuffer))
        {
            wxLogWarning(_("%s: ill-formed resource file syntax."), nameBuf);
            return false;
        }
    }
    // Semicolon
    if (!wxGetResourceToken(fd))
    {
        *eof = true;
    }
    return true;
}

bool wxResourceReadOneResource(wxInputStream *fd, wxExprDatabase& db, bool *eof, wxResourceTable *table)
{
    if (!table)
        table = wxDefaultResourceTable;

    // static or #define
    if (!wxGetResourceToken(fd))
    {
        *eof = true;
        return false;
    }

    if (strcmp(wxResourceBuffer, "#define") == 0)
    {
        wxGetResourceToken(fd);
        wxChar *name = copystring(wxConvLibc.cMB2WX(wxResourceBuffer));
        wxGetResourceToken(fd);
        wxChar *value = copystring(wxConvLibc.cMB2WX(wxResourceBuffer));
        if (wxIsalpha(value[0]))
        {
            int val = (int)wxAtol(value);
            wxResourceAddIdentifier(name, val, table);
        }
        else
        {
            wxLogWarning(_("#define %s must be an integer."), name);
            delete[] name;
            delete[] value;
            return false;
        }
        delete[] name;
        delete[] value;

        return true;
    }
    else if (strcmp(wxResourceBuffer, "#include") == 0)
    {
        wxGetResourceToken(fd);
        wxChar *name = copystring(wxConvLibc.cMB2WX(wxResourceBuffer));
        wxChar *actualName = name;
        if (name[0] == wxT('"'))
            actualName = name + 1;
        int len = wxStrlen(name);
        if ((len > 0) && (name[len-1] == wxT('"')))
            name[len-1] = 0;
        if (!wxResourceParseIncludeFile(actualName, table))
        {
            wxLogWarning(_("Could not find resource include file %s."), actualName);
        }
        delete[] name;
        return true;
    }
    else if (strcmp(wxResourceBuffer, "static") != 0)
    {
        wxChar buf[300];
        wxStrcpy(buf, _("Found "));
        wxStrncat(buf, wxConvLibc.cMB2WX(wxResourceBuffer), 30);
        wxStrcat(buf, _(", expected static, #include or #define\nwhile parsing resource."));
        wxLogWarning(buf);
        return false;
    }

    // char
    if (!wxGetResourceToken(fd))
    {
        wxLogWarning(_("Unexpected end of file while parsing resource."));
        *eof = true;
        return false;
    }

    if (strcmp(wxResourceBuffer, "char") != 0)
    {
        wxLogWarning(_("Expected 'char' while parsing resour

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -