Ejemplo n.º 1
0
bool FileIO::Open(const char* filename, uint flg)
{
    Close();

    strncpy(path, filename, MAX_PATH);

    DWORD access = (flg & readonly ? 0 : GENERIC_WRITE) | GENERIC_READ;
    DWORD share = (flg & readonly) ? FILE_SHARE_READ : 0;
    DWORD creation = flg & create ? CREATE_ALWAYS : OPEN_EXISTING;

    hfile = CreateFile(filename, access, share, 0, creation, 0, 0);

    flags = (flg & readonly) | (hfile == INVALID_HANDLE_VALUE ? 0 : open);
    if (!(flags & open))
    {
        switch (GetLastError())
        {
        case ERROR_FILE_NOT_FOUND:
            error = file_not_found;
            break;
        case ERROR_SHARING_VIOLATION:
            error = sharing_violation;
            break;
        default:
            error = unknown;
            break;
        }
    }
    SetLogicalOrigin(0);

    return !!(flags & open);
}
Ejemplo n.º 2
0
void CLCDScrollingText::ResetUpdate(void)
{
    m_eState = STATE_START_DELAY;
    m_dwEllapsedTime = 0;
    m_dwLastUpdate = GetTickCount();
    m_nScrollingDistance = -1;
    m_fTotalDistance = 0;
    SetLeftMargin(0);
    SetLogicalOrigin(0, 0);
    
    CLCDText::ResetUpdate();
}
Ejemplo n.º 3
0
bool FileIO::CreateNew(const char* filename)
{
    Close();
    strncpy(path, filename, _MAXPATH);

    fp = fopen(filename, "wb");
    if (!fp) return false;

    SetLogicalOrigin(0);

    return !!(flags & open);
}
Ejemplo n.º 4
0
bool FileIO::Open(const char* filename, uint flg)
{
    Close();
    strncpy(path, filename, _MAXPATH);

    fp = fopen(filename, "rb");
    if (!fp) return false;

    SetLogicalOrigin(0);

    return true;
}
Ejemplo n.º 5
0
bool FileIO::CreateNew(const char* filename)
{
    Close();

    strncpy(path, filename, MAX_PATH);

    DWORD access = GENERIC_WRITE | GENERIC_READ;
    DWORD share = 0;
    DWORD creation = CREATE_NEW;

    hfile = CreateFile(filename, access, share, 0, creation, 0, 0);

    flags = (hfile == INVALID_HANDLE_VALUE ? 0 : open);
    SetLogicalOrigin(0);

    return !!(flags & open);
}
Ejemplo n.º 6
0
bool FileIO::Reopen(uint flg)
{
    if (!(flags & open)) return false;
    if ((flags & readonly) && (flg & create)) return false;

    if (flags & readonly) flg |= readonly;

    Close();

    DWORD access = (flg & readonly ? 0 : GENERIC_WRITE) | GENERIC_READ;
    DWORD share = flg & readonly ? FILE_SHARE_READ : 0;
    DWORD creation = flg & create ? CREATE_ALWAYS : OPEN_EXISTING;

    hfile = CreateFile(path, access, share, 0, creation, 0, 0);

    flags = (flg & readonly) | (hfile == INVALID_HANDLE_VALUE ? 0 : open);
    SetLogicalOrigin(0);

    return !!(flags & open);
}
Ejemplo n.º 7
0
void CLCDScrollingText::OnDraw(CLCDGfxBase &rGfx)
{
    if (!m_nTextLength)
    {
        return;
    }

    // calculate the scrolling distance
    if (-1 == m_nScrollingDistance)
    {
        CLCDText::OnDraw(rGfx);

        if (SCROLL_VERT == m_eScrollDir)
        { 
            // determine how far we have to travel until scrolling stops
            m_nScrollingDistance = ((GetHeight()) >= GetVExtent().cy) ?
                0 : (GetVExtent().cy - GetHeight());
            SetLogicalSize(GetVExtent().cx, GetVExtent().cy);
        }
        else
        {
            // determine how far we have to travel until scrolling stops
            m_nScrollingDistance = ((GetWidth()) >= GetHExtent().cx) ?
                0 : (GetHExtent().cx - GetWidth());
            SetLogicalSize(max(GetSize().cx, GetHExtent().cx), GetHExtent().cy);
        }
    }

    switch(m_eState)
    {
    case STATE_START_DELAY:
        if (m_dwEllapsedTime > m_dwStartDelay)
        {
            m_eState = STATE_SCROLL;
            m_dwEllapsedTime = 0;
            m_dwLastUpdate = GetTickCount();
        }
        break;

    case STATE_END_DELAY:
        if (m_dwEllapsedTime > m_dwEndDelay)
        {
            if (m_bRepeat)
            {
                ResetUpdate();
                break;
            }
            m_dwEllapsedTime = 0;
            m_dwLastUpdate = GetTickCount();
            m_eState = STATE_DONE;
        }
        break;

    case STATE_SCROLL:
        {
            // TODO: add some anti-aliasing on the movement

            // how much time has ellapsed?
            // given the speed, what is the total displacement?
            float fDistance = (float)(m_dwSpeed * m_dwEllapsedTime) / 1000.0f;
            m_fTotalDistance += fDistance;

            // we dont want the total distnace exceed our scrolling distance
            int nTotalOffset = min((int)m_fTotalDistance, m_nScrollingDistance);
            
            if (SCROLL_VERT == m_eScrollDir)
            {
                SetLogicalOrigin(GetLogicalOrigin().x, -1 * nTotalOffset);
            }
            else
            {
                SetLogicalOrigin(-1 * nTotalOffset, GetLogicalOrigin().y);
            }
            
            m_dwLastUpdate = GetTickCount();

            if (nTotalOffset == m_nScrollingDistance)
            {
                m_eState = STATE_END_DELAY;
            }
        }
        break;

    case STATE_DONE:
        break;

    default:
        break;
    }

    CLCDText::OnDraw(rGfx);
}