;+
;NAME: barrel_write_config
;
;DESCRIPTION:
; Writes the barrel_config file
;
;REQUIRED INPUTS:
; none (filename is hardcoded, 'barrel_config.txt', and is put in a folder
; given by the routine 'barrel_config_filedir', that uses the IDL routine
; app_user_dir to create/obtain it:
; e.g. (MacOS X)
; /Users/username/.idl/themis/barrel_config-4_darwin
;
;KEYWORD ARGUMENTS (OPTIONAL):
; COPY: If set, make a copy, creating a new file whose filename
; is timestamped with an appended !STIME.
;
;OUTPUT
; the file is written, and a copy of any old file is generated
;
;STATUS:
;
;TO BE ADDED: n/a
;
;EXAMPLE:
;
;REVISION HISTORY:
;Version 0.90a KBY 04/19/2013 no changes
;Version 0.84 KBY 12/04/2012 added header
;Version 0.83 KBY 12/04/2012 initial beta release
;Version 0.80 KBY 10/29/2012 from 'goesmag/goes_write_config.pro' by JWL(?)
;-
PRO barrel_write_config, copy=copy, _extra=_extra
otp = -1 ; doesn't do anything here..
; get the filename
dir = barrel_config_filedir()
ll = strmid(dir, strlen(dir)-1,1)
if (ll EQ '/' or ll EQ '\') then filex = dir+'barrel_config.txt' $
else filex = dir + PATH_SEP() + 'barrel_config.txt'
; if we are copying the file, get a filename, header, and old configuration
if (keyword_set(copy)) then begin
xt = time_string(systime(/sec))
ttt = strmid(xt, 0, 4) + strmid(xt, 5, 2) + strmid(xt, 8, 2) + $
'_' + strmid(xt, 11, 2) + strmid(xt, 14, 2) + strmid(xt, 17, 2)
filex_out = filex + '_' + ttt
cfg = barrel_read_config(header = hhh)
endif else begin
; does the file exist? if so, then copy it
if (file_search(filex) NE '') then barrel_write_config, /copy
filex_out = filex
cfg = {local_data_dir:!barrel.local_data_dir, $
remote_data_dir:!barrel.remote_data_dir, $
no_download:!barrel.no_download, $
no_update:!barrel.no_update, $
downloadonly:!barrel.downloadonly, $
user_agent:!barrel.user_agent, $
verbose:!barrel.verbose}
hhh = [';barrel_config.txt', '; BARREL configuration file', $
';Created'+time_string(systime(/sec))]
endelse
; you need to be sure that the directory exists
xdname = file_dirname(filex_out)
if (xdname NE '') then file_mkdir, xdname
; write the file
; write header
openw, unit, filex_out, /get_lun
for j=0, n_elements(hhh)-1 do printf, unit, hhh[j]
; write configuration information
ctags = tag_names(cfg)
nctags = n_elements(ctags)
for j=0, nctags-1 do begin
x0 = strtrim(ctags[j]) ; field tag
x1 = cfg.(j) ; associated data
if (is_string(x1)) then x1 = strtrim(x1,2) else begin
; odd things can happen with byte arrays-- convert to integer type
if (size(x1, /type) EQ 1) then x1 = fix(x1)
x1 = strcompress(/remove_all, string(x1))
endelse
printf, unit, x0 + '=' + x1
endfor
FREE_LUN, unit
RETURN
END