#include #include #include #include #include BOOL UUEncode::encode(String srcPathFileName,Block &lineStrings,BOOL initBlock) { Profile iniProfile; char readBuff[45]; int readCount; int byteCount; char *ptrBuff; String outLine; int ch; if(initBlock)lineStrings.remove(); if(srcPathFileName.isNull())return FALSE; FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); if(!readFile.isOkay())return FALSE; FileMap readMap(readFile); PureViewOfFile readView(readMap); iniProfile.makeFileName(srcPathFileName); ::sprintf(outLine,"begin %d %s\n",644,srcPathFileName); lineStrings.insert(&outLine); while(readCount=readView.read(readBuff,sizeof(readBuff))) { String lineString; lineString+=(char)chEncode(readCount); for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) { ch=*ptrBuff>>2; lineString+=(char)chEncode(ch); ch=(*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F; lineString+=(char)chEncode(ch); ch=(ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03; lineString+=(char)chEncode(ch); ch=ptrBuff[2]&0x3F; lineString+=(char)chEncode(ch); } lineString+='\n'; lineStrings.insert(&lineString); if(readCount!=45)break; } ch=('\0'?('\0'&0x3F)+' ':'`'); String lastLine; lastLine+=(char)ch; lastLine+='\n'; lineStrings.insert(&lastLine); lineStrings.insert(&String("end")); return TRUE; }