122 lines
3.1 KiB
C++
122 lines
3.1 KiB
C++
#ifndef SFFFILE_H
|
|
#define SFFFILE_H
|
|
//
|
|
// This file is part of sffview, a program to view structured fax files (sff)
|
|
//
|
|
// Copyright (C) 1998-2012 Peter Schaefer-Hutter and contributors ("THE AUTHORS")
|
|
//
|
|
// Permission to use, copy, modify, distribute, and sell this software and
|
|
// its documentation for any purpose is hereby granted without fee.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
|
// WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
//
|
|
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
|
|
// INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
|
|
// DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
// WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY
|
|
// THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
|
|
// OR PERFORMANCE OF THIS SOFTWARE.
|
|
//
|
|
// Contributor(s):
|
|
// None
|
|
//
|
|
// You can contact the original author by email at peter.schaefer@gmx.de.
|
|
//
|
|
// I'm always pleased to hear that somebody is actually using my software.
|
|
// If you can manage it, e-mail me a quick notice. Thanks!
|
|
//
|
|
/*-RCS-Info----------------------------------------------------
|
|
|
|
$Id: sfffile.h,v 1.2 2008/03/21 13:47:01 pschaefer Exp $
|
|
|
|
---RCS-Info--------------------------------------------------*/
|
|
|
|
#include <vector>
|
|
|
|
class CBitSink;
|
|
|
|
typedef enum {
|
|
NORMAL,
|
|
WHITESKIP,
|
|
BADLINE,
|
|
USERINFO
|
|
} TSFFRecordType;
|
|
|
|
typedef struct{
|
|
sff_dword sff_id;
|
|
sff_byte version;
|
|
sff_byte reserved;
|
|
sff_word user_info;
|
|
sff_word num_pages;
|
|
sff_word first_page;
|
|
sff_dword last_page;
|
|
sff_dword file_size;
|
|
} TSFFFileHeader;
|
|
|
|
typedef struct{
|
|
sff_byte vert_res;
|
|
sff_byte horiz_res;
|
|
sff_byte coding;
|
|
sff_byte specials;
|
|
sff_word linelen;
|
|
sff_word pagelen;
|
|
sff_dword prev_page;
|
|
sff_dword next_page;
|
|
} TSFFPageHeader;
|
|
|
|
typedef struct{
|
|
TSFFRecordType type;
|
|
sff_word cb;
|
|
sff_dword runlength;
|
|
sff_byte *pData;
|
|
} TSFFRecord;
|
|
|
|
typedef struct{
|
|
sff_dword width;
|
|
sff_dword height;
|
|
sff_word dpi;
|
|
sff_word lpi;
|
|
off_t filepos;
|
|
} TSFFPage;
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
typedef std::vector<TSFFPage *> PAGEVECTOR;
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
class CSffFile : public CFile
|
|
{
|
|
protected:
|
|
static sff_byte m_SFFID[4];
|
|
PAGEVECTOR m_acPages;
|
|
|
|
void ScanFile();
|
|
// throw CSimpleException
|
|
|
|
public:
|
|
CSffFile(const std::string& strFileName);
|
|
~CSffFile();
|
|
|
|
int GetPageCount() { return m_acPages.size(); };
|
|
|
|
bool PageIsValid(int nPage);
|
|
bool SeekPage(int nPage);
|
|
TSFFPage *GetPage(int nPage);
|
|
|
|
bool IsLowRes(int nPage);
|
|
|
|
sff_word GetHorizontalResolution(int nPage);
|
|
sff_word GetVerticalResolution(int nPage);
|
|
|
|
sff_dword GetPageWidth(int nPage);
|
|
sff_dword GetPageHeight(int nPage);
|
|
|
|
bool GetRecord(TSFFRecord& rec);
|
|
bool DecodeRecord(TSFFRecord& rec, IBitSink& bitsink);
|
|
};
|
|
|
|
#endif // SFFFILE_H
|