root / src / valid.f90 @ 2
Historique | Voir | Annoter | Télécharger (3,79 ko)
1 | 1 | equemene | ! This function returns true or false depending on the string you give as a parameter |
---|---|---|---|
2 | 1 | equemene | ! Its purpose is to centralize the debugging flags into only one external file |
3 | 1 | equemene | ! so that debugging can be turned on or off easily at runtime. |
4 | 1 | equemene | ! (basically as it was done in ADF... |
5 | 1 | equemene | ! except that my version is much more basic (much much much more !) ) |
6 | 1 | equemene | |
7 | 1 | equemene | function valid(string) result (isValid) |
8 | 1 | equemene | |
9 | 1 | equemene | use Io_module |
10 | 1 | equemene | |
11 | 1 | equemene | IMPLICIT NONE |
12 | 1 | equemene | |
13 | 1 | equemene | interface |
14 | 1 | equemene | subroutine upcase(string) |
15 | 1 | equemene | character(*), intent(inout) :: string |
16 | 1 | equemene | end subroutine upcase |
17 | 1 | equemene | end interface |
18 | 1 | equemene | |
19 | 1 | equemene | CHARACTER(*), intent(in) :: string |
20 | 1 | equemene | logical :: isValid |
21 | 1 | equemene | INTEGER(4), PARAMETER :: NMax=500 |
22 | 1 | equemene | |
23 | 1 | equemene | CHARACTER(64),save :: List(NMax) |
24 | 1 | equemene | LOGICAL,save :: Value(NMax) |
25 | 1 | equemene | LOGICAL,save :: TInit=.False. |
26 | 1 | equemene | CHARACTER(132) :: LINE, ValTMP, LString |
27 | 1 | equemene | LOGICAL :: ValueTMP, Found |
28 | 1 | equemene | LOGICAL,SAVE :: Tall=.False., FValidFile, ValAll |
29 | 1 | equemene | INTEGER(4) :: ios, i,j,k |
30 | 1 | equemene | INTEGER(4), SAVE :: NEntries |
31 | 1 | equemene | |
32 | 1 | equemene | IF (.not.TInit) THEN |
33 | 1 | equemene | NEntries=0 |
34 | 1 | equemene | TInit=.TRUE. |
35 | 1 | equemene | INQUIRE(FILE=DebugFile,EXIST=FValidFile) |
36 | 1 | equemene | if (FValidFile) THEN |
37 | 1 | equemene | OPEN(IOTMP,File=DebugFile,IOSTAT=ios) |
38 | 1 | equemene | |
39 | 1 | equemene | ! The file exists so we will read it ! |
40 | 1 | equemene | DO While (ios==0) |
41 | 1 | equemene | READ(IOTMP,'(A)',ERR=999,END=999) LINE |
42 | 1 | equemene | ! WRITE(*,*) 'LINE READ',trim(Line) |
43 | 1 | equemene | if (ios==0) THEN |
44 | 1 | equemene | Line=AdjustL(Line) |
45 | 1 | equemene | ! WRITE(*,*) 'LINE ADJ',trim(Line) |
46 | 1 | equemene | call Upcase(Line) |
47 | 1 | equemene | ! WRITE(*,*) 'LINE UP',trim(Line) |
48 | 1 | equemene | if (Line(1:1)/='#') THEN |
49 | 1 | equemene | ! This is not a comment, we go on |
50 | 1 | equemene | i=index(Line,' ') |
51 | 1 | equemene | ! We take the first word, it will be our value |
52 | 1 | equemene | ValTMP=Line(1:i-1) |
53 | 1 | equemene | j=len_trim(line) |
54 | 1 | equemene | Line=adjustL((Line(i+1:j))) |
55 | 1 | equemene | ! WRITE(*,*) 'VALID INIT ',NEntries,trim(ValTMP), |
56 | 1 | equemene | ! & ' - ',trim(Line) |
57 | 1 | equemene | if (ValTMP(1:1)=='.') ValTmp=ValTMP(2:) |
58 | 1 | equemene | if (ValTMP(1:1)=='F') ValueTMP=.False. |
59 | 1 | equemene | if (ValTMP(1:1)=='T') ValueTMP=.True. |
60 | 1 | equemene | if (Line(1:1)=='*') THEN |
61 | 1 | equemene | ValAll=ValueTMP |
62 | 1 | equemene | TAll=.True. |
63 | 1 | equemene | ELSE |
64 | 1 | equemene | if (Tall) ValueTMP=ValAll |
65 | 1 | equemene | NEntries=NEntries+1 |
66 | 1 | equemene | Value(NEntries)=ValueTMP |
67 | 1 | equemene | Line=AdjustL(Line) |
68 | 1 | equemene | List(NEntries)=Line(1:64) |
69 | 1 | equemene | END IF |
70 | 1 | equemene | END IF |
71 | 1 | equemene | END IF |
72 | 1 | equemene | END DO |
73 | 1 | equemene | 999 CONTINUE |
74 | 1 | equemene | CLOSE(IOTMP) |
75 | 1 | equemene | ! WRITE(*,*) "DBG Valid, " // Trim(DebugFile) // "read, with " |
76 | 1 | equemene | ! & ,NEntries |
77 | 1 | equemene | ! DO I=1,NEntries |
78 | 1 | equemene | ! WRITE(*,*) List(I),Value(I) |
79 | 1 | equemene | ! END DO |
80 | 1 | equemene | END IF |
81 | 1 | equemene | END IF |
82 | 1 | equemene | |
83 | 1 | equemene | IF (.NOT.FValidFile) THEN |
84 | 1 | equemene | isValid=.FALSE. |
85 | 1 | equemene | Return |
86 | 1 | equemene | END IF |
87 | 1 | equemene | |
88 | 1 | equemene | ! The INIT file has been read ! |
89 | 1 | equemene | LString=trim(adjustL(String)) |
90 | 1 | equemene | Call UPcase(LString) |
91 | 1 | equemene | Found=.false. |
92 | 1 | equemene | Do I=1,NEntries |
93 | 1 | equemene | if (trim(List(I)).eq.trim(LString)) THEN |
94 | 1 | equemene | Found=.TRUE. |
95 | 1 | equemene | isValid=Value(I) |
96 | 1 | equemene | ! WRITE(*,*) 'zoeurezoiru' |
97 | 1 | equemene | END IF |
98 | 1 | equemene | ! WRITE(*,*) I,' : ',trim(list(I)),' - ',trim(LSTRING),' *' |
99 | 1 | equemene | END DO |
100 | 1 | equemene | |
101 | 1 | equemene | ! WRITE(*,*) 'Found:',Found,'isval',isvalid |
102 | 1 | equemene | ! WRITE(*,*) 'Debug is ',isvalid," for ",Trim(LString) |
103 | 1 | equemene | |
104 | 1 | equemene | if (.NOT.Found) THEN |
105 | 1 | equemene | IF (Tall) THEN |
106 | 1 | equemene | WRITE(*,*) 'The option ',String, & |
107 | 1 | equemene | ' is not recognized' |
108 | 1 | equemene | WRITE(*,*) 'Assigning value ',ValAll |
109 | 1 | equemene | isValid=ValAll |
110 | 1 | equemene | ELSE |
111 | 1 | equemene | isValid=.FALSE. |
112 | 1 | equemene | END IF |
113 | 1 | equemene | NEntries=Nentries+1 |
114 | 1 | equemene | List(Nentries)=Trim(LString) |
115 | 1 | equemene | Value(Nentries)=Valall |
116 | 1 | equemene | END IF |
117 | 1 | equemene | |
118 | 1 | equemene | END function valid |