xref: /aoo4110/main/svtools/source/filter/sgvmain.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svtools.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <rtl/math.hxx>
28*b1cdbd2cSJim Jagielski #include <osl/endian.h>
29*b1cdbd2cSJim Jagielski #include <vcl/graph.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/poly.hxx>
31*b1cdbd2cSJim Jagielski #include <svtools/filter.hxx>
32*b1cdbd2cSJim Jagielski #include "sgffilt.hxx"
33*b1cdbd2cSJim Jagielski #include "sgfbram.hxx"
34*b1cdbd2cSJim Jagielski #include "sgvmain.hxx"
35*b1cdbd2cSJim Jagielski #include "sgvspln.hxx"
36*b1cdbd2cSJim Jagielski #include <unotools/ucbstreamhelper.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski //#if OSL_DEBUG_LEVEL > 1
39*b1cdbd2cSJim Jagielski //#include "Debug.c"
40*b1cdbd2cSJim Jagielski //#endif
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski #define SWAPPOINT(p) {  \
43*b1cdbd2cSJim Jagielski     p.x=SWAPSHORT(p.x); \
44*b1cdbd2cSJim Jagielski     p.y=SWAPSHORT(p.y); }
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #define SWAPPAGE(p) {                         \
47*b1cdbd2cSJim Jagielski     p.Next   =SWAPLONG (p.Next   );           \
48*b1cdbd2cSJim Jagielski     p.nList  =SWAPLONG (p.nList  );           \
49*b1cdbd2cSJim Jagielski     p.ListEnd=SWAPLONG (p.ListEnd);           \
50*b1cdbd2cSJim Jagielski     p.Paper.Size.x=SWAPSHORT(p.Paper.Size.x); \
51*b1cdbd2cSJim Jagielski     p.Paper.Size.y=SWAPSHORT(p.Paper.Size.y); \
52*b1cdbd2cSJim Jagielski     p.Paper.RandL =SWAPSHORT(p.Paper.RandL ); \
53*b1cdbd2cSJim Jagielski     p.Paper.RandR =SWAPSHORT(p.Paper.RandR ); \
54*b1cdbd2cSJim Jagielski     p.Paper.RandO =SWAPSHORT(p.Paper.RandO ); \
55*b1cdbd2cSJim Jagielski     p.Paper.RandU =SWAPSHORT(p.Paper.RandU ); \
56*b1cdbd2cSJim Jagielski     SWAPPOINT(p.U);                           \
57*b1cdbd2cSJim Jagielski     sal_uInt16 iTemp;                             \
58*b1cdbd2cSJim Jagielski     for (iTemp=0;iTemp<20;iTemp++) {          \
59*b1cdbd2cSJim Jagielski         rPage.HlpLnH[iTemp]=SWAPSHORT(rPage.HlpLnH[iTemp]);       \
60*b1cdbd2cSJim Jagielski         rPage.HlpLnV[iTemp]=SWAPSHORT(rPage.HlpLnV[iTemp]);      }}
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski #define SWAPOBJK(o) {                 \
63*b1cdbd2cSJim Jagielski     o.Last    =SWAPLONG (o.Last    ); \
64*b1cdbd2cSJim Jagielski     o.Next    =SWAPLONG (o.Next    ); \
65*b1cdbd2cSJim Jagielski     o.MemSize =SWAPSHORT(o.MemSize ); \
66*b1cdbd2cSJim Jagielski     SWAPPOINT(o.ObjMin);              \
67*b1cdbd2cSJim Jagielski     SWAPPOINT(o.ObjMax);              }
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski #define SWAPLINE(l) {             \
70*b1cdbd2cSJim Jagielski     l.LMSize=SWAPSHORT(l.LMSize); \
71*b1cdbd2cSJim Jagielski     l.LDicke=SWAPSHORT(l.LDicke); }
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski #define SWAPAREA(a) {               \
74*b1cdbd2cSJim Jagielski     a.FDummy2=SWAPSHORT(a.FDummy2); \
75*b1cdbd2cSJim Jagielski     a.FMuster=SWAPSHORT(a.FMuster); }
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski #define SWAPTEXT(t) {               \
78*b1cdbd2cSJim Jagielski     SWAPLINE(t.L);                  \
79*b1cdbd2cSJim Jagielski     SWAPAREA(t.F);                  \
80*b1cdbd2cSJim Jagielski     t.FontLo =SWAPSHORT(t.FontLo ); \
81*b1cdbd2cSJim Jagielski     t.FontHi =SWAPSHORT(t.FontHi ); \
82*b1cdbd2cSJim Jagielski     t.Grad   =SWAPSHORT(t.Grad   ); \
83*b1cdbd2cSJim Jagielski     t.Breite =SWAPSHORT(t.Breite ); \
84*b1cdbd2cSJim Jagielski     t.Schnitt=SWAPSHORT(t.Schnitt); \
85*b1cdbd2cSJim Jagielski     t.LnFeed =SWAPSHORT(t.LnFeed ); \
86*b1cdbd2cSJim Jagielski     t.Slant  =SWAPSHORT(t.Slant  ); \
87*b1cdbd2cSJim Jagielski     SWAPLINE(t.ShdL);               \
88*b1cdbd2cSJim Jagielski     SWAPAREA(t.ShdF);               \
89*b1cdbd2cSJim Jagielski     SWAPPOINT(t.ShdVers);           \
90*b1cdbd2cSJim Jagielski     SWAPAREA(t.BackF);              }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
94*b1cdbd2cSJim Jagielski //
95*b1cdbd2cSJim Jagielski //  Einschraenkungen:
96*b1cdbd2cSJim Jagielski //
97*b1cdbd2cSJim Jagielski //  - Flaechenmuster werden den unter StarView verfuegbaren Mustern angenaehert.
98*b1cdbd2cSJim Jagielski //  - Linienenden werden unter StarView immer rund dargestellt und gehen ueber
99*b1cdbd2cSJim Jagielski //    den Endpunkt der Linie hinaus.
100*b1cdbd2cSJim Jagielski //  - Linienmuster werden den unter StarView verfuegbaren Mustern angenaehert.
101*b1cdbd2cSJim Jagielski //    Transparent/Opak wird zur Zeit noch nicht beruecksichtigt.
102*b1cdbd2cSJim Jagielski //  - Keine gedrehten Ellipsen
103*b1cdbd2cSJim Jagielski //
104*b1cdbd2cSJim Jagielski //
105*b1cdbd2cSJim Jagielski //
106*b1cdbd2cSJim Jagielski //
107*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
110*b1cdbd2cSJim Jagielski // Fuer Fontuebersetzung ///////////////////////////////////////////////////////////////////////////
111*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
112*b1cdbd2cSJim Jagielski SgfFontLst* pSgfFonts = 0;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
115*b1cdbd2cSJim Jagielski // Fuer Kreisunterarten, Text und gedrehte Rechtecke ///////////////////////////////////////////////
116*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
RotatePoint(PointType & P,sal_Int16 cx,sal_Int16 cy,double sn,double cs)117*b1cdbd2cSJim Jagielski void RotatePoint(PointType& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs)
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski 	sal_Int16  dx,dy;
120*b1cdbd2cSJim Jagielski 	double x1,y1;
121*b1cdbd2cSJim Jagielski 	dx=P.x-cx;
122*b1cdbd2cSJim Jagielski 	dy=P.y-cy;
123*b1cdbd2cSJim Jagielski 	x1=dx*cs-dy*sn;
124*b1cdbd2cSJim Jagielski 	y1=dy*cs+dx*sn;
125*b1cdbd2cSJim Jagielski 	P.x=cx+sal_Int16(x1);
126*b1cdbd2cSJim Jagielski 	P.y=cy+sal_Int16(y1);
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
RotatePoint(Point & P,sal_Int16 cx,sal_Int16 cy,double sn,double cs)129*b1cdbd2cSJim Jagielski void RotatePoint(Point& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs)
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski 	sal_Int16  dx,dy;
132*b1cdbd2cSJim Jagielski 	double x1,y1;
133*b1cdbd2cSJim Jagielski 	dx=(sal_Int16)(P.X()-cx);
134*b1cdbd2cSJim Jagielski 	dy=(sal_Int16)(P.Y()-cy);
135*b1cdbd2cSJim Jagielski 	x1=dx*cs-dy*sn;
136*b1cdbd2cSJim Jagielski 	y1=dy*cs+dx*sn;
137*b1cdbd2cSJim Jagielski 	P=Point(cx+sal_Int16(x1),cy+sal_Int16(y1));
138*b1cdbd2cSJim Jagielski }
139*b1cdbd2cSJim Jagielski 
iMulDiv(sal_Int16 a,sal_Int16 Mul,sal_Int16 Div)140*b1cdbd2cSJim Jagielski sal_Int16 iMulDiv(sal_Int16 a, sal_Int16 Mul, sal_Int16 Div)
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski 	sal_Int32 Temp;
143*b1cdbd2cSJim Jagielski 	Temp=sal_Int32(a)*sal_Int32(Mul)/sal_Int32(Div);
144*b1cdbd2cSJim Jagielski 	return sal_Int16(Temp);
145*b1cdbd2cSJim Jagielski }
146*b1cdbd2cSJim Jagielski 
MulDiv(sal_uInt16 a,sal_uInt16 Mul,sal_uInt16 Div)147*b1cdbd2cSJim Jagielski sal_uInt16 MulDiv(sal_uInt16 a, sal_uInt16 Mul, sal_uInt16 Div)
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski 	sal_uInt32 Temp;
150*b1cdbd2cSJim Jagielski 	Temp=sal_uInt32(a)*sal_uInt32(Mul)/sal_uInt32(Div);
151*b1cdbd2cSJim Jagielski 	return sal_uInt16(Temp);
152*b1cdbd2cSJim Jagielski }
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
155*b1cdbd2cSJim Jagielski // SgfFilterSDrw ///////////////////////////////////////////////////////////////////////////////////
156*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
157*b1cdbd2cSJim Jagielski 
operator >>(SvStream & rIStream,DtHdType & rDtHd)158*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rIStream, DtHdType& rDtHd)
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski 	rIStream.Read((char*)&rDtHd.Reserved[0],DtHdSize);
161*b1cdbd2cSJim Jagielski 	return rIStream;
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski 
DtHdOverSeek(SvStream & rInp)164*b1cdbd2cSJim Jagielski void DtHdOverSeek(SvStream& rInp)
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski 	sal_uLong FPos=rInp.Tell();
167*b1cdbd2cSJim Jagielski 	FPos+=(sal_uLong)DtHdSize;
168*b1cdbd2cSJim Jagielski 	rInp.Seek(FPos);
169*b1cdbd2cSJim Jagielski //    rInp.seekg(rInp.tellg()+(sal_uLong)DtHdSize);
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 
operator >>(SvStream & rIStream,PageType & rPage)173*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rIStream, PageType& rPage)
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski 	rIStream.Read((char*)&rPage.Next,PageSize);
176*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
177*b1cdbd2cSJim Jagielski 	SWAPPAGE(rPage);
178*b1cdbd2cSJim Jagielski #endif
179*b1cdbd2cSJim Jagielski 	return rIStream;
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski 
ObjkOverSeek(SvStream & rInp,ObjkType & rObjk)182*b1cdbd2cSJim Jagielski void ObjkOverSeek(SvStream& rInp, ObjkType& rObjk)
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski 	sal_uLong Siz;
185*b1cdbd2cSJim Jagielski 	Siz=(sal_uLong)rObjk.MemSize+rObjk.Last;  // ObjSize+ObjAnhSize
186*b1cdbd2cSJim Jagielski 	rInp.Seek(rInp.Tell()+Siz);
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski 
operator >>(SvStream & rInp,ObjkType & rObjk)189*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, ObjkType& rObjk)
190*b1cdbd2cSJim Jagielski {   // Die Fileposition im Stream bleibt unveraendert!
191*b1cdbd2cSJim Jagielski 	sal_uLong nPos;
192*b1cdbd2cSJim Jagielski 	nPos=rInp.Tell();
193*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rObjk.Last,ObjkSize);
194*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
195*b1cdbd2cSJim Jagielski 	SWAPOBJK(rObjk);
196*b1cdbd2cSJim Jagielski #endif
197*b1cdbd2cSJim Jagielski #ifdef InArbeit
198*b1cdbd2cSJim Jagielski 	sal_uLong nPos1=rInp.Tell();
199*b1cdbd2cSJim Jagielski 	if(nPos == nPos1) InfoBox( NULL, "tellg funkt nich" ).Execute();
200*b1cdbd2cSJim Jagielski #endif
201*b1cdbd2cSJim Jagielski 	rInp.Seek(nPos);
202*b1cdbd2cSJim Jagielski #ifdef InArbeit
203*b1cdbd2cSJim Jagielski 	if (rInp.Tell() != nPos) InfoBox( NULL, "seekg funkt nich" ).Execute();
204*b1cdbd2cSJim Jagielski #endif
205*b1cdbd2cSJim Jagielski 	return rInp;
206*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,StrkType & rStrk)207*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, StrkType& rStrk)
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rStrk.Last,StrkSize);
210*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
211*b1cdbd2cSJim Jagielski 	SWAPOBJK (rStrk);
212*b1cdbd2cSJim Jagielski 	SWAPLINE (rStrk.L);
213*b1cdbd2cSJim Jagielski 	SWAPPOINT(rStrk.Pos1);
214*b1cdbd2cSJim Jagielski 	SWAPPOINT(rStrk.Pos2);
215*b1cdbd2cSJim Jagielski #endif
216*b1cdbd2cSJim Jagielski 	return rInp;
217*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,RectType & rRect)218*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, RectType& rRect)
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rRect.Last,RectSize);
221*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
222*b1cdbd2cSJim Jagielski 	SWAPOBJK (rRect);
223*b1cdbd2cSJim Jagielski 	SWAPLINE (rRect.L);
224*b1cdbd2cSJim Jagielski 	SWAPAREA (rRect.F);
225*b1cdbd2cSJim Jagielski 	SWAPPOINT(rRect.Pos1);
226*b1cdbd2cSJim Jagielski 	SWAPPOINT(rRect.Pos2);
227*b1cdbd2cSJim Jagielski 	rRect.Radius  =SWAPSHORT(rRect.Radius  );
228*b1cdbd2cSJim Jagielski 	rRect.DrehWink=SWAPSHORT(rRect.DrehWink);
229*b1cdbd2cSJim Jagielski 	rRect.Slant   =SWAPSHORT(rRect.Slant   );
230*b1cdbd2cSJim Jagielski #endif
231*b1cdbd2cSJim Jagielski 	return rInp;
232*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,PolyType & rPoly)233*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, PolyType& rPoly)
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rPoly.Last,PolySize);
236*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
237*b1cdbd2cSJim Jagielski 	SWAPOBJK (rPoly);
238*b1cdbd2cSJim Jagielski 	SWAPLINE (rPoly.L);
239*b1cdbd2cSJim Jagielski 	SWAPAREA (rPoly.F);
240*b1cdbd2cSJim Jagielski 	// rPoly.EckP=SWAPLONG(rPoly.EckP);
241*b1cdbd2cSJim Jagielski #endif
242*b1cdbd2cSJim Jagielski 	return rInp;
243*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,SplnType & rSpln)244*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, SplnType& rSpln)
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rSpln.Last,SplnSize);
247*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
248*b1cdbd2cSJim Jagielski 	SWAPOBJK (rSpln);
249*b1cdbd2cSJim Jagielski 	SWAPLINE (rSpln.L);
250*b1cdbd2cSJim Jagielski 	SWAPAREA (rSpln.F);
251*b1cdbd2cSJim Jagielski 	// rSpln.EckP=SWAPLONG(rSpln.EckP);
252*b1cdbd2cSJim Jagielski #endif
253*b1cdbd2cSJim Jagielski 	return rInp;
254*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,CircType & rCirc)255*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, CircType& rCirc)
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rCirc.Last,CircSize);
258*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
259*b1cdbd2cSJim Jagielski 	SWAPOBJK (rCirc);
260*b1cdbd2cSJim Jagielski 	SWAPLINE (rCirc.L);
261*b1cdbd2cSJim Jagielski 	SWAPAREA (rCirc.F);
262*b1cdbd2cSJim Jagielski 	SWAPPOINT(rCirc.Radius);
263*b1cdbd2cSJim Jagielski 	SWAPPOINT(rCirc.Center);
264*b1cdbd2cSJim Jagielski 	rCirc.DrehWink =SWAPSHORT(rCirc.DrehWink );
265*b1cdbd2cSJim Jagielski 	rCirc.StartWink=SWAPSHORT(rCirc.StartWink);
266*b1cdbd2cSJim Jagielski 	rCirc.RelWink  =SWAPSHORT(rCirc.RelWink  );
267*b1cdbd2cSJim Jagielski #endif
268*b1cdbd2cSJim Jagielski 	return rInp;
269*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,TextType & rText)270*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, TextType& rText)
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rText.Last,TextSize);
273*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
274*b1cdbd2cSJim Jagielski 	SWAPOBJK (rText);
275*b1cdbd2cSJim Jagielski 	SWAPTEXT (rText.T);
276*b1cdbd2cSJim Jagielski 	SWAPPOINT(rText.Pos1);
277*b1cdbd2cSJim Jagielski 	SWAPPOINT(rText.Pos2);
278*b1cdbd2cSJim Jagielski 	rText.TopOfs  =SWAPSHORT(rText.TopOfs  );
279*b1cdbd2cSJim Jagielski 	rText.DrehWink=SWAPSHORT(rText.DrehWink);
280*b1cdbd2cSJim Jagielski 	rText.BoxSlant=SWAPSHORT(rText.BoxSlant);
281*b1cdbd2cSJim Jagielski 	rText.BufSize =SWAPSHORT(rText.BufSize );
282*b1cdbd2cSJim Jagielski 	//rText.Buf     =SWAPLONG (rText.Buf     );
283*b1cdbd2cSJim Jagielski 	//rText.Ext     =SWAPLONG (rText.Ext     );
284*b1cdbd2cSJim Jagielski 	SWAPPOINT(rText.FitSize);
285*b1cdbd2cSJim Jagielski 	rText.FitBreit=SWAPSHORT(rText.FitBreit);
286*b1cdbd2cSJim Jagielski #endif
287*b1cdbd2cSJim Jagielski 	rText.Buffer=NULL;
288*b1cdbd2cSJim Jagielski 	return rInp;
289*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,BmapType & rBmap)290*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, BmapType& rBmap)
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rBmap.Last,BmapSize);
293*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
294*b1cdbd2cSJim Jagielski 	SWAPOBJK (rBmap);
295*b1cdbd2cSJim Jagielski 	SWAPAREA (rBmap.F);
296*b1cdbd2cSJim Jagielski 	SWAPPOINT(rBmap.Pos1);
297*b1cdbd2cSJim Jagielski 	SWAPPOINT(rBmap.Pos2);
298*b1cdbd2cSJim Jagielski 	rBmap.DrehWink=SWAPSHORT(rBmap.DrehWink);
299*b1cdbd2cSJim Jagielski 	rBmap.Slant   =SWAPSHORT(rBmap.Slant   );
300*b1cdbd2cSJim Jagielski 	SWAPPOINT(rBmap.PixSize);
301*b1cdbd2cSJim Jagielski #endif
302*b1cdbd2cSJim Jagielski 	return rInp;
303*b1cdbd2cSJim Jagielski }
operator >>(SvStream & rInp,GrupType & rGrup)304*b1cdbd2cSJim Jagielski SvStream& operator>>(SvStream& rInp, GrupType& rGrup)
305*b1cdbd2cSJim Jagielski {
306*b1cdbd2cSJim Jagielski 	rInp.Read((char*)&rGrup.Last,GrupSize);
307*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
308*b1cdbd2cSJim Jagielski 	SWAPOBJK (rGrup);
309*b1cdbd2cSJim Jagielski 	rGrup.SbLo     =SWAPSHORT(rGrup.SbLo     );
310*b1cdbd2cSJim Jagielski 	rGrup.SbHi     =SWAPSHORT(rGrup.SbHi     );
311*b1cdbd2cSJim Jagielski 	rGrup.UpLo     =SWAPSHORT(rGrup.UpLo     );
312*b1cdbd2cSJim Jagielski 	rGrup.UpHi     =SWAPSHORT(rGrup.UpHi     );
313*b1cdbd2cSJim Jagielski 	rGrup.ChartSize=SWAPSHORT(rGrup.ChartSize);
314*b1cdbd2cSJim Jagielski 	rGrup.ChartPtr =SWAPLONG (rGrup.ChartPtr );
315*b1cdbd2cSJim Jagielski #endif
316*b1cdbd2cSJim Jagielski 	return rInp;
317*b1cdbd2cSJim Jagielski }
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski /*************************************************************************
322*b1cdbd2cSJim Jagielski |*
323*b1cdbd2cSJim Jagielski |*    Sgv2SvFarbe()
324*b1cdbd2cSJim Jagielski |*
325*b1cdbd2cSJim Jagielski |*    Beschreibung
326*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
327*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
328*b1cdbd2cSJim Jagielski |*
329*b1cdbd2cSJim Jagielski *************************************************************************/
Sgv2SvFarbe(sal_uInt8 nFrb1,sal_uInt8 nFrb2,sal_uInt8 nInts)330*b1cdbd2cSJim Jagielski Color Sgv2SvFarbe(sal_uInt8 nFrb1, sal_uInt8 nFrb2, sal_uInt8 nInts)
331*b1cdbd2cSJim Jagielski {
332*b1cdbd2cSJim Jagielski 	sal_uInt16 r1=0,g1=0,b1=0,r2=0,g2=0,b2=0;
333*b1cdbd2cSJim Jagielski 	sal_uInt8   nInt2=100-nInts;
334*b1cdbd2cSJim Jagielski 	switch(nFrb1 & 0x07) {
335*b1cdbd2cSJim Jagielski 		case 0:  r1=0xFF; g1=0xFF; b1=0xFF; break;
336*b1cdbd2cSJim Jagielski 		case 1:  r1=0xFF; g1=0xFF;            break;
337*b1cdbd2cSJim Jagielski 		case 2:           g1=0xFF; b1=0xFF; break;
338*b1cdbd2cSJim Jagielski 		case 3:           g1=0xFF;            break;
339*b1cdbd2cSJim Jagielski 		case 4:  r1=0xFF;          b1=0xFF; break;
340*b1cdbd2cSJim Jagielski 		case 5:  r1=0xFF;                       break;
341*b1cdbd2cSJim Jagielski 		case 6:                    b1=0xFF; break;
342*b1cdbd2cSJim Jagielski 		case 7:                                   break;
343*b1cdbd2cSJim Jagielski 	}
344*b1cdbd2cSJim Jagielski 	switch(nFrb2 & 0x07) {
345*b1cdbd2cSJim Jagielski 		case 0:  r2=0xFF; g2=0xFF; b2=0xFF; break;
346*b1cdbd2cSJim Jagielski 		case 1:  r2=0xFF; g2=0xFF;            break;
347*b1cdbd2cSJim Jagielski 		case 2:           g2=0xFF; b2=0xFF; break;
348*b1cdbd2cSJim Jagielski 		case 3:           g2=0xFF;            break;
349*b1cdbd2cSJim Jagielski 		case 4:  r2=0xFF;          b2=0xFF; break;
350*b1cdbd2cSJim Jagielski 		case 5:  r2=0xFF;                       break;
351*b1cdbd2cSJim Jagielski 		case 6:                    b2=0xFF; break;
352*b1cdbd2cSJim Jagielski 		case 7:                                   break;
353*b1cdbd2cSJim Jagielski 	}
354*b1cdbd2cSJim Jagielski 	r1=(sal_uInt16)((sal_uInt32)r1*nInts/100+(sal_uInt32)r2*nInt2/100);
355*b1cdbd2cSJim Jagielski 	g1=(sal_uInt16)((sal_uInt32)g1*nInts/100+(sal_uInt32)g2*nInt2/100);
356*b1cdbd2cSJim Jagielski 	b1=(sal_uInt16)((sal_uInt32)b1*nInts/100+(sal_uInt32)b2*nInt2/100);
357*b1cdbd2cSJim Jagielski 	Color aColor( (sal_uInt8)r1, (sal_uInt8)g1, (sal_uInt8)b1 );
358*b1cdbd2cSJim Jagielski 	return aColor;
359*b1cdbd2cSJim Jagielski }
360*b1cdbd2cSJim Jagielski 
SetLine(ObjLineType & rLine,OutputDevice & rOut)361*b1cdbd2cSJim Jagielski void SetLine(ObjLineType& rLine, OutputDevice& rOut)
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski /* !!!
364*b1cdbd2cSJim Jagielski 	PenStyle aStyle=PEN_SOLID;
365*b1cdbd2cSJim Jagielski 	switch(rLine.LMuster & 0x07) {
366*b1cdbd2cSJim Jagielski 		case 0: aStyle=PEN_NULL;    break;
367*b1cdbd2cSJim Jagielski 		case 1: aStyle=PEN_SOLID;   break;
368*b1cdbd2cSJim Jagielski         case 2: aStyle=PEN_DOT;     break;    // . . . . . . . . . . . . . .
369*b1cdbd2cSJim Jagielski         case 3: aStyle=PEN_DASH;    break;    // __ __ __ __ __ __ __ __ __
370*b1cdbd2cSJim Jagielski         case 4: aStyle=PEN_DASH;    break;    // ___ ___ ___ ___ ___ ___ ___
371*b1cdbd2cSJim Jagielski         case 5: aStyle=PEN_DASHDOT; break;    // __ . __ . __ . __ . __ . __
372*b1cdbd2cSJim Jagielski         case 6: aStyle=PEN_DASHDOT; break;    // __ _ __ _ __ _ __ _ __ _ __
373*b1cdbd2cSJim Jagielski         case 7: aStyle=PEN_DASHDOT; break;    // ___ _ _ ___ _ _ ___ _ _ ___
374*b1cdbd2cSJim Jagielski 	}
375*b1cdbd2cSJim Jagielski 	Pen aPen(Sgv2SvFarbe(rLine.LFarbe,rLine.LBFarbe,rLine.LIntens),rLine.LDicke,aStyle);
376*b1cdbd2cSJim Jagielski 	SetPen(aPen,rOut);
377*b1cdbd2cSJim Jagielski */
378*b1cdbd2cSJim Jagielski 	if( 0 == ( rLine.LMuster & 0x07 ) )
379*b1cdbd2cSJim Jagielski 		rOut.SetLineColor();
380*b1cdbd2cSJim Jagielski 	else
381*b1cdbd2cSJim Jagielski 		rOut.SetLineColor( Sgv2SvFarbe(rLine.LFarbe,rLine.LBFarbe,rLine.LIntens) );
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski 
SetArea(ObjAreaType & rArea,OutputDevice & rOut)384*b1cdbd2cSJim Jagielski void SetArea(ObjAreaType& rArea, OutputDevice& rOut)
385*b1cdbd2cSJim Jagielski {
386*b1cdbd2cSJim Jagielski /*
387*b1cdbd2cSJim Jagielski 	BrushStyle aStyle=BRUSH_SOLID;
388*b1cdbd2cSJim Jagielski 	switch(rArea.FMuster & 0x00FF) {
389*b1cdbd2cSJim Jagielski 		case  0: aStyle=BRUSH_NULL;      break;
390*b1cdbd2cSJim Jagielski 		case  1: aStyle=BRUSH_SOLID;     break;
391*b1cdbd2cSJim Jagielski 		case  2: case  4: case  6: case  8:
392*b1cdbd2cSJim Jagielski 		case 10: case 12: case 14: case 16:
393*b1cdbd2cSJim Jagielski 		case 43: case 45:                   aStyle=BRUSH_VERT;      break;
394*b1cdbd2cSJim Jagielski 		case  3: case  5: case  7: case  9:
395*b1cdbd2cSJim Jagielski 		case 11: case 13: case 15: case 17:
396*b1cdbd2cSJim Jagielski 		case 42: case 44:                   aStyle=BRUSH_HORZ;      break;
397*b1cdbd2cSJim Jagielski 		case 18: case 20: case 22: case 24:
398*b1cdbd2cSJim Jagielski 		case 26: case 28: case 30: case 32:
399*b1cdbd2cSJim Jagielski 		case 46: case 48:                   aStyle=BRUSH_UPDIAG;    break;
400*b1cdbd2cSJim Jagielski 		case 19: case 21: case 23: case 25:
401*b1cdbd2cSJim Jagielski 		case 27: case 29: case 31: case 33:
402*b1cdbd2cSJim Jagielski 		case 47: case 49:                   aStyle=BRUSH_DOWNDIAG;  break;
403*b1cdbd2cSJim Jagielski 		case 34: case 35: case 36: case 37: aStyle=BRUSH_CROSS;     break;
404*b1cdbd2cSJim Jagielski 		case 38: case 39: case 40: case 41: aStyle=BRUSH_DIAGCROSS; break;
405*b1cdbd2cSJim Jagielski 		default: aStyle=BRUSH_DIAGCROSS; break;
406*b1cdbd2cSJim Jagielski 	}
407*b1cdbd2cSJim Jagielski 	Brush aBrush(Sgv2SvFarbe(rArea.FFarbe,rArea.FBFarbe,rArea.FIntens),aStyle);
408*b1cdbd2cSJim Jagielski 	aBrush.SetTransparent((rArea.FMuster & 0x80) !=0L);
409*b1cdbd2cSJim Jagielski 	SetBrush(aBrush,rOut);
410*b1cdbd2cSJim Jagielski */
411*b1cdbd2cSJim Jagielski 	if( 0 == ( rArea.FMuster & 0x00FF ) )
412*b1cdbd2cSJim Jagielski 		rOut.SetFillColor();
413*b1cdbd2cSJim Jagielski 	else
414*b1cdbd2cSJim Jagielski 		rOut.SetFillColor( Sgv2SvFarbe( rArea.FFarbe,rArea.FBFarbe,rArea.FIntens ) );
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski /*************************************************************************
418*b1cdbd2cSJim Jagielski |*
419*b1cdbd2cSJim Jagielski |*    ObjkType::DrawObjekt()
420*b1cdbd2cSJim Jagielski |*
421*b1cdbd2cSJim Jagielski |*    Beschreibung
422*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
423*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
424*b1cdbd2cSJim Jagielski |*
425*b1cdbd2cSJim Jagielski *************************************************************************/
Draw(OutputDevice &)426*b1cdbd2cSJim Jagielski void ObjkType::Draw(OutputDevice&)
427*b1cdbd2cSJim Jagielski {
428*b1cdbd2cSJim Jagielski //    ShowSDObjk(*this);
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski 
Draw(OutputDevice &)431*b1cdbd2cSJim Jagielski void Obj0Type::Draw(OutputDevice&) {}
432*b1cdbd2cSJim Jagielski 
433*b1cdbd2cSJim Jagielski /*************************************************************************
434*b1cdbd2cSJim Jagielski |*
435*b1cdbd2cSJim Jagielski |*    StrkType::DrawObjekt()
436*b1cdbd2cSJim Jagielski |*
437*b1cdbd2cSJim Jagielski |*    Beschreibung
438*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
439*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
440*b1cdbd2cSJim Jagielski |*
441*b1cdbd2cSJim Jagielski *************************************************************************/
Draw(OutputDevice & rOut)442*b1cdbd2cSJim Jagielski void StrkType::Draw(OutputDevice& rOut)
443*b1cdbd2cSJim Jagielski {
444*b1cdbd2cSJim Jagielski 	SetLine(L,rOut);
445*b1cdbd2cSJim Jagielski 	rOut.DrawLine(Point(Pos1.x,Pos1.y),Point(Pos2.x,Pos2.y)); // !!!
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski /*************************************************************************
449*b1cdbd2cSJim Jagielski |*
450*b1cdbd2cSJim Jagielski |*    RectType::DrawObjekt()
451*b1cdbd2cSJim Jagielski |*
452*b1cdbd2cSJim Jagielski |*    Beschreibung
453*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
454*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
455*b1cdbd2cSJim Jagielski |*
456*b1cdbd2cSJim Jagielski *************************************************************************/
SgfAreaColorIntens(sal_uInt16 Muster,sal_uInt8 Col1,sal_uInt8 Col2,sal_uInt8 Int,OutputDevice & rOut)457*b1cdbd2cSJim Jagielski void SgfAreaColorIntens(sal_uInt16 Muster, sal_uInt8 Col1, sal_uInt8 Col2, sal_uInt8 Int, OutputDevice& rOut)
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski 	ObjAreaType F;
460*b1cdbd2cSJim Jagielski 	F.FMuster=Muster;
461*b1cdbd2cSJim Jagielski 	F.FFarbe=Col2;
462*b1cdbd2cSJim Jagielski 	F.FBFarbe=Col1;
463*b1cdbd2cSJim Jagielski 	F.FIntens=Int;
464*b1cdbd2cSJim Jagielski 	SetArea(F,rOut);
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
DrawSlideRect(sal_Int16 x1,sal_Int16 y1,sal_Int16 x2,sal_Int16 y2,ObjAreaType & F,OutputDevice & rOut)467*b1cdbd2cSJim Jagielski void DrawSlideRect(sal_Int16 x1, sal_Int16 y1, sal_Int16 x2, sal_Int16 y2, ObjAreaType& F, OutputDevice& rOut)
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski 	sal_Int16 i,i0,b,b0;
470*b1cdbd2cSJim Jagielski 	sal_Int16 Int1,Int2;
471*b1cdbd2cSJim Jagielski 	sal_Int16 Col1,Col2;
472*b1cdbd2cSJim Jagielski 	//     ClipMerk: HgdClipRec;
473*b1cdbd2cSJim Jagielski 	sal_Int16 cx,cy;
474*b1cdbd2cSJim Jagielski 	sal_Int16 MaxR;
475*b1cdbd2cSJim Jagielski 	sal_Int32 dx,dy;
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 	rOut.SetLineColor();
478*b1cdbd2cSJim Jagielski 	if (x1>x2) { i=x1; x1=x2; x2=i; }
479*b1cdbd2cSJim Jagielski 	if (y1>y2) { i=y1; y1=y2; y2=i; }
480*b1cdbd2cSJim Jagielski 	Col1=F.FBFarbe & 0x87; Col2=F.FFarbe & 0x87;
481*b1cdbd2cSJim Jagielski 	Int1=100-F.FIntens; Int2=F.FIntens;
482*b1cdbd2cSJim Jagielski 	if (Int1==Int2) {
483*b1cdbd2cSJim Jagielski 		SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
484*b1cdbd2cSJim Jagielski 		rOut.DrawRect(Rectangle(x1,y1,x2,y2));
485*b1cdbd2cSJim Jagielski 	} else {
486*b1cdbd2cSJim Jagielski 		b0=Int1;
487*b1cdbd2cSJim Jagielski 		switch (F.FBFarbe & 0x38) {
488*b1cdbd2cSJim Jagielski 			case 0x08: { // vertikal
489*b1cdbd2cSJim Jagielski 				i0=y1;
490*b1cdbd2cSJim Jagielski 				i=y1;
491*b1cdbd2cSJim Jagielski 				while (i<=y2) {
492*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-y1) /(sal_Int32)(y2-y1+1));
493*b1cdbd2cSJim Jagielski 					if (b!=b0) {
494*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
495*b1cdbd2cSJim Jagielski 						rOut.DrawRect(Rectangle(x1,i0,x2,i-1));
496*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
497*b1cdbd2cSJim Jagielski 					}
498*b1cdbd2cSJim Jagielski 					i++;
499*b1cdbd2cSJim Jagielski 				}
500*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
501*b1cdbd2cSJim Jagielski 				rOut.DrawRect(Rectangle(x1,i0,x2,y2));
502*b1cdbd2cSJim Jagielski 			} break;
503*b1cdbd2cSJim Jagielski 			case 0x28: { // horizontal
504*b1cdbd2cSJim Jagielski 				i0=x1;
505*b1cdbd2cSJim Jagielski 				i=x1;
506*b1cdbd2cSJim Jagielski 				while (i<=x2) {
507*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-x1) /(sal_Int32)(x2-x1+1));
508*b1cdbd2cSJim Jagielski 					if (b!=b0) {
509*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
510*b1cdbd2cSJim Jagielski 						rOut.DrawRect(Rectangle(i0,y1,i-1,y2));
511*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
512*b1cdbd2cSJim Jagielski 					}
513*b1cdbd2cSJim Jagielski 					i++;
514*b1cdbd2cSJim Jagielski 				}
515*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
516*b1cdbd2cSJim Jagielski 				rOut.DrawRect(Rectangle(i0,y1,x2,y2));
517*b1cdbd2cSJim Jagielski 			} break;
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 			case 0x18: case 0x38: { // Kreis
520*b1cdbd2cSJim Jagielski 				Region ClipMerk=rOut.GetClipRegion();
521*b1cdbd2cSJim Jagielski 				double a;
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(Region(Rectangle(x1,y1,x2,y2)));
524*b1cdbd2cSJim Jagielski 				cx=(x1+x2) /2;
525*b1cdbd2cSJim Jagielski 				cy=(y1+y2) /2;
526*b1cdbd2cSJim Jagielski 				dx=x2-x1+1;
527*b1cdbd2cSJim Jagielski 				dy=y2-y1+1;
528*b1cdbd2cSJim Jagielski 				a=sqrt((double)(dx*dx+dy*dy));
529*b1cdbd2cSJim Jagielski 				MaxR=sal_Int16(a) /2 +1;
530*b1cdbd2cSJim Jagielski 				b0=Int2;
531*b1cdbd2cSJim Jagielski 				i0=MaxR; if (MaxR<1) MaxR=1;
532*b1cdbd2cSJim Jagielski 				i=MaxR;
533*b1cdbd2cSJim Jagielski 				while (i>=0) {
534*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32(Int2-Int1)*sal_Int32(i)) /sal_Int32(MaxR));
535*b1cdbd2cSJim Jagielski 					if (b!=b0) {
536*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
537*b1cdbd2cSJim Jagielski 						//if (i0>200 || (Col1 & $80)!=0 || (Col2 & $80)!=0) {
538*b1cdbd2cSJim Jagielski                         //  then begin { Fallunterscheidung fuer etwas bessere Performance }
539*b1cdbd2cSJim Jagielski 						//    s2:=i0-i+2;
540*b1cdbd2cSJim Jagielski 						//    SetPenSize(s2);
541*b1cdbd2cSJim Jagielski 						//    s2:=s2 div 2;
542*b1cdbd2cSJim Jagielski 						//    Circle(cx,cy,i0-s2,i0-s2);{}
543*b1cdbd2cSJim Jagielski 						//  else
544*b1cdbd2cSJim Jagielski 						rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0));
545*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
546*b1cdbd2cSJim Jagielski 					}
547*b1cdbd2cSJim Jagielski 					i--;
548*b1cdbd2cSJim Jagielski 				}
549*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int1,rOut);
550*b1cdbd2cSJim Jagielski 				rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0));
551*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(ClipMerk);
552*b1cdbd2cSJim Jagielski 			} break; // Kreis
553*b1cdbd2cSJim Jagielski 		}
554*b1cdbd2cSJim Jagielski 	}
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski 
Draw(OutputDevice & rOut)558*b1cdbd2cSJim Jagielski void RectType::Draw(OutputDevice& rOut)
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski 	if (L.LMuster!=0) L.LMuster=1; // keine Linienmuster hier, nur an oder aus
561*b1cdbd2cSJim Jagielski 	SetArea(F,rOut);
562*b1cdbd2cSJim Jagielski 	if (DrehWink==0) {
563*b1cdbd2cSJim Jagielski 	if ((F.FBFarbe & 0x38)==0 || Radius!=0) {
564*b1cdbd2cSJim Jagielski 			SetLine(L,rOut);
565*b1cdbd2cSJim Jagielski 			rOut.DrawRect(Rectangle(Pos1.x,Pos1.y,Pos2.x,Pos2.y),Radius,Radius);
566*b1cdbd2cSJim Jagielski 		} else {
567*b1cdbd2cSJim Jagielski 			DrawSlideRect(Pos1.x,Pos1.y,Pos2.x,Pos2.y,F,rOut);
568*b1cdbd2cSJim Jagielski 			if (L.LMuster!=0) {
569*b1cdbd2cSJim Jagielski 				SetLine(L,rOut);
570*b1cdbd2cSJim Jagielski 				rOut.SetFillColor();
571*b1cdbd2cSJim Jagielski 				rOut.DrawRect(Rectangle(Pos1.x,Pos1.y,Pos2.x,Pos2.y));
572*b1cdbd2cSJim Jagielski 			}
573*b1cdbd2cSJim Jagielski 		}
574*b1cdbd2cSJim Jagielski 	} else {
575*b1cdbd2cSJim Jagielski 		Point  aPts[4];
576*b1cdbd2cSJim Jagielski 		sal_uInt16 i;
577*b1cdbd2cSJim Jagielski 		double sn,cs;
578*b1cdbd2cSJim Jagielski 		sn=sin(double(DrehWink)*3.14159265359/18000);
579*b1cdbd2cSJim Jagielski 		cs=cos(double(DrehWink)*3.14159265359/18000);
580*b1cdbd2cSJim Jagielski 		aPts[0]=Point(Pos1.x,Pos1.y);
581*b1cdbd2cSJim Jagielski 		aPts[1]=Point(Pos2.x,Pos1.y);
582*b1cdbd2cSJim Jagielski 		aPts[2]=Point(Pos2.x,Pos2.y);
583*b1cdbd2cSJim Jagielski 		aPts[3]=Point(Pos1.x,Pos2.y);
584*b1cdbd2cSJim Jagielski 		for (i=0;i<4;i++) {
585*b1cdbd2cSJim Jagielski 			RotatePoint(aPts[i],Pos1.x,Pos1.y,sn,cs);
586*b1cdbd2cSJim Jagielski 		}
587*b1cdbd2cSJim Jagielski 		SetLine(L,rOut);
588*b1cdbd2cSJim Jagielski 		Polygon aPoly(4,aPts);
589*b1cdbd2cSJim Jagielski 		rOut.DrawPolygon(aPoly);
590*b1cdbd2cSJim Jagielski 	}
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski /*************************************************************************
594*b1cdbd2cSJim Jagielski |*
595*b1cdbd2cSJim Jagielski |*    PolyType::Draw()
596*b1cdbd2cSJim Jagielski |*
597*b1cdbd2cSJim Jagielski |*    Beschreibung
598*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
599*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
600*b1cdbd2cSJim Jagielski |*
601*b1cdbd2cSJim Jagielski *************************************************************************/
Draw(OutputDevice & rOut)602*b1cdbd2cSJim Jagielski void PolyType::Draw(OutputDevice& rOut)
603*b1cdbd2cSJim Jagielski {
604*b1cdbd2cSJim Jagielski 	if ((Flags & PolyClosBit) !=0) SetArea(F,rOut);
605*b1cdbd2cSJim Jagielski 	SetLine(L,rOut);
606*b1cdbd2cSJim Jagielski 	Polygon aPoly(nPoints);
607*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
608*b1cdbd2cSJim Jagielski 	for(i=0;i<nPoints;i++) aPoly.SetPoint(Point(EckP[i].x,EckP[i].y),i);
609*b1cdbd2cSJim Jagielski 	if ((Flags & PolyClosBit) !=0) {
610*b1cdbd2cSJim Jagielski 		rOut.DrawPolygon(aPoly);
611*b1cdbd2cSJim Jagielski 	} else {
612*b1cdbd2cSJim Jagielski 		rOut.DrawPolyLine(aPoly);
613*b1cdbd2cSJim Jagielski 	}
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski 
616*b1cdbd2cSJim Jagielski /*************************************************************************
617*b1cdbd2cSJim Jagielski |*
618*b1cdbd2cSJim Jagielski |*    SplnType::Draw()
619*b1cdbd2cSJim Jagielski |*
620*b1cdbd2cSJim Jagielski |*    Beschreibung
621*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
622*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
623*b1cdbd2cSJim Jagielski |*
624*b1cdbd2cSJim Jagielski *************************************************************************/
Draw(OutputDevice & rOut)625*b1cdbd2cSJim Jagielski void SplnType::Draw(OutputDevice& rOut)
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski 	if ((Flags & PolyClosBit) !=0) SetArea(F,rOut);
628*b1cdbd2cSJim Jagielski 	SetLine(L,rOut);
629*b1cdbd2cSJim Jagielski 	Polygon aPoly(0);
630*b1cdbd2cSJim Jagielski 	Polygon aSpln(nPoints);
631*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
632*b1cdbd2cSJim Jagielski 	for(i=0;i<nPoints;i++) aSpln.SetPoint(Point(EckP[i].x,EckP[i].y),i);
633*b1cdbd2cSJim Jagielski 	if ((Flags & PolyClosBit) !=0) {
634*b1cdbd2cSJim Jagielski 		Spline2Poly(aSpln,sal_True,aPoly);
635*b1cdbd2cSJim Jagielski 		if (aPoly.GetSize()>0) rOut.DrawPolygon(aPoly);
636*b1cdbd2cSJim Jagielski 	} else {
637*b1cdbd2cSJim Jagielski 		Spline2Poly(aSpln,sal_False,aPoly);
638*b1cdbd2cSJim Jagielski 		if (aPoly.GetSize()>0) rOut.DrawPolyLine(aPoly);
639*b1cdbd2cSJim Jagielski 	}
640*b1cdbd2cSJim Jagielski }
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski /*************************************************************************
643*b1cdbd2cSJim Jagielski |*
644*b1cdbd2cSJim Jagielski |*    CircType::Draw()
645*b1cdbd2cSJim Jagielski |*
646*b1cdbd2cSJim Jagielski |*    Beschreibung
647*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
648*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
649*b1cdbd2cSJim Jagielski |*
650*b1cdbd2cSJim Jagielski *************************************************************************/
DrawSlideCirc(sal_Int16 cx,sal_Int16 cy,sal_Int16 rx,sal_Int16 ry,ObjAreaType & F,OutputDevice & rOut)651*b1cdbd2cSJim Jagielski void DrawSlideCirc(sal_Int16 cx, sal_Int16 cy, sal_Int16 rx, sal_Int16 ry, ObjAreaType& F, OutputDevice& rOut)
652*b1cdbd2cSJim Jagielski {
653*b1cdbd2cSJim Jagielski 	sal_Int16 x1=cx-rx;
654*b1cdbd2cSJim Jagielski 	sal_Int16 y1=cy-ry;
655*b1cdbd2cSJim Jagielski 	sal_Int16 x2=cx+rx;
656*b1cdbd2cSJim Jagielski 	sal_Int16 y2=cy+ry;
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski 	sal_Int16 i,i0,b,b0;
659*b1cdbd2cSJim Jagielski 	sal_Int16 Int1,Int2;
660*b1cdbd2cSJim Jagielski 	sal_Int16 Col1,Col2;
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski 	rOut.SetLineColor();
663*b1cdbd2cSJim Jagielski 	Col1=F.FBFarbe & 0x87; Col2=F.FFarbe & 0x87;
664*b1cdbd2cSJim Jagielski 	Int1=100-F.FIntens; Int2=F.FIntens;
665*b1cdbd2cSJim Jagielski 	if (Int1==Int2) {
666*b1cdbd2cSJim Jagielski 		SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
667*b1cdbd2cSJim Jagielski 		rOut.DrawEllipse(Rectangle(x1,y1,x2,y2));
668*b1cdbd2cSJim Jagielski 	} else {
669*b1cdbd2cSJim Jagielski 		b0=Int1;
670*b1cdbd2cSJim Jagielski 		switch (F.FBFarbe & 0x38) {
671*b1cdbd2cSJim Jagielski 			case 0x08: { // vertikal
672*b1cdbd2cSJim Jagielski 				Region ClipMerk=rOut.GetClipRegion();
673*b1cdbd2cSJim Jagielski 				i0=y1;
674*b1cdbd2cSJim Jagielski 				i=y1;
675*b1cdbd2cSJim Jagielski 				while (i<=y2) {
676*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-y1) /(sal_Int32)(y2-y1+1));
677*b1cdbd2cSJim Jagielski 					if (b!=b0) {
678*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
679*b1cdbd2cSJim Jagielski 						rOut.SetClipRegion(Rectangle(x1,i0,x2,i-1));
680*b1cdbd2cSJim Jagielski 						rOut.DrawEllipse(Rectangle(x1,y1,x2,y2));
681*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
682*b1cdbd2cSJim Jagielski 					}
683*b1cdbd2cSJim Jagielski 					i++;
684*b1cdbd2cSJim Jagielski 				}
685*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
686*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(Rectangle(x1,i0,x2,y2));
687*b1cdbd2cSJim Jagielski 				rOut.DrawEllipse(Rectangle(x1,y1,x2,y2));
688*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(ClipMerk);
689*b1cdbd2cSJim Jagielski 			} break;
690*b1cdbd2cSJim Jagielski 			case 0x28: { // horizontal
691*b1cdbd2cSJim Jagielski 				Region ClipMerk=rOut.GetClipRegion();
692*b1cdbd2cSJim Jagielski 				i0=x1;
693*b1cdbd2cSJim Jagielski 				i=x1;
694*b1cdbd2cSJim Jagielski 				while (i<=x2) {
695*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-x1) /(sal_Int32)(x2-x1+1));
696*b1cdbd2cSJim Jagielski 					if (b!=b0) {
697*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
698*b1cdbd2cSJim Jagielski 						rOut.SetClipRegion(Rectangle(i0,y1,i-1,y2));
699*b1cdbd2cSJim Jagielski 						rOut.DrawEllipse(Rectangle(x1,y1,x2,y2));
700*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
701*b1cdbd2cSJim Jagielski 					}
702*b1cdbd2cSJim Jagielski 					i++;
703*b1cdbd2cSJim Jagielski 				}
704*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut);
705*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(Rectangle(i0,y1,x2,y2));
706*b1cdbd2cSJim Jagielski 				rOut.DrawEllipse(Rectangle(x1,y1,x2,y2));
707*b1cdbd2cSJim Jagielski 				rOut.SetClipRegion(ClipMerk);
708*b1cdbd2cSJim Jagielski 			} break;
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski 			case 0x18: case 0x38: { // Kreis
711*b1cdbd2cSJim Jagielski 				sal_Int16 MaxR;
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski 				if (rx<1) rx=1;
714*b1cdbd2cSJim Jagielski 				if (ry<1) ry=1;
715*b1cdbd2cSJim Jagielski 				MaxR=rx;
716*b1cdbd2cSJim Jagielski 				b0=Int2;
717*b1cdbd2cSJim Jagielski 				i0=MaxR; if (MaxR<1) MaxR=1;
718*b1cdbd2cSJim Jagielski 				i=MaxR;
719*b1cdbd2cSJim Jagielski 				while (i>=0) {
720*b1cdbd2cSJim Jagielski 					b=Int1+sal_Int16((sal_Int32(Int2-Int1)*sal_Int32(i)) /sal_Int32(MaxR));
721*b1cdbd2cSJim Jagielski 					if (b!=b0) {
722*b1cdbd2cSJim Jagielski 						sal_Int32 temp=sal_Int32(i0)*sal_Int32(ry)/sal_Int32(rx);
723*b1cdbd2cSJim Jagielski 						sal_Int16 j0=sal_Int16(temp);
724*b1cdbd2cSJim Jagielski 						SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut);
725*b1cdbd2cSJim Jagielski 						rOut.DrawEllipse(Rectangle(cx-i0,cy-j0,cx+i0,cy+j0));
726*b1cdbd2cSJim Jagielski 						i0=i; b0=b;
727*b1cdbd2cSJim Jagielski 					}
728*b1cdbd2cSJim Jagielski 					i--;
729*b1cdbd2cSJim Jagielski 				}
730*b1cdbd2cSJim Jagielski 				SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int1,rOut);
731*b1cdbd2cSJim Jagielski 				rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0));
732*b1cdbd2cSJim Jagielski 			} break; // Kreis
733*b1cdbd2cSJim Jagielski 		}
734*b1cdbd2cSJim Jagielski 	}
735*b1cdbd2cSJim Jagielski }
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski 
Draw(OutputDevice & rOut)738*b1cdbd2cSJim Jagielski void CircType::Draw(OutputDevice& rOut)
739*b1cdbd2cSJim Jagielski {
740*b1cdbd2cSJim Jagielski 	Rectangle aRect(Center.x-Radius.x,Center.y-Radius.y,Center.x+Radius.x,Center.y+Radius.y);
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski 	if (L.LMuster!=0) L.LMuster=1; // keine Linienmuster hier, nur an oder aus
743*b1cdbd2cSJim Jagielski 	SetArea(F,rOut);
744*b1cdbd2cSJim Jagielski 	if ((Flags & 0x03)==CircFull) {
745*b1cdbd2cSJim Jagielski 		if ((F.FBFarbe & 0x38)==0) {
746*b1cdbd2cSJim Jagielski 			SetLine(L,rOut);
747*b1cdbd2cSJim Jagielski 			rOut.DrawEllipse(aRect);
748*b1cdbd2cSJim Jagielski 		} else {
749*b1cdbd2cSJim Jagielski 			DrawSlideCirc(Center.x,Center.y,Radius.x,Radius.y,F,rOut);
750*b1cdbd2cSJim Jagielski 			if (L.LMuster!=0) {
751*b1cdbd2cSJim Jagielski 				SetLine(L,rOut);
752*b1cdbd2cSJim Jagielski 				rOut.SetFillColor();
753*b1cdbd2cSJim Jagielski 				rOut.DrawEllipse(aRect);
754*b1cdbd2cSJim Jagielski 			}
755*b1cdbd2cSJim Jagielski 		}
756*b1cdbd2cSJim Jagielski 	} else {
757*b1cdbd2cSJim Jagielski 		PointType a,b;
758*b1cdbd2cSJim Jagielski 		Point  aStrt,aEnde;
759*b1cdbd2cSJim Jagielski 		double sn,cs;
760*b1cdbd2cSJim Jagielski 
761*b1cdbd2cSJim Jagielski 		a.x=Center.x+Radius.x; a.y=Center.y; b=a;
762*b1cdbd2cSJim Jagielski 		sn=sin(double(StartWink)*3.14159265359/18000);
763*b1cdbd2cSJim Jagielski 		cs=cos(double(StartWink)*3.14159265359/18000);
764*b1cdbd2cSJim Jagielski 		RotatePoint(a,Center.x,Center.y,sn,cs);
765*b1cdbd2cSJim Jagielski 		sn=sin(double(StartWink+RelWink)*3.14159265359/18000);
766*b1cdbd2cSJim Jagielski 		cs=cos(double(StartWink+RelWink)*3.14159265359/18000);
767*b1cdbd2cSJim Jagielski 		RotatePoint(b,Center.x,Center.y,sn,cs);
768*b1cdbd2cSJim Jagielski 		if (Radius.x!=Radius.y) {
769*b1cdbd2cSJim Jagielski 		  if (Radius.x<1) Radius.x=1;
770*b1cdbd2cSJim Jagielski 		  if (Radius.y<1) Radius.y=1;
771*b1cdbd2cSJim Jagielski 		  a.y = a.y - Center.y;
772*b1cdbd2cSJim Jagielski 		  b.y = b.y - Center.y;
773*b1cdbd2cSJim Jagielski 		  a.y=iMulDiv(a.y,Radius.y,Radius.x);
774*b1cdbd2cSJim Jagielski 		  b.y=iMulDiv(b.y,Radius.y,Radius.x);
775*b1cdbd2cSJim Jagielski 		  a.y = a.y + Center.y;
776*b1cdbd2cSJim Jagielski 		  b.y = b.y + Center.y;
777*b1cdbd2cSJim Jagielski 		}
778*b1cdbd2cSJim Jagielski 		aStrt=Point(a.x,a.y);
779*b1cdbd2cSJim Jagielski 		aEnde=Point(b.x,b.y);
780*b1cdbd2cSJim Jagielski 		SetLine(L,rOut);
781*b1cdbd2cSJim Jagielski 		switch (Flags & 0x03) {
782*b1cdbd2cSJim Jagielski 			case CircArc : rOut.DrawArc(aRect,aEnde,aStrt); break;
783*b1cdbd2cSJim Jagielski 			case CircSect:
784*b1cdbd2cSJim Jagielski 			case CircAbsn: rOut.DrawPie(aRect,aEnde,aStrt); break;
785*b1cdbd2cSJim Jagielski 		}
786*b1cdbd2cSJim Jagielski 	}
787*b1cdbd2cSJim Jagielski }
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski /*************************************************************************
790*b1cdbd2cSJim Jagielski |*
791*b1cdbd2cSJim Jagielski |*    BmapType::Draw()
792*b1cdbd2cSJim Jagielski |*
793*b1cdbd2cSJim Jagielski |*    Beschreibung
794*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
795*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
796*b1cdbd2cSJim Jagielski |*
797*b1cdbd2cSJim Jagielski *************************************************************************/
798*b1cdbd2cSJim Jagielski 
Draw(OutputDevice & rOut)799*b1cdbd2cSJim Jagielski void BmapType::Draw(OutputDevice& rOut)
800*b1cdbd2cSJim Jagielski {
801*b1cdbd2cSJim Jagielski 	//ifstream aInp;
802*b1cdbd2cSJim Jagielski 	unsigned char	nSgfTyp;
803*b1cdbd2cSJim Jagielski 	sal_uInt16			nVersion;
804*b1cdbd2cSJim Jagielski 	String			aStr(
805*b1cdbd2cSJim Jagielski         reinterpret_cast< char const * >(&Filename[ 1 ]),
806*b1cdbd2cSJim Jagielski         (xub_StrLen)Filename[ 0 ], RTL_TEXTENCODING_UTF8 );
807*b1cdbd2cSJim Jagielski 	INetURLObject	aFNam( aStr );
808*b1cdbd2cSJim Jagielski 
809*b1cdbd2cSJim Jagielski 	SvStream* pInp = ::utl::UcbStreamHelper::CreateStream( aFNam.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
810*b1cdbd2cSJim Jagielski 	if ( pInp )
811*b1cdbd2cSJim Jagielski 	{
812*b1cdbd2cSJim Jagielski 		nSgfTyp=CheckSgfTyp( *pInp,nVersion);
813*b1cdbd2cSJim Jagielski 		switch(nSgfTyp) {
814*b1cdbd2cSJim Jagielski 			case SGF_BITIMAGE: {
815*b1cdbd2cSJim Jagielski 				GraphicFilter aFlt;
816*b1cdbd2cSJim Jagielski 				Graphic aGrf;
817*b1cdbd2cSJim Jagielski 				sal_uInt16 nRet;
818*b1cdbd2cSJim Jagielski 				nRet=aFlt.ImportGraphic(aGrf,aFNam);
819*b1cdbd2cSJim Jagielski 				aGrf.Draw(&rOut,Point(Pos1.x,Pos1.y),Size(Pos2.x-Pos1.x,Pos2.y-Pos1.y));
820*b1cdbd2cSJim Jagielski 			} break;
821*b1cdbd2cSJim Jagielski 			case SGF_SIMPVECT: {
822*b1cdbd2cSJim Jagielski 				GDIMetaFile aMtf;
823*b1cdbd2cSJim Jagielski 				SgfVectXofs=Pos1.x;
824*b1cdbd2cSJim Jagielski 				SgfVectYofs=Pos1.y;
825*b1cdbd2cSJim Jagielski 				SgfVectXmul=Pos2.x-Pos1.x;
826*b1cdbd2cSJim Jagielski 				SgfVectYmul=Pos2.y-Pos1.y;
827*b1cdbd2cSJim Jagielski 				SgfVectXdiv=0;
828*b1cdbd2cSJim Jagielski 				SgfVectYdiv=0;
829*b1cdbd2cSJim Jagielski 				SgfVectScal=sal_True;
830*b1cdbd2cSJim Jagielski 				SgfVectFilter(*pInp,aMtf);
831*b1cdbd2cSJim Jagielski 				SgfVectXofs=0;
832*b1cdbd2cSJim Jagielski 				SgfVectYofs=0;
833*b1cdbd2cSJim Jagielski 				SgfVectXmul=0;
834*b1cdbd2cSJim Jagielski 				SgfVectYmul=0;
835*b1cdbd2cSJim Jagielski 				SgfVectXdiv=0;
836*b1cdbd2cSJim Jagielski 				SgfVectYdiv=0;
837*b1cdbd2cSJim Jagielski 				SgfVectScal=sal_False;
838*b1cdbd2cSJim Jagielski 				aMtf.Play(&rOut);
839*b1cdbd2cSJim Jagielski 			} break;
840*b1cdbd2cSJim Jagielski 		}
841*b1cdbd2cSJim Jagielski 		delete pInp;
842*b1cdbd2cSJim Jagielski 	}
843*b1cdbd2cSJim Jagielski }
844*b1cdbd2cSJim Jagielski 
845*b1cdbd2cSJim Jagielski 
846*b1cdbd2cSJim Jagielski /*************************************************************************
847*b1cdbd2cSJim Jagielski |*
848*b1cdbd2cSJim Jagielski |*    GrupType::...
849*b1cdbd2cSJim Jagielski |*
850*b1cdbd2cSJim Jagielski |*    Beschreibung
851*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
852*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
853*b1cdbd2cSJim Jagielski |*
854*b1cdbd2cSJim Jagielski *************************************************************************/
GetSubPtr()855*b1cdbd2cSJim Jagielski sal_uInt32 GrupType::GetSubPtr()
856*b1cdbd2cSJim Jagielski {
857*b1cdbd2cSJim Jagielski 	return sal_uInt32(SbLo)+0x00010000*sal_uInt32(SbHi);
858*b1cdbd2cSJim Jagielski }
859*b1cdbd2cSJim Jagielski 
860*b1cdbd2cSJim Jagielski /*************************************************************************
861*b1cdbd2cSJim Jagielski |*
862*b1cdbd2cSJim Jagielski |*    DrawObjkList()
863*b1cdbd2cSJim Jagielski |*
864*b1cdbd2cSJim Jagielski |*    Beschreibung
865*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
866*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
867*b1cdbd2cSJim Jagielski |*
868*b1cdbd2cSJim Jagielski *************************************************************************/
DrawObjkList(SvStream & rInp,OutputDevice & rOut)869*b1cdbd2cSJim Jagielski void DrawObjkList( SvStream& rInp, OutputDevice& rOut )
870*b1cdbd2cSJim Jagielski {
871*b1cdbd2cSJim Jagielski 	ObjkType aObjk;
872*b1cdbd2cSJim Jagielski 	sal_uInt16 nGrpCnt=0;
873*b1cdbd2cSJim Jagielski 	sal_Bool bEnde=sal_False;
874*b1cdbd2cSJim Jagielski 	do {
875*b1cdbd2cSJim Jagielski 		rInp>>aObjk;
876*b1cdbd2cSJim Jagielski 		if (!rInp.GetError()) {
877*b1cdbd2cSJim Jagielski 			switch(aObjk.Art) {
878*b1cdbd2cSJim Jagielski 				case ObjStrk: { StrkType aStrk; rInp>>aStrk; if (!rInp.GetError()) aStrk.Draw(rOut); } break;
879*b1cdbd2cSJim Jagielski 				case ObjRect: { RectType aRect; rInp>>aRect; if (!rInp.GetError()) aRect.Draw(rOut); } break;
880*b1cdbd2cSJim Jagielski 				case ObjCirc: { CircType aCirc; rInp>>aCirc; if (!rInp.GetError()) aCirc.Draw(rOut); } break;
881*b1cdbd2cSJim Jagielski 				case ObjText: {
882*b1cdbd2cSJim Jagielski 					TextType aText;
883*b1cdbd2cSJim Jagielski 					rInp>>aText;
884*b1cdbd2cSJim Jagielski 					if (!rInp.GetError()) {
885*b1cdbd2cSJim Jagielski                         aText.Buffer=new UCHAR[aText.BufSize+1]; // Ein mehr fuer LookAhead bei CK-Trennung
886*b1cdbd2cSJim Jagielski 						rInp.Read((char* )aText.Buffer,aText.BufSize);
887*b1cdbd2cSJim Jagielski 						if (!rInp.GetError()) aText.Draw(rOut);
888*b1cdbd2cSJim Jagielski 						delete[] aText.Buffer;
889*b1cdbd2cSJim Jagielski 					}
890*b1cdbd2cSJim Jagielski 				} break;
891*b1cdbd2cSJim Jagielski 				case ObjBmap: {
892*b1cdbd2cSJim Jagielski 					BmapType aBmap;
893*b1cdbd2cSJim Jagielski 					rInp>>aBmap;
894*b1cdbd2cSJim Jagielski 					if (!rInp.GetError()) {
895*b1cdbd2cSJim Jagielski 						aBmap.Draw(rOut);
896*b1cdbd2cSJim Jagielski 					}
897*b1cdbd2cSJim Jagielski 				} break;
898*b1cdbd2cSJim Jagielski 				case ObjPoly: {
899*b1cdbd2cSJim Jagielski 					PolyType aPoly;
900*b1cdbd2cSJim Jagielski 					rInp>>aPoly;
901*b1cdbd2cSJim Jagielski 					if (!rInp.GetError()) {
902*b1cdbd2cSJim Jagielski 						aPoly.EckP=new PointType[aPoly.nPoints];
903*b1cdbd2cSJim Jagielski 						rInp.Read((char*)aPoly.EckP,4*aPoly.nPoints);
904*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
905*b1cdbd2cSJim Jagielski 						for(short i=0;i<aPoly.nPoints;i++) SWAPPOINT(aPoly.EckP[i]);
906*b1cdbd2cSJim Jagielski #endif
907*b1cdbd2cSJim Jagielski 						if (!rInp.GetError()) aPoly.Draw(rOut);
908*b1cdbd2cSJim Jagielski 						delete[] aPoly.EckP;
909*b1cdbd2cSJim Jagielski 					}
910*b1cdbd2cSJim Jagielski 				} break;
911*b1cdbd2cSJim Jagielski 				case ObjSpln: {
912*b1cdbd2cSJim Jagielski 					SplnType aSpln;
913*b1cdbd2cSJim Jagielski 					rInp>>aSpln;
914*b1cdbd2cSJim Jagielski 					if (!rInp.GetError()) {
915*b1cdbd2cSJim Jagielski 						aSpln.EckP=new PointType[aSpln.nPoints];
916*b1cdbd2cSJim Jagielski 						rInp.Read((char*)aSpln.EckP,4*aSpln.nPoints);
917*b1cdbd2cSJim Jagielski #if defined OSL_BIGENDIAN
918*b1cdbd2cSJim Jagielski 						for(short i=0;i<aSpln.nPoints;i++) SWAPPOINT(aSpln.EckP[i]);
919*b1cdbd2cSJim Jagielski #endif
920*b1cdbd2cSJim Jagielski 						if (!rInp.GetError()) aSpln.Draw(rOut);
921*b1cdbd2cSJim Jagielski 						delete[] aSpln.EckP;
922*b1cdbd2cSJim Jagielski 					}
923*b1cdbd2cSJim Jagielski 				} break;
924*b1cdbd2cSJim Jagielski 				case ObjGrup: {
925*b1cdbd2cSJim Jagielski 					GrupType aGrup;
926*b1cdbd2cSJim Jagielski 					rInp>>aGrup;
927*b1cdbd2cSJim Jagielski 					if (!rInp.GetError()) {
928*b1cdbd2cSJim Jagielski                         rInp.Seek(rInp.Tell()+aGrup.Last); // Obj-Anhaengsel
929*b1cdbd2cSJim Jagielski 						if(aGrup.GetSubPtr()!=0L) nGrpCnt++;// DrawObjkList(rInp,rOut );
930*b1cdbd2cSJim Jagielski 					}
931*b1cdbd2cSJim Jagielski 				} break;
932*b1cdbd2cSJim Jagielski 				default: {
933*b1cdbd2cSJim Jagielski 					aObjk.Draw(rOut);          // Objektbezeichnung auf 2. Screen
934*b1cdbd2cSJim Jagielski                     ObjkOverSeek(rInp,aObjk);  // zum naechsten Objekt
935*b1cdbd2cSJim Jagielski 				}
936*b1cdbd2cSJim Jagielski 			}
937*b1cdbd2cSJim Jagielski 		} // if rInp
938*b1cdbd2cSJim Jagielski 		if (!rInp.GetError()) {
939*b1cdbd2cSJim Jagielski 			if (aObjk.Next==0L) {
940*b1cdbd2cSJim Jagielski 				if (nGrpCnt==0) bEnde=sal_True;
941*b1cdbd2cSJim Jagielski 				else nGrpCnt--;
942*b1cdbd2cSJim Jagielski 			}
943*b1cdbd2cSJim Jagielski 		} else {
944*b1cdbd2cSJim Jagielski 			bEnde=sal_True;  // Lesefehler
945*b1cdbd2cSJim Jagielski 		}
946*b1cdbd2cSJim Jagielski 	} while (!bEnde);
947*b1cdbd2cSJim Jagielski }
948*b1cdbd2cSJim Jagielski 
949*b1cdbd2cSJim Jagielski /*************************************************************************
950*b1cdbd2cSJim Jagielski |*
951*b1cdbd2cSJim Jagielski |*    SkipObjkList()
952*b1cdbd2cSJim Jagielski |*
953*b1cdbd2cSJim Jagielski |*    Beschreibung
954*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
955*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
956*b1cdbd2cSJim Jagielski |*
957*b1cdbd2cSJim Jagielski *************************************************************************/
SkipObjkList(SvStream & rInp)958*b1cdbd2cSJim Jagielski void SkipObjkList(SvStream& rInp)
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski 	ObjkType aObjk;
961*b1cdbd2cSJim Jagielski 	do
962*b1cdbd2cSJim Jagielski 	{
963*b1cdbd2cSJim Jagielski 		rInp>>aObjk;
964*b1cdbd2cSJim Jagielski 		if(aObjk.Art==ObjGrup) {
965*b1cdbd2cSJim Jagielski 			GrupType aGrup;
966*b1cdbd2cSJim Jagielski 			rInp>>aGrup;
967*b1cdbd2cSJim Jagielski             rInp.Seek(rInp.Tell()+aGrup.Last); // Obj-Anhaengsel
968*b1cdbd2cSJim Jagielski 			if(aGrup.GetSubPtr()!=0L) SkipObjkList(rInp);
969*b1cdbd2cSJim Jagielski 		} else {
970*b1cdbd2cSJim Jagielski             ObjkOverSeek(rInp,aObjk);  // zum naechsten Objekt
971*b1cdbd2cSJim Jagielski 		}
972*b1cdbd2cSJim Jagielski 	} while (aObjk.Next!=0L && !rInp.GetError());
973*b1cdbd2cSJim Jagielski }
974*b1cdbd2cSJim Jagielski 
975*b1cdbd2cSJim Jagielski /*************************************************************************
976*b1cdbd2cSJim Jagielski |*
977*b1cdbd2cSJim Jagielski |*    SgfFilterSDrw()
978*b1cdbd2cSJim Jagielski |*
979*b1cdbd2cSJim Jagielski |*    Beschreibung
980*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
981*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
982*b1cdbd2cSJim Jagielski |*
983*b1cdbd2cSJim Jagielski *************************************************************************/
SgfFilterSDrw(SvStream & rInp,SgfHeader &,SgfEntry &,GDIMetaFile & rMtf)984*b1cdbd2cSJim Jagielski sal_Bool SgfFilterSDrw( SvStream& rInp, SgfHeader&, SgfEntry&, GDIMetaFile& rMtf )
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski 	sal_Bool          bRet = sal_False;
987*b1cdbd2cSJim Jagielski 	PageType      aPage;
988*b1cdbd2cSJim Jagielski 	VirtualDevice aOutDev;
989*b1cdbd2cSJim Jagielski 	OutputDevice* pOutDev;
990*b1cdbd2cSJim Jagielski 	sal_uLong         nStdPos;
991*b1cdbd2cSJim Jagielski 	sal_uLong         nZchPos;
992*b1cdbd2cSJim Jagielski 	sal_uInt16        Num;
993*b1cdbd2cSJim Jagielski 
994*b1cdbd2cSJim Jagielski 	pOutDev=&aOutDev;
995*b1cdbd2cSJim Jagielski 	DtHdOverSeek(rInp); // DataHeader weglesen
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski 	nStdPos=rInp.Tell();
998*b1cdbd2cSJim Jagielski 	do {                // Standardseiten weglesen
999*b1cdbd2cSJim Jagielski 		rInp>>aPage;
1000*b1cdbd2cSJim Jagielski 		if (aPage.nList!=0) SkipObjkList(rInp);
1001*b1cdbd2cSJim Jagielski 	} while (aPage.Next!=0L && !rInp.GetError());
1002*b1cdbd2cSJim Jagielski 
1003*b1cdbd2cSJim Jagielski //    ShowMsg("Zeichnungseite(n)\n");
1004*b1cdbd2cSJim Jagielski 	nZchPos=rInp.Tell();
1005*b1cdbd2cSJim Jagielski 	rInp>>aPage;
1006*b1cdbd2cSJim Jagielski 
1007*b1cdbd2cSJim Jagielski 	rMtf.Record(pOutDev);
1008*b1cdbd2cSJim Jagielski 	Num=aPage.StdPg;
1009*b1cdbd2cSJim Jagielski 	if (Num!=0) {
1010*b1cdbd2cSJim Jagielski 	  rInp.Seek(nStdPos);
1011*b1cdbd2cSJim Jagielski 	  while(Num>1 && aPage.Next!=0L && !rInp.GetError()) { // Standardseite suchen
1012*b1cdbd2cSJim Jagielski 		rInp>>aPage;
1013*b1cdbd2cSJim Jagielski 		if (aPage.nList!=0) SkipObjkList(rInp);
1014*b1cdbd2cSJim Jagielski 		Num--;
1015*b1cdbd2cSJim Jagielski 	  }
1016*b1cdbd2cSJim Jagielski 	  rInp>>aPage;
1017*b1cdbd2cSJim Jagielski 	  if(Num==1 && aPage.nList!=0L) DrawObjkList( rInp,*pOutDev );
1018*b1cdbd2cSJim Jagielski 	  rInp.Seek(nZchPos);
1019*b1cdbd2cSJim Jagielski 	  nZchPos=rInp.Tell();
1020*b1cdbd2cSJim Jagielski 	  rInp>>aPage;
1021*b1cdbd2cSJim Jagielski 	}
1022*b1cdbd2cSJim Jagielski 	if (aPage.nList!=0L) DrawObjkList(rInp,*pOutDev );
1023*b1cdbd2cSJim Jagielski 
1024*b1cdbd2cSJim Jagielski 	rMtf.Stop();
1025*b1cdbd2cSJim Jagielski 	rMtf.WindStart();
1026*b1cdbd2cSJim Jagielski 	MapMode aMap(MAP_10TH_MM,Point(),Fraction(1,4),Fraction(1,4));
1027*b1cdbd2cSJim Jagielski 	rMtf.SetPrefMapMode(aMap);
1028*b1cdbd2cSJim Jagielski 	rMtf.SetPrefSize(Size((sal_Int16)aPage.Paper.Size.x,(sal_Int16)aPage.Paper.Size.y));
1029*b1cdbd2cSJim Jagielski 	bRet=sal_True;
1030*b1cdbd2cSJim Jagielski 	return bRet;
1031*b1cdbd2cSJim Jagielski }
1032*b1cdbd2cSJim Jagielski 
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski 
1035*b1cdbd2cSJim Jagielski /*************************************************************************
1036*b1cdbd2cSJim Jagielski |*
1037*b1cdbd2cSJim Jagielski |*    SgfSDrwFilter()
1038*b1cdbd2cSJim Jagielski |*
1039*b1cdbd2cSJim Jagielski |*    Beschreibung
1040*b1cdbd2cSJim Jagielski |*    Ersterstellung    JOE 23.06.93
1041*b1cdbd2cSJim Jagielski |*    Letzte Aenderung  JOE 23.06.93
1042*b1cdbd2cSJim Jagielski |*
1043*b1cdbd2cSJim Jagielski *************************************************************************/
SgfSDrwFilter(SvStream & rInp,GDIMetaFile & rMtf,INetURLObject aIniPath)1044*b1cdbd2cSJim Jagielski sal_Bool SgfSDrwFilter(SvStream& rInp, GDIMetaFile& rMtf, INetURLObject aIniPath )
1045*b1cdbd2cSJim Jagielski {
1046*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1 // Recordgroessen checken. Neuer Compiler hat vielleichte anderes Alignment!
1047*b1cdbd2cSJim Jagielski 	if (sizeof(ObjTextType)!=ObjTextTypeSize)  return sal_False;
1048*b1cdbd2cSJim Jagielski #endif
1049*b1cdbd2cSJim Jagielski 
1050*b1cdbd2cSJim Jagielski 	sal_uLong     nFileStart;            // Offset des SgfHeaders. Im allgemeinen 0.
1051*b1cdbd2cSJim Jagielski 	SgfHeader aHead;
1052*b1cdbd2cSJim Jagielski 	SgfEntry  aEntr;
1053*b1cdbd2cSJim Jagielski 	sal_uLong     nNext;
1054*b1cdbd2cSJim Jagielski 	sal_Bool      bRdFlag=sal_False;         // Grafikentry gelesen ?
1055*b1cdbd2cSJim Jagielski 	sal_Bool      bRet=sal_False;            // Returncode
1056*b1cdbd2cSJim Jagielski 
1057*b1cdbd2cSJim Jagielski 	aIniPath.Append( String::CreateFromAscii( "sgf.ini", 7 ) );
1058*b1cdbd2cSJim Jagielski //	aIniPath.ToAbs();
1059*b1cdbd2cSJim Jagielski 
1060*b1cdbd2cSJim Jagielski 	pSgfFonts = new SgfFontLst;
1061*b1cdbd2cSJim Jagielski 
1062*b1cdbd2cSJim Jagielski 	pSgfFonts->AssignFN( aIniPath.GetMainURL( INetURLObject::NO_DECODE ) );
1063*b1cdbd2cSJim Jagielski 	nFileStart=rInp.Tell();
1064*b1cdbd2cSJim Jagielski 	rInp>>aHead;
1065*b1cdbd2cSJim Jagielski 	if (aHead.ChkMagic() && aHead.Typ==SgfStarDraw && aHead.Version==SGV_VERSION) {
1066*b1cdbd2cSJim Jagielski 		nNext=aHead.GetOffset();
1067*b1cdbd2cSJim Jagielski 		while (nNext && !bRdFlag && !rInp.GetError()) {
1068*b1cdbd2cSJim Jagielski 			rInp.Seek(nFileStart+nNext);
1069*b1cdbd2cSJim Jagielski 			rInp>>aEntr;
1070*b1cdbd2cSJim Jagielski 			nNext=aEntr.GetOffset();
1071*b1cdbd2cSJim Jagielski 			if (aEntr.Typ==aHead.Typ) {
1072*b1cdbd2cSJim Jagielski 				bRet=SgfFilterSDrw( rInp,aHead,aEntr,rMtf );
1073*b1cdbd2cSJim Jagielski 			}
1074*b1cdbd2cSJim Jagielski 		} // while(nNext)
1075*b1cdbd2cSJim Jagielski 		if (bRdFlag) {
1076*b1cdbd2cSJim Jagielski 			if (!rInp.GetError()) bRet=sal_True;  // Scheinbar Ok
1077*b1cdbd2cSJim Jagielski 		}
1078*b1cdbd2cSJim Jagielski 	}
1079*b1cdbd2cSJim Jagielski 	delete pSgfFonts;
1080*b1cdbd2cSJim Jagielski 	return(bRet);
1081*b1cdbd2cSJim Jagielski }
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski /*
1084*b1cdbd2cSJim Jagielski Bitmap Dither(sal_uInt8 Intens)
1085*b1cdbd2cSJim Jagielski {
1086*b1cdbd2cSJim Jagielski 	Bitmap aBmp;
1087*b1cdbd2cSJim Jagielski 	BmpInfoHeader Info;
1088*b1cdbd2cSJim Jagielski 
1089*b1cdbd2cSJim Jagielski 
1090*b1cdbd2cSJim Jagielski const dmatrix: array[0..7,0..7] of byte =
1091*b1cdbd2cSJim Jagielski 		((  0, 48, 12, 60,  3, 51, 15, 63 ),
1092*b1cdbd2cSJim Jagielski 		 ( 32, 16, 44, 28, 35, 19, 47, 31 ),
1093*b1cdbd2cSJim Jagielski 		 (  8, 56,  4, 52, 11, 59,  7, 55 ),
1094*b1cdbd2cSJim Jagielski 		 ( 40, 24, 36, 20, 43, 27, 39, 23 ),
1095*b1cdbd2cSJim Jagielski 		 (  2, 50, 14, 62,  1, 49, 13, 61 ),
1096*b1cdbd2cSJim Jagielski 		 ( 34, 18, 46, 30, 33, 17, 45, 29 ),
1097*b1cdbd2cSJim Jagielski 		 ( 10, 58,  6, 54,  9, 57,  5, 53 ),
1098*b1cdbd2cSJim Jagielski 		 ( 42, 26, 38, 22, 41, 25, 37, 21 ));
1099*b1cdbd2cSJim Jagielski 
1100*b1cdbd2cSJim Jagielski 
1101*b1cdbd2cSJim Jagielski 	cmatrix: array[0..7,0..7] of byte;
1102*b1cdbd2cSJim Jagielski 	dmatrixn,dmatrixi: array[0..7] of byte;
1103*b1cdbd2cSJim Jagielski 
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski procedure SetColorIntens(col0,col1,bal: integer);
1106*b1cdbd2cSJim Jagielski var cmatrix0: array[0..63] of byte absolute cmatrix;
1107*b1cdbd2cSJim Jagielski 	dmatrix0: array[0..63] of byte absolute dmatrix;
1108*b1cdbd2cSJim Jagielski 	n,i: integer;
1109*b1cdbd2cSJim Jagielski 	b,bit: byte;
1110*b1cdbd2cSJim Jagielski begin
1111*b1cdbd2cSJim Jagielski if col0=col1 then bal:=0;
1112*b1cdbd2cSJim Jagielski if bal<=32 then
1113*b1cdbd2cSJim Jagielski   begin
1114*b1cdbd2cSJim Jagielski   plotcolor0:=col0 and $1F; plotcolor1:=col1 and $1F;
1115*b1cdbd2cSJim Jagielski   plotbal:=bal;
1116*b1cdbd2cSJim Jagielski   end
1117*b1cdbd2cSJim Jagielski else
1118*b1cdbd2cSJim Jagielski   begin
1119*b1cdbd2cSJim Jagielski   plotcolor0:=col1 and $1F; plotcolor1:=col0 and $1F;
1120*b1cdbd2cSJim Jagielski   plotbal:=64-bal;
1121*b1cdbd2cSJim Jagielski   end;
1122*b1cdbd2cSJim Jagielski for n:=0 to 63 do
1123*b1cdbd2cSJim Jagielski  if plotbal<=dmatrix0[n] then cmatrix0[n]:=col0 else cmatrix0[n]:=col1;
1124*b1cdbd2cSJim Jagielski end;
1125*b1cdbd2cSJim Jagielski */
1126*b1cdbd2cSJim Jagielski 
1127