1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_idl.hxx" 26 27 #include <stdlib.h> 28 #include <stdio.h> 29 #include <database.hxx> 30 #include <globals.hxx> 31 #include <command.hxx> 32 #include <tools/fsys.hxx> 33 #include <tools/string.hxx> 34 35 #define BR 0x8000 36 sal_Bool FileMove_Impl( const String & rFile1, const String & rFile2, sal_Bool bImmerVerschieben ) 37 { 38 //printf( "Move from %s to %s\n", rFile2.GetStr(), rFile1.GetStr() ); 39 sal_uLong nC1 = 0; 40 sal_uLong nC2 = 1; 41 if( !bImmerVerschieben ) 42 { 43 SvFileStream aOutStm1( rFile1, STREAM_STD_READ ); 44 SvFileStream aOutStm2( rFile2, STREAM_STD_READ ); 45 if( aOutStm1.GetError() == SVSTREAM_OK ) 46 { 47 sal_uInt8 * pBuf1 = new sal_uInt8[ BR ]; 48 sal_uInt8 * pBuf2 = new sal_uInt8[ BR ]; 49 nC1 = aOutStm1.Read( pBuf1, BR ); 50 nC2 = aOutStm2.Read( pBuf2, BR ); 51 while( nC1 == nC2 ) 52 { 53 if( memcmp( pBuf1, pBuf2, nC1 ) ) 54 { 55 nC1++; 56 break; 57 } 58 else 59 { 60 if( 0x8000 != nC1 ) 61 break; 62 nC1 = aOutStm1.Read( pBuf1, BR ); 63 nC2 = aOutStm2.Read( pBuf2, BR ); 64 } 65 } 66 delete[] pBuf1; 67 delete[] pBuf2; 68 } 69 } 70 DirEntry aF2( rFile2 ); 71 if( nC1 != nC2 ) 72 {// es hat sich etwas geaendert 73 DirEntry aF1( rFile1 ); 74 aF1.Kill(); 75 // Datei verschieben 76 if( aF2.MoveTo( aF1 ) ) 77 { 78 // Beide Dateien loeschen 79 aF1.Kill(); 80 aF2.Kill(); 81 return sal_False; 82 } 83 /* 84 else 85 { 86 printf( "%s to %s moved\n", 87 rFile2.GetStr(), rFile1.GetStr() ); 88 } 89 */ 90 return sal_True; 91 } 92 return 0 == aF2.Kill(); 93 } 94 95 /************************************************************************* 96 |* main() 97 |* 98 |* Beschreibung 99 *************************************************************************/ 100 #if defined( UNX ) || (defined( PM2 ) && defined( CSET )) || defined (WTC) || defined (MTW) || defined (__MINGW32__) || defined( OS2 ) 101 int main ( int argc, char ** argv) 102 { 103 #else 104 int cdecl main ( int argc, char ** argv) 105 { 106 #endif 107 108 /* 109 pStr = ::ResponseFile( &aCmdLine, argv, argc ); 110 if( pStr ) 111 { 112 printf( "Cannot open response file <%s>\n", pStr ); 113 return( 1 ); 114 }; 115 */ 116 117 String aTmpListFile; 118 String aTmpSlotMapFile; 119 String aTmpSfxItemFile; 120 String aTmpDataBaseFile; 121 String aTmpCallingFile; 122 String aTmpSrcFile; 123 String aTmpCxxFile; 124 String aTmpHxxFile; 125 String aTmpHelpIdFile; 126 String aTmpCSVFile; 127 String aTmpDocuFile; 128 129 SvCommand aCommand( argc, argv ); 130 131 if( aCommand.nVerbosity != 0 ) 132 printf( "StarView Interface Definition Language (IDL) Compiler 3.0\n" ); 133 134 Init(); 135 SvIdlWorkingBase * pDataBase = new SvIdlWorkingBase(aCommand); 136 137 int nExit = 0; 138 if( aCommand.aExportFile.Len() ) 139 { 140 DirEntry aDE( aCommand.aExportFile ); 141 pDataBase->SetExportFile( aDE.GetName() ); 142 } 143 144 if( ReadIdl( pDataBase, aCommand ) ) 145 { 146 if( nExit == 0 && aCommand.aDocuFile.Len() ) 147 { 148 DirEntry aDE( aCommand.aDocuFile ); 149 aDE.ToAbs(); 150 aTmpDocuFile = aDE.GetPath().TempName().GetFull(); 151 SvFileStream aOutStm( aTmpDocuFile, STREAM_READWRITE | STREAM_TRUNC ); 152 if( !pDataBase->WriteDocumentation( aOutStm ) ) 153 { 154 nExit = -1; 155 ByteString aStr = "cannot write documentation file: "; 156 aStr += ByteString( aCommand.aDocuFile, RTL_TEXTENCODING_UTF8 ); 157 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 158 } 159 } 160 if( nExit == 0 && aCommand.aListFile.Len() ) 161 { 162 DirEntry aDE( aCommand.aListFile ); 163 aDE.ToAbs(); 164 aTmpListFile = aDE.GetPath().TempName().GetFull(); 165 SvFileStream aOutStm( aTmpListFile, STREAM_READWRITE | STREAM_TRUNC ); 166 if( !pDataBase->WriteSvIdl( aOutStm ) ) 167 { 168 nExit = -1; 169 ByteString aStr = "cannot write list file: "; 170 aStr += ByteString( aCommand.aListFile, RTL_TEXTENCODING_UTF8 ); 171 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 172 } 173 } 174 if( nExit == 0 && aCommand.aSlotMapFile.Len() ) 175 { 176 DirEntry aDE( aCommand.aSlotMapFile ); 177 aDE.ToAbs(); 178 aTmpSlotMapFile = aDE.GetPath().TempName().GetFull(); 179 SvFileStream aOutStm( aTmpSlotMapFile, STREAM_READWRITE | STREAM_TRUNC ); 180 if( !pDataBase->WriteSfx( aOutStm ) ) 181 { 182 nExit = -1; 183 ByteString aStr = "cannot write slotmap file: "; 184 aStr += ByteString( aCommand.aSlotMapFile, RTL_TEXTENCODING_UTF8 ); 185 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 186 } 187 } 188 if( nExit == 0 && aCommand.aHelpIdFile.Len() ) 189 { 190 DirEntry aDE( aCommand.aHelpIdFile ); 191 aDE.ToAbs(); 192 aTmpHelpIdFile = aDE.GetPath().TempName().GetFull(); 193 SvFileStream aStm( aTmpHelpIdFile, STREAM_READWRITE | STREAM_TRUNC ); 194 if (!pDataBase->WriteHelpIds( aStm ) ) 195 { 196 nExit = -1; 197 ByteString aStr = "cannot write help ID file: "; 198 aStr += ByteString( aCommand.aHelpIdFile, RTL_TEXTENCODING_UTF8 ); 199 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 200 } 201 } 202 if( nExit == 0 && aCommand.aCSVFile.Len() ) 203 { 204 DirEntry aDE( aCommand.aCSVFile ); 205 aDE.ToAbs(); 206 aTmpCSVFile = aDE.GetPath().TempName().GetFull(); 207 SvFileStream aStm( aTmpCSVFile, STREAM_READWRITE | STREAM_TRUNC ); 208 if (!pDataBase->WriteCSV( aStm ) ) 209 { 210 nExit = -1; 211 ByteString aStr = "cannot write CSV file: "; 212 aStr += ByteString( aCommand.aCSVFile, RTL_TEXTENCODING_UTF8 ); 213 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 214 } 215 } 216 if( nExit == 0 && aCommand.aSfxItemFile.Len() ) 217 { 218 DirEntry aDE( aCommand.aSfxItemFile ); 219 aDE.ToAbs(); 220 aTmpSfxItemFile = aDE.GetPath().TempName().GetFull(); 221 SvFileStream aOutStm( aTmpSfxItemFile, STREAM_READWRITE | STREAM_TRUNC ); 222 if( !pDataBase->WriteSfxItem( aOutStm ) ) 223 { 224 nExit = -1; 225 ByteString aStr = "cannot write item file: "; 226 aStr += ByteString( aCommand.aSfxItemFile, RTL_TEXTENCODING_UTF8 ); 227 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 228 } 229 } 230 if( nExit == 0 && aCommand.aDataBaseFile.Len() ) 231 { 232 DirEntry aDE( aCommand.aDataBaseFile ); 233 aDE.ToAbs(); 234 aTmpDataBaseFile = aDE.GetPath().TempName().GetFull(); 235 SvFileStream aOutStm( aTmpDataBaseFile, STREAM_READWRITE | STREAM_TRUNC ); 236 pDataBase->Save( aOutStm, aCommand.nFlags ); 237 if( aOutStm.GetError() != SVSTREAM_OK ) 238 { 239 nExit = -1; 240 ByteString aStr = "cannot write database file: "; 241 aStr += ByteString( aCommand.aDataBaseFile, RTL_TEXTENCODING_UTF8 ); 242 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 243 } 244 } 245 /* 246 if( nExit == 0 && aCommand.aCallingFile.Len() ) 247 { 248 DirEntry aDE( aCommand.aCallingFile ); 249 aDE.ToAbs(); 250 aTmpCallingFile = aDE.GetPath().TempName().GetFull(); 251 SvFileStream aOutStm( aTmpCallingFile, STREAM_READWRITE | STREAM_TRUNC ); 252 pDataBase->WriteSbx( aOutStm ); 253 //pDataBase->Save( aOutStm, aCommand.nFlags | IDL_WRITE_CALLING ); 254 if( aOutStm.GetError() != SVSTREAM_OK ) 255 { 256 nExit = -1; 257 ByteString aStr = "cannot write calling file: "; 258 aStr += aCommand.aCallingFile; 259 fprintf( stderr, "%s\n", aStr.GetStr() ); 260 } 261 } 262 if( nExit == 0 && aCommand.aCxxFile.Len() ) 263 { 264 DirEntry aDE( aCommand.aCxxFile ); 265 aDE.ToAbs(); 266 aTmpCxxFile = aDE.GetPath().TempName().GetFull(); 267 SvFileStream aOutStm( aTmpCxxFile, STREAM_READWRITE | STREAM_TRUNC ); 268 269 aOutStm << "#pragma hdrstop" << endl; 270 aOutStm << "#include <"; 271 if( aCommand.aHxxFile.Len() ) 272 aOutStm << DirEntry(aCommand.aHxxFile).GetName().GetBuffer(); 273 else 274 { 275 DirEntry aDE( aCommand.aCxxFile ); 276 aDE.SetExtension( "hxx" ); 277 aOutStm << aDE.GetName().GetBuffer); 278 } 279 aOutStm << '>' << endl; 280 if( !pDataBase->WriteCxx( aOutStm ) ) 281 { 282 nExit = -1; 283 ByteString aStr = "cannot write cxx file: "; 284 aStr += ByteString( aCommand.aCxxFile, RTL_TEXTENCODING_UTF8 ); 285 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 286 } 287 } 288 if( nExit == 0 && aCommand.aHxxFile.Len() ) 289 { 290 DirEntry aDE( aCommand.aHxxFile ); 291 aDE.ToAbs(); 292 aTmpHxxFile = aDE.GetPath().TempName().GetFull(); 293 SvFileStream aOutStm( aTmpHxxFile, STREAM_READWRITE | STREAM_TRUNC ); 294 295 aOutStm << "#include <somisc.hxx>" << endl; 296 if( !pDataBase->WriteHxx( aOutStm ) ) 297 { 298 nExit = -1; 299 ByteString aStr = "cannot write cxx file: "; 300 aStr += ByteString( aCommand.aHxxFile, RTL_TEXTENCODING_UTF8 ); 301 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 302 } 303 } 304 */ 305 } 306 else 307 nExit = -1; 308 309 if( nExit == 0 ) 310 { 311 sal_Bool bErr = sal_False; 312 sal_Bool bDoMove = aCommand.aTargetFile.Len() == 0; 313 String aErrFile, aErrFile2; 314 if( !bErr && aCommand.aListFile.Len() ) 315 { 316 bErr |= !FileMove_Impl( aCommand.aListFile, aTmpListFile, bDoMove ); 317 if( bErr ) { 318 aErrFile = aCommand.aListFile; 319 aErrFile2 = aTmpListFile; 320 } 321 } 322 if( !bErr && aCommand.aSlotMapFile.Len() ) 323 { 324 bErr |= !FileMove_Impl( aCommand.aSlotMapFile, aTmpSlotMapFile, bDoMove ); 325 if( bErr ) { 326 aErrFile = aCommand.aSlotMapFile; 327 aErrFile2 = aTmpSlotMapFile; 328 } 329 } 330 if( !bErr && aCommand.aSfxItemFile.Len() ) 331 { 332 bErr |= !FileMove_Impl( aCommand.aSfxItemFile, aTmpSfxItemFile, bDoMove ); 333 if( bErr ) { 334 aErrFile = aCommand.aSfxItemFile; 335 aErrFile2 = aTmpSfxItemFile; 336 } 337 } 338 if( !bErr && aCommand.aDataBaseFile.Len() ) 339 { 340 bErr |= !FileMove_Impl( aCommand.aDataBaseFile, aTmpDataBaseFile, bDoMove ); 341 if( bErr ) { 342 aErrFile = aCommand.aDataBaseFile; 343 aErrFile2 = aTmpDataBaseFile; 344 } 345 } 346 if( !bErr && aCommand.aCallingFile.Len() ) 347 { 348 bErr |= !FileMove_Impl( aCommand.aCallingFile, aTmpCallingFile, bDoMove ); 349 if( bErr ) { 350 aErrFile = aCommand.aCallingFile; 351 aErrFile2 = aTmpCallingFile; 352 } 353 } 354 if( !bErr && aCommand.aCxxFile.Len() ) 355 { 356 bErr |= !FileMove_Impl( aCommand.aCxxFile, aTmpCxxFile, bDoMove ); 357 if( bErr ) { 358 aErrFile = aCommand.aCxxFile; 359 aErrFile2 = aTmpCxxFile; 360 } 361 } 362 if( !bErr && aCommand.aHxxFile.Len() ) 363 { 364 bErr |= !FileMove_Impl( aCommand.aHxxFile, aTmpHxxFile, bDoMove ); 365 if( bErr ) { 366 aErrFile = aCommand.aHxxFile; 367 aErrFile2 = aTmpHxxFile; 368 } 369 } 370 if( !bErr && aCommand.aHelpIdFile.Len() ) 371 { 372 bErr |= !FileMove_Impl( aCommand.aHelpIdFile, aTmpHelpIdFile, bDoMove ); 373 if( bErr ) { 374 aErrFile = aCommand.aHelpIdFile; 375 aErrFile2 = aTmpHelpIdFile; 376 } 377 } 378 if( !bErr && aCommand.aCSVFile.Len() ) 379 { 380 bErr |= !FileMove_Impl( aCommand.aCSVFile, aTmpCSVFile, bDoMove ); 381 if( bErr ) { 382 aErrFile = aCommand.aCSVFile; 383 aErrFile2 = aTmpCSVFile; 384 } 385 } 386 if( !bErr && aCommand.aDocuFile.Len() ) 387 { 388 bErr |= !FileMove_Impl( aCommand.aDocuFile, aTmpDocuFile, bDoMove ); 389 if( bErr ) { 390 aErrFile = aCommand.aDocuFile; 391 aErrFile2 = aTmpDocuFile; 392 } 393 } 394 395 if( bErr ) 396 { 397 nExit = -1; 398 ByteString aStr = "cannot move file from: "; 399 aStr += ByteString( aErrFile2, RTL_TEXTENCODING_UTF8 ); 400 aStr += "\n to file: "; 401 aStr += ByteString( aErrFile, RTL_TEXTENCODING_UTF8 ); 402 fprintf( stderr, "%s\n", aStr.GetBuffer() ); 403 } 404 else 405 { 406 if( aCommand.aTargetFile.Len() ) 407 { 408 #ifdef ICC 409 DirEntry aT(aCommand.aTargetFile); 410 aT.Kill(); 411 #endif 412 // Datei stempeln, da idl korrekt durchlaufen wurde 413 SvFileStream aOutStm( aCommand.aTargetFile, 414 STREAM_READWRITE | STREAM_TRUNC ); 415 } 416 } 417 } 418 419 if( nExit != 0 ) 420 { 421 if( aCommand.aListFile.Len() ) 422 DirEntry( aTmpListFile ).Kill(); 423 if( aCommand.aSlotMapFile.Len() ) 424 DirEntry( aTmpSlotMapFile ).Kill(); 425 if( aCommand.aSfxItemFile.Len() ) 426 DirEntry( aTmpSfxItemFile ).Kill(); 427 if( aCommand.aDataBaseFile.Len() ) 428 DirEntry( aTmpDataBaseFile ).Kill(); 429 if( aCommand.aCallingFile.Len() ) 430 DirEntry( aTmpCallingFile ).Kill(); 431 if( aCommand.aCxxFile.Len() ) 432 DirEntry( aTmpCxxFile ).Kill(); 433 if( aCommand.aHxxFile.Len() ) 434 DirEntry( aTmpHxxFile ).Kill(); 435 } 436 437 delete pDataBase; 438 DeInit(); 439 if( nExit != 0 ) 440 fprintf( stderr, "svidl terminated with errors\n" ); 441 return nExit; 442 } 443 444