1*8a106958SDamjan Jovanovic /************************************************************** 2*8a106958SDamjan Jovanovic * 3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*8a106958SDamjan Jovanovic * distributed with this work for additional information 6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance 9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*8a106958SDamjan Jovanovic * 11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*8a106958SDamjan Jovanovic * 13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an 15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the 17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations 18*8a106958SDamjan Jovanovic * under the License. 19*8a106958SDamjan Jovanovic * 20*8a106958SDamjan Jovanovic *************************************************************/ 21*8a106958SDamjan Jovanovic 22*8a106958SDamjan Jovanovic 23*8a106958SDamjan Jovanovic 24*8a106958SDamjan Jovanovic #include <precomp.h> 25*8a106958SDamjan Jovanovic #include <cosv/ploc.hxx> 26*8a106958SDamjan Jovanovic 27*8a106958SDamjan Jovanovic // NOT FULLY DECLARED SERVICES 28*8a106958SDamjan Jovanovic #include <ctype.h> 29*8a106958SDamjan Jovanovic #include <cosv/bstream.hxx> 30*8a106958SDamjan Jovanovic #include <cosv/csv_ostream.hxx> 31*8a106958SDamjan Jovanovic 32*8a106958SDamjan Jovanovic 33*8a106958SDamjan Jovanovic namespace csv 34*8a106958SDamjan Jovanovic { 35*8a106958SDamjan Jovanovic namespace ploc 36*8a106958SDamjan Jovanovic { 37*8a106958SDamjan Jovanovic 38*8a106958SDamjan Jovanovic 39*8a106958SDamjan Jovanovic class UnixRootDir : public Root 40*8a106958SDamjan Jovanovic { 41*8a106958SDamjan Jovanovic public: 42*8a106958SDamjan Jovanovic UnixRootDir(); 43*8a106958SDamjan Jovanovic 44*8a106958SDamjan Jovanovic virtual void Get( 45*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 46*8a106958SDamjan Jovanovic virtual void Get( 47*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 48*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 49*8a106958SDamjan Jovanovic virtual const char * 50*8a106958SDamjan Jovanovic OwnDelimiter() const; 51*8a106958SDamjan Jovanovic }; 52*8a106958SDamjan Jovanovic 53*8a106958SDamjan Jovanovic class WorkingDir : public Root 54*8a106958SDamjan Jovanovic { 55*8a106958SDamjan Jovanovic public: 56*8a106958SDamjan Jovanovic WorkingDir( 57*8a106958SDamjan Jovanovic const char * i_sDelimiter = Delimiter() ); 58*8a106958SDamjan Jovanovic 59*8a106958SDamjan Jovanovic virtual void Get( 60*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 61*8a106958SDamjan Jovanovic virtual void Get( 62*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 63*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 64*8a106958SDamjan Jovanovic virtual const char * 65*8a106958SDamjan Jovanovic OwnDelimiter() const; 66*8a106958SDamjan Jovanovic private: 67*8a106958SDamjan Jovanovic String sOwnDelimiter; 68*8a106958SDamjan Jovanovic }; 69*8a106958SDamjan Jovanovic 70*8a106958SDamjan Jovanovic class WinRootDir : public Root 71*8a106958SDamjan Jovanovic { 72*8a106958SDamjan Jovanovic public: 73*8a106958SDamjan Jovanovic WinRootDir(); 74*8a106958SDamjan Jovanovic 75*8a106958SDamjan Jovanovic virtual void Get( 76*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 77*8a106958SDamjan Jovanovic virtual void Get( 78*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 79*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 80*8a106958SDamjan Jovanovic virtual const char * 81*8a106958SDamjan Jovanovic OwnDelimiter() const; 82*8a106958SDamjan Jovanovic }; 83*8a106958SDamjan Jovanovic 84*8a106958SDamjan Jovanovic class WinDrive : public Root 85*8a106958SDamjan Jovanovic { 86*8a106958SDamjan Jovanovic public: 87*8a106958SDamjan Jovanovic WinDrive( 88*8a106958SDamjan Jovanovic char i_cDrive ); 89*8a106958SDamjan Jovanovic virtual void Get( 90*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 91*8a106958SDamjan Jovanovic virtual void Get( 92*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 93*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 94*8a106958SDamjan Jovanovic virtual const char * 95*8a106958SDamjan Jovanovic OwnDelimiter() const; 96*8a106958SDamjan Jovanovic private: 97*8a106958SDamjan Jovanovic char cDrive; 98*8a106958SDamjan Jovanovic }; 99*8a106958SDamjan Jovanovic 100*8a106958SDamjan Jovanovic class WinDriveRootDir : public Root 101*8a106958SDamjan Jovanovic { 102*8a106958SDamjan Jovanovic public: 103*8a106958SDamjan Jovanovic WinDriveRootDir( 104*8a106958SDamjan Jovanovic const char * i_sPath ); 105*8a106958SDamjan Jovanovic WinDriveRootDir( 106*8a106958SDamjan Jovanovic char i_cDrive ); 107*8a106958SDamjan Jovanovic 108*8a106958SDamjan Jovanovic virtual void Get( 109*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 110*8a106958SDamjan Jovanovic virtual void Get( 111*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 112*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 113*8a106958SDamjan Jovanovic virtual const char * 114*8a106958SDamjan Jovanovic OwnDelimiter() const; 115*8a106958SDamjan Jovanovic private: 116*8a106958SDamjan Jovanovic char cDrive; 117*8a106958SDamjan Jovanovic }; 118*8a106958SDamjan Jovanovic 119*8a106958SDamjan Jovanovic class UNCRoot : public Root 120*8a106958SDamjan Jovanovic { 121*8a106958SDamjan Jovanovic public: 122*8a106958SDamjan Jovanovic UNCRoot( 123*8a106958SDamjan Jovanovic const char * i_sPath ); 124*8a106958SDamjan Jovanovic UNCRoot( 125*8a106958SDamjan Jovanovic const String & i_sComputer, 126*8a106958SDamjan Jovanovic const String & i_sEntryPt ); 127*8a106958SDamjan Jovanovic 128*8a106958SDamjan Jovanovic virtual void Get( 129*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 130*8a106958SDamjan Jovanovic virtual void Get( 131*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 132*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 133*8a106958SDamjan Jovanovic virtual const char * 134*8a106958SDamjan Jovanovic OwnDelimiter() const; 135*8a106958SDamjan Jovanovic private: 136*8a106958SDamjan Jovanovic String sComputer; 137*8a106958SDamjan Jovanovic String sEntryPt; 138*8a106958SDamjan Jovanovic }; 139*8a106958SDamjan Jovanovic 140*8a106958SDamjan Jovanovic class InvalidRoot : public Root 141*8a106958SDamjan Jovanovic { 142*8a106958SDamjan Jovanovic public: 143*8a106958SDamjan Jovanovic virtual void Get( 144*8a106958SDamjan Jovanovic ostream & o_rPath ) const; 145*8a106958SDamjan Jovanovic virtual void Get( 146*8a106958SDamjan Jovanovic bostream & o_rPath ) const; 147*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const; 148*8a106958SDamjan Jovanovic virtual const char * 149*8a106958SDamjan Jovanovic OwnDelimiter() const; 150*8a106958SDamjan Jovanovic }; 151*8a106958SDamjan Jovanovic 152*8a106958SDamjan Jovanovic 153*8a106958SDamjan Jovanovic DYN Root * 154*8a106958SDamjan Jovanovic Create_WindowsRoot( const char * & o_sPathAfterRoot, 155*8a106958SDamjan Jovanovic const char * i_sPath ) 156*8a106958SDamjan Jovanovic { 157*8a106958SDamjan Jovanovic if (i_sPath[0] == '\\') 158*8a106958SDamjan Jovanovic { 159*8a106958SDamjan Jovanovic if (i_sPath[1] == '\\') 160*8a106958SDamjan Jovanovic { // UNC path name 161*8a106958SDamjan Jovanovic o_sPathAfterRoot = strchr(i_sPath+2,'\\'); 162*8a106958SDamjan Jovanovic if (o_sPathAfterRoot != 0) 163*8a106958SDamjan Jovanovic { 164*8a106958SDamjan Jovanovic o_sPathAfterRoot = strchr(o_sPathAfterRoot+1,'\\'); 165*8a106958SDamjan Jovanovic if (o_sPathAfterRoot != 0) 166*8a106958SDamjan Jovanovic ++o_sPathAfterRoot; 167*8a106958SDamjan Jovanovic return new UNCRoot(i_sPath); 168*8a106958SDamjan Jovanovic } 169*8a106958SDamjan Jovanovic return new InvalidRoot; // Incomplete UNC root. 170*8a106958SDamjan Jovanovic } 171*8a106958SDamjan Jovanovic else 172*8a106958SDamjan Jovanovic { 173*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath+1; 174*8a106958SDamjan Jovanovic return new WinRootDir; 175*8a106958SDamjan Jovanovic } 176*8a106958SDamjan Jovanovic } 177*8a106958SDamjan Jovanovic else if (i_sPath[1] == ':') 178*8a106958SDamjan Jovanovic { 179*8a106958SDamjan Jovanovic if ( i_sPath[2] == '\\') 180*8a106958SDamjan Jovanovic { 181*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 3; 182*8a106958SDamjan Jovanovic return new WinDriveRootDir(i_sPath); 183*8a106958SDamjan Jovanovic } 184*8a106958SDamjan Jovanovic else 185*8a106958SDamjan Jovanovic { 186*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 2; 187*8a106958SDamjan Jovanovic return new WinDrive(*i_sPath); 188*8a106958SDamjan Jovanovic } 189*8a106958SDamjan Jovanovic } 190*8a106958SDamjan Jovanovic else 191*8a106958SDamjan Jovanovic { 192*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath; 193*8a106958SDamjan Jovanovic return new WorkingDir("\\"); 194*8a106958SDamjan Jovanovic } 195*8a106958SDamjan Jovanovic } 196*8a106958SDamjan Jovanovic 197*8a106958SDamjan Jovanovic DYN Root * 198*8a106958SDamjan Jovanovic Create_UnixRoot( const char * & o_sPathAfterRoot, 199*8a106958SDamjan Jovanovic const char * i_sPath ) 200*8a106958SDamjan Jovanovic { 201*8a106958SDamjan Jovanovic if (*i_sPath == '/') 202*8a106958SDamjan Jovanovic { 203*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 1; 204*8a106958SDamjan Jovanovic return new UnixRootDir; 205*8a106958SDamjan Jovanovic } 206*8a106958SDamjan Jovanovic else // 207*8a106958SDamjan Jovanovic { 208*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath; 209*8a106958SDamjan Jovanovic return new WorkingDir("/"); 210*8a106958SDamjan Jovanovic } // endif 211*8a106958SDamjan Jovanovic } 212*8a106958SDamjan Jovanovic 213*8a106958SDamjan Jovanovic 214*8a106958SDamjan Jovanovic //********************** Root ****************************// 215*8a106958SDamjan Jovanovic 216*8a106958SDamjan Jovanovic Root::~Root() 217*8a106958SDamjan Jovanovic { 218*8a106958SDamjan Jovanovic 219*8a106958SDamjan Jovanovic } 220*8a106958SDamjan Jovanovic 221*8a106958SDamjan Jovanovic DYN Root * 222*8a106958SDamjan Jovanovic Root::Create_( const char * & o_sPathAfterRoot, 223*8a106958SDamjan Jovanovic const char * i_sPath, 224*8a106958SDamjan Jovanovic const char * i_sDelimiter ) 225*8a106958SDamjan Jovanovic { 226*8a106958SDamjan Jovanovic if (i_sPath[0] == '.') 227*8a106958SDamjan Jovanovic { 228*8a106958SDamjan Jovanovic switch ( i_sPath[1] ) 229*8a106958SDamjan Jovanovic { 230*8a106958SDamjan Jovanovic case '\0': o_sPathAfterRoot = i_sPath + 1; 231*8a106958SDamjan Jovanovic break; 232*8a106958SDamjan Jovanovic case '\\': o_sPathAfterRoot = i_sPath + 2; 233*8a106958SDamjan Jovanovic break; 234*8a106958SDamjan Jovanovic case '/': o_sPathAfterRoot = i_sPath + 2; 235*8a106958SDamjan Jovanovic break; 236*8a106958SDamjan Jovanovic case '.': o_sPathAfterRoot = i_sPath; 237*8a106958SDamjan Jovanovic break; 238*8a106958SDamjan Jovanovic default: 239*8a106958SDamjan Jovanovic o_sPathAfterRoot = 0; 240*8a106958SDamjan Jovanovic return new InvalidRoot; 241*8a106958SDamjan Jovanovic } // end switch (i_sPath[1]) 242*8a106958SDamjan Jovanovic 243*8a106958SDamjan Jovanovic return new WorkingDir; 244*8a106958SDamjan Jovanovic } // end if (i_sPath[0] == '.') 245*8a106958SDamjan Jovanovic 246*8a106958SDamjan Jovanovic switch (*i_sDelimiter) 247*8a106958SDamjan Jovanovic { 248*8a106958SDamjan Jovanovic case '\\': return Create_WindowsRoot(o_sPathAfterRoot, i_sPath); 249*8a106958SDamjan Jovanovic case '/': return Create_UnixRoot(o_sPathAfterRoot, i_sPath); 250*8a106958SDamjan Jovanovic } 251*8a106958SDamjan Jovanovic 252*8a106958SDamjan Jovanovic o_sPathAfterRoot = 0; 253*8a106958SDamjan Jovanovic return new InvalidRoot; 254*8a106958SDamjan Jovanovic } 255*8a106958SDamjan Jovanovic 256*8a106958SDamjan Jovanovic 257*8a106958SDamjan Jovanovic 258*8a106958SDamjan Jovanovic //********************** UnixRootDir ****************************// 259*8a106958SDamjan Jovanovic 260*8a106958SDamjan Jovanovic 261*8a106958SDamjan Jovanovic UnixRootDir::UnixRootDir() 262*8a106958SDamjan Jovanovic { 263*8a106958SDamjan Jovanovic } 264*8a106958SDamjan Jovanovic 265*8a106958SDamjan Jovanovic void 266*8a106958SDamjan Jovanovic UnixRootDir::Get( ostream & o_rPath ) const 267*8a106958SDamjan Jovanovic { 268*8a106958SDamjan Jovanovic o_rPath << '/'; 269*8a106958SDamjan Jovanovic } 270*8a106958SDamjan Jovanovic 271*8a106958SDamjan Jovanovic void 272*8a106958SDamjan Jovanovic UnixRootDir::Get( bostream & o_rPath ) const 273*8a106958SDamjan Jovanovic { 274*8a106958SDamjan Jovanovic o_rPath.write( "/", 1 ); 275*8a106958SDamjan Jovanovic } 276*8a106958SDamjan Jovanovic 277*8a106958SDamjan Jovanovic DYN Root * 278*8a106958SDamjan Jovanovic UnixRootDir::CreateCopy() const 279*8a106958SDamjan Jovanovic { 280*8a106958SDamjan Jovanovic return new UnixRootDir; 281*8a106958SDamjan Jovanovic } 282*8a106958SDamjan Jovanovic 283*8a106958SDamjan Jovanovic const char * 284*8a106958SDamjan Jovanovic UnixRootDir::OwnDelimiter() const 285*8a106958SDamjan Jovanovic { 286*8a106958SDamjan Jovanovic return "/"; 287*8a106958SDamjan Jovanovic } 288*8a106958SDamjan Jovanovic 289*8a106958SDamjan Jovanovic 290*8a106958SDamjan Jovanovic //********************** WorkingDir ****************************// 291*8a106958SDamjan Jovanovic 292*8a106958SDamjan Jovanovic WorkingDir::WorkingDir( const char * i_sDelimiter ) 293*8a106958SDamjan Jovanovic : sOwnDelimiter(i_sDelimiter) 294*8a106958SDamjan Jovanovic { 295*8a106958SDamjan Jovanovic } 296*8a106958SDamjan Jovanovic 297*8a106958SDamjan Jovanovic void 298*8a106958SDamjan Jovanovic WorkingDir::Get( ostream & o_rPath ) const 299*8a106958SDamjan Jovanovic { 300*8a106958SDamjan Jovanovic o_rPath << '.' << sOwnDelimiter; 301*8a106958SDamjan Jovanovic } 302*8a106958SDamjan Jovanovic 303*8a106958SDamjan Jovanovic void 304*8a106958SDamjan Jovanovic WorkingDir::Get( bostream & o_rPath ) const 305*8a106958SDamjan Jovanovic { 306*8a106958SDamjan Jovanovic o_rPath.write( ".", 1 ); 307*8a106958SDamjan Jovanovic o_rPath.write( sOwnDelimiter ); 308*8a106958SDamjan Jovanovic } 309*8a106958SDamjan Jovanovic 310*8a106958SDamjan Jovanovic DYN Root * 311*8a106958SDamjan Jovanovic WorkingDir::CreateCopy() const 312*8a106958SDamjan Jovanovic { 313*8a106958SDamjan Jovanovic return new WorkingDir(sOwnDelimiter); 314*8a106958SDamjan Jovanovic } 315*8a106958SDamjan Jovanovic 316*8a106958SDamjan Jovanovic const char * 317*8a106958SDamjan Jovanovic WorkingDir::OwnDelimiter() const 318*8a106958SDamjan Jovanovic { 319*8a106958SDamjan Jovanovic return sOwnDelimiter; 320*8a106958SDamjan Jovanovic } 321*8a106958SDamjan Jovanovic 322*8a106958SDamjan Jovanovic 323*8a106958SDamjan Jovanovic //********************** WinRootDir ****************************// 324*8a106958SDamjan Jovanovic 325*8a106958SDamjan Jovanovic WinRootDir::WinRootDir() 326*8a106958SDamjan Jovanovic { 327*8a106958SDamjan Jovanovic } 328*8a106958SDamjan Jovanovic 329*8a106958SDamjan Jovanovic void 330*8a106958SDamjan Jovanovic WinRootDir::Get( ostream & o_rPath ) const 331*8a106958SDamjan Jovanovic { 332*8a106958SDamjan Jovanovic o_rPath << '\\'; 333*8a106958SDamjan Jovanovic } 334*8a106958SDamjan Jovanovic 335*8a106958SDamjan Jovanovic void 336*8a106958SDamjan Jovanovic WinRootDir::Get( bostream & o_rPath ) const 337*8a106958SDamjan Jovanovic { 338*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 ); 339*8a106958SDamjan Jovanovic } 340*8a106958SDamjan Jovanovic 341*8a106958SDamjan Jovanovic DYN Root * 342*8a106958SDamjan Jovanovic WinRootDir::CreateCopy() const 343*8a106958SDamjan Jovanovic { 344*8a106958SDamjan Jovanovic return new WinRootDir; 345*8a106958SDamjan Jovanovic } 346*8a106958SDamjan Jovanovic 347*8a106958SDamjan Jovanovic const char * 348*8a106958SDamjan Jovanovic WinRootDir::OwnDelimiter() const 349*8a106958SDamjan Jovanovic { 350*8a106958SDamjan Jovanovic return "\\"; 351*8a106958SDamjan Jovanovic } 352*8a106958SDamjan Jovanovic 353*8a106958SDamjan Jovanovic 354*8a106958SDamjan Jovanovic //********************** WinDrive ****************************// 355*8a106958SDamjan Jovanovic 356*8a106958SDamjan Jovanovic WinDrive::WinDrive( char i_cDrive ) 357*8a106958SDamjan Jovanovic : cDrive(static_cast< char >(toupper(i_cDrive))) 358*8a106958SDamjan Jovanovic { 359*8a106958SDamjan Jovanovic } 360*8a106958SDamjan Jovanovic 361*8a106958SDamjan Jovanovic void 362*8a106958SDamjan Jovanovic WinDrive::Get( ostream & o_rPath ) const 363*8a106958SDamjan Jovanovic { 364*8a106958SDamjan Jovanovic o_rPath << cDrive << ':'; 365*8a106958SDamjan Jovanovic } 366*8a106958SDamjan Jovanovic 367*8a106958SDamjan Jovanovic void 368*8a106958SDamjan Jovanovic WinDrive::Get( bostream & o_rPath ) const 369*8a106958SDamjan Jovanovic { 370*8a106958SDamjan Jovanovic static char buf_[3] = " :"; 371*8a106958SDamjan Jovanovic buf_[0] = cDrive; 372*8a106958SDamjan Jovanovic o_rPath.write( &buf_[0], 2 ); 373*8a106958SDamjan Jovanovic } 374*8a106958SDamjan Jovanovic 375*8a106958SDamjan Jovanovic DYN Root * 376*8a106958SDamjan Jovanovic WinDrive::CreateCopy() const 377*8a106958SDamjan Jovanovic { 378*8a106958SDamjan Jovanovic return new WinDrive(cDrive); 379*8a106958SDamjan Jovanovic } 380*8a106958SDamjan Jovanovic 381*8a106958SDamjan Jovanovic const char * 382*8a106958SDamjan Jovanovic WinDrive::OwnDelimiter() const 383*8a106958SDamjan Jovanovic { 384*8a106958SDamjan Jovanovic return "\\"; 385*8a106958SDamjan Jovanovic } 386*8a106958SDamjan Jovanovic 387*8a106958SDamjan Jovanovic 388*8a106958SDamjan Jovanovic //********************** WinDriveRootDir ****************************// 389*8a106958SDamjan Jovanovic 390*8a106958SDamjan Jovanovic WinDriveRootDir::WinDriveRootDir( const char * i_sPath ) 391*8a106958SDamjan Jovanovic : cDrive(static_cast< char >(toupper(*i_sPath))) 392*8a106958SDamjan Jovanovic { 393*8a106958SDamjan Jovanovic if ( 'A' > cDrive OR 'Z' < cDrive ) 394*8a106958SDamjan Jovanovic cDrive = 0; 395*8a106958SDamjan Jovanovic } 396*8a106958SDamjan Jovanovic 397*8a106958SDamjan Jovanovic WinDriveRootDir::WinDriveRootDir( char i_cDrive ) 398*8a106958SDamjan Jovanovic : cDrive(i_cDrive) 399*8a106958SDamjan Jovanovic { 400*8a106958SDamjan Jovanovic } 401*8a106958SDamjan Jovanovic 402*8a106958SDamjan Jovanovic void 403*8a106958SDamjan Jovanovic WinDriveRootDir::Get( ostream & o_rPath ) const 404*8a106958SDamjan Jovanovic { 405*8a106958SDamjan Jovanovic o_rPath << cDrive << ":\\"; 406*8a106958SDamjan Jovanovic } 407*8a106958SDamjan Jovanovic 408*8a106958SDamjan Jovanovic void 409*8a106958SDamjan Jovanovic WinDriveRootDir::Get( bostream & o_rPath ) const 410*8a106958SDamjan Jovanovic { 411*8a106958SDamjan Jovanovic static char buf_[4] = " :\\"; 412*8a106958SDamjan Jovanovic buf_[0] = cDrive; 413*8a106958SDamjan Jovanovic o_rPath.write( &buf_[0], 3 ); 414*8a106958SDamjan Jovanovic } 415*8a106958SDamjan Jovanovic 416*8a106958SDamjan Jovanovic DYN Root * 417*8a106958SDamjan Jovanovic WinDriveRootDir::CreateCopy() const 418*8a106958SDamjan Jovanovic { 419*8a106958SDamjan Jovanovic return new WinDriveRootDir(cDrive); 420*8a106958SDamjan Jovanovic } 421*8a106958SDamjan Jovanovic 422*8a106958SDamjan Jovanovic const char * 423*8a106958SDamjan Jovanovic WinDriveRootDir::OwnDelimiter() const 424*8a106958SDamjan Jovanovic { 425*8a106958SDamjan Jovanovic return "\\"; 426*8a106958SDamjan Jovanovic } 427*8a106958SDamjan Jovanovic 428*8a106958SDamjan Jovanovic 429*8a106958SDamjan Jovanovic //********************** UNCRoot ****************************// 430*8a106958SDamjan Jovanovic 431*8a106958SDamjan Jovanovic UNCRoot::UNCRoot( const char * i_sPath ) 432*8a106958SDamjan Jovanovic // : // sComputer, 433*8a106958SDamjan Jovanovic // sEntryPt 434*8a106958SDamjan Jovanovic { 435*8a106958SDamjan Jovanovic const char * pRestPath = i_sPath + 2; 436*8a106958SDamjan Jovanovic const char * pDirEnd = strchr(pRestPath, '\\'); 437*8a106958SDamjan Jovanovic csv_assert(pDirEnd != 0); 438*8a106958SDamjan Jovanovic 439*8a106958SDamjan Jovanovic sComputer = String(pRestPath, pDirEnd - pRestPath); 440*8a106958SDamjan Jovanovic pRestPath = pDirEnd+1; 441*8a106958SDamjan Jovanovic pDirEnd = strchr(pRestPath, '\\'); 442*8a106958SDamjan Jovanovic 443*8a106958SDamjan Jovanovic if ( pDirEnd != 0 ) 444*8a106958SDamjan Jovanovic { 445*8a106958SDamjan Jovanovic sEntryPt = String(pRestPath, pDirEnd - pRestPath); 446*8a106958SDamjan Jovanovic } 447*8a106958SDamjan Jovanovic else 448*8a106958SDamjan Jovanovic { 449*8a106958SDamjan Jovanovic sEntryPt = pRestPath; 450*8a106958SDamjan Jovanovic } 451*8a106958SDamjan Jovanovic } 452*8a106958SDamjan Jovanovic 453*8a106958SDamjan Jovanovic UNCRoot::UNCRoot( const String & i_sComputer, 454*8a106958SDamjan Jovanovic const String & i_sEntryPt ) 455*8a106958SDamjan Jovanovic : sComputer(i_sComputer), 456*8a106958SDamjan Jovanovic sEntryPt(i_sEntryPt) 457*8a106958SDamjan Jovanovic { 458*8a106958SDamjan Jovanovic } 459*8a106958SDamjan Jovanovic 460*8a106958SDamjan Jovanovic void 461*8a106958SDamjan Jovanovic UNCRoot::Get( ostream & o_rPath ) const 462*8a106958SDamjan Jovanovic { 463*8a106958SDamjan Jovanovic o_rPath << "\\\\" << sComputer << '\\' << sEntryPt << "\\"; 464*8a106958SDamjan Jovanovic } 465*8a106958SDamjan Jovanovic 466*8a106958SDamjan Jovanovic void 467*8a106958SDamjan Jovanovic UNCRoot::Get( bostream & o_rPath ) const 468*8a106958SDamjan Jovanovic { 469*8a106958SDamjan Jovanovic o_rPath.write( "\\\\", 2 ); 470*8a106958SDamjan Jovanovic o_rPath.write( sComputer ); 471*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 ); 472*8a106958SDamjan Jovanovic o_rPath.write( sEntryPt ); 473*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 ); 474*8a106958SDamjan Jovanovic } 475*8a106958SDamjan Jovanovic 476*8a106958SDamjan Jovanovic DYN Root * 477*8a106958SDamjan Jovanovic UNCRoot::CreateCopy() const 478*8a106958SDamjan Jovanovic { 479*8a106958SDamjan Jovanovic return new UNCRoot(sComputer,sEntryPt); 480*8a106958SDamjan Jovanovic } 481*8a106958SDamjan Jovanovic 482*8a106958SDamjan Jovanovic const char * 483*8a106958SDamjan Jovanovic UNCRoot::OwnDelimiter() const 484*8a106958SDamjan Jovanovic { 485*8a106958SDamjan Jovanovic return "\\"; 486*8a106958SDamjan Jovanovic } 487*8a106958SDamjan Jovanovic 488*8a106958SDamjan Jovanovic 489*8a106958SDamjan Jovanovic 490*8a106958SDamjan Jovanovic //********************** InvalidRoot ****************************// 491*8a106958SDamjan Jovanovic 492*8a106958SDamjan Jovanovic void 493*8a106958SDamjan Jovanovic InvalidRoot::Get( ostream & ) const 494*8a106958SDamjan Jovanovic { 495*8a106958SDamjan Jovanovic } 496*8a106958SDamjan Jovanovic 497*8a106958SDamjan Jovanovic void 498*8a106958SDamjan Jovanovic InvalidRoot::Get( bostream & ) const 499*8a106958SDamjan Jovanovic { 500*8a106958SDamjan Jovanovic } 501*8a106958SDamjan Jovanovic 502*8a106958SDamjan Jovanovic DYN Root * 503*8a106958SDamjan Jovanovic InvalidRoot::CreateCopy() const 504*8a106958SDamjan Jovanovic { 505*8a106958SDamjan Jovanovic return new InvalidRoot; 506*8a106958SDamjan Jovanovic } 507*8a106958SDamjan Jovanovic 508*8a106958SDamjan Jovanovic const char * 509*8a106958SDamjan Jovanovic InvalidRoot::OwnDelimiter() const 510*8a106958SDamjan Jovanovic { 511*8a106958SDamjan Jovanovic return 0; 512*8a106958SDamjan Jovanovic } 513*8a106958SDamjan Jovanovic 514*8a106958SDamjan Jovanovic 515*8a106958SDamjan Jovanovic 516*8a106958SDamjan Jovanovic 517*8a106958SDamjan Jovanovic } // namespace ploc 518*8a106958SDamjan Jovanovic } // namespace csv 519*8a106958SDamjan Jovanovic 520*8a106958SDamjan Jovanovic 521*8a106958SDamjan Jovanovic 522