54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
#include <uudecode/uuencode.hpp>
|
|
#include <common/openfile.hpp>
|
|
#include <common/pview.hpp>
|
|
#include <common/filemap.hpp>
|
|
#include <common/profile.hpp>
|
|
|
|
BOOL UUEncode::encode(String srcPathFileName,Block<String> &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;
|
|
}
|
|
|