Viewing contents of file '../idllib/contrib/tappin/graffer/gr_get_ds.pro'
pro Gr_get_ds, data, nset, ilu, msgid, version
;+
; GR_GET_DS
; Read an individual dataset from a 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: 5/11/96; SJT
; Shorten name: 25/11/96; SJT
; Add version argument: 14/5/99; SJT
;-
inline = ''
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
readf, ilu, inline
tag_val = str_sep(inline, ':')
for itag = 0, n_elements(tag_val) - 2, 2 do begin
; 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 (tag_val(itag)) of
'J': begin
data(nset).pline = gr_int_val(tag_val(itag+1), 1)
jflag = 1b
end
'P': data(nset).psym = gr_int_val(tag_val(itag+1), 1)
'S': data(nset).symsize = gr_flt_val(tag_val(itag+1), 1)
'L': data(nset).line = gr_int_val(tag_val(itag+1), 1)
'C': data(nset).colour = gr_int_val(tag_val(itag+1), 1)
'W': data(nset).thick = gr_int_val(tag_val(itag+1), 1)
'O': data(nset).sort = gr_byt_val(tag_val(itag+1), 1)
'K': data(nset).noclip = gr_byt_val(tag_val(itag+1), 1)
'E': data(nset).medit = gr_byt_val(tag_val(itag+1), 1)
'D': begin
data(nset).descript = gr_str_val(inline, 'D')
goto, new_line
end
'N': begin
if (version(0) eq 2 and version(1) le 1) or $
(version(0) lt 2) then $
data(nset).ndata = gr_int_val(tag_val(itag+1), 1) $
else $
data(nset).ndata = gr_lon_val(tag_val(itag+1), 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_val(tag_val(itag+1), 1) $
else $
data(nset).ndata2 = gr_lon_val(tag_val(itag+1), 1)
nflag2 = 1b
end
'T': begin
data(nset).type = gr_int_val(tag_val(itag+1), 1)
tflag = 1b
end
'M': data(nset).mode = gr_int_val(tag_val(itag+1), 1)
'ZF': data(nset).zopts.format = gr_int_val(tag_val(itag+1), 1)
'ZNL': begin
data(nset).zopts.n_levels = gr_int_val(tag_val(itag+1), 1)
if (data(nset).zopts.n_levels gt 0) then cflag(0) = 1b
end
'ZL': if (cflag(0)) then data(nset).zopts.levels = $
gr_flt_val(tag_val(itag+1), data(nset).zopts.n_levels) $
else graff_msg, msgid, "** W A R N I N G ** Contour level " + $
"list given without count - ignored"
'ZNC': begin
data(nset).zopts.n_cols = gr_int_val(tag_val(itag+1), 1)
cflag(1) = 1b
end
'ZC': if (cflag(1)) then data(nset).zopts.colours = $
gr_int_val(tag_val(itag+1), data(nset).zopts.n_cols) $
else graff_msg, msgid, "** W A R N I N G ** Contour colour " + $
"list given without count - ignored"
'ZNS': begin
data(nset).zopts.n_sty = gr_int_val(tag_val(itag+1), 1)
cflag(2) = 1b
end
'ZS': if (cflag(2)) then data(nset).zopts.style = $
gr_int_val(tag_val(itag+1), data(nset).zopts.n_sty) $
else graff_msg, msgid, "** W A R N I N G ** Contour style " + $
"list given without count - ignored"
'ZNT': begin
data(nset).zopts.n_thick = gr_int_val(tag_val(itag+1), 1)
cflag(3) = 1b
end
'ZT': if (cflag(3)) then data(nset).zopts.thick = $
gr_int_val(tag_val(itag+1), data(nset).zopts.n_thick) $
else graff_msg, msgid, "** W A R N I N G ** Contour thickness " + $
"list given without count - ignored"
'ZCF': data(nset).zopts.fill = gr_int_val(tag_val(itag+1), 1)
'ZLI': data(nset).zopts.label = $
gr_int_val(tag_val(itag+1), 1)
'ZR': data(nset).zopts.range = gr_flt_val(tag_val(itag+1), 2)
'ZP': data(nset).zopts.pxsize = gr_flt_val(tag_val(itag+1), 1)
'R': begin
if (not dflag) then $
graff_msg, msgid, "Range found before type defined " + $
"- ignored" $
else if (data(nset).type ge 0) then $
graff_msg, msgid, "Range found in XY data set - ignored" $
else if (data(nset).type eq -4) then $
xydata.range = gr_flt_val(tag_val(itag+1), 4) $
else $
xydata.range = gr_flt_val(tag_val(itag+1), 2)
end
'F': begin
if (not dflag) then $
graff_msg, msgid, "Function found before type defined " + $
"- ignored" $
else if (data(nset).type ge 0) then $
graff_msg, msgid, "Function found in XY data set - ignored" $
else if (data(nset).type eq -3) then $
graff_msg, msgid, "Plain function found in " + $
"parametric set - ignored" $
else xydata.funct = gr_str_val(inline, 'F')
goto, new_line
end
'FX': begin
if (not dflag) then $
graff_msg, msgid, "Function found before type defined " + $
"- ignored" $
else if (data(nset).type ge 0) then $
graff_msg, msgid, "Function found in XY data set - ignored" $
else if (data(nset).type ne -3) then $
graff_msg, msgid, "X function found in " + $
"plain function - ignored" $
else xydata.funct(0) = gr_str_val(inline, 'FX')
goto, new_line
end
'FY': begin
if (not dflag) then $
graff_msg, msgid, "Function found before type defined " + $
"- ignored" $
else if (data(nset).type ge 0) then $
graff_msg, msgid, "Function found in XY data set - ignored" $
else if (data(nset).type ne -3) then $
graff_msg, msgid, "Y function found in " + $
"plain function - ignored" $
else xydata.funct(1) = gr_str_val(inline, 'FY')
goto, new_line
end
'VS': begin
if (not dflag) then begin
graff_msg, msgid, "Data found before type defined " + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'VE:') ne -1
endif else if (data(nset).type lt 0) then begin
graff_msg, msgid, "Data found in function dataset " + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'VE:') ne -1
endif else if (data(nset).type gt 8) then begin
graff_msg, msgid, '1-D Data found in 2-D dataset ' + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'VE:') ne -1
endif else begin
ncols = gr_int_val(tag_val(itag+1), 1)
if (ncols ne elements(data(nset).type)) then $
graff_msg, msgid, $
"WARNING Data columns wrong could get corrupt " + $
"DS"
readf, ilu, xydata
readf, ilu, inline
if (strpos(inline, 'VE:') eq -1) then $
graff_msg, msgid, $
"WARNING Data rows wrong could get corrupt " + $
"DS"
endelse
end
'ZXS': begin
if (not dflag) then begin
graff_msg, msgid, "Data found before type defined " + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'ZXE:') ne -1
endif else if (data(nset).type ne 9) then begin
graff_msg, msgid, $
'2-D Data found in function Or 1-D dataset - ignored'
repeat readf, ilu, inline $
until strpos(inline, 'ZXE:') ne -1
endif else begin
xv = fltarr(data(nset).ndata)
readf, ilu, xv
handle_value, xydata.x, xv, /set, /no_copy
readf, ilu, inline
if (strpos(inline, 'ZXE:') eq -1) then $
graff_msg, msgid, $
"WARNING Data X count wrong could get corrupt " + $
"DS"
endelse
end
'ZYS': begin
if (not dflag) then begin
graff_msg, msgid, "Data found before type defined " + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'ZYE:') ne -1
endif else if (data(nset).type ne 9) then begin
graff_msg, msgid, $
'2-D Data found in function Or 1-D dataset - ignored'
repeat readf, ilu, inline $
until strpos(inline, 'ZYE:') ne -1
endif else begin
yv = fltarr(data(nset).ndata2)
readf, ilu, yv
handle_value, xydata.y, yv, /set, /no_copy
readf, ilu, inline
if (strpos(inline, 'ZYE:') eq -1) then $
graff_msg, msgid, $
"WARNING Data Y count wrong could get corrupt " + $
"DS"
endelse
end
'ZZS': begin
if (not dflag) then begin
graff_msg, msgid, "Data found before type defined " + $
"- ignored"
repeat readf, ilu, inline $
until strpos(inline, 'ZZE:') ne -1
endif else if (data(nset).type ne 9) then begin
graff_msg, msgid, $
'2-D Data found in function Or 1-D dataset - ignored'
repeat readf, ilu, inline $
until strpos(inline, 'ZZE:') ne -1
endif else begin
zv = fltarr(data(nset).ndata, data(nset).ndata2)
readf, ilu, zv
handle_value, xydata.z, zv, /set, /no_copy
readf, ilu, inline
if (strpos(inline, 'ZZE:') eq -1) then $
graff_msg, msgid, $
"WARNING Data Z count wrong could get corrupt " + $
"DS"
endelse
end
'DE': goto, ds_read
Else: graff_msg, msgid, $
"Unknown Dataset tag "+tag_val(itag)+" - ignored"
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
endfor
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