1 | ;------------------------------------------------------------ |
---|
2 | ;------------------------------------------------------------ |
---|
3 | ;------------------------------------------------------------ |
---|
4 | ;+ |
---|
5 | ; NAME:routine_name,remonte |
---|
6 | ; |
---|
7 | ; PURPOSE:retourne le nom de la routine (procedure ou function) ds |
---|
8 | ; lequel on se trouve |
---|
9 | ; |
---|
10 | ; CATEGORY:utilitaire |
---|
11 | ; |
---|
12 | ; CALLING SEQUENCE:res=routine_name([remonte]) |
---|
13 | ; |
---|
14 | ; INPUTS: remonte: un entier qui donne de combien de niveau on doit |
---|
15 | ; remonter ds l''empillement des routines ewt sous-routines pour |
---|
16 | ; retrouver le nom de la routine cherchee |
---|
17 | ; |
---|
18 | ; KEYWORD PARAMETERS: |
---|
19 | ; |
---|
20 | ; OUTPUTS:un string donnant soit le nom de la routine en entier (avec |
---|
21 | ; le path) soit '$MAIN$' |
---|
22 | ; |
---|
23 | ; COMMON BLOCKS: |
---|
24 | ; |
---|
25 | ; SIDE EFFECTS: |
---|
26 | ; |
---|
27 | ; RESTRICTIONS: |
---|
28 | ; cette fonction utilise le mot cle OUTPUT ds help.pro et il est |
---|
29 | ; specifie ds l''aide en ligne que la syntaxe du retour de ce mot cle |
---|
30 | ; peut changer suivant la version du code. Cette version marche avec |
---|
31 | ; IDL 5.2 |
---|
32 | ; |
---|
33 | ; EXAMPLE: |
---|
34 | ; |
---|
35 | ; IDL> print, routine_name() |
---|
36 | ; /usr1/com/smasson/IDL_RD/UTILITAIRE/report.pro |
---|
37 | ; IDL> print, routine_name(1) |
---|
38 | ; /usr1/com/smasson/IDL_RD/PLOTS/DIVERS/determineminmax.pro |
---|
39 | ; IDL> print, routine_name(2) |
---|
40 | ; /usr1/com/smasson/IDL_RD/PLOTS/DESSINE/plt.pro |
---|
41 | ; IDL> print, routine_name(3) |
---|
42 | ; $MAIN$ |
---|
43 | ; IDL> print, routine_name(4) |
---|
44 | ; $MAIN$ |
---|
45 | ; |
---|
46 | ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) |
---|
47 | ; 21/10/1999 |
---|
48 | ;- |
---|
49 | ;------------------------------------------------------------ |
---|
50 | ;------------------------------------------------------------ |
---|
51 | ;------------------------------------------------------------ |
---|
52 | FUNCTION routine_name, remonte |
---|
53 | ; |
---|
54 | version=strmid(!version.release,0,3) |
---|
55 | if version EQ '5.2' OR version EQ '5.3' OR version EQ '5.4' then begin |
---|
56 | help, /traceback, output = name |
---|
57 | name = strtrim(name, 1) ; on enleve les blancs en debut de ligne |
---|
58 | ; on vat mettre les elements du vecteur bout a bout pour former un |
---|
59 | ; unique sring |
---|
60 | allnames = '' |
---|
61 | for i = 0, n_elements(name)-1 do allnames = allnames+name[i] |
---|
62 | ; |
---|
63 | name = str_sep(allnames, '%') ; on le redecoupe |
---|
64 | name = strtrim(name, 2) ; on eleve les blancs devant et derriere |
---|
65 | name = strcompress(name) ; on compresse les blancs |
---|
66 | ; on ne retient pas les 2 premiers elements qui sont 1 un vide et la |
---|
67 | ; ligne concernant routine_name |
---|
68 | name = name[2: n_elements(name)-1] |
---|
69 | ; on choisit la ligne qui nous concerne |
---|
70 | if NOT keyword_set(remonte) then remonte = 0 |
---|
71 | if remonte GE n_elements(name) then return, '$MAIN$' |
---|
72 | name = name[remonte] |
---|
73 | if strpos(name, '$MAIN$') NE -1 then return, '$MAIN$' |
---|
74 | name = str_sep(name, ' ') |
---|
75 | if n_elements(name) LT 3 then name = name[0] ELSE name = 'L.'+name[1]+' '+name[2] |
---|
76 | ENDIF ELSE BEGIN |
---|
77 | 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) |
---|
78 | return, 'Error' |
---|
79 | ENDELSE |
---|
80 | return, name |
---|
81 | end |
---|