;+ ; ; decode command line of post-it ; ; @param CMDLINE {in}{required}{type=array of strings} ; array of command lines ; ; @param INDEX {in}{required}{type=integer} ; ; @returns ; -1 in case of error ; ; @examples ; ; IDL> cmdline=['temp_1 0 HH1 umath xy 1m 199201 - 1 1 v'] ; IDL> index=0 ; IDL> trend_typ='0' ; IDL> result = decode_cmd(cmdline, index) ; IDL> help,result,/structure ; VAR STRING 'temp_1' ; ON LONG 0 ; EXP STRING 'HH1' ; GRID STRING 'umath' ; PLT STRING 'xy' ; TIMAVE STRING '1m' ; DATE1 STRING '199201' ; SPEC STRING '-' ; DISP STRING '1' ; PROJ STRING '1' ; OUT STRING 'v' ; VAR2 STRING '-' ; TREND STRING '0' ; IDL> print, result ;{ temp_1 0 HH1 umath xy 1m 199201 - 1 1 v - 0} ; ; @uses ; common ; com_eg ; ; @todo ; error handling ; ; explication sur common trend_typ ; ; @history ; - fplod 20100115T091459Z aedon.locean-ipsl.upmc.fr (Darwin) ; ; * enhanced check of cmdline content ; ; - fplod 20091209T094630Z aedon.locean-ipsl.upmc.fr (Darwin) ; ; * check parameters ; ; @version ; $Id$ ; ;- FUNCTION decode_cmd, cmdline, index ; compile_opt idl2, strictarrsubs ; @common @com_eg ; ; Return to caller if errors ON_ERROR, 2 ; usage='result=decode_cmd(cmdline, index)' ; nparam = N_PARAMS() IF (nparam LT 2) THEN BEGIN ras = report(['Incorrect number of arguments.' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF arg_type = size(cmdline,/type) IF (arg_type NE 7) THEN BEGIN ras = report(['Incorrect arg type cmdline' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF arg_dim = size(cmdline,/n_elements) IF (arg_dim LT 1) THEN BEGIN ras = report(['Incorrect arg dimension cmdline' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF arg_type = size(index,/type) IF ((arg_type NE 3) AND (arg_type NE 2)) THEN BEGIN ras = report(['Incorrect arg type index' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF IF (index GE N_ELEMENTS(cmdline)) THEN BEGIN ras = report(['index too big' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF common_type=size(trend_typ,/type) IF (common_type NE 7) THEN BEGIN ras = report(['Incorrect common type trend_typ' $ + '!C' $ + 'Usage : ' + usage]) return, -1 ENDIF cmd = {var:'', on: 0, exp:'', grid:'',plt:'', timave:'', date1:'', spec:'',$ disp:'', proj:'', out:'', var2:'', trend:''} line = strcompress(strtrim(cmdline[index], 2)) argvar = strsplit(line, ' ', /EXTRACT) cmd_dim = size(argvar,/n_elements) IF (cmd_dim LT 11) THEN BEGIN ras = report(['Incorrect number of fields in cmdline[' $ + strtrim(string(index),2) + ']' $ + '!C' $ + 'cmdline[' + strtrim(string(index),2) + '] : ' $ + cmdline[index] ]) return, -1 ENDIF cmd.var = argvar[0] cmd.on = argvar[1] cmd.exp = argvar[2] cmd.grid = argvar[3] cmd.plt = argvar[4] cmd.timave = argvar[5] cmd.date1 = argvar[6] cmd.spec = argvar[7] cmd.disp = argvar[8] cmd.proj = argvar[9] cmd.out = argvar[10] cmd.var2 = '-' ; trend type cmd.trend = trend_typ IF strpos(cmd.timave, '@') GT 1 THEN BEGIN letter = strmid(cmd.timave, strpos(cmd.timave, '@')+1,1) CASE letter OF 't': BEGIN cmd.trend = strmid(cmd.timave, strpos(cmd.timave, '@t')+2, strlen(cmd.timave)-strpos(cmd.timave, '@t')-2) cmd.timave = strmid(cmd.timave,0, strpos(cmd.timave, '@t')) END ELSE: BEGIN print, ' **** unknown letter after @ in cmd.timave (try t):', letter END ENDCASE ENDIF return, cmd END