read_sint <- function(handle) { return(readBin(handle, "int", 1, size=4, signed = TRUE, endian = "big")); } read_uint <- function(handle) { return(readBin(handle, "int", 1, size=4, signed = FALSE, endian = "big")); } read_real <- function(handle) { return(readBin(handle, "numeric", 1, size=4, endian = "big")); } ################ read_header_Ts.GHCN.CL <- function(handle) { len <- read_uint(handle); if( len < 9*4 ) { print("invalid file format"); return(NA); } vers <- read_sint(handle); unk1 <- read_sint(handle); unk2 <- read_sint(handle); MTOT <- read_sint(handle); MTOT2 <- read_sint(handle); iyear1 <- read_sint(handle); inv1 <- read_sint(handle); inv2 <- read_sint(handle); MTOT_again <- read_sint(handle); title <- rawToChar(readBin(handle, "raw", len-9*4)); if( read_uint(handle) != len ) { print("invalid file format"); return(NA); } return(pairlist(vers=vers, unk1=unk1, unk2=unk2, MTOT=MTOT, MTOT2=MTOT2, iyear1=iyear1, inv1=inv1, inv2=inv2, MTOT_again=MTOT_again, title=title)); } read_record_Ts.GHCN.CL <- function(handle) { len <- read_uint(handle); if( length(len) == 0 ) { # no more data return(NA); } if( len <= 44+16 ) { print("invalid file format"); return(NA); } temp_data <- readBin(handle, "int", (len-44-16)/4, size=4, signed = TRUE, endian = "big"); lato <- read_uint(handle); longo <- read_uint(handle); id <- read_uint(handle); ht <- read_uint(handle); name <- rawToChar(readBin(handle, "raw", 36)); vers <- read_uint(handle); MTOT <- read_uint(handle); if( read_uint(handle) != len ) { print("invalid file format"); return(NA); } return(pairlist(temp_data=temp_data, lato=lato, longo=longo, id=id, ht=ht, name=name, vers=vers, MTOT=MTOT)); } read_GISS_data_Ts.GHCN.CL <- function(handle) { header_data <- read_header_Ts.GHCN.CL(handle); records <- list(); while(TRUE) { record <- read_record_Ts.GHCN.CL(handle); if( length(record) == 1 ) { return(pairlist(header=header_data, records=records)); } else { records <- append(records, record); } } } #ftp://data.giss.nasa.gov/pub/gistemp/GISS_Obs_analysis/ARCHIVE/2008_05/binary_files/Ts.GHCN.CL.5 #handle <- file("Ts.GHCN.CL.1", "rb"); #data <- read_GISS_data_Ts.GHCN.CL(handle); #close(handle); #ftp://data.giss.nasa.gov/pub/gistemp/GISS_Obs_analysis/ARCHIVE/2008_05/binary_files/Ts.GHCN.CL.PA.5 ###################################### read_header_SBBX <- function(handle) { len <- read_uint(handle); if( len < 8*4 ) { print("invalid file format"); return(NA); } Mnow <- read_sint(handle); unk1 <- read_sint(handle); unk2 <- read_sint(handle); MONM <- read_sint(handle); unk3 <- read_sint(handle); IYRBEG <- read_sint(handle); BAD <- read_sint(handle); unk4 <- read_sint(handle); title <- rawToChar(readBin(handle, "raw", len-8*4)); if( read_uint(handle) != len ) { print("invalid file format"); return(NA); } return(pairlist(Mnow=Mnow, unk1=unk1, unk2=unk2, MONM=MONM, unk3=unk3, IYRBEG=IYRBEG, BAD=BAD, unk4=unk4, title=title)); } read_record_SBBX <- function(handle, Mnow) { len <- read_uint(handle); if( length(len) == 0 ) { # no more data return(NA); } if( len != (8+Mnow)*4 ) { print("invalid file format"); return(NA); } Next <- read_sint(handle); LATS <- read_sint(handle); LATN <- read_sint(handle); LONW <- read_sint(handle); LONE <- read_sint(handle); NR1 <- read_sint(handle); NR2 <- read_sint(handle); DL <- read_sint(handle); temp_data <- readBin(handle, "numeric", Mnow, size=4, endian = "big"); if( read_uint(handle) != len ) { print("invalid file format"); return(NA); } return(pairlist(temp_data=temp_data, Next=Next, LATS=LATS, LATN=LATN, LONW=LONW, LONE=LONE, NR1=NR1, NR2=NR2, DL=DL)); } read_GISS_data_SBBX <- function(handle) { header_data <- read_header_SBBX(handle); Mnow = header_data$Mnow; records <- vector("pairlist", 1); num <- 1; while(TRUE) { record <- read_record_SBBX(handle, Mnow); if( length(record) == 1 ) { return(pairlist(header=header_data, records=records)); } else { records[[num]] = record; num <- num+1; Mnow = record$Next; } } } #handle <- file("SBBX.SSTHadR2", "rb"); #data <- read_GISS_data_SBBX (handle); #close(handle); #print(data); ##ftp://data.giss.nasa.gov/pub/gistemp/GISS_Obs_analysis/ARCHIVE/2008_05/binary_files/SBBX1880.Ts.GHCN.CL.PA.250 ##ftp://data.giss.nasa.gov/pub/gistemp/GISS_Obs_analysis/ARCHIVE/2008_05/binary_files/SBBX1880.Ts.GHCN.CL.PA.1200 ##ftp://data.giss.nasa.gov/pub/gistemp/GISS_Obs_analysis/ARCHIVE/2008_05/binary_files/SBBX.HadR2 ################################# ##MAKE GRID INFO make.grid.info=function (Data){ f=function(X) unlist(X[2:9]) grid.info=sapply(Data[[2]],f) grid.info=t(grid.info) grid.info=data.frame(grid.info) #the params LATS, LATN, LONW,LONE define the four parameters of the box #decimal values appear to be used grid.info[,2:5]=grid.info[,2:5]/100 #order1=order(-grid.info$LATS,grid.info$LONW) #grid.info[order1,][1:100,] make.grid.info=grid.info make.grid.info }