error feedback on Windows

see #540
This commit is contained in:
tildearrow 2022-06-28 23:42:34 -05:00
parent 3ea0ad1e0a
commit 57c0f8bdc7

View file

@ -241,6 +241,17 @@ void initParams() {
params.push_back(TAParam("W","warranty",false,pWarranty,"","view warranty disclaimer.")); params.push_back(TAParam("W","warranty",false,pWarranty,"","view warranty disclaimer."));
} }
#ifdef _WIN32
void reportError(String what) {
logE("%s",what);
MessageBox(NULL,what.c_str(),"Furnace",MB_OK|MB_ICONERROR);
}
#else
void reportError(String what) {
logE("%s",what);
}
#endif
// TODO: CoInitializeEx on Windows? // TODO: CoInitializeEx on Windows?
// TODO: add crash log // TODO: add crash log
int main(int argc, char** argv) { int main(int argc, char** argv) {
@ -281,7 +292,7 @@ int main(int argc, char** argv) {
val=argv[i+1]; val=argv[i+1];
i++; i++;
} else { } else {
logE("incomplete param %s.",arg.c_str()); reportError(fmt::sprintf("incomplete param %s.",arg.c_str()));
return 1; return 1;
} }
} }
@ -335,53 +346,54 @@ int main(int argc, char** argv) {
logI("loading module..."); logI("loading module...");
FILE* f=ps_fopen(fileName.c_str(),"rb"); FILE* f=ps_fopen(fileName.c_str(),"rb");
if (f==NULL) { if (f==NULL) {
perror("error"); reportError(fmt::sprintf("couldn't open file! (%s)",strerror(errno)));
return 1; return 1;
} }
if (fseek(f,0,SEEK_END)<0) { if (fseek(f,0,SEEK_END)<0) {
perror("size error"); reportError(fmt::sprintf("couldn't open file! (couldn't get file size: %s)",strerror(errno)));
fclose(f); fclose(f);
return 1; return 1;
} }
ssize_t len=ftell(f); ssize_t len=ftell(f);
if (len==(SIZE_MAX>>1)) { if (len==(SIZE_MAX>>1)) {
perror("could not get file length"); reportError(fmt::sprintf("couldn't open file! (couldn't get file length: %s)",strerror(errno)));
fclose(f); fclose(f);
return 1; return 1;
} }
if (len<1) { if (len<1) {
if (len==0) { if (len==0) {
printf("that file is empty!\n"); reportError("that file is empty!");
} else { } else {
perror("tell error"); reportError(fmt::sprintf("couldn't open file! (tell error: %s)",strerror(errno)));
} }
fclose(f); fclose(f);
return 1; return 1;
} }
unsigned char* file=new unsigned char[len]; unsigned char* file=new unsigned char[len];
if (fseek(f,0,SEEK_SET)<0) { if (fseek(f,0,SEEK_SET)<0) {
perror("size error"); reportError(fmt::sprintf("couldn't open file! (size error: %s)",strerror(errno)));
fclose(f); fclose(f);
delete[] file; delete[] file;
return 1; return 1;
} }
if (fread(file,1,(size_t)len,f)!=(size_t)len) { if (fread(file,1,(size_t)len,f)!=(size_t)len) {
perror("read error"); reportError(fmt::sprintf("couldn't open file! (read error: %s)",strerror(errno)));
fclose(f); fclose(f);
delete[] file; delete[] file;
return 1; return 1;
} }
fclose(f); fclose(f);
if (!e.load(file,(size_t)len)) { if (!e.load(file,(size_t)len)) {
logE("could not open file!"); reportError(fmt::sprintf("could not open file! (%s)",e.getLastError()));
return 1; return 1;
} }
} }
if (!e.init()) { if (!e.init()) {
logE("could not initialize engine!");
if (consoleMode) { if (consoleMode) {
reportError("could not initialize engine!");
return 1; return 1;
} else { } else {
logE("could not initialize engine!");
displayEngineFailError=true; displayEngineFailError=true;
} }
} }
@ -394,12 +406,12 @@ int main(int argc, char** argv) {
fwrite(w->getFinalBuf(),1,w->size(),f); fwrite(w->getFinalBuf(),1,w->size(),f);
fclose(f); fclose(f);
} else { } else {
logE("could not open file! %s",strerror(errno)); reportError(fmt::sprintf("could not open file! (%s)",e.getLastError()));
} }
w->finish(); w->finish();
delete w; delete w;
} else { } else {
logE("could not write VGM!"); reportError("could not write VGM!");
} }
} }
if (outName!="") { if (outName!="") {
@ -434,7 +446,10 @@ int main(int argc, char** argv) {
#ifdef HAVE_GUI #ifdef HAVE_GUI
g.bindEngine(&e); g.bindEngine(&e);
if (!g.init()) return 1; if (!g.init()) {
reportError("error while starting GUI!");
return 1;
}
if (displayEngineFailError) { if (displayEngineFailError) {
logE("displaying engine fail error."); logE("displaying engine fail error.");