A MLE can not import or export text in bigger chunks than 64K. The below code shows how to solve this.
void Editor::impTxt(const char *filename)
{
FILE *ptr;
long dummy=-1;
long result;
ptr = fopen(filename,"rb");
fseek(ptr,0,SEEK_END);
unsigned long size = ftell(ptr);
fseek(ptr,0,SEEK_SET);
void *buf = malloc(0xF000);
mle->sendEvent(MLM_SETIMPORTEXPORT, buf, (unsigned long) 0xF000);
mle->sendEvent(MLM_FORMAT, MLFIE_CFTEXT, NULL);
while (feof(ptr) == 0) {
result = fread(buf, 1, 0xE000, ptr);
mle->sendEvent(MLM_IMPORT, &dummy, result);
}
fclose(ptr);
free(buf);
}
The same applies to export. If the MLE contains >64K text you have to export the text in chunks like this:
void Editor::saveFile(void)
{
IString filename;
IEventData rc;
IFileDialog::Settings settings;
settings.setTitle("Save textfile");
settings.setFileName(fname);
settings.setOKButtonText("Save file");
settings.setSaveAsDialog();
IFileDialog file(desktopWindow(),this,settings,
IFileDialog::defaultStyle()
| IFileDialog::selectableListbox);
if (file.pressedOK() == false)
return ;
filename = file.fileName();
if (filename.size() == 0)
return;
mle->exportToFile(filename);
void *buf = malloc(0xF000);
long ppt=0;
mle->sendEvent(MLM_SETIMPORTEXPORT, buf, (unsigned long) 0xF000);
mle->sendEvent(MLM_FORMAT, MLFIE_NOTRANS, NULL);
ofstream fil(filename);
do
{
long amount = 0xE000;
rc = mle->sendEvent(MLM_EXPORT, &ppt, &amount);
fil.write((char *) buf, rc.asUnsignedLong());
} while (rc.asUnsignedLong() > 0);
}
Credit: Ivar E. Hosteng