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