int ncio_create(const char *path, int ioflags, size_t initialsz, off_t igeto, size_t igetsz, size_t *sizehintp, ncio **nciopp, void **const igetvpp) { ncio *nciop; #ifdef _WIN32_WCE char* oflags = "bw+"; /*==?(O_RDWR|O_CREAT|O_TRUNC) && binary*/ #else char* oflags = "w+"; /*==?(O_RDWR|O_CREAT|O_TRUNC);*/ #endif FILE* f; int i,fd; int status = ENOERR; if(initialsz < (size_t)igeto + igetsz) initialsz = (size_t)igeto + igetsz; fSet(ioflags, NC_WRITE); if(path == NULL || *path == 0) return EINVAL; nciop = ncio_new(path, ioflags); if(nciop == NULL) return ENOMEM; if(fIsSet(ioflags, NC_NOCLOBBER)) { /* Since we do not have use of the O_EXCL flag, we need to fake it */ #ifdef WINCE f = fopen(path,"rb"); #else f = fopen(path,"r"); #endif if(f != NULL) { /* do not overwrite */ (void)fclose(f); return EEXIST; } } f = fopen(path, oflags); if(f == NULL) { status = errno; goto unwind_new; } /* Locate an open pseudo file descriptor */ fd = -1; for(i=1;i<fdmax;i++) {if(descriptors[i] == NULL) {fd=i;break;}} if(fd < 0) {fd = fdmax; fdmax++;} descriptors[fd] = f; *((int *)&nciop->fd) = fd; /* cast away const */ if(*sizehintp < NCIO_MINBLOCKSIZE || *sizehintp > NCIO_MAXBLOCKSIZE) { /* Use default */ *sizehintp = blksize(fd); } else { *sizehintp = M_RNDUP(*sizehintp); } status = ncio_fileio_init2(nciop, sizehintp); if(status != ENOERR) goto unwind_open; if(initialsz != 0) { status = fgrow(f, (off_t)initialsz); if(status != ENOERR) goto unwind_open; } if(igetsz != 0) { status = nciop->get(nciop, igeto, igetsz, RGN_WRITE, igetvpp); if(status != ENOERR) goto unwind_open; } *nciopp = nciop; return ENOERR; unwind_open: (void) fclose(descriptors[fd]); descriptors[fd] = NULL; /* ?? unlink */ /*FALLTHRU*/ unwind_new: ncio_free(nciop); return status; }
/* Create a file, and the ncio struct to go with it. This funtion is only called from nc__create_mp. path - path of file to create. ioflags - flags from nc_create initialsz - From the netcdf man page: "The argument Iinitialsize sets the initial size of the file at creation time." igeto - igetsz - sizehintp - this eventually goes into pxp->blksz and is the size of a page of data for buffered reads and writes. nciopp - pointer to a pointer that will get location of newly created and inited ncio struct. igetvpp - pointer to pointer which will get the location of ? */ int posixio_create(const char *path, int ioflags, size_t initialsz, off_t igeto, size_t igetsz, size_t *sizehintp, ncio **nciopp, void **const igetvpp) { ncio *nciop; int oflags = (O_RDWR|O_CREAT); int fd; int status; if(initialsz < (size_t)igeto + igetsz) initialsz = (size_t)igeto + igetsz; fSet(ioflags, NC_WRITE); if(path == NULL || *path == 0) return EINVAL; nciop = ncio_px_new(path, ioflags); if(nciop == NULL) return ENOMEM; if(fIsSet(ioflags, NC_NOCLOBBER)) fSet(oflags, O_EXCL); else fSet(oflags, O_TRUNC); #ifdef O_BINARY fSet(oflags, O_BINARY); #endif #ifdef vms fd = open(path, oflags, NC_DEFAULT_CREAT_MODE, "ctx=stm"); #else /* Should we mess with the mode based on NC_SHARE ?? */ fd = open(path, oflags, NC_DEFAULT_CREAT_MODE); #endif #if 0 (void) fprintf(stderr, "ncio_create(): path=\"%s\"\n", path); (void) fprintf(stderr, "ncio_create(): oflags=0x%x\n", oflags); #endif if(fd < 0) { status = errno; goto unwind_new; } *((int *)&nciop->fd) = fd; /* cast away const */ if(*sizehintp < NCIO_MINBLOCKSIZE) { /* Use default */ *sizehintp = blksize(fd); } else if(*sizehintp >= NCIO_MAXBLOCKSIZE) { /* Use maximum allowed value */ *sizehintp = NCIO_MAXBLOCKSIZE; } else { *sizehintp = M_RNDUP(*sizehintp); } if(fIsSet(nciop->ioflags, NC_SHARE)) status = ncio_spx_init2(nciop, sizehintp); else status = ncio_px_init2(nciop, sizehintp, 1); if(status != ENOERR) goto unwind_open; if(initialsz != 0) { status = fgrow(fd, (off_t)initialsz); if(status != ENOERR) goto unwind_open; } if(igetsz != 0) { status = nciop->get(nciop, igeto, igetsz, RGN_WRITE, igetvpp); if(status != ENOERR) goto unwind_open; } *nciopp = nciop; return ENOERR; unwind_open: (void) close(fd); /* ?? unlink */ /*FALLTHRU*/ unwind_new: ncio_close(nciop,!fIsSet(ioflags, NC_NOCLOBBER)); return status; }
MStatus HesperisCmd::attachSelected(const Vector3F & offsetV) { MGlobal::displayInfo(MString(" attach to grow mesh ") + m_growMeshName); MSelectionList selList; MGlobal::getActiveSelectionList(selList); MItSelectionList iter( selList ); MDagPath apath; iter.getDagPath( apath ); MObject otrans = apath.node(); if(!otrans.hasFn(MFn::kTransform)) { MGlobal::displayWarning("must select a transform/group to attach to grow mesh"); return MS::kFailure; } ASearchHelper searcher; MDagPath meshGrp; if(!searcher.dagByFullName(m_growMeshName.asChar(), meshGrp)) { MGlobal::displayWarning(MString("cannot find grow mesh by name ")+m_growMeshName); return MS::kFailure; } MObject ogrow = meshGrp.node(); if(!ogrow.hasFn(MFn::kTransform)) { MGlobal::displayWarning("-gm must be a transform/group"); return MS::kFailure; } MStatus stat; MDGModifier modif; MDagModifier dmodif; MObject hestranslate = modif.createNode("hesperisTranslateNode", &stat); modif.doIt(); if(hestranslate.isNull()) { MGlobal::displayWarning("cannot create hes translate node"); return MS::kFailure; } MFnDependencyNode fhest(hestranslate); MFnDependencyNode fgrow(ogrow); modif.connect(fgrow.findPlug("boundingBoxMinX", true), fhest.findPlug("bBoxMinX", true)); modif.connect(fgrow.findPlug("boundingBoxMinY", true), fhest.findPlug("bBoxMinY", true)); modif.connect(fgrow.findPlug("boundingBoxMinZ", true), fhest.findPlug("bBoxMinZ", true)); modif.connect(fgrow.findPlug("boundingBoxMaxX", true), fhest.findPlug("bBoxMaxX", true)); modif.connect(fgrow.findPlug("boundingBoxMaxY", true), fhest.findPlug("bBoxMaxY", true)); modif.connect(fgrow.findPlug("boundingBoxMaxZ", true), fhest.findPlug("bBoxMaxZ", true)); MPlug psrcwpmat = fgrow.findPlug("parentMatrix", true, &stat); if(!stat) MGlobal::displayInfo("cannot find plug worldParentMatrix"); modif.connect(psrcwpmat, fhest.findPlug("inParentMatrix", true)); modif.doIt(); MFnDependencyNode ftrans(otrans); dmodif.connect(fhest.findPlug("outTranslateX", true), ftrans.findPlug("translateX", true)); dmodif.connect(fhest.findPlug("outTranslateY", true), ftrans.findPlug("translateY", true)); dmodif.connect(fhest.findPlug("outTranslateZ", true), ftrans.findPlug("translateZ", true)); stat = dmodif.doIt(); if(!stat) MGlobal::displayInfo(MString("cannot make some connections to ")+ftrans.name()); fhest.findPlug("offsetX").setValue((double)-offsetV.x); fhest.findPlug("offsetY").setValue((double)-offsetV.y); fhest.findPlug("offsetZ").setValue((double)-offsetV.z); return MS::kSuccess; }
int ffio_create(const char *path, int ioflags, size_t initialsz, off_t igeto, size_t igetsz, size_t *sizehintp, ncio **nciopp, void **const igetvpp) { ncio *nciop; const char *ControlString; int oflags = (O_RDWR|O_CREAT|O_TRUNC); int fd; int status; struct ffsw stat; if(initialsz < (size_t)igeto + igetsz) initialsz = (size_t)igeto + igetsz; fSet(ioflags, NC_WRITE); if(path == NULL || *path == 0) return EINVAL; nciop = ncio_ffio_new(path, ioflags); if(nciop == NULL) return ENOMEM; if ((ControlString = ncio_ffio_assign(path)) == (const char *)NULL) { /* an error occured - just punt */ status = errno; goto unwind_new; } #ifdef NOFFFLUSH /* test whether the global layer is being called for * this file ... if so then can't call FFIO ffflush() * RKO 06/26/98 */ if (strstr(ControlString,"global") != (char *) NULL) { /* use no ffflush version */ *((ncio_syncfunc **)&nciop->sync) = ncio_ffio_sync_noffflush; } #endif if(fIsSet(ioflags, NC_NOCLOBBER)) fSet(oflags, O_EXCL); /* Orig: fd = ffopens(path, oflags, 0666, 0, &stat, ControlString); */ fd = ffopen(path, oflags, 0666, 0, &stat); if(fd < 0) { status = errno; goto unwind_new; } *((int *)&nciop->fd) = fd; /* cast away const */ if(*sizehintp < NCIO_MINBLOCKSIZE || *sizehintp > NCIO_MAXBLOCKSIZE) { /* Use default */ *sizehintp = blksize(fd); } else { *sizehintp = M_RNDUP(*sizehintp); } status = ncio_ffio_init2(nciop, sizehintp); if(status != ENOERR) goto unwind_open; if(initialsz != 0) { status = fgrow(fd, (off_t)initialsz); if(status != ENOERR) goto unwind_open; } if(igetsz != 0) { status = nciop->get(nciop, igeto, igetsz, RGN_WRITE, igetvpp); if(status != ENOERR) goto unwind_open; } *nciopp = nciop; return ENOERR; unwind_open: (void) ffclose(fd); /* ?? unlink */ /*FALLTHRU*/ unwind_new: ncio_close(nciop,!fIsSet(ioflags, NC_NOCLOBBER)); return status; }