コード例 #1
0
ファイル: simplefilereader.cpp プロジェクト: sweetdark/navi
 bool UeBase::CSimpleFileReader::ConnectFile()
{
  m_connected = false;
  if(!m_pathBasic.IsFileExist(m_fileName))
  {
    m_dataBegin = NULL;
    return false;
  }

  if(!m_dataBegin)
  {
    bool rt = m_fileBasic.CreateMemoryMapping(m_fileName, &m_fileHandle, &m_mappedMemory, (void **)&m_dataBegin, CFileBasic::UL_Native);
    assert(rt && m_fileBasic.IsValidHandle(m_fileHandle, CFileBasic::UL_Native));

    if(!rt || !m_fileBasic.IsValidHandle(m_fileHandle, CFileBasic::UL_Native))
    {
      m_fileBasic.ReleaseMemoryMapping(&m_fileHandle, &m_mappedMemory, (void **)&m_dataBegin, CFileBasic::UL_Native);
      m_dataBegin = NULL;
      return false;
    }
    if( !m_dataBegin && ConnectFile() )
    {
      return false;
    }
    m_dataCount = m_fileBasic.GetFileSize(m_fileHandle,CFileBasic::UL_Native) / m_blockSize;
    m_connected = true;
  }
  return true;
}
コード例 #2
0
ファイル: rtinq.c プロジェクト: ABratovic/open-watcom-v2
bool    FindFName( void ) {
//===================

    ftnfile     *fcb;
    char        *fname;

    ConnectFile();
    fname = IOCB->fileinfo->filename;
    fcb = Files;
    for(;;) {
        if( fcb == NULL ) return( FALSE );
        if( ( IOCB->fileinfo != fcb ) &&
            SameFile( fname, fcb->filename ) ) break;
        fcb = fcb->link;
    }
    // file already connected
    DiscoFile( IOCB->fileinfo );
    IOCB->fileinfo = fcb;
    return( TRUE );
}
コード例 #3
0
void    IOPrologue( void ) {
//====================

    ftnfile     *fcb;
    byte        form;
    byte        accm;

    IOCB->typ = PT_NOT_STARTED;
    if( IOCB->flags & BAD_REC ) {
        IOErr( IO_IREC );
    }
    if( IOCB->set_flags & SET_INTERNAL ) {
        F_Connect();
    } else {
        ChkUnitId();
        FindFtnFile();
        if( IOCB->fileinfo == NULL ) {
            IOCB->set_flags &= ~SET_FILENAME;
            ConnectFile();
        }
    }
    fcb = IOCB->fileinfo;
    if( fcb->action == ACT_DEFAULT ) {
        fcb->action = ACTION_RW;
    }
    ChkIOOperation( fcb );
    if( fcb->cctrl == CC_DEFAULT ) {
        fcb->cctrl = CC_NO;
    }
    accm = fcb->accmode;
    if( accm == ACCM_DEFAULT ) {
        if( IOCB->set_flags & SET_RECORDNUM ) {
            accm = ACCM_DIRECT;
        } else {
            accm = ACCM_SEQUENTIAL;
        }
        fcb->accmode = accm;
    } else {
        if( ( accm == ACCM_DIRECT ) && (IOCB->set_flags & SET_RECORDNUM) == 0 ) {
            IOErr( IO_REC1_ACCM );
        } else if( ( ( accm == ACCM_SEQUENTIAL ) || ( accm == ACCM_APPEND ) ) &&
                   (IOCB->set_flags & SET_RECORDNUM) ) {
            IOErr( IO_REC2_ACCM );
        }
    }
    if( accm == ACCM_DIRECT ) {
        fcb->recnum = IOCB->recordnum; // set up recordnumber
    }
    form = fcb->formatted;
    if( form == 0 ) {                    // set up format if it was
        if( (IOCB->flags & IOF_NOFMT) == 0 ) {     // not previously set
            form = FORMATTED_IO;
        } else {
            form = UNFORMATTED_IO;
        }
        fcb->formatted = form;
    } else {
        if( (form == FORMATTED_IO) && (IOCB->flags & IOF_NOFMT) ) {
            IOErr( IO_AF1 );
        } else if( (form == UNFORMATTED_IO) && (IOCB->flags & IOF_NOFMT) == 0 ) {
            IOErr( IO_AF2 );
        }
    }
    if( fcb->internal != NULL ) {
        fcb->bufflen = fcb->internal->len;
        fcb->buffer = RChkAlloc( fcb->bufflen );
    } else {
        if( ( accm <= ACCM_SEQUENTIAL ) &&
            ( fcb->eofrecnum != 0 ) &&
            ( fcb->recnum >= fcb->eofrecnum ) &&
            // Consider: READ( 1, *, END=10 )
            //           ...
            //     10    WRITE( 1, * ) 'write after EOF'
            // if an EOF condition was encounterd, we don't want IO_PAST_EOF
            // on the write
            (IOCB->flags & IOF_OUTPT) == 0 ) {
            if( fcb->recnum != fcb->eofrecnum ) {
                IOErr( IO_PAST_EOF );
            } else {
                fcb->recnum++;
                SysEOF();
            }
        }
        _AllocBuffer( fcb );
        if( fcb->fileptr == NULL ) {
            DoOpen();
        }
        if( fcb->accmode == ACCM_DIRECT ) {
            SeekFile( fcb );
            ChkIOErr( fcb );
        }
        fcb->col = 0;
    }
    if( (IOCB->flags & IOF_OUTPT) && ( fcb->col == 0 ) ) {
        memset( fcb->buffer, ' ', fcb->bufflen );
    }
}