;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:routine_name,remonte ; ; PURPOSE:retourne le nom de la routine (procedure ou function) ds ; lequel on se trouve ; ; CATEGORY:utilitaire ; ; CALLING SEQUENCE:res=routine_name([remonte]) ; ; INPUTS: remonte: un entier qui donne de combien de niveau on doit ; remonter ds l''empillement des routines ewt sous-routines pour ; retrouver le nom de la routine cherchee ; ; KEYWORD PARAMETERS: ; ; OUTPUTS:un string donnant soit le nom de la routine en entier (avec ; le path) soit '$MAIN$' ; ; COMMON BLOCKS: ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; cette fonction utilise le mot cle OUTPUT ds help.pro et il est ; specifie ds l''aide en ligne que la syntaxe du retour de ce mot cle ; peut changer suivant la version du code. Cette version marche avec ; IDL 5.2 ; ; EXAMPLE: ; ; IDL> print, routine_name() ; /usr1/com/smasson/IDL_RD/UTILITAIRE/report.pro ; IDL> print, routine_name(1) ; /usr1/com/smasson/IDL_RD/PLOTS/DIVERS/determineminmax.pro ; IDL> print, routine_name(2) ; /usr1/com/smasson/IDL_RD/PLOTS/DESSINE/plt.pro ; IDL> print, routine_name(3) ; $MAIN$ ; IDL> print, routine_name(4) ; $MAIN$ ; ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) ; 21/10/1999 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ FUNCTION routine_name, remonte ; version=strmid(!version.release,0,3) if version EQ '5.2' OR version EQ '5.3' OR version EQ '5.4' then begin help, /traceback, output = name name = strtrim(name, 1) ; on enleve les blancs en debut de ligne ; on vat mettre les elements du vecteur bout a bout pour former un ; unique sring allnames = '' for i = 0, n_elements(name)-1 do allnames = allnames+name[i] ; name = str_sep(allnames, '%') ; on le redecoupe name = strtrim(name, 2) ; on eleve les blancs devant et derriere name = strcompress(name) ; on compresse les blancs ; on ne retient pas les 2 premiers elements qui sont 1 un vide et la ; ligne concernant routine_name name = name[2: n_elements(name)-1] ; on choisit la ligne qui nous concerne if NOT keyword_set(remonte) then remonte = 0 if remonte GE n_elements(name) then return, '$MAIN$' name = name[remonte] if strpos(name, '$MAIN$') NE -1 then return, '$MAIN$' name = str_sep(name, ' ') if n_elements(name) LT 3 then name = name[0] ELSE name = 'L.'+name[1]+' '+name[2] ENDIF ELSE BEGIN print, ('attention la fonction routine_name a ete ecrite pour les versions: !C IDL 5.2, IDL 5.2.1, 5.3 ou 5.4. ou 5.4.1 Verifier qu''elle marche bien avec la version '+!version.release) return, 'Error' ENDELSE return, name end