xref: /aoo41x/main/idl/source/objects/module.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_idl.hxx"
30 
31 #include <ctype.h>
32 #include <stdio.h>
33 
34 #include <attrib.hxx>
35 #include <module.hxx>
36 #include <globals.hxx>
37 #include <database.hxx>
38 #include <tools/fsys.hxx>
39 #include <tools/debug.hxx>
40 
41 /****************** SvMetaModule ******************************************/
42 SV_IMPL_META_FACTORY1( SvMetaModule, SvMetaExtern );
43 
44 /*************************************************************************
45 |*
46 |*    SvMetaModule::SvMetaModule()
47 |*
48 |*    Beschreibung
49 |*    Ersterstellung    MM 12.12.94
50 |*    Letzte Aenderung  MM 12.12.94
51 |*
52 *************************************************************************/
53 SvMetaModule::SvMetaModule()
54 #ifdef IDL_COMPILER
55     : bImported( sal_False )
56     , bIsModified( sal_False )
57 #endif
58 {
59 }
60 
61 #ifdef IDL_COMPILER
62 SvMetaModule::SvMetaModule( const String & rIdlFileName, sal_Bool bImp )
63     : aIdlFileName( rIdlFileName )
64     , bImported( bImp ), bIsModified( sal_False )
65 {
66 }
67 #endif
68 
69 /*************************************************************************
70 |*
71 |*    SvMetaModule::Load()
72 |*
73 |*    Beschreibung
74 |*    Ersterstellung    MM 12.12.94
75 |*    Letzte Aenderung  MM 12.12.94
76 |*
77 *************************************************************************/
78 #define MODULE_VER      0x0001
79 void SvMetaModule::Load( SvPersistStream & rStm )
80 {
81     bImported = sal_True; // immer importiert
82     SvMetaExtern::Load( rStm );
83 
84     sal_uInt16 nVer;
85 
86     rStm >> nVer; // Version
87     DBG_ASSERT( (nVer & ~IDL_WRITE_MASK) == MODULE_VER, "false version" );
88 
89     rStm >> aClassList;
90     rStm >> aTypeList;
91     rStm >> aAttrList;
92     // Browser
93     rStm.ReadByteString( aIdlFileName );
94     rStm.ReadByteString( aHelpFileName );
95     rStm.ReadByteString( aSlotIdFile );
96     rStm.ReadByteString( aModulePrefix );
97 
98     // Compiler Daten lesen
99     sal_uInt16 nCmpLen;
100     rStm >> nCmpLen;
101 #ifdef IDL_COMPILER
102     DBG_ASSERT( (nVer & IDL_WRITE_MASK) == IDL_WRITE_COMPILER,
103                 "no idl compiler format" );
104     rStm >> aBeginName;
105     rStm >> aEndName;
106     rStm >> aNextName;
107 #else
108     rStm->SeekRel( nCmpLen );
109 #endif
110 }
111 
112 /*************************************************************************
113 |*
114 |*    SvMetaModule::Save()
115 |*
116 |*    Beschreibung
117 |*    Ersterstellung    MM 12.12.94
118 |*    Letzte Aenderung  MM 12.12.94
119 |*
120 *************************************************************************/
121 void SvMetaModule::Save( SvPersistStream & rStm )
122 {
123     SvMetaExtern::Save( rStm );
124 
125     rStm << (sal_uInt16)(MODULE_VER | IDL_WRITE_COMPILER); // Version
126 
127     rStm << aClassList;
128     rStm << aTypeList;
129     rStm << aAttrList;
130     // Browser
131     rStm.WriteByteString( aIdlFileName );
132     rStm.WriteByteString( aHelpFileName );
133     rStm.WriteByteString( aSlotIdFile );
134     rStm.WriteByteString( aModulePrefix );
135 
136     // Compiler Daten schreiben
137     sal_uInt16 nCmpLen = 0;
138     sal_uLong nLenPos = rStm.Tell();
139     rStm << nCmpLen;
140 #ifdef IDL_COMPILER
141     rStm << aBeginName;
142     rStm << aEndName;
143     rStm << aNextName;
144     // Laenge der Compiler Daten schreiben
145     sal_uLong nPos = rStm.Tell();
146     rStm.Seek( nLenPos );
147     rStm << (sal_uInt16)( nPos - nLenPos - sizeof( sal_uInt16 ) );
148     rStm.Seek( nPos );
149 #endif
150 }
151 
152 /*************************************************************************
153 |*
154 |*    SvMetaModule::SetName()
155 |*
156 |*    Beschreibung
157 |*    Ersterstellung    MM 12.12.94
158 |*    Letzte Aenderung  MM 12.12.94
159 |*
160 *************************************************************************/
161 sal_Bool SvMetaModule::SetName( const ByteString & rName, SvIdlDataBase * pBase )
162 {
163     if( pBase )
164     {
165         if( pBase->GetModule( rName ) )
166             return sal_False;
167     }
168     return SvMetaExtern::SetName( rName );
169 }
170 
171 #ifdef IDL_COMPILER
172 /*************************************************************************
173 |*    SvMetaModule::GetNextName()
174 |*
175 |*    Beschreibung
176 *************************************************************************/
177 sal_Bool SvMetaModule::FillNextName( SvGlobalName * pName )
178 {
179     *pName = aNextName;
180 
181     if( aNextName < aEndName )
182     {
183         ++aNextName;
184         bIsModified = sal_True;
185         return sal_True;
186     }
187     return sal_False;
188 }
189 
190 /*************************************************************************
191 |*    SvMetaModule::ReadSvIdl()
192 |*
193 |*    Beschreibung
194 *************************************************************************/
195 void SvMetaModule::ReadAttributesSvIdl( SvIdlDataBase & rBase,
196                                         SvTokenStream & rInStm )
197 {
198     SvMetaExtern::ReadAttributesSvIdl( rBase, rInStm );
199 
200     aHelpFileName.ReadSvIdl( SvHash_HelpFile(), rInStm );
201     if( aSlotIdFile.ReadSvIdl( SvHash_SlotIdFile(), rInStm ) )
202     {
203 	    sal_uInt32 nTokPos = rInStm.Tell();
204         if( !rBase.ReadIdFile( String::CreateFromAscii( aSlotIdFile.GetBuffer() ) ) )
205         {
206             ByteString aStr = "cannot read file: ";
207             aStr += aSlotIdFile;
208             rBase.SetError( aStr, rInStm.GetToken() );
209             rBase.WriteError( rInStm );
210 
211             rInStm.Seek( nTokPos );
212         }
213     }
214     aTypeLibFile.ReadSvIdl( SvHash_TypeLibFile(), rInStm );
215 	aModulePrefix.ReadSvIdl( SvHash_ModulePrefix(), rInStm );
216 }
217 
218 /*************************************************************************
219 |*    SvMetaModule::WriteAttributesSvIdl()
220 |*
221 |*    Beschreibung
222 *************************************************************************/
223 void SvMetaModule::WriteAttributesSvIdl( SvIdlDataBase & rBase,
224                                          SvStream & rOutStm,
225                                          sal_uInt16 nTab )
226 {
227     SvMetaExtern::WriteAttributesSvIdl( rBase, rOutStm, nTab );
228     if( aTypeLibFile.Len() || aSlotIdFile.Len() || aTypeLibFile.Len() )
229 	{
230 	    if( aHelpFileName.Len() )
231 	    {
232 		    WriteTab( rOutStm, nTab );
233 	        aHelpFileName.WriteSvIdl( SvHash_HelpFile(), rOutStm, nTab +1 );
234 	        rOutStm << ';' << endl;
235 	    }
236 	    if( aSlotIdFile.Len() )
237 	    {
238 	        WriteTab( rOutStm, nTab );
239 	        aSlotIdFile.WriteSvIdl( SvHash_SlotIdFile(), rOutStm, nTab +1 );
240 	        rOutStm << ';' << endl;
241 	    }
242 	    if( aTypeLibFile.Len() )
243 	    {
244 	        WriteTab( rOutStm, nTab );
245 	        aTypeLibFile.WriteSvIdl( SvHash_TypeLibFile(), rOutStm, nTab +1 );
246 	        rOutStm << ';' << endl;
247 	    }
248 	}
249 }
250 
251 /*************************************************************************
252 |*    SvMetaModule::ReadContextSvIdl()
253 |*
254 |*    Beschreibung
255 *************************************************************************/
256 void SvMetaModule::ReadContextSvIdl( SvIdlDataBase & rBase,
257                                      SvTokenStream & rInStm )
258 {
259     sal_uInt32  nTokPos = rInStm.Tell();
260     if( rInStm.GetToken()->Is( SvHash_interface() )
261       || rInStm.GetToken()->Is( SvHash_shell() ) )
262     {
263         SvMetaClassRef aClass = new SvMetaClass();
264         if( aClass->ReadSvIdl( rBase, rInStm ) )
265         {
266             aClassList.Append( aClass );
267             // Global bekanntgeben
268             rBase.GetClassList().Append( aClass );
269         }
270     }
271     else if( rInStm.GetToken()->Is( SvHash_enum() ) )
272     {
273         SvMetaTypeEnumRef aEnum = new SvMetaTypeEnum();
274 
275         if( aEnum->ReadSvIdl( rBase, rInStm ) )
276         {
277             // Im Modul deklariert
278             aTypeList.Append( aEnum );
279             // Global bekanntgeben
280             rBase.GetTypeList().Append( aEnum );
281         }
282     }
283     else if( rInStm.GetToken()->Is( SvHash_item() )
284       || rInStm.GetToken()->Is( SvHash_struct() )
285       || rInStm.GetToken()->Is( SvHash_typedef() ) )
286     {
287         SvMetaTypeRef xItem = new SvMetaType();
288 
289         if( xItem->ReadSvIdl( rBase, rInStm ) )
290         {
291             // Im Modul deklariert
292             aTypeList.Append( xItem );
293             // Global bekanntgeben
294             rBase.GetTypeList().Append( xItem );
295         }
296     }
297     else if( rInStm.GetToken()->Is( SvHash_include() ) )
298     {
299         sal_Bool bOk = sal_False;
300         rInStm.GetToken_Next();
301         SvToken * pTok = rInStm.GetToken_Next();
302         if( pTok->IsString() )
303         {
304             DirEntry aFullName( String::CreateFromAscii( pTok->GetString().GetBuffer() ) );
305 			rBase.StartNewFile( aFullName.GetFull() );
306             if( aFullName.Find( rBase.GetPath() ) )
307             {
308                 SvTokenStream aTokStm( aFullName.GetFull() );
309                 if( SVSTREAM_OK == aTokStm.GetStream().GetError() )
310                 {
311 					// Fehler aus alter Datei retten
312 					SvIdlError aOldErr = rBase.GetError();
313 					// Fehler zuruecksetzen
314 					rBase.SetError( SvIdlError() );
315 
316                     sal_uInt32 nBeginPos = 0xFFFFFFFF; // kann mit Tell nicht vorkommen
317                     while( nBeginPos != aTokStm.Tell() )
318                     {
319                         nBeginPos = aTokStm.Tell();
320                         ReadContextSvIdl( rBase, aTokStm );
321                         aTokStm.ReadDelemiter();
322                     }
323                     bOk = aTokStm.GetToken()->IsEof();
324                     if( !bOk )
325                     {
326                         rBase.WriteError( aTokStm );
327                     }
328 					// Fehler aus alter Datei wieder herstellen
329 					rBase.SetError( aOldErr );
330                 }
331                 else
332                 {
333                     ByteString aStr = "cannot open file: ";
334                     aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 );
335                     rBase.SetError( aStr, pTok );
336                 }
337             }
338             else
339             {
340                 ByteString aStr = "cannot find file: ";
341                 aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 );
342                 rBase.SetError( aStr, pTok );
343             }
344         }
345         if( !bOk )
346             rInStm.Seek( nTokPos );
347     }
348     else
349     {
350         SvMetaSlotRef xSlot = new SvMetaSlot();
351 
352         if( xSlot->ReadSvIdl( rBase, rInStm ) )
353         {
354 	    	if( xSlot->Test( rBase, rInStm ) )
355 			{
356 	            // Im Modul deklariert
357 	            aAttrList.Append( xSlot );
358 	            // Global bekanntgeben
359 	            rBase.AppendAttr( xSlot );
360 			}
361         }
362     }
363 }
364 
365 /*************************************************************************
366 |*    SvMetaModule::WriteContextSvIdl()
367 |*
368 |*    Beschreibung
369 *************************************************************************/
370 void SvMetaModule::WriteContextSvIdl( SvIdlDataBase & rBase,
371                                       SvStream & rOutStm,
372                                       sal_uInt16 nTab )
373 {
374     SvMetaExtern::WriteContextSvIdl( rBase, rOutStm, nTab );
375 	sal_uLong n;
376     for( n = 0; n < aTypeList.Count(); n++ )
377     {
378         WriteTab( rOutStm, nTab );
379         aTypeList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab );
380     }
381 	rOutStm << endl;
382     for( n = 0; n < aAttrList.Count(); n++ )
383     {
384         WriteTab( rOutStm, nTab );
385         aAttrList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab );
386     }
387 	rOutStm << endl;
388     for( n = 0; n < aClassList.Count(); n++ )
389     {
390         WriteTab( rOutStm, nTab );
391         aClassList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab );
392     }
393 }
394 
395 /*************************************************************************
396 |*
397 |*    SvMetaModule::ReadSvIdl()
398 |*
399 |*    Beschreibung
400 |*
401 *************************************************************************/
402 sal_Bool SvMetaModule::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
403 {
404     bIsModified = sal_True; // bisher immer wenn Compiler laueft
405 
406     sal_uInt32  nTokPos = rInStm.Tell();
407     SvToken * pTok  = rInStm.GetToken_Next();
408     sal_Bool bOk        = sal_False;
409     bOk = pTok->Is( SvHash_module() );
410     if( bOk )
411     {
412         pTok = rInStm.GetToken_Next();
413         if( pTok->IsString() )
414              bOk = aBeginName.MakeId( String::CreateFromAscii( pTok->GetString().GetBuffer() ) );
415     }
416     rInStm.ReadDelemiter();
417     if( bOk )
418     {
419         pTok = rInStm.GetToken_Next();
420         if( pTok->IsString() )
421              bOk = aEndName.MakeId( String::CreateFromAscii( pTok->GetString().GetBuffer() ) );
422     }
423     rInStm.ReadDelemiter();
424     if( bOk )
425     {
426         aNextName = aBeginName;
427 
428         rBase.Push( this ); // auf den Context Stack
429 
430         if( ReadNameSvIdl( rBase, rInStm ) )
431         {
432             // Zeiger auf sich selbst setzen
433 			SetModule( rBase );
434             bOk = SvMetaName::ReadSvIdl( rBase, rInStm );
435         }
436         rBase.GetStack().Pop(); // und runter
437     }
438     if( !bOk )
439         rInStm.Seek( nTokPos );
440     return bOk;
441 }
442 
443 /*************************************************************************
444 |*
445 |*    SvMetaModule::WriteSvIdl()
446 |*
447 |*    Beschreibung
448 |*
449 *************************************************************************/
450 void SvMetaModule::WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm,
451                                sal_uInt16 nTab )
452 {
453     rOutStm << SvHash_module()->GetName().GetBuffer() << endl
454             << '\"';
455     rOutStm.WriteByteString( aBeginName.GetHexName() );
456     rOutStm << '\"' << endl << '\"';
457     rOutStm.WriteByteString( aEndName.GetHexName() );
458     rOutStm << '\"' << endl;
459     SvMetaExtern::WriteSvIdl( rBase, rOutStm, nTab );
460 }
461 
462 /*************************************************************************
463 |*    SvMetaModule::WriteSfx()
464 *************************************************************************/
465 void SvMetaModule::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm )
466 {
467     for( sal_uLong n = 0; n < aClassList.Count(); n++ )
468 	{
469         SvMetaClass * pClass = aClassList.GetObject( n );
470 		pClass->WriteSfx( rBase, rOutStm );
471 	}
472 }
473 
474 void SvMetaModule::WriteHelpIds( SvIdlDataBase & rBase, SvStream & rOutStm,
475 							Table* pTable )
476 {
477     for( sal_uLong n = 0; n < aClassList.Count(); n++ )
478 	{
479         SvMetaClass * pClass = aClassList.GetObject( n );
480 		pClass->WriteHelpIds( rBase, rOutStm, pTable );
481 	}
482 }
483 
484 /*************************************************************************
485 |*    SvMetaModule::WriteAttributes()
486 *************************************************************************/
487 void SvMetaModule::WriteAttributes( SvIdlDataBase & rBase,
488 									SvStream & rOutStm,
489                              		sal_uInt16 nTab,
490 		 						    WriteType nT, WriteAttribute nA )
491 {
492 	SvMetaExtern::WriteAttributes( rBase, rOutStm, nTab, nT, nA );
493     if( aHelpFileName.Len() )
494 	{
495 		WriteTab( rOutStm, nTab );
496 		rOutStm << "// class SvMetaModule" << endl;
497 		WriteTab( rOutStm, nTab );
498         rOutStm << "helpfile(\"" << aHelpFileName.GetBuffer() << "\");" << endl;
499 	}
500 }
501 
502 /*************************************************************************
503 |*    SvMetaModule::WriteSbx()
504 *************************************************************************/
505 /*
506 void SvMetaModule::WriteSbx( SvIdlDataBase & rBase, SvStream & rOutStm,
507 								SvNamePosList & rList )
508 {
509 	for( sal_uLong n = 0; n < aClassList.Count(); n++ )
510 	{
511 	    SvMetaClass * pClass = aClassList.GetObject( n );
512 		if( !pClass->IsShell() && pClass->GetAutomation() )
513 		{
514 			rList.Insert( new SvNamePos( pClass->GetUUId(), rOutStm.Tell() ),
515 						LIST_APPEND );
516 			SbxObjectRef xSbxObj = new SbxObject( pClass->GetName() );
517 			pClass->FillSbxObject( rBase, xSbxObj );
518 			xSbxObj->Store( rOutStm );
519 		}
520 	}
521 }
522  */
523 
524 /*************************************************************************
525 |*    SvMetaModule::Write()
526 *************************************************************************/
527 void SvMetaModule::Write( SvIdlDataBase & rBase, SvStream & rOutStm,
528                           	sal_uInt16 nTab,
529 		 					WriteType nT, WriteAttribute nA )
530 {
531 	switch ( nT )
532 	{
533 	case WRITE_ODL:
534 	{
535 	    if( aSlotIdFile.Len() )
536 		{
537 			WriteTab( rOutStm, nTab );
538             rOutStm << "#include \"" << aSlotIdFile.GetBuffer() << '"' << endl << endl;
539 	    }
540 		SvMetaExtern::Write( rBase, rOutStm, nTab, nT, nA );
541 		rOutStm << endl;
542 		WriteTab( rOutStm, nTab );
543         rOutStm << "library " << GetName().GetBuffer() << endl;
544 		WriteTab( rOutStm, nTab );
545 	    rOutStm << '{' << endl;
546 		WriteTab( rOutStm, nTab );
547 		rOutStm << "importlib(\"STDOLE.TLB\");" << endl;
548 
549 	/*
550 	    for( sal_uLong n = 0; n < aTypeList.Count(); n++ )
551 	    {
552 	        SvMetaType * pType = aTypeList.GetObject( n );
553 	        if( !pType ->Write( rBase, rOutStm, nTab +1, nT, nA ) )
554 	            return sal_False;
555 	    }
556 	*/
557 		/*
558 	    for( sal_uLong n = 0; n < rBase.GetModuleList().Count(); n++ )
559 	    {
560 	        SvMetaModule * pModule = rBase.GetModuleList().GetObject( n );
561 	        const SvMetaTypeMemberList &rTypeList = pModule->GetTypeList();
562 	        for( sal_uLong n = 0; n < rTypeList.Count(); n++ )
563 	        {
564 	            SvMetaType * pType = rTypeList.GetObject( n );
565 	            pType->Write( rBase, rOutStm, nTab +1, nT, nA );
566 	        }
567 	    }
568 		*/
569 
570 	    for( sal_uLong n = 0; n < aClassList.Count(); n++ )
571 	    {
572 	        SvMetaClass * pClass = aClassList.GetObject( n );
573 			if( !pClass->IsShell() && pClass->GetAutomation() )
574 			{
575 				WriteTab( rOutStm, nTab );
576 				WriteStars( rOutStm );
577 		        pClass->Write( rBase, rOutStm, nTab +1, nT, nA );
578 			    if( n +1 < aClassList.Count() )
579 					rOutStm << endl;
580 			}
581 	    }
582 
583 	    rOutStm << '}' << endl;
584 	}
585 	break;
586 	case WRITE_DOCU:
587 	{
588 		rOutStm << "SvIDL interface documentation" << endl << endl;
589         rOutStm << "<MODULE>" << endl << GetName().GetBuffer() << endl;
590 		WriteDescription( rOutStm );
591 		rOutStm	<< "</MODULE>" << endl << endl;
592 
593 		rOutStm << "<CLASSES>" << endl;
594 	    for( sal_uLong n = 0; n < aClassList.Count(); n++ )
595 	    {
596 	        SvMetaClass * pClass = aClassList.GetObject( n );
597 			if( !pClass->IsShell() )
598 			{
599                 rOutStm << pClass->GetName().GetBuffer();
600 				SvMetaClass* pSC = pClass->GetSuperClass();
601 			    if( pSC )
602                     rOutStm << " : " << pSC->GetName().GetBuffer();
603 
604 				// Importierte Klassen
605 				const SvClassElementMemberList& rClassList = pClass->GetClassList();
606 				if ( rClassList.Count() )
607 				{
608 					rOutStm << " ( ";
609 
610 					for( sal_uLong m=0; m<rClassList.Count(); m++ )
611 					{
612 						SvClassElement *pEle = rClassList.GetObject(m);
613 						SvMetaClass *pCl = pEle->GetClass();
614                         rOutStm << pCl->GetName().GetBuffer();
615 						if ( m+1 == rClassList.Count() )
616 							rOutStm << " )";
617 						else
618 							rOutStm << " , ";
619 					}
620 				}
621 
622 				rOutStm << endl;
623 			}
624 		}
625 		rOutStm << "</CLASSES>" << endl << endl;
626 		// kein Break!
627 	}
628 
629 	case WRITE_C_SOURCE:
630 	case WRITE_C_HEADER:
631 	{
632 	    for( sal_uLong n = 0; n < aClassList.Count(); n++ )
633 	    {
634 	        SvMetaClass * pClass = aClassList.GetObject( n );
635 			if( !pClass->IsShell() /* && pClass->GetAutomation() */ )
636 	        	pClass->Write( rBase, rOutStm, nTab, nT, nA );
637 	    }
638 	}
639 	break;
640 
641     default:
642         break;
643 	}
644 }
645 
646 /*************************************************************************
647 |*    SvMetaModule::WriteSrc()
648 *************************************************************************/
649 void SvMetaModule::WriteSrc( SvIdlDataBase & rBase, SvStream & rOutStm,
650                              Table * pTable )
651 {
652 //	rOutStm << "#pragma CHARSET IBMPC" << endl;
653     if( aSlotIdFile.Len() )
654         rOutStm << "//#include <" << aSlotIdFile.GetBuffer() << '>' << endl;
655     for( sal_uLong n = 0; n < aClassList.Count(); n++ )
656     {
657         aClassList.GetObject( n )->WriteSrc( rBase, rOutStm, pTable );
658     }
659 }
660 
661 /*************************************************************************
662 |*    SvMetaModule::WriteHxx()
663 *************************************************************************/
664 void SvMetaModule::WriteHxx( SvIdlDataBase & rBase, SvStream & rOutStm,
665                              sal_uInt16 nTab )
666 {
667     for( sal_uLong n = 0; n < aClassList.Count(); n++ )
668     {
669         SvMetaClass * pClass = aClassList.GetObject( n );
670         pClass->WriteHxx( rBase, rOutStm, nTab );
671     }
672 }
673 
674 /*************************************************************************
675 |*    SvMetaModule::WriteCxx()
676 *************************************************************************/
677 void SvMetaModule::WriteCxx( SvIdlDataBase & rBase, SvStream & rOutStm,
678                              sal_uInt16 nTab )
679 {
680     for( sal_uLong n = 0; n < aClassList.Count(); n++ )
681     {
682         SvMetaClass * pClass = aClassList.GetObject( n );
683         pClass->WriteCxx( rBase, rOutStm, nTab );
684     }
685 }
686 
687 #endif // IDL_COMPILER
688 
689