Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Специализированный программно-аппаратный комплекс обучения русскому жестовому языку. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

*/

SeekToEntries(SEEK_ENTRIESDATA); LONG newPos = m_Entries_pos+4*num;

if(num!=-1)

{

chandle.AssertValid();

if(chandle.Seek(newPos,CFile::begin)==newPos) return true;

}

return false;

}

bool CDataContainerFile::SeekToBuildInFile(LPCTSTR subfile)

{

chandle.AssertValid(); if(!SeekToNamePos(subfile)) return false; DWORD pos; if(chandle.Read(&pos,4)!=4) return false; chandle.Seek(pos,CFile::begin);

return true;

}

bool CDataContainerFile::SeekToBuildInFile(DWORD num)

{

chandle.AssertValid(); if(!SeekToNamePos(num)) return false; DWORD pos; if(chandle.Read(&pos,4)!=4) return false;

chandle.Seek(pos,CFile::begin); return true;

}

bool CDataContainerFile::PrepareDataContainerToRebild(CString fname)//,LPPROGRESS_ROUTINE lpProgressRoutine)

{

//CopyFileEx(); return true;

}

CFile * CDataContainerFile::GetHandle()

{

chandle.AssertValid();

return &chandle;//.Duplicate();

}

CString CDataContainerFile::NumberToName(long Number)

{

if(Number>=num_entries) return _TEXT("");

71

StoreHandle(); SeekToEntries(SEEK_ENTRIESNAMES); BYTE buf[_MAX_LINK_SIZE];

long num=0; while(GetNextName((char *)buf))

{

if(num==Number) break; num++;

}

RestoreHandle(); return _TEXT(buf);

}

int CDataContainerFile::SelectNeededImage(LPTSTR iText)

{

return 1;

}

bool CDataContainerFile::ExtractFile(LPCTSTR DestFileName, LPCTSTR OriginFileName)

{

ASSERT(chandle); CFile DestFile;

const DWORD Count=1024;

LONG Size=GetFileSize(NULL,OriginFileName),Back; BYTE Buffer[Count];

if(Size && SeekToBuildInFile(OriginFileName))

{

if(DestFile.Open(DestFileName,CFile::modeCreate | CFile::modeWrite))

{

while(1)

{

if(Size<=0) break;

Back = chandle.Read(Buffer,1024); if(Size>=1024)

{

DestFile.Write(Buffer,Back);

}

else if(Size!=0)

{

DestFile.Write(Buffer,Size);

break;

}

Size-=1024;

}

72

DestFile.Close(); return true;

}

}

return false;

}

bool CDataContainerFile::ExtractFileName(LPSTR Name, LPSTR PathName)

{

ASSERT(Name);

long Len = strlen(PathName); Name[0]=0;

if(Len==0) return false; for(long k=Len;k>=0;k--)

{

if(PathName[k]=='\\') break;

}

strcpy(Name,(LPSTR)((DWORD)PathName+k+1));

if(strlen(Name)) return true;

return false;

}

bool CDataContainerFile::ChangeFolder(LPSTR NewFolder, LPSTR PathNameFile)

{

ASSERT(NewFolder);

ASSERT(PathNameFile);

long Len = strlen(PathNameFile); if(Len==0) return false;

for(long k=Len;k>=0;k--)

{

if(PathNameFile[k]=='\\') break;

}

strcat(NewFolder,(LPSTR)((DWORD)PathNameFile+k+1));

if(strlen(NewFolder)) return true;

return false;

}

DWORD CDataContainerFile::GetCount(void)

{

return num_entries;

}

bool CDataContainerFile::GetFileInfo(DWORD Num, LPFILEINFO fileinfo)

73

{

fileinfo->size = GetFileSize(Num); fileinfo->type = GetFileType(Num); fileinfo->ver = GetFileVer(Num); return true;

}

BYTE CDataContainerFile::GetFileType(DWORD Num)

{

BYTE buf[SIGNATURE_LEN+2]; if(GetFileSize(Num)<8) return 0;

//ASSERT(chandle);

chandle.AssertValid();

bool State=SeekToBuildInFile(Num); ASSERT(State); if(IsWGTSprite(&chandle,NULL)) return SPR; chandle.Read((LPSTR)buf,SIGNATURE_LEN);

return GetTypeFromSignature((char *)buf,SIGNATURE_LEN);

}

LONG CDataContainerFile::GetFileSize(DWORD Num)

{

LONG size=0; StoreHandle(); chandle.AssertValid();

if(!SeekToNamePos(Num)) return false; LONG posx;

chandle.Read(&posx,4);

chandle.Read(&size,4);

#pragma warning( disable : 4018 ) if(Num+1==num_entries)

size=m_ContainerSize; #pragma warning( default : 4018 )

ASSERT(size); size-=posx; RestoreHandle(); if(size>0)

return size;

return UNKNOWN;

}

DWORD CDataContainerFile::GetFileVer(DWORD Num)

{

DWORD file_ver=0; BYTE bVer=0;

if(GetFileSize(Num)<8) return 0;

74

if((bVer=GetFileType(Num))!=UNKNOWN)

{

if(bVer==SPR) chandle.Read(&file_ver,2);

else chandle.Read(&file_ver,4);

return file_ver;

}

return UNKNOWN;

}

bool CDataContainerFile::DoValidFiltering(LPTSTR lpszText, LPCTSTR Filter, DWORD dwFilteringFlags)

{

char buffer[1024]; int i_counter;

bool IsValid = false; ExtractFolder(buffer,lpszText); int Lenght = strlen(lpszText); if(Lenght==0)

return true; if(!strlen(lpszText)) return false;

if(dwFilteringFlags&FF_BY_EXTENSIONS)

{

for(int i=Lenght;i>=0;i--)

{

if(lpszText[i]=='.')

{

if(strcmp((LPSTR)((DWORD)lpszText+i),Filter)==0)

IsValid=true;

}

}

}

else if(

(strcmp(buffer,Filter)==0 && dwFilteringFlags&FF_NO_SUBFOLDERS)

||

(strncmp(buffer,Filter,Lenght)==0 && dwFilteringFlags&FF_PLACE_NO_PATH))

IsValid=true;

if(IsValid)

{

//Extract filename if needed if(dwFilteringFlags&FF_PLACE_NO_PATH &&

75

dwFilteringFlags&FF_NO_SUBFOLDERS)

{

ExtractFileName(lpszText,lpszText);

}

if(dwFilteringFlags&FF_CUT_EXTENSIONS)

{

i_counter=strlen(lpszText); for(int i=i_counter;i>=0;i--)

{

if(lpszText[i]=='.')

{

lpszText[i]=0;

break;

}

}

}

return true;

}

return false;

}

bool CDataContainerFile::ExtractFolder(LPSTR OnlyFolder, LPSTR FullPathName)

{

ASSERT(OnlyFolder);

ASSERT(FullPathName);

long Len = strlen(FullPathName); OnlyFolder[0]=0;

if(Len==0) return false; for(long k=Len;k>=0;k--)

{

if(FullPathName[k]=='\\') break;

}

strncpy(OnlyFolder,FullPathName,k+1);

OnlyFolder[k+1]=0;

if(strlen(OnlyFolder)) return true;

return false;

}

bool CDataContainerFile::EnumerateEntries(CComboBox *m_WndCombo,LPCTSTR FilterString /*= NULL*/, DWORD dwFilteringFlags /*= NULL*/)

{

BYTE Type=0;

76

chandle.AssertValid(); ASSERT(m_WndCombo);

char lpszText[_MAX_LINK_SIZE]; // CString lpszText;

//Bind our images to this data file /*

if(cImList == NULL)

{

cImList = new CImageList;

cImList->Create( MAKEINTRESOURCE(IDB_TVIMAGELIST), 16, MAX_SUPPORTED_FILE_TYPES, RGB(255,255,255));

m_WndTree->SetImageList( cImList, TVSIL_NORMAL); m_WndTree->SetImageList( cImList, TVSIL_STATE);

}

*/

//skip header=> go to names SeekToEntries(SEEK_ENTRIESNAMES);

for(int i=0;i<num_entries;i++)

{

if(!GetNextName(lpszText)) return false;

//Do filtering process if(FilterString)

{

if(!DoValidFiltering(lpszText,FilterString,dwFilteringFlags))

continue;

}

//AfxMessageBox(lpszText);

//StoreHandle();

//Type = GetFileType(i);

//if(Type!=0)

//

Type+=2;

//RestoreHandle(); if(!PlaseIntoComboBox(m_WndCombo,

lpszText,GetDataPos(i),dwFilteringFlags)) return false;

}

return true;

}

bool CDataContainerFile::EnumerateEntriesProgress(CTreeCtrl *m_WndTree, HTREEITEM root /*= NULL*/,LPCTSTR FilterString /*= NULL*/, DWORD

dwFilteringFlags /*= NULL*/)

77

{

CDlgEnum cd(this,m_WndTree,root,FilterString,dwFilteringFlags); if(cd.DoModal()==IDOK)

{

m_WndTree->SetFocus(); return true;

}

return false;

}

bool CDataContainerFile::EnumerateEntries(CTreeCtrl *m_WndTree, HTREEITEM root /*= NULL*/,LPCTSTR FilterString /*= NULL*/, DWORD dwFilteringFlags /*= NULL*/, CDialog *m_EnumDlg /*= NULL*/)

{

BYTE Type=0; chandle.AssertValid(); ASSERT(m_WndTree); CProgressCtrl *m_EnumPrgs;

char lpszText[_MAX_LINK_SIZE];

//CString lpszText; if(dwFilteringFlags&FF_SHOWPROGRESS)

{

m_EnumPrgs=(CProgressCtrl *)m_EnumDlg- >GetDlgItem(IDC_PROGRESS);

m_EnumPrgs->SetRange32(0,num_entries);

}

//Bind our images to this data file /*

if(cImList == NULL)

{

cImList = new CImageList;

cImList->Create( MAKEINTRESOURCE(IDB_TVIMAGELIST), 16, MAX_SUPPORTED_FILE_TYPES, RGB(255,255,255));

m_WndTree->SetImageList( cImList, TVSIL_NORMAL); m_WndTree->SetImageList( cImList, TVSIL_STATE);

}

*/

//skip header=> go to names SeekToEntries(SEEK_ENTRIESNAMES);

for(int i=0;i<num_entries;i++)

{

if(!GetNextName(lpszText)) return false;

//Do filtering process

78

if(FilterString)

{

if(!DoValidFiltering(lpszText,FilterString,dwFilteringFlags))

continue;

}

//AfxMessageBox(lpszText);

StoreHandle();

Type = GetFileType(i); if(Type!=0)

Type+=2;

RestoreHandle(); if(!PlaseFileIntoTree(m_WndTree,

root,lpszText,GetDataPos(i),dwFilteringFlags,Type)) return false;

if(dwFilteringFlags&FF_SHOWPROGRESS)

{

if((i&0xFFFFFFF0)==i)

{

m_EnumPrgs->SetPos(i); m_EnumDlg->SetDlgItemInt(IDC_COUNTED,i);

}

}

}

if(dwFilteringFlags&FF_SHOWPROGRESS)

{

m_EnumPrgs->SetPos(i); m_EnumDlg->SetDlgItemInt(IDC_COUNTED,i);

}

return true;

}

void CDataContainerFile::StoreExHandle(CFile *ExFp)

{

ASSERT(ExFp); ExFp->AssertValid();

m_dwExPos = ExFp->GetPosition();

}

void CDataContainerFile::ReStoreExHandle(CFile *ExFp)

{

ASSERT(ExFp); ExFp->AssertValid();

ExFp->Seek(m_dwExPos,CFile::begin);

}

bool CDataContainerFile::IsWGTSprite(CFile *fp,LPFILEINFO fileinfo)

79

{

char buffer[14]; buffer[13]=0;

bool bIsWGTSprite=false; ASSERT(fp); fp->AssertValid(); StoreExHandle(fp); if(fileinfo)

fp->Read(&fileinfo->ver,0x02); else

fp->Seek(2,CFile::current); fp->Read(buffer,0x0D);

if(memcmp(buffer,sz_FileTypes[SPR],0x0D)==0 && strlen(buffer)>0)

{

bIsWGTSprite = true; if(fileinfo)

fileinfo->type=SPR;

}

ReStoreExHandle(fp); return bIsWGTSprite;

}

ПРИЛОЖЕНИЕ 3

Листинг работы с данными

//CreateNewFile.cpp : implementation file

#include "stdafx.h" #include "DCFEditor.h" #include "CreateNewFile.h"

#include "DataContainerFile\DataContainer.h" #ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

/////////////////////////////////////////////////////////////////////////////

//CreateNewFile dialog CreateNewFile::CreateNewFile(CWnd* pParent /*=NULL*/)

: CDialog(CreateNewFile::IDD, pParent)

{

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]