diff options
Diffstat (limited to 'rhtvision/examples/dlgdsn/strmoper.cc')
-rw-r--r-- | rhtvision/examples/dlgdsn/strmoper.cc | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/rhtvision/examples/dlgdsn/strmoper.cc b/rhtvision/examples/dlgdsn/strmoper.cc new file mode 100644 index 0000000..1cc36e2 --- /dev/null +++ b/rhtvision/examples/dlgdsn/strmoper.cc @@ -0,0 +1,108 @@ +/*************************************************************************** + + strmoper.cc - Stream operations + --------------------------------------------------------------------- + May, 2000 + Copyright (C) 2000 by Warlei Alves + walves@usa.net + + Modified by Salvador E. Tropea to compile without warnings. + For gcc 2.95.x and then 3.0.1. + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#define Uses_stdio +#define Uses_string +// didn't find std::ios (AP) +#define Uses_iostream + +#define Uses_MsgBox +#define Uses_TFileDialog +#define Uses_TProgram +#define Uses_TApplication +#define Uses_TDeskTop +#define Uses_ofpstream +#define Uses_ifpstream + +#include <tv.h> +#include "strmoper.h" + +UsingNamespaceStd + +bool fileExists(const char * FileName) +{ + FILE * test; + + bool rst = ((test = fopen(FileName, "r")) != 0); + if (rst) fclose(test); + return rst; +} + +// SET: This function was originaly declared as const char * and returned a +// pointer to a temporal variable in the stack. Nicola Asuni found it and +// suggested a partial workaround. I then modified the function to return +// a char * using newStr to allocate it. I also modified all the points +// where this function is used (at least all that I found) to release the +// returned value. +char * getFileName(const char * aTitle, const char * ext, int Mode) +{ + TFileDialog *d = 0; + int cmd = cmCancel; + + if (Mode == 0) + d = (TFileDialog *) TProgram::application->validView( new + TFileDialog(ext, aTitle, _("File"), fdOpenButton, 100) ); + else + d = (TFileDialog *) TProgram::application->validView( new + TFileDialog(ext, aTitle, _("File"), fdOKButton, 100) ); + if (d != 0) cmd = TProgram::deskTop->execView( d ); + if ( cmd != cmCancel ) + { + char fileName[PATH_MAX]; + d->getFileName( fileName ); + delete d; + return newStr( fileName ); + } + else return NULL; +} + + +ifpstream * openFile(const char * FileName, char * Signature) +{ + if (!fileExists(FileName)) return 0; + ifpstream * rst = new ifpstream( FileName, ios::in|ios::binary ); + char buf[50]; + if (rst) + { + rst->readBytes(&buf, strlen(Signature) + 1); + if (strcmp(buf, Signature) != 0) + { + delete rst; + return 0; + } + } + return rst; +} + +ofpstream * initFile(const char * FileName, char * current, char * Signature) +{ + if ( fileExists(FileName) && + ( current == 0 || strcmp(FileName, current) != 0 ) ) + { + if ( messageBox(__("The file already exists. Overwrite it?"), + mfYesNoCancel) != cmYes ) return 0; + } + ofpstream * rst = new ofpstream( FileName, ios::in|ios::binary ); + if (rst) rst->writeBytes(Signature, strlen(Signature) + 1); + return rst; +} + |