Files
Work/uudecode/UUENCODE.CPP
2024-08-07 09:16:27 -04:00

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;
}