1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: rscdef.cxx,v $
10 * $Revision: 1.7.14.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_rsc.hxx"
33 /****************** I N C L U D E S **************************************/
35 // Programmuebergreifende Includes.
38 /****************** C o d e **********************************************/
39 /****************** R s c I d ********************************************/
40 BOOL
RscId::bNames
= TRUE
;
42 /*************************************************************************
44 |* static RscId::SetNames
45 |* static RscId::SetNoNames
48 |* Ersterstellung MM 26.06.91
49 |* Letzte Aenderung MM 26.06.91
51 *************************************************************************/
52 void RscId::SetNames( BOOL bSet
) { bNames
= bSet
; }
53 BOOL
RscId::IsSetNames() { return bNames
; }
55 /*************************************************************************
60 |* Ersterstellung MM 17.05.91
61 |* Letzte Aenderung MM 17.05.91
63 *************************************************************************/
64 INT32
RscId::GetNumber() const{
66 aExp
.Evaluate( &lVal
);
70 /*************************************************************************
75 |* Ersterstellung MM 01.11.91
76 |* Letzte Aenderung MM 01.11.91
78 *************************************************************************/
79 void RscId::Create( const RscExpType
& rExpType
)
82 if( aExp
.IsDefinition() )
83 aExp
.aExp
.pDef
->IncRef();
84 else if( aExp
.IsExpression() ){
87 aExp
.Evaluate( &lValue
);
88 aExp
.SetLong( lValue
);
92 /*************************************************************************
97 |* Ersterstellung MM 01.11.91
98 |* Letzte Aenderung MM 01.11.91
100 *************************************************************************/
101 void RscId::Destroy(){
102 if( aExp
.IsDefinition() )
103 aExp
.aExp
.pDef
->DecRef();
104 aExp
.cType
= RSCEXP_NOTHING
;
107 /*************************************************************************
112 |* Ersterstellung MM 01.11.91
113 |* Letzte Aenderung MM 01.11.91
115 *************************************************************************/
116 RscId::RscId( const RscId
& rRscId
){
118 if( aExp
.IsDefinition() )
119 aExp
.aExp
.pDef
->IncRef();
122 /*************************************************************************
127 |* Ersterstellung MM 01.11.91
128 |* Letzte Aenderung MM 25.11.91
130 *************************************************************************/
131 RscId::RscId( RscDefine
* pDef
){
134 aExpType
.aExp
.pDef
= pDef
;
135 aExpType
.cType
= RSCEXP_DEF
;
139 /*************************************************************************
144 |* Ersterstellung MM 01.11.91
145 |* Letzte Aenderung MM 01.11.91
147 *************************************************************************/
148 RscId
& RscId::operator = ( const RscId
& rRscId
){
149 if( rRscId
.aExp
.IsDefinition() )
150 rRscId
.aExp
.aExp
.pDef
->IncRef();
156 /*************************************************************************
158 |* RscId::operator ==
161 |* Ersterstellung MM 16.05.91
162 |* Letzte Aenderung MM 16.05.91
164 *************************************************************************/
165 BOOL
RscId::operator == ( const RscId
& rRscId
) const
167 return( GetNumber() == rRscId
.GetNumber() );
170 /*************************************************************************
175 |* Ersterstellung MM 16.05.91
176 |* Letzte Aenderung MM 16.05.91
178 *************************************************************************/
179 BOOL
RscId::operator < ( const RscId
& rRscId
) const
181 return( GetNumber() < rRscId
.GetNumber() );
184 /*************************************************************************
189 |* Ersterstellung MM 16.05.91
190 |* Letzte Aenderung MM 16.05.91
192 *************************************************************************/
193 BOOL
RscId::operator > ( const RscId
& rRscId
) const
195 return( GetNumber() > rRscId
.GetNumber() );
198 /*************************************************************************
203 |* Ersterstellung MM 16.05.91
204 |* Letzte Aenderung MM 16.05.91
206 *************************************************************************/
207 RscId::operator INT32() const
209 return( GetNumber() );
212 /*************************************************************************
217 |* Ersterstellung MM 16.05.91
218 |* Letzte Aenderung MM 25.11.91
220 *************************************************************************/
221 ByteString
RscId::GetName() const
225 if ( !aExp
.IsNothing() )
228 aExp
.GetMacro( aStr
);
230 aStr
= ByteString::CreateFromInt32( GetNumber() );
236 /*************************************************************************
241 |* Ersterstellung MM 01.11.91
242 |* Letzte Aenderung MM 25.11.91
244 *************************************************************************/
245 ByteString
RscId::GetMacro() const
249 if ( aExp
.IsDefinition() )
250 aStr
= aExp
.aExp
.pDef
->GetMacro();
252 aExp
.GetMacro( aStr
);
257 /****************** R s c D e f i n e ************************************/
258 /*************************************************************************
260 |* RscDefine::RscDefine()
263 |* Ersterstellung MM 01.11.91
264 |* Letzte Aenderung MM 01.11.91
266 *************************************************************************/
267 RscDefine::RscDefine( ULONG lKey
, const ByteString
& rDefName
, INT32 lDefId
)
268 : StringNode( rDefName
)
276 RscDefine::RscDefine( ULONG lKey
, const ByteString
& rDefName
,
277 RscExpression
* pExpression
)
278 : StringNode( rDefName
)
282 pExpression
->Evaluate( &lId
);
286 /*************************************************************************
288 |* RscDefine::~RscDefine()
291 |* Ersterstellung MM 01.11.91
292 |* Letzte Aenderung MM 01.11.91
294 *************************************************************************/
295 RscDefine::~RscDefine(){
302 /*************************************************************************
304 |* RscDefine::DecRef()
307 |* Ersterstellung MM 01.11.91
308 |* Letzte Aenderung MM 01.11.91
310 *************************************************************************/
311 void RscDefine::DecRef(){
313 if( 0 == nRefCount
){
318 /*************************************************************************
320 |* RscDefine::DefineToNumber()
323 |* Ersterstellung MM 07.11.91
324 |* Letzte Aenderung MM 07.11.91
326 *************************************************************************/
327 void RscDefine::DefineToNumber()
332 SetName( ByteString::CreateFromInt32( lId
) );
335 /*************************************************************************
337 |* RscDefine::ChangeMacro()
340 |* Ersterstellung MM 04.11.91
341 |* Letzte Aenderung MM 04.11.91
343 *************************************************************************/
344 void RscDefine::ChangeMacro( RscExpression
* pExpression
){
348 pExp
->Evaluate( &lId
);
351 void RscDefine::ChangeMacro( INT32 lIdentifier
){
359 /*************************************************************************
361 |* RscDefine::Evaluate()
364 |* Ersterstellung MM 01.11.91
365 |* Letzte Aenderung MM 01.11.91
367 *************************************************************************/
368 BOOL
RscDefine::Evaluate(){
372 bRet
= !pExp
->Evaluate( &lId
);
377 /*************************************************************************
379 |* RscDefine::Search()
382 |* Ersterstellung MM 11.11.91
383 |* Letzte Aenderung MM 11.11.91
385 *************************************************************************/
386 RscDefine
* RscDefine::Search( const char * pStr
){
387 return (RscDefine
*)StringNode::Search( pStr
);
390 /*************************************************************************
392 |* RscDefine::GetMacro()
395 |* Ersterstellung MM 01.11.91
396 |* Letzte Aenderung MM 01.11.91
398 *************************************************************************/
399 ByteString
RscDefine::GetMacro()
402 return pExp
->GetMacro();
403 return ByteString::CreateFromInt32( lId
);
406 /****************** R s c D e f i n e L i s t ****************************/
407 /*************************************************************************
409 |* RscDefineList::New()
412 |* Ersterstellung MM 04.11.91
413 |* Letzte Aenderung MM 04.11.91
415 *************************************************************************/
416 RscDefine
* RscDefineList::New( ULONG lFileKey
, const ByteString
& rDefName
,
417 INT32 lDefId
, ULONG lPos
)
421 pDef
= new RscDefine( lFileKey
, rDefName
, lDefId
);
423 Insert( pDef
, lPos
);
427 RscDefine
* RscDefineList::New( ULONG lFileKey
, const ByteString
& rDefName
,
428 RscExpression
* pExpression
, ULONG lPos
)
432 pDef
= new RscDefine( lFileKey
, rDefName
, pExpression
);
434 Insert( pDef
, lPos
);
439 /*************************************************************************
441 |* RscDefineList::Remove()
444 |* Ersterstellung MM 04.11.91
445 |* Letzte Aenderung MM 04.11.91
447 *************************************************************************/
448 BOOL
RscDefineList::Remove( RscDefine
* pDef
){
449 pDef
= RscSubDefList::Remove( pDef
);
451 pDef
->DefineToNumber();
455 return( NULL
!= pDef
);
458 BOOL
RscDefineList::Remove( ULONG lIndex
){
459 RscDefine
* pDef
= RscSubDefList::Remove( lIndex
);
461 pDef
->DefineToNumber();
465 return( NULL
!= pDef
);
468 BOOL
RscDefineList::Remove(){
471 pDef
= RscSubDefList::Remove( (ULONG
)0 );
474 pDef
->DefineToNumber();
477 return( NULL
!= pDef
);
480 /*************************************************************************
482 |* RscDefineList::Befor()
485 |* Ersterstellung MM 12.11.91
486 |* Letzte Aenderung MM 12.11.91
488 *************************************************************************/
489 BOOL
RscDefineList::Befor( const RscDefine
* pFree
,
490 const RscDefine
* pDepend
)
499 if( pDef
== pDepend
)
509 /*************************************************************************
511 |* RscDefineList::WriteAll()
514 |* Ersterstellung MM 28.10.91
515 |* Letzte Aenderung MM 28.10.91
517 *************************************************************************/
518 void RscDefineList::WriteAll( FILE * fOutput
)
520 RscDefine
* pDefEle
= First();
524 fprintf( fOutput
, "#define %s %s\n",
525 pDefEle
->GetName().GetBuffer(),
526 pDefEle
->GetMacro().GetBuffer() );
531 /****************** R s c E x p T y p e **********************************/
532 /*************************************************************************
534 |* RscExpType::Evaluate()
537 |* Ersterstellung MM 01.11.91
538 |* Letzte Aenderung MM 01.11.91
540 *************************************************************************/
541 BOOL
RscExpType::Evaluate( INT32
* plValue
) const{
542 if( IsDefinition() ){
543 aExp
.pDef
->Evaluate();
544 // Eventuellen Fehler ignorieren
545 *plValue
= aExp
.pDef
->GetNumber();
547 else if( IsExpression() )
548 return( aExp
.pExp
->Evaluate( plValue
) );
549 else if( IsNothing() )
552 *plValue
= GetLong();
557 /*************************************************************************
559 |* RscExpType::GetMacro()
562 |* Ersterstellung MM 01.11.91
563 |* Letzte Aenderung MM 01.11.91
565 *************************************************************************/
566 void RscExpType::GetMacro( ByteString
& rStr
) const
572 rStr
+= aExp
.pDef
->GetName();
574 else if( IsExpression() )
575 rStr
+= aExp
.pExp
->GetMacro();
576 else if( IsNumber() )
577 rStr
+= ByteString::CreateFromInt32( GetLong() );
581 /****************** R s c E x p r e s s i o n ****************************/
582 /*************************************************************************
584 |* RscExpression::RscExpression()
587 |* Ersterstellung MM 01.11.91
588 |* Letzte Aenderung MM 01.11.91
590 *************************************************************************/
591 RscExpression::RscExpression( RscExpType aLE
, char cOp
, RscExpType aRE
)
596 if( aLeftExp
.IsDefinition() )
597 aLeftExp
.aExp
.pDef
->IncRef();
598 if( aRightExp
.IsDefinition() )
599 aRightExp
.aExp
.pDef
->IncRef();
602 /*************************************************************************
604 |* RscExpression::~RscExpression()
607 |* Ersterstellung MM 01.11.91
608 |* Letzte Aenderung MM 01.11.91
610 *************************************************************************/
611 RscExpression::~RscExpression(){
612 if( aLeftExp
.IsDefinition() )
613 aLeftExp
.aExp
.pDef
->DecRef();
614 else if( aLeftExp
.IsExpression() )
615 delete aLeftExp
.aExp
.pExp
;
617 if( aRightExp
.IsDefinition() )
618 aRightExp
.aExp
.pDef
->DecRef();
619 else if( aRightExp
.IsExpression() )
620 delete aRightExp
.aExp
.pExp
;
623 /*************************************************************************
625 |* RscExpression::Evaluate()
628 |* Ersterstellung MM 01.11.91
629 |* Letzte Aenderung MM 01.11.91
631 *************************************************************************/
632 BOOL
RscExpression::Evaluate( INT32
* plValue
){
636 // linken und rechten Zweig auswerten
637 if( aLeftExp
.Evaluate( &lLeft
) && aRightExp
.Evaluate( &lRight
) ){
638 if( cOperation
== '&' )
639 *plValue
= lLeft
& lRight
;
640 else if( cOperation
== '|' )
641 *plValue
= lLeft
| lRight
;
642 else if( cOperation
== '+' )
643 *plValue
= lLeft
+ lRight
;
644 else if( cOperation
== '-' )
645 *plValue
= lLeft
- lRight
;
646 else if( cOperation
== '*' )
647 *plValue
= lLeft
* lRight
;
648 else if( cOperation
== 'r' )
649 *plValue
= lLeft
>> lRight
;
650 else if( cOperation
== 'l' )
651 *plValue
= lLeft
<< lRight
;
655 *plValue
= lLeft
/ lRight
;
662 /*************************************************************************
664 |* RscExpression::GetMacro()
667 |* Ersterstellung MM 01.11.91
668 |* Letzte Aenderung MM 01.11.91
670 *************************************************************************/
671 ByteString
RscExpression::GetMacro()
675 // Ausgabeoptimierung
676 if( aLeftExp
.IsNothing() )
678 if ( '-' == cOperation
)
683 aRightExp
.GetMacro( aLeft
);
684 if( '-' == cOperation
)
687 else if( aRightExp
.IsNothing() )
688 aLeftExp
.GetMacro( aLeft
);
691 // linken Zweig auswerten
692 aLeftExp
.GetMacro( aLeft
);
697 // rechten Zweig auswerten
698 aRightExp
.GetMacro( aLeft
);
707 /****************** R s c F i l e ****************************************/
708 /*************************************************************************
710 |* RscFile::RscFile()
713 |* Ersterstellung MM 04.11.91
714 |* Letzte Aenderung MM 04.11.91
716 *************************************************************************/
717 RscFile :: RscFile(){
724 /*************************************************************************
726 |* RscFile::~RscFile()
729 |* Ersterstellung MM 04.11.91
730 |* Letzte Aenderung MM 04.11.91
732 *************************************************************************/
733 RscFile :: ~RscFile(){
734 RscDepend
* pDep
= Remove( (ULONG
)0 );
738 pDep
= Remove( (ULONG
)0 );
741 //von hinten nach vorne ist besser wegen der Abhaengigkeiten
742 //Objekte zerstoeren sich, wenn Referenzzaehler NULL
744 while( aDefLst
.Remove() ) ;
747 /*************************************************************************
751 |* Beschreibung Diese Methode gibt TRUE zurueck, wenn lDepend
752 |* existiert und hinter lFree steht, oder wenn
753 |* lDepend nicht existiert.
754 |* Ersterstellung MM 12.11.91
755 |* Letzte Aenderung MM 12.11.91
757 *************************************************************************/
758 BOOL
RscFile::Depend( ULONG lDepend
, ULONG lFree
){
763 if( pDep
->GetFileKey() == lDepend
){
765 if( pDep
->GetFileKey() == lFree
)
777 /*************************************************************************
779 |* RscFile::InsertDependFile()
782 |* Ersterstellung MM 06.01.92
783 |* Letzte Aenderung MM 06.01.92
785 *************************************************************************/
786 BOOL
RscFile :: InsertDependFile( ULONG lIncFile
, ULONG lPos
)
792 if( pDep
->GetFileKey() == lIncFile
)
797 // Current-Zeiger steht auf letztem Element
798 if( lPos
>= Count() ){ //letztes Element muss immer letztes bleiben
799 // Abhaengigkeit vor der letzten Position eintragen
800 Insert( new RscDepend( lIncFile
) );
803 Insert( new RscDepend( lIncFile
), lPos
);
808 /*************************************************************************
810 |* RscFile::RemoveDependFile()
813 |* Ersterstellung MM 18.11.91
814 |* Letzte Aenderung MM 18.11.91
816 *************************************************************************/
817 void RscFile :: RemoveDependFile( ULONG lDepFile
)
820 RscDepend
* pDep
= Last();
823 if( pDep
->GetFileKey() == lDepFile
){
831 /****************** R s c D e f T r e e **********************************/
832 /*************************************************************************
834 |* RscDefTree::~RscDefTree()
837 |* Ersterstellung MM 12.11.91
838 |* Letzte Aenderung MM 12.11.91
840 *************************************************************************/
841 RscDefTree::~RscDefTree(){
845 /*************************************************************************
847 |* RscDefTree::Remove()
850 |* Ersterstellung MM 12.11.91
851 |* Letzte Aenderung MM 12.11.91
853 *************************************************************************/
854 void RscDefTree::Remove(){
858 pDefRoot
= (RscDefine
*)pDefRoot
->Remove( pDefRoot
);
863 /*************************************************************************
865 |* RscDefTree::~Search()
868 |* Ersterstellung MM 12.11.91
869 |* Letzte Aenderung MM 12.11.91
871 *************************************************************************/
872 RscDefine
* RscDefTree::Search( const char * pName
){
874 return pDefRoot
->Search( pName
);
878 /*************************************************************************
880 |* RscDefTree::Insert()
883 |* Ersterstellung MM 12.11.91
884 |* Letzte Aenderung MM 12.11.91
886 *************************************************************************/
887 void RscDefTree::Insert( RscDefine
* pDef
){
889 pDefRoot
->Insert( pDef
);
895 /*************************************************************************
897 |* RscDefTree::Remove()
900 |* Ersterstellung MM 12.11.91
901 |* Letzte Aenderung MM 12.11.91
903 *************************************************************************/
904 void RscDefTree::Remove( RscDefine
* pDef
){
906 //falls pDef == pDefRoot
907 pDefRoot
= (RscDefine
*)pDefRoot
->Remove( pDef
);
912 /*************************************************************************
914 |* RscDefTree::Evaluate()
917 |* Ersterstellung MM 12.11.91
918 |* Letzte Aenderung MM 12.11.91
920 *************************************************************************/
921 BOOL
RscDefTree::Evaluate( RscDefine
* pDef
){
923 if( !Evaluate( (RscDefine
*)pDef
->Left() ) )
925 if( !Evaluate( (RscDefine
*)pDef
->Right() ) )
931 BOOL
RscDefTree::Evaluate(){
932 return Evaluate( pDefRoot
);
935 /****************** R s c F i l e T a b **********************************/
936 /*************************************************************************
938 |* RscFileTab::RscFileTab()
941 |* Ersterstellung MM 07.11.91
942 |* Letzte Aenderung MM 07.11.91
944 *************************************************************************/
945 RscFileTab::RscFileTab(){
948 /*************************************************************************
950 |* RscFileTab::~RscFileTab()
953 |* Ersterstellung MM 04.11.91
954 |* Letzte Aenderung MM 04.11.91
956 *************************************************************************/
957 RscFileTab :: ~RscFileTab(){
964 Remove( GetIndex( pFile
) );
970 /*************************************************************************
972 |* RscFileTab::Find()
975 |* Ersterstellung MM 16.05.91
976 |* Letzte Aenderung MM 16.05.91
978 *************************************************************************/
979 ULONG
RscFileTab :: Find( const ByteString
& rName
)
984 while( pFName
&& (pFName
->aFileName
!= rName
) )
988 return( GetIndex( pFName
) );
990 return( NOFILE_INDEX
);
993 /*************************************************************************
995 |* RscFileTab::FindDef()
998 |* Ersterstellung MM 30.10.91
999 |* Letzte Aenderung MM 01.11.91
1001 *************************************************************************/
1002 RscDefine
* RscFileTab::FindDef( const char * pName
){
1003 return aDefTree
.Search( pName
);
1006 /*************************************************************************
1008 |* RscFileTab::FindDef()
1011 |* Ersterstellung MM 30.10.91
1012 |* Letzte Aenderung MM 01.11.91
1014 *************************************************************************/
1015 RscDefine
* RscFileTab::FindDef( ULONG lFileKey
, const ByteString
& rName
)
1017 RscDefine
* pDef
= FindDef( rName
);
1020 //befindet sich das DEFINE in einer Include-Datei in der
1022 if( Depend( lFileKey
, pDef
->GetFileKey() ) )
1027 /*************************************************************************
1029 |* RscFileTab::Depend()
1032 |* Ersterstellung MM 08.11.91
1033 |* Letzte Aenderung MM 08.11.91
1035 *************************************************************************/
1036 BOOL
RscFileTab::Depend( ULONG lDepend
, ULONG lFree
){
1037 if( lDepend
== lFree
)
1040 RscFile
* pFile
= First();
1042 if( !pFile
->IsIncFile() ){
1043 if( !pFile
->Depend( lDepend
, lFree
) )
1052 /*************************************************************************
1054 |* RscFileTab::TestDef()
1057 |* Ersterstellung MM 14.01.92
1058 |* Letzte Aenderung MM 14.01.92
1060 *************************************************************************/
1061 BOOL
RscFileTab::TestDef( ULONG lFileKey
, ULONG lPos
,
1062 const RscDefine
* pDefDec
)
1064 if( lFileKey
== pDefDec
->GetFileKey() ){
1065 RscFile
* pFile
= GetFile( pDefDec
->GetFileKey() );
1066 if( pFile
&& (lPos
<= pFile
->aDefLst
.GetPos( (RscDefine
*)pDefDec
))
1067 && (lPos
!= LIST_APPEND
) )
1070 else if( !Depend( lFileKey
, pDefDec
->GetFileKey() ) )
1073 return TestDef( lFileKey
, lPos
, pDefDec
->pExp
);
1076 /*************************************************************************
1078 |* RscFileTab::TestDef()
1081 |* Ersterstellung MM 14.01.92
1082 |* Letzte Aenderung MM 14.01.92
1084 *************************************************************************/
1085 BOOL
RscFileTab::TestDef( ULONG lFileKey
, ULONG lPos
,
1086 const RscExpression
* pExpDec
)
1091 if( pExpDec
->aLeftExp
.IsExpression() )
1092 if( !TestDef( lFileKey
, lPos
, pExpDec
->aLeftExp
.aExp
.pExp
) )
1095 if( pExpDec
->aLeftExp
.IsDefinition() )
1096 if( !TestDef( lFileKey
, lPos
, pExpDec
->aLeftExp
.aExp
.pDef
) )
1099 if( pExpDec
->aRightExp
.IsExpression() )
1100 if( !TestDef( lFileKey
, lPos
, pExpDec
->aRightExp
.aExp
.pExp
) )
1103 if( pExpDec
->aRightExp
.IsDefinition() )
1104 if( !TestDef( lFileKey
, lPos
, pExpDec
->aRightExp
.aExp
.pDef
) )
1110 /*************************************************************************
1112 |* RscFileTab::NewDef()
1115 |* Ersterstellung MM 04.11.91
1116 |* Letzte Aenderung MM 04.11.91
1118 *************************************************************************/
1119 RscDefine
* RscFileTab::NewDef( ULONG lFileKey
, const ByteString
& rDefName
,
1120 INT32 lId
, ULONG lPos
)
1122 RscDefine
* pDef
= FindDef( rDefName
);
1125 RscFile
* pFile
= GetFile( lFileKey
);
1128 pDef
= pFile
->aDefLst
.New( lFileKey
, rDefName
, lId
, lPos
);
1129 aDefTree
.Insert( pDef
);
1138 /*************************************************************************
1140 |* RscFileTab::NewDef()
1143 |* Ersterstellung MM 04.11.91
1144 |* Letzte Aenderung MM 04.11.91
1146 *************************************************************************/
1147 RscDefine
* RscFileTab::NewDef( ULONG lFileKey
, const ByteString
& rDefName
,
1148 RscExpression
* pExp
, ULONG lPos
)
1150 RscDefine
* pDef
= FindDef( rDefName
);
1153 //Macros in den Expressions sind definiert ?
1154 if( TestDef( lFileKey
, lPos
, pExp
) ){
1155 RscFile
* pFile
= GetFile( lFileKey
);
1158 pDef
= pFile
->aDefLst
.New( lFileKey
, rDefName
, pExp
, lPos
);
1159 aDefTree
.Insert( pDef
);
1167 // pExp wird immer Eigentum und muss, wenn es nicht benoetigt wird
1174 /*************************************************************************
1176 |* RscFileTab::IsDefUsed()
1179 |* Ersterstellung MM 22.11.91
1180 |* Letzte Aenderung MM 22.11.91
1182 *************************************************************************/
1183 BOOL
RscFileTab::IsDefUsed( const ByteString
& rDefName
)
1185 RscDefine
* pDef
= FindDef( rDefName
);
1188 return( pDef
->GetRefCount() != 2 );
1193 /*************************************************************************
1195 |* RscFileTab::DeleteDef()
1198 |* Ersterstellung MM 11.11.91
1199 |* Letzte Aenderung MM 11.11.91
1201 *************************************************************************/
1202 void RscFileTab::DeleteDef( const ByteString
& rDefName
)
1204 RscDefine
* pDef
= FindDef( rDefName
);
1208 pFile
= GetFile( pDef
->GetFileKey() );
1210 aDefTree
.Remove( pDef
);
1211 pFile
->aDefLst
.Remove( pDef
);
1216 /*************************************************************************
1218 |* RscFileTab::ChangeDef()
1221 |* Ersterstellung MM 04.11.91
1222 |* Letzte Aenderung MM 11.11.91
1224 *************************************************************************/
1225 BOOL
RscFileTab::ChangeDef( const ByteString
& rDefName
, INT32 lId
)
1227 RscDefine
* pDef
= FindDef( rDefName
);
1230 pDef
->ChangeMacro( lId
);
1231 //alle Macros neu bewerten
1232 return aDefTree
.Evaluate();
1237 /*************************************************************************
1239 |* RscFileTab::ChangeDef()
1242 |* Ersterstellung MM 04.11.91
1243 |* Letzte Aenderung MM 11.11.91
1245 *************************************************************************/
1246 BOOL
RscFileTab::ChangeDef( const ByteString
& rDefName
,
1247 RscExpression
* pExp
)
1249 RscDefine
* pDef
= FindDef( rDefName
);
1254 pFile
= GetFile( pDef
->GetFileKey() );
1256 lPos
= pFile
->aDefLst
.GetPos( pDef
);
1257 //Macros in den Expressions sind definiert ?
1258 if( TestDef( pDef
->GetFileKey(), lPos
, pExp
) ){
1259 pDef
->ChangeMacro( pExp
);
1260 //alle Macros neu bewerten
1261 return aDefTree
.Evaluate();
1265 // pExp wird immer Eigentum und muss, wenn es nicht benoetigt wird
1272 /*************************************************************************
1274 |* RscFileTab::ChangeDefName()
1277 |* Ersterstellung MM 04.11.91
1278 |* Letzte Aenderung MM 04.11.91
1280 *************************************************************************/
1281 BOOL
RscFileTab::ChangeDefName( const ByteString
& rDefName
,
1282 const ByteString
& rNewName
)
1284 RscDefine
* pDef
= FindDef( rDefName
);
1288 // und neuer Name noch nicht bekannt ?
1289 if( !FindDef( pDef
->GetFileKey(), rNewName
) ){
1290 aDefTree
.Remove( pDef
);
1291 pDef
->SetName( rNewName
);
1292 aDefTree
.Insert( pDef
);
1300 /*************************************************************************
1302 |* RscFileTab::DeleteFileContext()
1305 |* Ersterstellung MM 09.12.91
1306 |* Letzte Aenderung MM 09.12.91
1308 *************************************************************************/
1309 void RscFileTab :: DeleteFileContext( ULONG lFileKey
){
1312 pFName
= GetFile( lFileKey
);
1316 pDef
= pFName
->aDefLst
.First();
1318 aDefTree
.Remove( pDef
);
1319 pDef
= pFName
->aDefLst
.Next();
1321 while( pFName
->aDefLst
.Remove( (ULONG
)0 ) ) ;
1325 /*************************************************************************
1327 |* RscFileTab::DeleteFile()
1330 |* Ersterstellung MM 16.05.91
1331 |* Letzte Aenderung MM 16.05.91
1333 *************************************************************************/
1334 void RscFileTab :: DeleteFile( ULONG lFileKey
){
1338 DeleteFileContext( lFileKey
);
1340 //Schleife ueber alle Abhaengigkeiten
1343 pFName
->RemoveDependFile( lFileKey
);
1347 pFName
= Remove( lFileKey
);
1352 /*************************************************************************
1354 |* RscFileTab::NewCodeFile()
1357 |* Ersterstellung MM 16.05.91
1358 |* Letzte Aenderung MM 16.05.91
1360 *************************************************************************/
1361 ULONG
RscFileTab :: NewCodeFile( const ByteString
& rName
)
1366 lKey
= Find( rName
);
1367 if( UNIQUEINDEX_ENTRY_NOTFOUND
== lKey
)
1369 pFName
= new RscFile();
1370 pFName
->aFileName
= rName
;
1371 pFName
->aPathName
= rName
;
1372 lKey
= Insert( pFName
);
1373 pFName
->InsertDependFile( lKey
, LIST_APPEND
);
1378 /*************************************************************************
1380 |* RscFileTab::NewIncFile()
1383 |* Ersterstellung MM 16.05.91
1384 |* Letzte Aenderung MM 16.05.91
1386 *************************************************************************/
1387 ULONG
RscFileTab :: NewIncFile( const ByteString
& rName
,
1388 const ByteString
& rPath
)
1393 lKey
= Find( rName
);
1394 if( UNIQUEINDEX_ENTRY_NOTFOUND
== lKey
)
1396 pFName
= new RscFile();
1397 pFName
->aFileName
= rName
;
1398 pFName
->aPathName
= rPath
;
1399 pFName
->SetIncFlag();
1400 lKey
= Insert( pFName
);
1401 pFName
->InsertDependFile( lKey
, LIST_APPEND
);