summaryrefslogtreecommitdiff
path: root/rhtvision/examples/dlgdsn/strmoper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'rhtvision/examples/dlgdsn/strmoper.cc')
-rw-r--r--rhtvision/examples/dlgdsn/strmoper.cc108
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;
+}
+