00001
00002 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00003 #pragma implementation
00004 #endif
00005
00006
00007
00008
00009 #include "vil1_open.h"
00010
00011 #include <vcl_cstring.h>
00012
00013 #include <vil1/vil1_stream_fstream.h>
00014 #include <vil1/vil1_stream_core.h>
00015 #include <vil1/vil1_stream_url.h>
00016
00017 vil1_stream *vil1_open(char const* what, char const* how)
00018 {
00019
00020 if (!what || !*what)
00021 return 0;
00022
00023
00024 vil1_stream *is = new vil1_stream_fstream(what, how);
00025 #if 0
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 vil1_stream *is = new vil1_stream_fstream(what, "r+");
00036 #endif
00037 if (!is->ok()) {
00038
00039 is->ref();
00040 is->unref();
00041 is = 0;
00042 }
00043
00044 if (!is) {
00045
00046 int l = vcl_strlen(what);
00047 if (l > 4 && vcl_strncmp(what, "gen:", 4) == 0) {
00048 if (vcl_strcmp(how, "r") == 0) {
00049
00050 vil1_stream_core *cis = new vil1_stream_core();
00051 cis->write(what, l+1);
00052 is = cis;
00053 }
00054 else {
00055 vcl_cerr << __FILE__ ": cannot open gen:* for writing\n";
00056 }
00057 }
00058 }
00059 if (is && !is->ok()) {
00060
00061 is->ref();
00062 is->unref();
00063 is = 0;
00064 }
00065
00066 if (!is) {
00067
00068 int l = vcl_strlen(what);
00069 if (l > 4 && vcl_strncmp(what, "http://", 7) == 0) {
00070 #ifdef __APPLE__
00071 vcl_cerr << __FILE__ ": cannot open URL for writing (yet)\n";
00072 #else
00073 if (vcl_strcmp(how, "r") == 0) {
00074 is = new vil1_stream_url(what);
00075 }
00076 else vcl_cerr << __FILE__ ": cannot open URL for writing (yet)\n";
00077 #endif
00078 }
00079 }
00080 if (is && !is->ok()) {
00081
00082 is->ref();
00083 is->unref();
00084 is = 0;
00085 }
00086
00087 return is;
00088 }