blob: ec7840cfbaad0bc2badcfd3f4d2fb756978a9e2c [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
#include <string.h>
#include <osl/endian.h>
#include <tools/stream.hxx>
#include <vcl/gdimtf.hxx>
#include <tools/color.hxx>
#include <vcl/virdev.hxx>
#include "sgffilt.hxx"
#include "sgfbram.hxx"
/*************************************************************************
|*
|* operator>>( SvStream&, SgfHeader& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator>>(SvStream& rIStream, SgfHeader& rHead)
{
rIStream.Read((char*)&rHead.Magic,SgfHeaderSize);
#if defined OSL_BIGENDIAN
rHead.Magic =SWAPSHORT(rHead.Magic );
rHead.Version=SWAPSHORT(rHead.Version);
rHead.Typ =SWAPSHORT(rHead.Typ );
rHead.Xsize =SWAPSHORT(rHead.Xsize );
rHead.Ysize =SWAPSHORT(rHead.Ysize );
rHead.Xoffs =SWAPSHORT(rHead.Xoffs );
rHead.Yoffs =SWAPSHORT(rHead.Yoffs );
rHead.Planes =SWAPSHORT(rHead.Planes );
rHead.SwGrCol=SWAPSHORT(rHead.SwGrCol);
rHead.OfsLo =SWAPSHORT(rHead.OfsLo );
rHead.OfsHi =SWAPSHORT(rHead.OfsHi );
#endif
return rIStream;
}
/*************************************************************************
|*
|* SgfHeader::ChkMagic()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfHeader::ChkMagic()
{ return Magic=='J'*256+'J'; }
sal_uInt32 SgfHeader::GetOffset()
{ return sal_uInt32(OfsLo)+0x00010000*sal_uInt32(OfsHi); }
/*************************************************************************
|*
|* operator>>( SvStream&, SgfEntry& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator>>(SvStream& rIStream, SgfEntry& rEntr)
{
rIStream.Read((char*)&rEntr.Typ,SgfEntrySize);
#if defined OSL_BIGENDIAN
rEntr.Typ =SWAPSHORT(rEntr.Typ );
rEntr.iFrei=SWAPSHORT(rEntr.iFrei);
rEntr.lFreiLo=SWAPSHORT (rEntr.lFreiLo);
rEntr.lFreiHi=SWAPSHORT (rEntr.lFreiHi);
rEntr.OfsLo=SWAPSHORT(rEntr.OfsLo);
rEntr.OfsHi=SWAPSHORT(rEntr.OfsHi);
#endif
return rIStream;
}
sal_uInt32 SgfEntry::GetOffset()
{ return sal_uInt32(OfsLo)+0x00010000*sal_uInt32(OfsHi); }
/*************************************************************************
|*
|* operator>>( SvStream&, SgfVector& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator>>(SvStream& rIStream, SgfVector& rVect)
{
rIStream.Read((char*)&rVect,sizeof(rVect));
#if defined OSL_BIGENDIAN
rVect.Flag =SWAPSHORT(rVect.Flag );
rVect.x =SWAPSHORT(rVect.x );
rVect.y =SWAPSHORT(rVect.y );
rVect.OfsLo=SWAPLONG (rVect.OfsLo);
rVect.OfsHi=SWAPLONG (rVect.OfsHi);
#endif
return rIStream;
}
/*************************************************************************
|*
|* operator<<( SvStream&, BmpFileHeader& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator<<(SvStream& rOStream, BmpFileHeader& rHead)
{
#if defined OSL_BIGENDIAN
rHead.Typ =SWAPSHORT(rHead.Typ );
rHead.SizeLo =SWAPSHORT(rHead.SizeLo );
rHead.SizeHi =SWAPSHORT(rHead.SizeHi );
rHead.Reserve1=SWAPSHORT(rHead.Reserve1);
rHead.Reserve2=SWAPSHORT(rHead.Reserve2);
rHead.OfsLo =SWAPSHORT(rHead.OfsLo );
rHead.OfsHi =SWAPSHORT(rHead.OfsHi );
#endif
rOStream.Write((char*)&rHead,sizeof(rHead));
#if defined OSL_BIGENDIAN
rHead.Typ =SWAPSHORT(rHead.Typ );
rHead.SizeLo =SWAPSHORT(rHead.SizeLo );
rHead.SizeHi =SWAPSHORT(rHead.SizeHi );
rHead.Reserve1=SWAPSHORT(rHead.Reserve1);
rHead.Reserve2=SWAPSHORT(rHead.Reserve2);
rHead.OfsLo =SWAPSHORT(rHead.OfsLo );
rHead.OfsHi =SWAPSHORT(rHead.OfsHi );
#endif
return rOStream;
}
void BmpFileHeader::SetSize(sal_uInt32 Size)
{
SizeLo=sal_uInt16(Size & 0x0000FFFF);
SizeHi=sal_uInt16((Size & 0xFFFF0000)>>16);
}
void BmpFileHeader::SetOfs(sal_uInt32 Ofs)
{
OfsLo=sal_uInt16(Ofs & 0x0000FFFF);
OfsHi=sal_uInt16((Ofs & 0xFFFF0000)>>16);
}
sal_uInt32 BmpFileHeader::GetOfs()
{
return sal_uInt32(OfsLo)+0x00010000*sal_uInt32(OfsHi);
}
/*************************************************************************
|*
|* operator<<( SvStream&, BmpInfoHeader& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator<<(SvStream& rOStream, BmpInfoHeader& rInfo)
{
#if defined OSL_BIGENDIAN
rInfo.Size =SWAPLONG (rInfo.Size );
rInfo.Width =SWAPLONG (rInfo.Width );
rInfo.Hight =SWAPLONG (rInfo.Hight );
rInfo.Planes =SWAPSHORT(rInfo.Planes );
rInfo.PixBits =SWAPSHORT(rInfo.PixBits );
rInfo.Compress=SWAPLONG (rInfo.Compress);
rInfo.ImgSize =SWAPLONG (rInfo.ImgSize );
rInfo.xDpmm =SWAPLONG (rInfo.xDpmm );
rInfo.yDpmm =SWAPLONG (rInfo.yDpmm );
rInfo.ColUsed =SWAPLONG (rInfo.ColUsed );
rInfo.ColMust =SWAPLONG (rInfo.ColMust );
#endif
rOStream.Write((char*)&rInfo,sizeof(rInfo));
#if defined OSL_BIGENDIAN
rInfo.Size =SWAPLONG (rInfo.Size );
rInfo.Width =SWAPLONG (rInfo.Width );
rInfo.Hight =SWAPLONG (rInfo.Hight );
rInfo.Planes =SWAPSHORT(rInfo.Planes );
rInfo.PixBits =SWAPSHORT(rInfo.PixBits );
rInfo.Compress=SWAPLONG (rInfo.Compress);
rInfo.ImgSize =SWAPLONG (rInfo.ImgSize );
rInfo.xDpmm =SWAPLONG (rInfo.xDpmm );
rInfo.yDpmm =SWAPLONG (rInfo.yDpmm );
rInfo.ColUsed =SWAPLONG (rInfo.ColUsed );
rInfo.ColMust =SWAPLONG (rInfo.ColMust );
#endif
return rOStream;
}
/*************************************************************************
|*
|* operator<<( SvStream&, RGBQuad& )
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
SvStream& operator<<(SvStream& rOStream, const RGBQuad& rQuad)
{
rOStream.Write((char*)&rQuad,sizeof(rQuad));
return rOStream;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// PcxExpand ///////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
class PcxExpand
{
private:
sal_uInt16 Count;
sal_uInt8 Data;
public:
PcxExpand() { Count=0; }
sal_uInt8 GetByte(SvStream& rInp);
};
sal_uInt8 PcxExpand::GetByte(SvStream& rInp)
{
if (Count>0) {
Count--;
} else {
rInp.Read((char*)&Data,1);
if ((Data & 0xC0) == 0xC0) {
Count=(Data & 0x3F) -1;
rInp.Read((char*)&Data,1);
}
}
return Data;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// SgfBMapFilter ///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
/*************************************************************************
|*
|* SgfFilterBmp()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfFilterBMap(SvStream& rInp, SvStream& rOut, SgfHeader& rHead, SgfEntry&)
{
BmpFileHeader aBmpHead;
BmpInfoHeader aBmpInfo;
sal_uInt16 nWdtInp=(rHead.Xsize+7)/8; // Breite der Input-Bitmap in Bytes
sal_uInt16 nWdtOut; // Breite der Output-Bitmap in Bytes
sal_uInt16 nColors; // Anzahl der Farben (1,16,256)
sal_uInt16 nColBits; // Anzahl der Bits/Pixel (2, 4, 8)
sal_uInt16 i,j,k; // Spaltenzaehler, Zeilenzaehler, Planezaehler
sal_uInt16 a,b; // Hilfsvariable
sal_uInt8 pl1 = 0,pl2= 0; // Masken fuer die Planes
sal_uInt8* pBuf=NULL; // Buffer fuer eine Pixelzeile
PcxExpand aPcx;
sal_uLong nOfs;
sal_uInt8 cRGB[4];
if (rHead.Planes<=1) nColBits=1; else nColBits=4; if (rHead.Typ==4) nColBits=8;
nColors=1<<nColBits;
nWdtOut=((rHead.Xsize*nColBits+31)/32)*4;
aBmpHead.Typ='B'+'M'*256;
aBmpHead.SetOfs(sizeof(aBmpHead)+sizeof(aBmpInfo)+nColors*4);
aBmpHead.SetSize(aBmpHead.GetOfs()+nWdtOut*rHead.Ysize);
aBmpHead.Reserve1=0;
aBmpHead.Reserve2=0;
aBmpInfo.Size=sizeof(aBmpInfo);
aBmpInfo.Width=rHead.Xsize;
aBmpInfo.Hight=rHead.Ysize;
aBmpInfo.Planes=1;
aBmpInfo.PixBits=nColBits;
aBmpInfo.Compress=0;
aBmpInfo.ImgSize=0;
aBmpInfo.xDpmm=0;
aBmpInfo.yDpmm=0;
aBmpInfo.ColUsed=0;
aBmpInfo.ColMust=0;
pBuf=new sal_uInt8[nWdtOut];
if (!pBuf) return sal_False; // Fehler: kein Speichel da
rOut<<aBmpHead<<aBmpInfo;
memset(pBuf,0,nWdtOut); // Buffer mit Nullen fuellen
if (nColors==2)
{
rOut<<RGBQuad(0x00,0x00,0x00); // Schwarz
rOut<<RGBQuad(0xFF,0xFF,0xFF); // Weiss
nOfs=rOut.Tell();
for (j=0;j<rHead.Ysize;j++)
rOut.Write((char*)pBuf,nWdtOut); // Datei erstmal komplett mit Nullen fuellen
for (j=0;j<rHead.Ysize;j++) {
for(i=0;i<nWdtInp;i++) {
pBuf[i]=aPcx.GetByte(rInp);
}
for(i=nWdtInp;i<nWdtOut;i++) pBuf[i]=0; // noch bis zu 3 Bytes
rOut.Seek(nOfs+((sal_uLong)rHead.Ysize-j-1L)*(sal_uLong)nWdtOut); // rueckwaerts schreiben!
rOut.Write((char*)pBuf,nWdtOut);
}
} else if (nColors==16) {
rOut<<RGBQuad(0x00,0x00,0x00); // Schwarz
rOut<<RGBQuad(0x24,0x24,0x24); // Grau 80%
rOut<<RGBQuad(0x49,0x49,0x49); // Grau 60%
rOut<<RGBQuad(0x92,0x92,0x92); // Grau 40%
rOut<<RGBQuad(0x6D,0x6D,0x6D); // Grau 30%
rOut<<RGBQuad(0xB6,0xB6,0xB6); // Grau 20%
rOut<<RGBQuad(0xDA,0xDA,0xDA); // Grau 10%
rOut<<RGBQuad(0xFF,0xFF,0xFF); // Weiss
rOut<<RGBQuad(0x00,0x00,0x00); // Schwarz
rOut<<RGBQuad(0xFF,0x00,0x00); // Rot
rOut<<RGBQuad(0x00,0x00,0xFF); // Blau
rOut<<RGBQuad(0xFF,0x00,0xFF); // Magenta
rOut<<RGBQuad(0x00,0xFF,0x00); // Gruen
rOut<<RGBQuad(0xFF,0xFF,0x00); // Gelb
rOut<<RGBQuad(0x00,0xFF,0xFF); // Cyan
rOut<<RGBQuad(0xFF,0xFF,0xFF); // Weiss
nOfs=rOut.Tell();
for (j=0;j<rHead.Ysize;j++)
rOut.Write((char*)pBuf,nWdtOut); // Datei erstmal komplett mit Nullen fuellen
for (j=0;j<rHead.Ysize;j++) {
memset(pBuf,0,nWdtOut);
for(k=0;k<4;k++) {
if (k==0) {
pl1=0x10; pl2=0x01;
} else {
pl1<<=1; pl2<<=1;
}
for(i=0;i<nWdtInp;i++) {
a=i*4;
b=aPcx.GetByte(rInp);
if (b & 0x80) pBuf[a ]|=pl1;
if (b & 0x40) pBuf[a ]|=pl2;
if (b & 0x20) pBuf[a+1]|=pl1;
if (b & 0x10) pBuf[a+1]|=pl2;
if (b & 0x08) pBuf[a+2]|=pl1;
if (b & 0x04) pBuf[a+2]|=pl2;
if (b & 0x02) pBuf[a+3]|=pl1;
if (b & 0x01) pBuf[a+3]|=pl2;
}
}
for(i=nWdtInp*4;i<nWdtOut;i++) pBuf[i]=0; // noch bis zu 3 Bytes
rOut.Seek(nOfs+((sal_uLong)rHead.Ysize-j-1L)*(sal_uLong)nWdtOut); // rueckwaerts schreiben!
rOut.Write((char*)pBuf,nWdtOut);
}
} else if (nColors==256) {
cRGB[3]=0; // der 4. Paletteneintrag fuer BMP
for (i=0;i<256;i++) { // Palette kopieren
rInp.Read((char*)cRGB,3);
pl1=cRGB[0]; // Rot mit Blau tauschen
cRGB[0]=cRGB[2];
cRGB[2]=pl1;
rOut.Write((char*)cRGB,4);
}
nOfs=rOut.Tell();
for (j=0;j<rHead.Ysize;j++)
rOut.Write((char*)pBuf,nWdtOut); // Datei erstmal komplett mit Nullen fuellen
for (j=0;j<rHead.Ysize;j++) {
for(i=0;i<rHead.Xsize;i++)
pBuf[i]=aPcx.GetByte(rInp);
for(i=rHead.Xsize;i<nWdtOut;i++) pBuf[i]=0; // noch bis zu 3 Bytes
rOut.Seek(nOfs+((sal_uLong)rHead.Ysize-j-1L)*(sal_uLong)nWdtOut); // rueckwaerts schreiben!
rOut.Write((char*)pBuf,nWdtOut);
}
}
delete[] pBuf;
return sal_True;
}
/*************************************************************************
|*
|* SgfBMapFilter()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfBMapFilter(SvStream& rInp, SvStream& rOut)
{
sal_uLong nFileStart; // Offset des SgfHeaders. Im allgemeinen 0.
SgfHeader aHead;
SgfEntry aEntr;
sal_uLong nNext;
sal_Bool bRdFlag=sal_False; // Grafikentry gelesen ?
sal_Bool bRet=sal_False; // Returncode
nFileStart=rInp.Tell();
rInp>>aHead;
if (aHead.ChkMagic() && (aHead.Typ==SgfBitImag0 || aHead.Typ==SgfBitImag1 ||
aHead.Typ==SgfBitImag2 || aHead.Typ==SgfBitImgMo)) {
nNext=aHead.GetOffset();
while (nNext && !bRdFlag && !rInp.GetError() && !rOut.GetError()) {
rInp.Seek(nFileStart+nNext);
rInp>>aEntr;
nNext=aEntr.GetOffset();
if (aEntr.Typ==aHead.Typ) {
bRdFlag=sal_True;
switch(aEntr.Typ) {
case SgfBitImag0:
case SgfBitImag1:
case SgfBitImag2:
case SgfBitImgMo: bRet=SgfFilterBMap(rInp,rOut,aHead,aEntr); break;
}
}
} // while(nNext)
}
if (rInp.GetError()) bRet=sal_False;
return(bRet);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// SgfVectFilter ///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
// Fuer StarDraw Embedded SGF-Vector
long SgfVectXofs=0;
long SgfVectYofs=0;
long SgfVectXmul=0;
long SgfVectYmul=0;
long SgfVectXdiv=0;
long SgfVectYdiv=0;
sal_Bool SgfVectScal=sal_False;
////////////////////////////////////////////////////////////
// Hpgl2SvFarbe ////////////////////////////////////////////
////////////////////////////////////////////////////////////
Color Hpgl2SvFarbe( sal_uInt8 nFarb )
{
sal_uLong nColor = COL_BLACK;
switch (nFarb & 0x07) {
case 0: nColor=COL_WHITE; break;
case 1: nColor=COL_YELLOW; break;
case 2: nColor=COL_LIGHTMAGENTA; break;
case 3: nColor=COL_LIGHTRED; break;
case 4: nColor=COL_LIGHTCYAN; break;
case 5: nColor=COL_LIGHTGREEN; break;
case 6: nColor=COL_LIGHTBLUE; break;
case 7: nColor=COL_BLACK; break;
}
Color aColor( nColor );
return aColor;
}
/*************************************************************************
|*
|* SgfFilterVect()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfFilterVect(SvStream& rInp, SgfHeader& rHead, SgfEntry&, GDIMetaFile& rMtf)
{
VirtualDevice aOutDev;
SgfVector aVect;
sal_uInt8 nFarb;
sal_uInt8 nFrb0=7;
sal_uInt8 nLTyp;
sal_uInt8 nOTyp;
sal_Bool bEoDt=sal_False;
sal_Bool bPDwn=sal_False;
Point aP0(0,0);
Point aP1(0,0);
String Msg;
sal_uInt16 RecNr=0;
rMtf.Record(&aOutDev);
aOutDev.SetLineColor(Color(COL_BLACK));
aOutDev.SetFillColor(Color(COL_BLACK));
while (!bEoDt && !rInp.GetError()) {
rInp>>aVect; RecNr++;
nFarb=(sal_uInt8) (aVect.Flag & 0x000F);
nLTyp=(sal_uInt8)((aVect.Flag & 0x00F0) >>4);
nOTyp=(sal_uInt8)((aVect.Flag & 0x0F00) >>8);
bEoDt=(aVect.Flag & 0x4000) !=0;
bPDwn=(aVect.Flag & 0x8000) !=0;
long x=aVect.x-rHead.Xoffs;
long y=rHead.Ysize-(aVect.y-rHead.Yoffs);
if (SgfVectScal) {
if (SgfVectXdiv==0) SgfVectXdiv=rHead.Xsize;
if (SgfVectYdiv==0) SgfVectYdiv=rHead.Ysize;
if (SgfVectXdiv==0) SgfVectXdiv=1;
if (SgfVectYdiv==0) SgfVectYdiv=1;
x=SgfVectXofs+ x *SgfVectXmul /SgfVectXdiv;
y=SgfVectYofs+ y *SgfVectXmul /SgfVectYdiv;
}
aP1=Point(x,y);
if (!bEoDt && !rInp.GetError()) {
if (bPDwn && nLTyp<=6) {
switch(nOTyp) {
case 1: if (nFarb!=nFrb0) {
switch(rHead.SwGrCol) {
case SgfVectFarb: aOutDev.SetLineColor(Hpgl2SvFarbe(nFarb)); break;
case SgfVectGray: break;
case SgfVectWdth: break;
}
}
aOutDev.DrawLine(aP0,aP1); break; // Linie
case 2: break; // Kreis
case 3: break; // Text
case 5: aOutDev.DrawRect(Rectangle(aP0,aP1)); break; // Rechteck (solid)
}
}
aP0=aP1;
nFrb0=nFarb;
}
}
rMtf.Stop();
rMtf.WindStart();
MapMode aMap( MAP_10TH_MM, Point(),
Fraction( 1, 4 ), Fraction( 1, 4 ) );
rMtf.SetPrefMapMode( aMap );
rMtf.SetPrefSize( Size( (short)rHead.Xsize, (short)rHead.Ysize ) );
return sal_True;
}
/*************************************************************************
|*
|* SgfVectFilter()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfVectFilter(SvStream& rInp, GDIMetaFile& rMtf)
{
sal_uLong nFileStart; // Offset des SgfHeaders. Im allgemeinen 0.
SgfHeader aHead;
SgfEntry aEntr;
sal_uLong nNext;
sal_Bool bRdFlag=sal_False; // Grafikentry gelesen ?
sal_Bool bRet=sal_False; // Returncode
nFileStart=rInp.Tell();
rInp>>aHead;
if (aHead.ChkMagic() && aHead.Typ==SGF_SIMPVECT) {
nNext=aHead.GetOffset();
while (nNext && !bRdFlag && !rInp.GetError()) {
rInp.Seek(nFileStart+nNext);
rInp>>aEntr;
nNext=aEntr.GetOffset();
if (aEntr.Typ==aHead.Typ) {
bRet=SgfFilterVect(rInp,aHead,aEntr,rMtf);
}
} // while(nNext)
if (bRdFlag) {
if (!rInp.GetError()) bRet=sal_True; // Scheinbar Ok
}
}
return(bRet);
}
/*************************************************************************
|*
|* SgfFilterPScr()
|*
|* Beschreibung
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_Bool SgfFilterPScr(SvStream&, SgfHeader&, SgfEntry&)
{
return sal_False; // PostSrcipt wird noch nicht unterstuetzt !
}
/*************************************************************************
|*
|* CheckSgfTyp()
|*
|* Beschreibung Feststellen, um was fuer ein SGF/SGV es sich handelt.
|* Ersterstellung JOE 23.06.93
|* Letzte Aenderung JOE 23.06.93
|*
*************************************************************************/
sal_uInt8 CheckSgfTyp(SvStream& rInp, sal_uInt16& nVersion)
{
#if OSL_DEBUG_LEVEL > 1 // Recordgroessen checken. Neuer Compiler hat vielleichte anderes Allignment!
if (sizeof(SgfHeader)!=SgfHeaderSize ||
sizeof(SgfEntry) !=SgfEntrySize ||
sizeof(SgfVector)!=SgfVectorSize ||
sizeof(BmpFileHeader)!=BmpFileHeaderSize ||
sizeof(BmpInfoHeader)!=BmpInfoHeaderSize ||
sizeof(RGBQuad )!=RGBQuadSize ) return SGF_DONTKNOW;
#endif
sal_uLong nPos;
SgfHeader aHead;
nVersion=0;
nPos=rInp.Tell();
rInp>>aHead;
rInp.Seek(nPos);
if (aHead.ChkMagic()) {
nVersion=aHead.Version;
switch(aHead.Typ) {
case SgfBitImag0:
case SgfBitImag1:
case SgfBitImag2:
case SgfBitImgMo: return SGF_BITIMAGE;
case SgfSimpVect: return SGF_SIMPVECT;
case SgfPostScrp: return SGF_POSTSCRP;
case SgfStarDraw: return SGF_STARDRAW;
default : return SGF_DONTKNOW;
}
} else {
return SGF_DONTKNOW;
}
}