# $Id: CDFvinfo,v 1.10 1994/08/29 22:06:08 mintha Exp $ # # Given a cdf file structure and a variable id get all the # attributes for the variable. (dims, etc.) # # $Log: CDFvinfo,v $ # Revision 1.10 1994/08/29 22:06:08 mintha # Added fix for CDF type SHORT # # Revision 1.9 1994/07/26 23:08:17 mintha # Changed to read in multiple values for an attribute # # Revision 1.8 1994/04/21 10:36:39 mintha # Cleaned up and added version string in code # # Revision 1.7 1994/04/18 15:30:25 mintha # cleaning up # # Revision 1.6 1993/12/03 16:39:23 mintha # Added integer attribute values # # Revision 1.5 1993/08/26 19:19:33 mintha # Added dimids to varinfo # # Revision 1.4 1993/08/20 07:27:44 mintha # Changes to cdf_attr_info # # Revision 1.3 1993/08/13 21:57:50 mintha # Reversed the labels as well as the dims now. # # Revision 1.2 1993/08/13 21:41:10 mintha # Got rid of 'cat' statements # # Revision 1.1 1993/08/10 23:28:48 mintha # Initial revision # "CDFvinfo"<- function(ginfo, var) { version_"$Id: CDFvinfo,v 1.10 1994/08/29 22:06:08 mintha Exp $" varinfo <- .C("cdf_var_info", as.integer(ginfo$ncid), as.integer(var), name = character(0), type = integer(1), dimids = integer(0), nattrs = integer(1), pointers = c(F,F,T,F,T,F)) # # Note order of dimension stuff is reversed to be consistent with Splus # numdims <- length(varinfo$dimids) vinfo <- vector("list",6) names(vinfo) <- c("name", "id", "type", "dimids", "dims", "labels") vinfo$name <- varinfo$name vinfo$id <- var vinfo$type <- varinfo$type vinfo$dimids <- rev(varinfo$dimids) vinfo$dims <- integer(numdims) vinfo$labels <- integer(numdims) for(ctr in seq(to = numdims)){ vinfo$dims[numdims-ctr+1] <- ginfo$dims[varinfo$dimids[ctr]+1] vinfo$labels[numdims-ctr+1] <- ginfo$dimlabs[varinfo$dimids[ctr]+1] } if(varinfo$nattrs > 0){ for(ctr in seq(to = varinfo$nattrs)){ attr <- .C("cdf_attr_info", as.integer(ginfo$ncid), as.integer(var), as.integer(ctr-1), type = integer(1), dimid = integer(1), name = character(0), cval = character(0), lval = integer(0), fval = single(0), dval = double(0), pointers = c(F,F,F,F,F,T,T,T,T,T)) if(attr$type == 2) temp <- attr$cval if(attr$type == 3) temp <- attr$lval if(attr$type == 4) temp <- attr$lval if(attr$type == 5) temp <- attr$fval if(attr$type == 6) temp <- attr$dval temp2 <- integer(1) names(temp2) <- attr$name vinfo <- append(vinfo, temp2) vinfo[[attr$name]] <- temp } } vinfo }