/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ #include #include #include extern Object _dxfExportBin(Object o, char *dataset); extern Error _dxfExportDX(Object o, char *filename, char *format); extern Error _dxfExportArray(Object o, char *filename, char *format); extern Error _dxExportVRML(Object o, char *filename); /* formats we accept */ #define DT_UNKNOWN 0 #define DT_DX 3 #define DT_BIN 4 #define DT_NOTIMPL 5 #define DT_ARRAY 6 #define DT_VRML 7 /* 0 = fieldname * 1 = filename * 2 = format string */ int m_Export(Object *in, Object *out) { char *filename, *format = NULL, *cp; int dt = DT_UNKNOWN; int req_dt = DT_UNKNOWN; /* if no object, return */ if(!in[0]) { DXSetError(ERROR_BAD_PARAMETER, "#10000", "input"); return ERROR; } /* filename. require : in name to be binary file (on array disk) */ if(!DXExtractString(in[1], &filename)) { DXSetError(ERROR_BAD_PARAMETER, "#10200", "filename"); return ERROR; } #ifndef DXD_OS_NON_UNIX if (strchr(filename, ':')) req_dt = DT_BIN; #endif /* check format string. */ if(in[2]) { if(!DXExtractString(in[2], &format)) { DXSetError(ERROR_BAD_PARAMETER, "#10200", "format"); return ERROR; } if(!strncmp(format, "dx", 2)) dt = DT_DX; else if(!strcmp(format, "bin")) dt = DT_BIN; else if(!strncmp(format, "array",5) || !strncmp(format,"spreadsheet",11)) dt = DT_ARRAY; else if (!strcmp(format, "vrml")) dt = DT_VRML; else dt = DT_NOTIMPL; } if (dt == DT_UNKNOWN) { #ifndef DXD_OS_NON_UNIX if (strchr(filename, ':')) dt = DT_BIN; else #endif { if ((cp = strrchr(filename, '.')) != NULL) { if (!strcmp(cp, ".bin")) dt = DT_BIN; else if (!strcmp(cp, ".dx")) dt = DT_DX; else if (!strcmp(cp, ".wrl")) dt = DT_VRML; } } if (dt == DT_UNKNOWN) dt = DT_DX; } if (dt == DT_NOTIMPL) { DXSetError(ERROR_BAD_PARAMETER, "#12238", format); return ERROR; } #if DXD_HAS_LIBIOP if (req_dt == DT_BIN && dt != DT_BIN) { DXSetError(ERROR_BAD_PARAMETER, "colon in name indicates array disk partition, and array disk currently only supports 'bin' format"); return ERROR; } #else if (req_dt == DT_BIN) { DXSetError(ERROR_BAD_PARAMETER, "colon in name indicates array disk partition, and array disk not supported on this architecture"); return ERROR; } #endif switch(dt) { case DT_DX: if(!_dxfExportDX(in[0], filename, format)) return ERROR; break; case DT_BIN: if(!_dxfExportBin(in[0], filename)) return ERROR; break; case DT_ARRAY: if(!_dxfExportArray(in[0],filename,format)) return ERROR; break; case DT_VRML: if (!_dxfExportVRML(in[0],filename)) return ERROR; break; default: DXErrorReturn(ERROR_NOT_IMPLEMENTED, "unrecognized file format"); } return OK; }