Viewing contents of file '../idllib/contrib/tappin/graffer/gr_bin_ds.pro'
pro Gr_bin_ds, data, nset, ilu, msgid, version
;+
; GR_BIN_DS
; Read an individual dataset from a binary V2.x GRAFFER file.
;
; Arguments:
; data struct in/out The graffer dataset structure
; nset int input The serial number of the current
; dataset.
; ilu int input File unit number to read
; msgid long input ID of message window (if created).
; version float input Version of dataset begin read.
;
; History:
; Original (binary version): 15/1/97; SJT
; Add version argument: 14/5/99; SJT
;-
tag = ' '
nflag = 0b
nflag2 = 0b
tflag = 0b
dflag = 0b
cflag = bytarr(4)
jflag = 0b
elements = [2, 3, 4, 3, 4, 4, 5, 5, 6]
while (not eof(ilu)) do begin
readu, ilu, tag
; Recognised tags:
; J - Joining option
; P - symbol
; S - symbol size
; L - line style
; C - colour
; W - thickness (width)
; O - sorted? (Order)
; D - description
; N - number of points (or
; evaluations)
; N2- Number of points in y-direction
; for 2-D data.
; T - type
; M - Mode
; K - noclip (both C & N are already
; bagged)
; E - Mouse editing
; R - function range
; F, FX, FY - function specifiers
; VS, VE - start & end XY data.
; DE - end dataset
case (strtrim(tag)) of
'J': begin
data(nset).pline = gr_int_rd(ilu, 1)
jflag = 1b
end
'P': data(nset).psym = gr_int_rd(ilu, 1)
'S': data(nset).symsize = gr_flt_rd(ilu, 1)
'L': data(nset).line = gr_int_rd(ilu, 1)
'C': data(nset).colour = gr_int_rd(ilu, 1)
'W': data(nset).thick = gr_int_rd(ilu, 1)
'O': data(nset).sort = gr_byt_rd(ilu, 1)
'K': data(nset).noclip = gr_byt_rd(ilu, 1)
'E': data(nset).medit = gr_byt_rd(ilu, 1)
'D': data(nset).descript = gr_str_rd(ilu)
'N': begin
if (version(0) eq 2 and version(1) le 1) or $
(version(0) lt 2) then $
data(nset).ndata = gr_int_rd(ilu, 1) $
else $
data(nset).ndata = gr_lon_rd(ilu, 1)
nflag = 1b
end
'N2': begin
if (version(0) eq 2 and version(1) le 1) or $
(version(0) lt 2) then $
data(nset).ndata2 = gr_int_rd(ilu, 1) $
else $
data(nset).ndata2 = gr_lon_rd(ilu, 1)
nflag2 = 1b
end
'T': begin
data(nset).type = gr_int_rd(ilu, 1)
tflag = 1b
end
'M': data(nset).mode = gr_int_rd(ilu, 1)
'ZF': data(nset).zopts.format = gr_int_rd(ilu, 1)
'ZNL': begin
data(nset).zopts.n_levels = gr_int_rd(ilu, 1)
if (data(nset).zopts.n_levels gt 0) then cflag(0) = 1b
end
'ZL': data(nset).zopts.levels = $
gr_flt_rd(ilu, data(nset).zopts.n_levels)
'ZNC': begin
data(nset).zopts.n_cols = gr_int_rd(ilu, 1)
cflag(1) = 1b
end
'ZC': data(nset).zopts.colours = $
gr_int_rd(ilu, data(nset).zopts.n_cols)
'ZNS': begin
data(nset).zopts.n_sty = gr_int_rd(ilu, 1)
cflag(2) = 1b
end
'ZS': data(nset).zopts.style = $
gr_int_rd(ilu, data(nset).zopts.n_sty)
'ZNT': begin
data(nset).zopts.n_thick = gr_int_rd(ilu, 1)
cflag(3) = 1b
end
'ZT': data(nset).zopts.thick = $
gr_int_rd(ilu, data(nset).zopts.n_thick)
'ZCF': data(nset).zopts.fill = gr_byt_rd(ilu, 1)
'ZLI': data(nset).zopts.label = $
gr_int_rd(ilu, 1)
'ZR': data(nset).zopts.range = gr_flt_rd(ilu, 2)
'ZP': data(nset).zopts.pxsize = gr_flt_rd(ilu, 1)
'R': begin
if (data(nset).type eq -4) then $
xydata.range = gr_flt_rd(ilu, 4) $
else $
xydata.range = gr_flt_rd(ilu, 2)
end
'F': xydata.funct = gr_str_rd(ilu)
'FX': xydata.funct(0) = gr_str_rd(ilu)
'FY': xydata.funct(1) = gr_str_rd(ilu)
'VS': begin
ncols = gr_int_rd(ilu, 1)
readu, ilu, xydata
readu, ilu, tag
end
'ZXS': begin
xv = gr_flt_rd(ilu, data(nset).ndata)
handle_value, xydata.x, xv, /set, /no_copy
readu, ilu, tag
end
'ZYS': begin
yv = gr_flt_rd(ilu, data(nset).ndata2)
handle_value, xydata.y, yv, /set, /no_copy
readu, ilu, tag
end
'ZZS': begin
zv = fltarr(data(nset).ndata, data(nset).ndata2)
readu, ilu, zv
handle_value, xydata.z, zv, /set, /no_copy
readu, ilu, tag
end
'DE': goto, ds_read
Else: begin
graff_msg, msgid, "Unknown DS tag: " + $
tag + "Ignoring."
stop
end
endcase
if (nflag and tflag and not dflag) then begin
dflag = 1b
case data(nset).type of
-4: xydata = {graff_zfunct, $
Range:fltarr(2, 2), $
Funct:''}
-3: xydata = {graff_pfunct, $
Range:fltarr(2), $
Funct:strarr(2)}
-2: xydata = {graff_funct, $
Range:fltarr(2), $
Funct:''}
-1: xydata = {graff_funct, $
Range:fltarr(2), $
Funct:''}
9: if (nflag2) then begin
xydata = {graff_zdata, $
Z: handle_create(), $
X: handle_create(), $
Y: handle_create()}
endif else dflag = 0b
Else: begin
xydata = fltarr(elements(data(nset).type), $
data(nset).ndata > 2)
end
endcase
endif
New_line:
endwhile
Ds_read:
if (not jflag) then begin
if (data(nset).psym eq 10) then begin
data(nset).pline = 2
data(nset).psym = 0
endif else if (data(nset).psym eq 0) then begin
data(nset).pline = 1
endif else if (data(nset).psym lt 0) then begin
data(nset).pline = 1
data(nset).psym = abs(data(nset).psym)
endif else data(nset).pline = 0
endif
data(nset).xydata = handle_create()
handle_value, data(nset).xydata, xydata, /set, /no_copy
end