Fix NULL issues in programs-related code
This commit is contained in:
parent
3391651323
commit
ec52c3ef3d
2 changed files with 117 additions and 77 deletions
|
@ -21,6 +21,7 @@
|
|||
#include <cctype>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
@ -32,7 +33,7 @@
|
|||
#include "cdrom.h"
|
||||
#include "dos_system.h"
|
||||
#include "bios.h"
|
||||
#include "bios_disk.h"
|
||||
#include "bios_disk.h"
|
||||
#include "setup.h"
|
||||
#include "control.h"
|
||||
#include "inout.h"
|
||||
|
@ -97,7 +98,7 @@ public:
|
|||
/* remap drives */
|
||||
Drives[i_newz] = Drives[25];
|
||||
Drives[25] = 0;
|
||||
if (!first_shell) return; //Should not be possible
|
||||
if (!first_shell) return; //Should not be possible
|
||||
/* Update environment */
|
||||
std::string line = "";
|
||||
char ppp[2] = {newz_drive,0};
|
||||
|
@ -147,12 +148,12 @@ public:
|
|||
|
||||
/* Change 8.3 to 11.0 */
|
||||
char* dot = strchr(name,'.');
|
||||
if(dot && (dot - name == 8) ) {
|
||||
if(dot && (dot - name == 8) ) {
|
||||
name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0;
|
||||
}
|
||||
|
||||
root[1] = 0; //This way, the format string can be reused.
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name);
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name);
|
||||
}
|
||||
dos.dta(save_dta);
|
||||
}
|
||||
|
@ -172,7 +173,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
/* In secure mode don't allow people to change mount points.
|
||||
/* In secure mode don't allow people to change mount points.
|
||||
* Neither mount nor unmount */
|
||||
if(control->SecureMode()) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"));
|
||||
|
@ -186,7 +187,7 @@ public:
|
|||
WriteOut(UnmountHelper(umount[0]), toupper(umount[0]));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Check for moving Z: */
|
||||
/* Only allowing moving it once. It is merely a convenience added for the wine team */
|
||||
if (ZDRIVE_NUM == 25 && cmd->FindString("-z", newz,false)) {
|
||||
|
@ -239,7 +240,7 @@ public:
|
|||
}
|
||||
str_size=teststr;
|
||||
}
|
||||
|
||||
|
||||
cmd->FindString("-size",str_size,true);
|
||||
char number[21] = { 0 };const char * scan = str_size.c_str();
|
||||
Bitu index = 0;Bitu count = 0;
|
||||
|
@ -256,7 +257,7 @@ public:
|
|||
number[index] = 0; //always goes correct as index is max 20 at this point.
|
||||
sizes[count] = atoi(number);
|
||||
}
|
||||
|
||||
|
||||
// get the drive letter
|
||||
cmd->FindCommand(1,temp_line);
|
||||
if ((temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':'))) goto showusage;
|
||||
|
@ -352,8 +353,8 @@ public:
|
|||
} else {
|
||||
/* Give a warning when mount c:\ or the / */
|
||||
#if defined (WIN32)
|
||||
if( (temp_line == "c:\\") || (temp_line == "C:\\") ||
|
||||
(temp_line == "c:/") || (temp_line == "C:/") )
|
||||
if( (temp_line == "c:\\") || (temp_line == "C:\\") ||
|
||||
(temp_line == "c:/") || (temp_line == "C:/") )
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_WIN"));
|
||||
#else
|
||||
if(temp_line == "/") WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_OTHER"));
|
||||
|
@ -369,26 +370,20 @@ public:
|
|||
Bit8u o_error = 0;
|
||||
newdrive = new Overlay_Drive(base.c_str(),temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,o_error);
|
||||
//Erase old drive on success
|
||||
if (newdrive) {
|
||||
if (o_error) {
|
||||
if (o_error == 1) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_MIXED_BASE"));
|
||||
else if (o_error == 2) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE"));
|
||||
else WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_GENERIC_ERROR"));
|
||||
delete newdrive;
|
||||
return;
|
||||
}
|
||||
|
||||
//Copy current directory if not marked as deleted.
|
||||
if (newdrive->TestDir(ldp->curdir)) {
|
||||
strcpy(newdrive->curdir,ldp->curdir);
|
||||
}
|
||||
|
||||
delete Drives[drive - 'A'];
|
||||
Drives[drive - 'A'] = 0;
|
||||
} else {
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_GENERIC_ERROR"));
|
||||
if (o_error) {
|
||||
if (o_error == 1) WriteOut("No mixing of relative and absolute paths. Overlay failed.");
|
||||
else if (o_error == 2) WriteOut("overlay directory can not be the same as underlying file system.");
|
||||
else WriteOut("Something went wrong");
|
||||
delete newdrive;
|
||||
return;
|
||||
}
|
||||
//Copy current directory if not marked as deleted.
|
||||
if (newdrive->TestDir(ldp->curdir)) {
|
||||
strcpy(newdrive->curdir, ldp->curdir);
|
||||
}
|
||||
|
||||
delete Drives[drive - 'A'];
|
||||
Drives[drive - 'A'] = 0;
|
||||
} else {
|
||||
newdrive = new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid);
|
||||
}
|
||||
|
@ -397,7 +392,6 @@ public:
|
|||
WriteOut(MSG_Get("PROGRAM_MOUNT_ILL_TYPE"),type.c_str());
|
||||
return;
|
||||
}
|
||||
if (!newdrive) E_Exit("DOS:Can't create drive");
|
||||
Drives[drive - 'A'] = newdrive;
|
||||
/* Set the correct media byte in the table */
|
||||
mem_writeb(Real2Phys(dos.tables.mediaid) + (drive - 'A') * 9, newdrive->GetMediaByte());
|
||||
|
@ -408,7 +402,7 @@ public:
|
|||
/* For hard drives set the label to DRIVELETTER_Drive.
|
||||
* For floppy drives set the label to DRIVELETTER_Floppy.
|
||||
* This way every drive except cdroms should get a label.*/
|
||||
else if(type == "dir" || type == "overlay") {
|
||||
else if(type == "dir" || type == "overlay") {
|
||||
label = drive; label += "_DRIVE";
|
||||
newdrive->dirCache.SetLabel(label.c_str(),iscdrom,false);
|
||||
} else if(type == "floppy") {
|
||||
|
@ -421,7 +415,7 @@ showusage:
|
|||
#if defined (WIN32)
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_USAGE"),"d:\\dosprogs","d:\\dosprogs");
|
||||
#else
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_USAGE"),"~/dosprogs","~/dosprogs");
|
||||
WriteOut(MSG_Get("PROGRAM_MOUNT_USAGE"),"~/dosprogs","~/dosprogs");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
@ -480,7 +474,7 @@ public:
|
|||
if (!reg_bl) {
|
||||
WriteOut(MSG_Get("PROGRAM_MEM_EXTEND"),reg_dx);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Test for and show free EMS */
|
||||
Bit16u handle;
|
||||
char emm[9] = { 'E','M','M','X','X','X','X','0',0 };
|
||||
|
@ -503,7 +497,7 @@ extern Bit32u floppytype;
|
|||
|
||||
class BOOT : public Program {
|
||||
private:
|
||||
|
||||
|
||||
FILE *getFSFile_mounted(char const* filename, Bit32u *ksize, Bit32u *bsize, Bit8u *error) {
|
||||
//if return NULL then put in error the errormessage code if an error was requested
|
||||
bool tryload = (*error)?true:false;
|
||||
|
@ -515,7 +509,7 @@ private:
|
|||
localDrive* ldp=0;
|
||||
if (!DOS_MakeName(const_cast<char*>(filename),fullname,&drive)) return NULL;
|
||||
|
||||
try {
|
||||
try {
|
||||
ldp=dynamic_cast<localDrive*>(Drives[drive]);
|
||||
if(!ldp) return NULL;
|
||||
|
||||
|
@ -549,7 +543,7 @@ private:
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FILE *getFSFile(char const * filename, Bit32u *ksize, Bit32u *bsize,bool tryload=false) {
|
||||
Bit8u error = tryload?1:0;
|
||||
FILE* tmpfile = getFSFile_mounted(filename,ksize,bsize,&error);
|
||||
|
@ -598,11 +592,11 @@ private:
|
|||
}
|
||||
|
||||
public:
|
||||
|
||||
|
||||
void Run(void) {
|
||||
//Hack To allow long commandlines
|
||||
ChangeToLongCmd();
|
||||
/* In secure mode don't allow people to boot stuff.
|
||||
/* In secure mode don't allow people to boot stuff.
|
||||
* They might try to corrupt the data on it */
|
||||
if(control->SecureMode()) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"));
|
||||
|
@ -611,7 +605,7 @@ public:
|
|||
|
||||
FILE *usefile_1=NULL;
|
||||
FILE *usefile_2=NULL;
|
||||
Bitu i=0;
|
||||
Bitu i=0;
|
||||
Bit32u floppysize=0;
|
||||
Bit32u rombytesize_1=0;
|
||||
Bit32u rombytesize_2=0;
|
||||
|
@ -655,7 +649,7 @@ public:
|
|||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if ( i >= MAX_SWAPPABLE_DISKS ) {
|
||||
return; //TODO give a warning.
|
||||
}
|
||||
|
@ -697,8 +691,11 @@ public:
|
|||
if (cart_cmd!="") {
|
||||
/* read cartridge data into buffer */
|
||||
fseek(usefile_1,0x200L, SEEK_SET);
|
||||
fread(rombuf, 1, rombytesize_1-0x200, usefile_1);
|
||||
|
||||
if (fread(rombuf, 1, rombytesize_1-0x200, usefile_1) < rombytesize_1 - 0x200) {
|
||||
LOG_MSG("Failed to read sufficient cartridge data");
|
||||
fclose(usefile_1);
|
||||
return;
|
||||
}
|
||||
char cmdlist[1024];
|
||||
cmdlist[0]=0;
|
||||
Bitu ct=6;
|
||||
|
@ -766,7 +763,7 @@ public:
|
|||
FILE *tfile = getFSFile("system.rom", &sz1, &sz2, true);
|
||||
if (tfile!=NULL) {
|
||||
fseek(tfile, 0x3000L, SEEK_SET);
|
||||
Bit32u drd=(Bit32u)fread(rombuf, 1, 0xb000, tfile);
|
||||
Bit32u drd=(Bit32u) fread(rombuf, 1, 0xb000, tfile);
|
||||
if (drd==0xb000) {
|
||||
for(i=0;i<0xb000;i++) phys_writeb(0xf3000+i,rombuf[i]);
|
||||
}
|
||||
|
@ -775,12 +772,22 @@ public:
|
|||
|
||||
if (usefile_2!=NULL) {
|
||||
fseek(usefile_2, 0x0L, SEEK_SET);
|
||||
fread(rombuf, 1, 0x200, usefile_2);
|
||||
if (fread(rombuf, 1, 0x200, usefile_2) < 0x200) {
|
||||
LOG_MSG("Failed to read sufficient ROM data");
|
||||
fclose(usefile_2);
|
||||
return;
|
||||
}
|
||||
|
||||
PhysPt romseg_pt=host_readw(&rombuf[0x1ce])<<4;
|
||||
|
||||
/* read cartridge data into buffer */
|
||||
fseek(usefile_2, 0x200L, SEEK_SET);
|
||||
fread(rombuf, 1, rombytesize_2-0x200, usefile_2);
|
||||
if (fread(rombuf, 1, rombytesize_2-0x200, usefile_2) < rombytesize_2 - 0x200) {
|
||||
LOG_MSG("Failed to read sufficient ROM data");
|
||||
fclose(usefile_2);
|
||||
return;
|
||||
}
|
||||
|
||||
//fclose(usefile_2); //usefile_2 is in diskSwap structure which should be deleted to close the file
|
||||
|
||||
/* write cartridge data into ROM */
|
||||
|
@ -788,12 +795,21 @@ public:
|
|||
}
|
||||
|
||||
fseek(usefile_1, 0x0L, SEEK_SET);
|
||||
fread(rombuf, 1, 0x200, usefile_1);
|
||||
if (fread(rombuf, 1, 0x200, usefile_1) < 0x200) {
|
||||
LOG_MSG("Failed to read sufficient cartridge data");
|
||||
fclose(usefile_1);
|
||||
return;
|
||||
}
|
||||
|
||||
Bit16u romseg=host_readw(&rombuf[0x1ce]);
|
||||
|
||||
/* read cartridge data into buffer */
|
||||
fseek(usefile_1,0x200L, SEEK_SET);
|
||||
fread(rombuf, 1, rombytesize_1-0x200, usefile_1);
|
||||
if (fread(rombuf, 1, rombytesize_1-0x200, usefile_1) < rombytesize_1 - 0x200) {
|
||||
LOG_MSG("Failed to read sufficient cartridge data");
|
||||
fclose(usefile_1);
|
||||
return;
|
||||
}
|
||||
//fclose(usefile_1); //usefile_1 is in diskSwap structure which should be deleted to close the file
|
||||
|
||||
/* write cartridge data into ROM */
|
||||
|
@ -817,7 +833,7 @@ public:
|
|||
/* boot cartridge (int18) */
|
||||
SegSet16(cs,RealSeg(new_int18));
|
||||
reg_ip = RealOff(new_int18);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (cfound_at>0) {
|
||||
/* run cartridge setup */
|
||||
|
@ -982,7 +998,7 @@ public:
|
|||
memset(&cpu_regs, 0, sizeof(cpu_regs));
|
||||
memset(&Segs, 0, sizeof(Segs));
|
||||
|
||||
|
||||
|
||||
SegSet16(cs, 0xf000);
|
||||
reg_eip = 0xfff0;
|
||||
}
|
||||
|
@ -1005,7 +1021,7 @@ public:
|
|||
void Run(void);
|
||||
};
|
||||
|
||||
void LOADFIX::Run(void)
|
||||
void LOADFIX::Run(void)
|
||||
{
|
||||
Bit16u commandNr = 1;
|
||||
Bit16u kb = 64;
|
||||
|
@ -1047,15 +1063,15 @@ void LOADFIX::Run(void)
|
|||
break;
|
||||
strcat(args,temp_line.c_str());
|
||||
strcat(args," ");
|
||||
} while (ok);
|
||||
} while (ok);
|
||||
// Use shell to start program
|
||||
DOS_Shell shell;
|
||||
shell.Execute(filename,args);
|
||||
DOS_FreeMemory(segment);
|
||||
DOS_FreeMemory(segment);
|
||||
WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOC"),kb);
|
||||
}
|
||||
} else {
|
||||
WriteOut(MSG_Get("PROGRAM_LOADFIX_ERROR"),kb);
|
||||
WriteOut(MSG_Get("PROGRAM_LOADFIX_ERROR"),kb);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1070,12 +1086,12 @@ public:
|
|||
void Run(void);
|
||||
};
|
||||
|
||||
void RESCAN::Run(void)
|
||||
void RESCAN::Run(void)
|
||||
{
|
||||
bool all = false;
|
||||
|
||||
|
||||
Bit8u drive = DOS_GetDefaultDrive();
|
||||
|
||||
|
||||
if(cmd->FindCommand(1,temp_line)) {
|
||||
//-A -All /A /All
|
||||
if (temp_line.size() >= 2
|
||||
|
@ -1116,7 +1132,7 @@ public:
|
|||
WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_START"));
|
||||
#if (WIN32)
|
||||
WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_WINDOWS"));
|
||||
#else
|
||||
#else
|
||||
WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_OTHER"));
|
||||
#endif
|
||||
WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_END"));
|
||||
|
@ -1159,7 +1175,7 @@ public:
|
|||
void Run(void) {
|
||||
//Hack To allow long commandlines
|
||||
ChangeToLongCmd();
|
||||
/* In secure mode don't allow people to change imgmount points.
|
||||
/* In secure mode don't allow people to change imgmount points.
|
||||
* Neither mount nor unmount */
|
||||
if(control->SecureMode()) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"));
|
||||
|
@ -1191,15 +1207,15 @@ public:
|
|||
|
||||
Bit16u sizes[4] = {0};
|
||||
bool imgsizedetect = false;
|
||||
|
||||
|
||||
std::string str_size = "";
|
||||
Bit8u mediaid = 0xF8;
|
||||
|
||||
if (type == "floppy") {
|
||||
mediaid = 0xF0;
|
||||
mediaid = 0xF0;
|
||||
} else if (type == "iso") {
|
||||
//str_size="2048,1,65535,0"; // ignored, see drive_iso.cpp (AllocationInfo)
|
||||
mediaid = 0xF8;
|
||||
mediaid = 0xF8;
|
||||
fstype = "iso";
|
||||
}
|
||||
|
||||
|
@ -1251,10 +1267,10 @@ public:
|
|||
WriteOut(MSG_Get("PROGRAM_IMGMOUNT_FORMAT_UNSUPPORTED"),fstype.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// find all file parameters, assuming that all option parameters have been removed
|
||||
while(cmd->FindCommand((unsigned int)(paths.size() + 2), temp_line) && temp_line.size()) {
|
||||
|
||||
|
||||
struct stat test;
|
||||
if (stat(temp_line.c_str(),&test)) {
|
||||
//See if it works if the ~ are written out
|
||||
|
@ -1296,7 +1312,7 @@ public:
|
|||
}
|
||||
if (paths.size() == 0) {
|
||||
WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_FILE"));
|
||||
return;
|
||||
return;
|
||||
}
|
||||
if (paths.size() == 1)
|
||||
temp_line = paths[0];
|
||||
|
@ -1340,14 +1356,20 @@ public:
|
|||
std::vector<DOS_Drive*> imgDisks;
|
||||
std::vector<std::string>::size_type i;
|
||||
std::vector<DOS_Drive*>::size_type ct;
|
||||
|
||||
|
||||
for (i = 0; i < paths.size(); i++) {
|
||||
DOS_Drive* newDrive = new fatDrive(paths[i].c_str(),sizes[0],sizes[1],sizes[2],sizes[3],0);
|
||||
imgDisks.push_back(newDrive);
|
||||
if(!(dynamic_cast<fatDrive*>(newDrive))->created_successfully) {
|
||||
std::unique_ptr<fatDrive> newDrive(
|
||||
new fatDrive(paths[i].c_str(),sizes[0],sizes[1],sizes[2],sizes[3],0));
|
||||
|
||||
if (newDrive->created_successfully) {
|
||||
imgDisks.push_back(static_cast<DOS_Drive*>(newDrive.release()));
|
||||
} else {
|
||||
// Tear-down all prior drives when we hit a problem
|
||||
WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE"));
|
||||
for(ct = 0; ct < imgDisks.size(); ct++) {
|
||||
delete imgDisks[ct];
|
||||
for(auto pImgDisk : imgDisks) {
|
||||
if (pImgDisk) {
|
||||
delete pImgDisk;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -1359,9 +1381,9 @@ public:
|
|||
}
|
||||
DriveManager::InitializeDrive(drive - 'A');
|
||||
|
||||
// Set the correct media byte in the table
|
||||
// Set the correct media byte in the table
|
||||
mem_writeb(Real2Phys(dos.tables.mediaid) + (drive - 'A') * 9, mediaid);
|
||||
|
||||
|
||||
/* Command uses dta so set it to our internal dta */
|
||||
RealPt save_dta = dos.dta();
|
||||
dos.dta(dos.tables.tempdta);
|
||||
|
@ -1426,10 +1448,10 @@ public:
|
|||
DriveManager::AppendDisk(drive - 'A', isoDisks[ct]);
|
||||
}
|
||||
DriveManager::InitializeDrive(drive - 'A');
|
||||
|
||||
// Set the correct media byte in the table
|
||||
|
||||
// Set the correct media byte in the table
|
||||
mem_writeb(Real2Phys(dos.tables.mediaid) + (drive - 'A') * 9, mediaid);
|
||||
|
||||
|
||||
// Print status message (success)
|
||||
WriteOut(MSG_Get("MSCDEX_SUCCESS"));
|
||||
std::string tmp(paths[0]);
|
||||
|
|
|
@ -53,6 +53,11 @@ static std::vector<PROGRAMS_Main*> internal_progs;
|
|||
|
||||
void PROGRAMS_MakeFile(char const * const name,PROGRAMS_Main * main) {
|
||||
Bit8u * comdata=(Bit8u *)malloc(32); //MEM LEAK
|
||||
|
||||
if (comdata == nullptr) {
|
||||
E_Exit("Could not allocate memory for com-file data.");
|
||||
}
|
||||
|
||||
memcpy(comdata,&exe_block,sizeof(exe_block));
|
||||
comdata[CB_POS]=(Bit8u)(call_program&0xff);
|
||||
comdata[CB_POS+1]=(Bit8u)((call_program>>8)&0xff);
|
||||
|
@ -429,7 +434,7 @@ void CONFIG::Run(void) {
|
|||
// sanity check
|
||||
Section* sec = control->GetSection(pvars[0].c_str());
|
||||
Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str());
|
||||
if (sec != sec2) {
|
||||
if (!sec || !sec2 || sec != sec2) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR"));
|
||||
}
|
||||
break;
|
||||
|
@ -520,6 +525,10 @@ void CONFIG::Run(void) {
|
|||
case P_AUTOEXEC_CLEAR: {
|
||||
Section_line* sec = dynamic_cast <Section_line*>
|
||||
(control->GetSection(std::string("autoexec")));
|
||||
if (!sec) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"));
|
||||
return;
|
||||
}
|
||||
sec->data.clear();
|
||||
break;
|
||||
}
|
||||
|
@ -530,13 +539,22 @@ void CONFIG::Run(void) {
|
|||
}
|
||||
Section_line* sec = dynamic_cast <Section_line*>
|
||||
(control->GetSection(std::string("autoexec")));
|
||||
|
||||
for(Bitu i = 0; i < pvars.size(); i++) sec->HandleInputline(pvars[i]);
|
||||
if (!sec) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"));
|
||||
return;
|
||||
}
|
||||
for(Bitu i = 0; i < pvars.size(); i++) {
|
||||
sec->HandleInputline(pvars[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case P_AUTOEXEC_TYPE: {
|
||||
Section_line* sec = dynamic_cast <Section_line*>
|
||||
(control->GetSection(std::string("autoexec")));
|
||||
if (!sec) {
|
||||
WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"));
|
||||
return;
|
||||
}
|
||||
WriteOut("\n%s",sec->data.c_str());
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue