21 INTEGER,
PARAMETER ::
maxdep = 18
23 INTEGER,
PARAMETER ::
maxcond = 9
25 INTEGER,
PARAMETER ::
maxenum = 70
29 CHARACTER(LEN=KEYWORD_LEN) :: knom(2)
35 CHARACTER(LEN=STRING_LEN) :: mnemo
40 CHARACTER(LEN=STRING_LEN) :: submit
42 CHARACTER(LEN=DEFAUT_LEN) :: defaut(2)
44 CHARACTER(LEN=CHOIX_LEN) :: choix(2)
46 CHARACTER(LEN=KEYWORD_LEN) :: hash_id(
maxenum,2)
47 CHARACTER(LEN=KEYWORD_LEN) :: hash_val(
maxenum,2)
49 CHARACTER(LEN=STRING_LEN) ::
rubrique(2,3)
51 CHARACTER(LEN=STRING_LEN) :: compose
53 CHARACTER(LEN=STRING_LEN) :: comport
55 CHARACTER(LEN=STRING_LEN) :: controle
57 CHARACTER(LEN=STRING_LEN) :: apparence
61 CHARACTER(LEN=AIDE_LEN) :: aide(2)
65 CHARACTER(LEN=COND_LEN) cond(
maxcond)
67 CHARACTER(LEN=CONSIGNE_LEN) consigne(
maxcond,2)
72 INTEGER,
PARAMETER ::
nmax=121
74 INTEGER,
PARAMETER ::
rmax=50
96 SUBROUTINE int2str(STRING,I,POS)
99 CHARACTER(LEN=3),
INTENT(INOUT) :: STRING
100 INTEGER,
INTENT(IN) :: I
101 INTEGER,
INTENT(INOUT) :: POS
103 WRITE(string,
'(I3)') i
106 IF(string(pos:pos).NE.
' ')
EXIT 116 INTEGER,
INTENT(IN) :: NFIC
118 INTEGER IKEY,ITYP,I,IERR,J
119 INTEGER NTYP(4),OLD_NTYP(4)
121 INTEGER,
ALLOCATABLE :: ITYP2KEY(:,:)
122 LOGICAL,
ALLOCATABLE :: IDX_USED(:,:)
123 CHARACTER(LEN=PATH_LEN) :: USED_IDX(4)
124 CHARACTER(LEN=3) :: I2S
125 INTEGER :: LAST_TRUE,IDX
133 ntyp(ityp) = ntyp(ityp) + 1
134 max_idx(ityp) = max(max_idx(ityp),
mydico(ikey)%KINDEX)
137 WRITE(*,*)
'---- INDEX INFORMATIONS ----' 138 WRITE(*,*)
'NUMBER OF KEY WORD BY TYPE AND MAX INDEX:' 139 WRITE(*,*)
'FOR INTEGER: ',ntyp(1),max_idx(1)
140 WRITE(*,*)
'FOR REAL : ',ntyp(2),max_idx(2)
141 WRITE(*,*)
'FOR LOGICAL: ',ntyp(3),max_idx(3)
142 WRITE(*,*)
'FOR STRING : ',ntyp(4),max_idx(4)
144 ALLOCATE(ityp2key(maxval(ntyp),4),stat=ierr)
145 CALL check_allocate(ierr,
'ITYP2KEY')
157 IF(
mydico(ikey)%KINDEX.NE.idx) cycle
158 ntyp(ityp) = ntyp(ityp) + 1
159 ityp2key(ntyp(ityp),ityp) = ikey
166 IF(ntyp(i).NE.old_ntyp(i))
THEN 167 WRITE(*,*)
'ERROR ON INDEX FOR TYPE',i
172 ALLOCATE(idx_used(maxval(max_idx),4),stat=ierr)
173 CALL check_allocate(ierr,
'IDX_USED')
176 idx_used(
mydico(ikey)%KINDEX,
mydico(ikey)%KTYPE) = .true.
179 used_idx(ityp) = repeat(
' ',
path_len)
180 IF(ntyp(ityp).EQ.0) cycle
182 last_true =
mydico(ityp2key(1,ityp))%KINDEX
184 used_idx(ityp)(1:1) = i2s(i:3)
186 ikey = ityp2key(j,ityp)
188 IF(idx.EQ.last_true+1)
THEN 192 used_idx(ityp) = trim(used_idx(ityp)) //
'-' // i2s(i:3)
195 used_idx(ityp) = trim(used_idx(ityp)) //
',' // i2s(i:3)
198 IF(idx_used(max_idx(ityp),ityp)
199 & .AND.idx_used(max_idx(ityp)-1,ityp))
THEN 200 CALL int2str(i2s,max_idx(ityp),i)
201 used_idx(ityp) = trim(used_idx(ityp)) //
'-' // i2s(i:3)
204 WRITE(nfic,
'(A)')
'/' 205 WRITE(nfic,
'(3A,I3)')
'/ INTEGER INDEX USED: ',trim(used_idx(1)),
207 WRITE(nfic,
'(3A,I3)')
'/ REAL INDEX USED: ',trim(used_idx(2)),
209 WRITE(nfic,
'(3A,I3)')
'/ LOGICAL INDEX USED: ',trim(used_idx(3)),
211 WRITE(nfic,
'(3A,I3)')
'/ STRING INDEX USED: ',trim(used_idx(4)),
213 WRITE(nfic,
'(A)')
'/' 224 INTEGER :: I,J,IKEY,LNG,RKEY
225 LOGICAL :: ALREADY_IN
233 IF(
mydico(1)%RUBRIQUE(lng,i).NE.
' ')
THEN 237 &
mydico(1)%RUBRIQUE(lng,i),lng)
239 WRITE(*,*)
'ERROR RUBRIQUE: ',
240 & trim(
mydico(1)%RUBRIQUE(lng,i))
241 WRITE(*,*)
'IS ALSO A KEYWORD PLEASE RENAME RUBRIQUE' 248 IF(
mydico(ikey)%RUBRIQUE(lng,i).NE.
' ')
THEN 252 IF(
mydico(ikey)%RUBRIQUE(lng,i)
259 IF(.NOT.already_in)
THEN 262 &
mydico(ikey)%RUBRIQUE(lng,i)
264 &
mydico(ikey)%RUBRIQUE(lng,i),lng)
266 WRITE(*,*)
'ERROR RUBRIQUE: ',
267 & trim(
mydico(ikey)%RUBRIQUE(lng,i))
268 WRITE(*,*)
'IS ALSO A KEYWORD PLEASE RENAME RUBRIQUE' 284 INTEGER :: IRUB1,IRUB2,IRUB3,IKEY
292 CALL check_allocate(ierr,
'RUB1_DEP')
294 & max(
nrub(lng,3),1)),
296 CALL check_allocate(ierr,
'RUB2_DEP')
299 DO irub1 = 1,
nrub(lng,1)
300 DO irub2 = 1,
nrub(lng,2)
302 IF (
nrub(lng,3).NE.0)
THEN 303 DO irub3 = 1,
nrub(lng,3)
309 rub2_dep(irub1,irub2,irub3) = .true.
330 DO irub1 = 1,
nrub(lng,1)
331 WRITE(*,*) repeat(
'--',1),trim(
rubrique(lng,irub1,1))
332 DO irub2 = 1,
nrub(lng,2)
334 WRITE(*,*) repeat(
'--',2),trim(
rubrique(lng,irub2,2))
336 DO irub3 = 1,
nrub(lng,3)
337 IF(
rub2_dep(irub1,irub2,irub3))
THEN 338 WRITE(*,*) repeat(
'--',3),trim(
rubrique(lng,irub3,3))
354 CHARACTER(LEN=STRING_LEN) :: RUB
355 INTEGER,
INTENT(OUT) :: IDX
356 INTEGER,
INTENT(OUT) :: LEVEL
383 INTEGER,
INTENT(IN) :: IKEY
384 CHARACTER(LEN=KEYWORD_LEN) :: ID
385 INTEGER,
INTENT(IN) :: LNG
391 IF(
mydico(ikey)%HASH_ID(i,lng)(1:1).EQ.
' ')
EXIT 392 IF (id.EQ.
mydico(ikey)%HASH_ID(i,lng))
THEN 407 SUBROUTINE dump_list(NFIC,KTYPE,STR,STR_LEN,CMD,CMD_LEN)
410 INTEGER,
INTENT(IN) :: NFIC
411 INTEGER,
INTENT(IN) :: KTYPE
412 INTEGER,
INTENT(IN) :: STR_LEN
413 CHARACTER(LEN=STR_LEN) :: STR
414 INTEGER,
INTENT(IN) :: CMD_LEN
415 CHARACTER(LEN=CMD_LEN),
INTENT(IN) :: CMD
417 INTEGER LENGTH, IDB, IDE, IDX
419 length = len(trim(str))
421 IF(ktype.EQ.4.OR.cmd(1:5).EQ.
'CHOIX')
THEN 423 IF(length.GT.60.OR.cmd(1:5).EQ.
'CHOIX')
THEN 426 ide = index(str(1:length),
';')
427 WRITE(nfic,
'(2A)') cmd,
" =" 428 WRITE(nfic,
'(3A)')
"'",str(idb:ide-1),
"';" 431 idx = index(str(idb:length),
';')
433 IF(idx.EQ.0.OR.idb.GT.length)
EXIT 434 WRITE(nfic,
'(3A)')
"'",
435 & str(idb:ide-1),
"';" 437 WRITE(nfic,
'(3A)')
"'",
438 & str(idb:length),
"'" 441 WRITE(nfic,
'(4A)') cmd,
" = '",trim(str),
"'" 444 IF(length.GT.60)
THEN 447 ide = index(str(1:length),
';')
448 WRITE(nfic,
'(2A)') cmd,
" =" 449 WRITE(nfic,
'(2A)') str(idb:ide-1),
";" 452 idx = index(str(idb:length),
';')
454 IF(idx.EQ.0.OR.idb.GT.length)
EXIT 455 WRITE(nfic,
'(2A)') str(idb:ide-1),
";" 457 WRITE(nfic,
'(A)') str(idb:length)
460 WRITE(nfic,
'(3A)') cmd,
" = ",trim(str)
474 INTEGER,
INTENT(IN) :: IKEY
475 INTEGER,
INTENT(IN) :: NFIC
476 INTEGER,
INTENT(IN) :: LNG
478 INTEGER LENGTH, IDB, IDE, IDX
479 CHARACTER(LEN=DEFAUT_LEN) :: STRING
482 IF(
mydico(ikey)%KTYPE.EQ.4)
THEN 483 string =
mydico(ikey)%DEFAUT(lng)
484 length = len(trim(
mydico(ikey)%DEFAUT(lng)))
486 IF(length.GT.70)
THEN 489 ide = index(string(1:length),
';')
490 WRITE(nfic,
'(3A)')
"DEFAULT VALUE : & '",
491 & string(idb:ide),
"\\" 494 idx = index(string(idb:length),
';')
496 IF(idx.EQ.0.OR.idb.GT.length)
EXIT 497 WRITE(nfic,
'(3A)')
" & ",
498 & string(idb:ide),
"\\" 500 WRITE(nfic,
'(3A)')
" & ",
501 & string(idb:length),
"'\\" 504 WRITE(nfic,
'(3A)')
"DEFAULT VALUE : & '",
505 & trim(
mydico(ikey)%DEFAUT(lng)),
"'\\" 509 WRITE(nfic,
'(3A)')
"DEFAULT VALUE : & ",
510 & trim(
mydico(ikey)%DEFAUT(lng)),
"\\" 525 INTEGER,
INTENT(IN) :: IKEY
526 INTEGER,
INTENT(IN) :: IRUB
527 INTEGER,
INTENT(IN) :: LEVEL
528 INTEGER,
INTENT(IN) :: LNG
532 IF(
mydico(ikey)%RUBRIQUE(lng,level).EQ.
547 CHARACTER(LEN=*),
INTENT(IN) :: CHAINE
548 INTEGER,
INTENT(INOUT) :: ILONG
549 INTEGER,
INTENT(INOUT) :: NUMERO
550 INTEGER,
INTENT(INOUT) :: LNG
552 CHARACTER(LEN=9) :: MOTPRO(15)
553 parameter( motpro = (/
554 &
'NOM ',
'TYPE ',
'INDEX ',
'TAILLE ',
'DEFAUT ',
555 &
'AIDE ',
'CHOIX ',
'RUBRIQUE ',
'NIVEAU ',
'MNEMO ',
556 &
'COMPOSE ',
'COMPORT ',
'CONTROLE ',
'APPARENCE',
'SUBMIT ' /) )
558 INTEGER :: LONPRO(15),I
559 parameter( lonpro = (/ 3,4,5,6,6,4,5,8,6,5,7,7,8,9,6 /) )
564 IF (chaine(ilong:ilong).EQ.
'1')
THEN 570 IF (ilong.EQ.lonpro(i))
THEN 571 IF (chaine(1:ilong).EQ.motpro(i)(1:ilong))
THEN 589 CHARACTER(LEN=KEYWORD_LEN),
INTENT(IN) :: KEY_NAME
590 INTEGER,
INTENT(IN) :: LNG
597 IF(
mydico(i)%KNOM(lng).EQ.key_name)
THEN 612 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: FILENAME
614 INTEGER NFIC, NDEP, IKEY, IKEY_DEP, I, ICOND, IERR
615 CHARACTER(LEN=KEYWORD_LEN) KEY_NAME
616 CHARACTER(LEN=COND_LEN) COND
617 CHARACTER(LEN=CONSIGNE_LEN) CONSIGNE
618 CHARACTER(LEN=STRING_LEN) RUB
622 WRITE(*,*)
'---- READING DEPENDENCIES ----' 623 WRITE(*,*)
'READING: ',trim(filename)
624 OPEN(nfic,file=filename,iostat=ierr)
625 CALL check_call(ierr,
'OPEN:DEPEN')
628 READ(nfic,*,iostat=ierr) ndep, icond
631 READ(nfic,
'(A)') cond
632 READ(nfic,
'(A)') key_name
635 WRITE(*,*)
'UNKNOWN KEYWORD:' 636 WRITE(*,*) trim(key_name)
642 READ(nfic,
'(A)') consigne
643 mydico(ikey)%COND(-icond) = cond
645 READ(nfic,
'(A)') consigne
647 mydico(ikey)%DEPEN(-icond,1) = -1
649 ELSE IF(icond.NE.0)
THEN 650 mydico(ikey)%COND(icond) = cond
652 READ(nfic,
'(A)') key_name
654 IF(ikey_dep.EQ.-1)
THEN 655 WRITE(*,*)
'UNKNOWN KEYWORD:' 656 WRITE(*,*) trim(key_name)
660 mydico(ikey)%DEPEN(icond,i) = ikey_dep
664 mydico(ikey)%COND(1) = cond
671 READ(nfic,
'(A)',iostat=ierr) rub
675 WRITE(
lu,*)
'RUBRIQUE UNKNOWN IN DEPENDANCIES FILE: ',
690 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: FILENAME
691 CHARACTER(LEN=AIDE_LEN) :: TMP
692 INTEGER :: IKEY,IERR,LNG,I,J
694 INTEGER LCAR,ICOL,JCOL,ILONG,NUMERO,I2
698 LOGICAL DYNAM,AIDLNG,VUMOT
700 CHARACTER(LEN=1) PTVIRG,QUOTE
701 CHARACTER(LEN=9) TYPE
702 CHARACTER(LEN=72) LIGNE
703 CHARACTER(LEN=PATH_LEN) TYPE2
704 CHARACTER(LEN=AIDE_LEN) :: TEMP
707 CHARACTER(LEN=PATH_LEN),
EXTERNAL :: MYCARLU
708 CHARACTER(LEN=AIDE_LEN),
EXTERNAL :: MYAIDELU
709 INTEGER,
EXTERNAL :: INTLU
710 LOGICAL,
EXTERNAL :: LOGLU
711 DOUBLE PRECISION,
EXTERNAL :: REALU
712 INTEGER,
EXTERNAL :: NEXT,PREV,PREVAL,LONGLU
714 INTEGER ERR_LEVEL, ERR_LNG
718 WRITE(*,*)
'---- READING PROCESS ----' 719 WRITE(*,*)
'READING: ',trim(filename)
720 OPEN(
nfic,file=filename,iostat=ierr)
721 CALL check_call(ierr,
'OPEN:DICO')
750 icol = next(icol+1,ligne)
762 IF ( ligne(icol:icol).EQ.
'&' )
THEN 763 icol = preval(icol+1,ligne,
' ',char(9),
' ')
764 icol = next(icol+1,ligne)
768 i2 = preval(icol+1,ligne,
'=',
':',
'=')
771 jcol = prev(i2,ligne)
772 ilong = jcol - icol + 1
779 WRITE(*,*)
'UNKNOWN KEY: ',ligne(icol:jcol)
784 IF((numero.EQ.1).AND.(lng.EQ.
lng_fr))
THEN 796 mydico(ikey)%DEFAUT(1) =
'OBLIGATOIRE' 797 mydico(ikey)%DEFAUT(2) =
'MANDATORY' 823 mydico(ikey)%DEPEN(:,:) = 0
826 icol = preval(icol+1,ligne,
'=',
':',
'=')
861 IF (.NOT.(vumot)) nbmot = nbmot + 1
866 IF (.NOT.(vumot)) vumot=.true.
869 tmp= mycarlu(lcar,icol,ligne,quote,len(
param))
871 mydico(ikey)%KNOM(lng)=tmp(1:min(72,longu))
873 icol = next(icol+1,ligne)
877 ELSE IF(numero.EQ.2)
THEN 879 IF (ordre.NE.1)
GOTO 1500
881 type2= mycarlu(lcar,icol,ligne,quote,len(type))
882 TYPE=type2(1:min(lcar,9))
883 IF(
TYPE(1:6).EQ.
'ENTIER' 884 & .OR.
TYPE(1:8).EQ.
'INTEGER') then
886 ELSEIF(
TYPE(1:4).EQ.
'REEL' 887 & .OR.
TYPE(1:4).EQ.
'REAL') then
889 ELSEIF(
TYPE(1:7).EQ.
'LOGIQUE' 890 & .OR.
TYPE(1:7).EQ.
'LOGICAL') then
892 ELSEIF(
TYPE(1:9).EQ.
'CARACTERE' 893 & .OR.
TYPE(1:6).EQ.
'STRING') then
897 WRITE (
lu,1003) ligne
898 1003
FORMAT(1x,a72,/,1x,
'UNKNOWN TYPE ON THIS LINE')
903 icol = next(icol+1,ligne)
907 ELSE IF(numero.EQ.3)
THEN 908 IF (ordre.NE.2)
GOTO 1500
910 indx = intlu(icol,ligne)
911 icol = next(icol+1,ligne)
917 IF (nign.GT.100)
THEN 918 WRITE(
lu,*)
'TOO MANY WORDS FOR EDAMOX',
928 ELSE IF(numero.EQ.4)
THEN 929 IF (ordre.NE.3)
GOTO 1500
931 mydico(ikey)%TAILLE = intlu(icol,ligne)
932 icol = next(icol+1,ligne)
937 ELSE IF(numero.EQ.5)
THEN 940 IF (ordre.LT.3.OR.ordre.GT.6)
GOTO 1500
942 mydico(ikey)%DEFAUT(lng) = mycarlu(lcar,icol,ligne,quote,
943 & len(
mydico(ikey)%DEFAUT(lng)))
946 icol = next(icol+1,ligne)
949 IF(
mydico(ikey)%TAILLE.LE.1)
EXIT 954 IF(ligne(icol:icol).NE.ptvirg)
THEN 958 mydico(ikey)%DEFAUT(lng) = trim(
mydico(ikey)%DEFAUT(lng))
959 & //ptvirg// mycarlu(lcar,icol,ligne,quote,
960 & len(
mydico(ikey)%DEFAUT(lng)))
963 icol = next(icol+1,ligne)
968 ELSE IF(numero.EQ.6)
THEN 971 & myaidelu(icol,ligne)
977 ELSE IF(numero.EQ.7)
THEN 979 mydico(ikey)%CHOIX(lng) = mycarlu(lcar,icol,ligne,quote,
980 & len(
mydico(ikey)%CHOIX(lng)))
983 icol = next(icol+1,ligne)
989 IF(ligne(icol:icol).NE.ptvirg)
THEN 994 & trim(
mydico(ikey)%CHOIX(lng))
995 & //ptvirg//mycarlu(lcar,icol,ligne,quote,
996 & len(
mydico(ikey)%CHOIX(lng)))
999 icol = next(icol+1,ligne)
1002 ELSE IF(numero.EQ.8)
THEN 1005 mydico(ikey)%RUBRIQUE(lng,i)= mycarlu(lcar,icol,ligne,quote,
1006 & len(
mydico(ikey)%RUBRIQUE(lng,i)))
1009 icol = next(icol+1,ligne)
1015 IF(ligne(icol:icol).NE.ptvirg)
THEN 1020 mydico(ikey)%RUBRIQUE(lng,i) =
1021 & mycarlu(lcar,icol,ligne,quote,
1022 & len(
mydico(ikey)%RUBRIQUE(lng,i)))
1025 icol = next(icol+1,ligne)
1028 ELSE IF(numero.EQ.9)
THEN 1030 mydico(ikey)%NIVEAU = intlu(icol,ligne)
1031 icol = next(icol+1,ligne)
1033 ELSE IF(numero.EQ.10)
THEN 1036 & mycarlu(lcar,icol,ligne,quote,
1037 & len(
mydico(ikey)%MNEMO))
1038 icol = next(icol+1,ligne)
1040 ELSE IF(numero.EQ.11)
THEN 1043 & mycarlu(lcar,icol,ligne,quote,
1044 & len(
mydico(ikey)%COMPOSE))
1045 icol = next(icol+1,ligne)
1047 ELSE IF(numero.EQ.12)
THEN 1049 temp = myaidelu(icol,ligne)
1052 ELSE IF(numero.EQ.13)
THEN 1054 mydico(ikey)%CONTROLE = mycarlu(lcar,icol,ligne,quote,
1055 & len(
mydico(ikey)%CONTROLE))
1058 icol = next(icol+1,ligne)
1065 IF(ligne(icol:icol).NE.ptvirg)
THEN 1070 & //ptvirg// mycarlu(lcar,icol,ligne,quote,
1071 & len(
mydico(ikey)%CONTROLE))
1075 icol = next(icol+1,ligne)
1077 ELSE IF(numero.EQ.14)
THEN 1080 & mycarlu(lcar,icol,ligne,quote,
1081 & len(
mydico(ikey)%APPARENCE))
1082 icol = next(icol+1,ligne)
1088 IF(ligne(icol:icol).NE.ptvirg)
THEN 1093 & trim(
mydico(ikey)%SUBMIT)
1094 & //ptvirg//mycarlu(lcar,icol,ligne,quote,
1095 & len(
mydico(ikey)%APPARENCE))
1098 icol = next(icol+1,ligne)
1102 ELSE IF (numero .EQ. 15)
THEN 1103 IF (ordre.NE.3.AND.ordre.NE.4)
GOTO 1500
1107 mydico(ikey)%SUBMIT = mycarlu(lcar,icol,ligne,quote,
1108 & len(
mydico(ikey)%SUBMIT))
1111 icol = next(icol+1,ligne)
1117 IF(ligne(icol:icol).NE.ptvirg)
THEN 1122 & trim(
mydico(ikey)%SUBMIT)
1123 & //ptvirg//mycarlu(lcar,icol,ligne,quote,
1124 & len(
mydico(ikey)%SUBMIT))
1127 icol = next(icol+1,ligne)
1137 WRITE(
lu,*)
'-------------------------------' 1138 WRITE(
lu,*)
'- ERROR IN THE DICTIONARY -' 1139 WRITE(
lu,*)
'-------------------------------' 1147 WRITE(*,*)
'TOTAL NUMBER OF KEY IN THE DICTIONARY: ',ikey
1154 WRITE(*,*)
'---- CHECKING RUBRIQUES ----' 1155 WRITE(*,*)
'CHECK OF TRANSLATION FOR RUBRIQUE' 1156 WRITE(*,*)
'NRUB',
nrub 1157 WRITE(*,*)
'LIST OF RUBRIQUES IN BOTH LANGUAGES' 1159 WRITE(*,*)
'LEVEL:',j
1161 WRITE(*,*)
'WARNING: NOT THE SAME NUMBER OF RUBRIQUES ',
1162 &
'IN FRENCH AND ENGLISH' 1164 IF(
nrub(1,err_level).GT.
nrub(2,err_level))
THEN 1171 DO i=1,minval(
nrub(:,j))
1172 WRITE(*,*) repeat(
'-',j*2),
1177 WRITE(*,*)
'ERROR IN RUBRIQUE LEVEL: ',err_level
1178 DO i=1,
nrub(err_lng, err_level)
1179 WRITE(*,*) trim(
rubrique(err_lng, i, err_level))
1193 WRITE(
lu,
'(/,1X,A72,/)') ligne
1194 WRITE(
lu,*)
'AT LINE ',
nlign,
', PRIORITY ORDER NOT RESPECTED' 1196 WRITE(
lu,*)
'EXPECTED ORDER IS :' 1197 WRITE(
lu,*)
'NOM, TYPE, INDEX, (TAILLE), (SUBMIT), (DEFAUT)' 1207 CHARACTER(LEN=KEYWORD_LEN) FUNCTION dble_quote(STRIN)
1211 CHARACTER(LEN=KEYWORD_LEN),
INTENT(IN) :: STRIN
1217 DO i=1,len(trim(strin))
1218 IF (strin(i:i).EQ.
"'")
THEN 1235 INTEGER,
INTENT(IN) :: NFIC
1236 INTEGER,
INTENT(IN) :: IKEY
1239 CHARACTER(LEN=10),
EXTERNAL :: I2STR
1241 WRITE(nfic,
'(3A)')
"NOM = '",
1243 WRITE(nfic,
'(3A)')
"NOM1 = '",trim(
mydico(ikey)%KNOM(2)),
"'" 1244 SELECT CASE(
mydico(ikey)%KTYPE)
1246 WRITE(nfic,
'(A)')
"TYPE = INTEGER" 1248 WRITE(nfic,
'(A)')
"TYPE = REAL" 1250 WRITE(nfic,
'(A)')
"TYPE = LOGICAL" 1252 WRITE(nfic,
'(A)')
"TYPE = STRING" 1254 WRITE(nfic,
'(A)')
"INDEX = "//trim(i2str(
mydico(ikey)%KINDEX))
1255 IF(
mydico(ikey)%TAILLE.NE.-1)
THEN 1256 WRITE(nfic,
'(A)')
"TAILLE = " 1257 & //trim(i2str(
mydico(ikey)%TAILLE))
1259 IF(
mydico(ikey)%SUBMIT(1:1).NE.
" ")
THEN 1260 WRITE(nfic,
'(3A)')
"SUBMIT = '",trim(
mydico(ikey)%SUBMIT),
"'" 1263 IF(
mydico(ikey)%DEFAUT(1)(1:11).NE.
'OBLIGATOIRE')
THEN 1269 WRITE(nfic,
'(3A)')
"MNEMO = '",trim(
mydico(ikey)%MNEMO),
"'" 1270 IF(
mydico(ikey)%CONTROLE(1:1).NE.
' ')
THEN 1271 WRITE(nfic,
'(A,A)')
"CONTROLE = ",
1272 & trim(
mydico(ikey)%CONTROLE)
1274 IF(
mydico(ikey)%CHOIX(1)(1:1).NE.
' ')
THEN 1276 IF(
mydico(ikey)%CHOIX(2)(1:1).EQ.
' ')
THEN 1277 WRITE(*,*)
'MISSING CHOIX FOR',
mydico(ikey)%KNOM(1)
1286 IF(
mydico(ikey)%APPARENCE(1:1).NE.
' ')
THEN 1287 WRITE(nfic,
'(A)')
"APPARENCE =" 1288 WRITE(nfic,
'(3A)')
"'",trim(
mydico(ikey)%APPARENCE),
"'" 1290 WRITE(nfic,
'(A)')
"RUBRIQUE =" 1291 WRITE(nfic,
'(2(3A),3A)')
1292 & (
"'",trim(
mydico(ikey)%RUBRIQUE(1,j)),
"';",j=1,2),
1293 &
"'",trim(
mydico(ikey)%RUBRIQUE(1,3)),
"'" 1294 WRITE(nfic,
'(A)')
"RUBRIQUE1 =" 1295 WRITE(nfic,
'(2(3A),3A)')
1296 & (
"'",trim(
mydico(ikey)%RUBRIQUE(2,j)),
"';",j=1,2),
1297 &
"'",trim(
mydico(ikey)%RUBRIQUE(2,3)),
"'" 1298 IF(
mydico(ikey)%COMPOSE(1:1).NE.
" ")
THEN 1299 WRITE(nfic,
'(3A)')
"COMPOSE = '",
1300 & trim(
mydico(ikey)%COMPOSE),
"'" 1302 IF(
mydico(ikey)%COMPORT(1:1).NE.
" ")
THEN 1303 WRITE(nfic,
'(A)')
"COMPORT =" 1304 WRITE(nfic,
'(3A)')
"'",trim(
mydico(ikey)%COMPORT),
"'" 1306 WRITE(nfic,
'(A,A)')
"NIVEAU = ",trim(i2str(
mydico(ikey)%NIVEAU))
1307 WRITE(nfic,
'(A)')
"AIDE =" 1308 WRITE(nfic,
'(3A)')
"'",trim(
mydico(ikey)%AIDE(1)),
"'" 1309 WRITE(nfic,
'(A)')
"AIDE1 =" 1310 WRITE(nfic,
'(3A)')
"'",trim(
mydico(ikey)%AIDE(2)),
"'" 1311 WRITE(nfic,
'(A)')
"/" 1322 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: FILENAME
1323 INTEGER :: NFIC,IERR
1324 INTEGER :: ITYP, IKEY
1326 INTEGER,
ALLOCATABLE :: INDEX_TYP(:,:)
1331 WRITE(*,*)
'---- DUMPING PROCESS ----' 1332 WRITE(*,*)
'DUMPING IN : ',trim(filename)
1333 OPEN(nfic,file=trim(filename),iostat=ierr)
1334 CALL check_call(ierr,
'DUMP_DICTIONARY')
1336 WRITE(*,*)
'TOTAL NUMBER OF KEY IN THE DICTIONARY: ',
nkey 1339 WRITE(nfic,
'(A)')
'&DYN' 1341 ALLOCATE(index_typ(
nkey,4),stat=ierr)
1342 CALL check_allocate(ierr,
'INDEX_TYP')
1343 index_typ(:,:) =
nkey*2
1345 index_typ(ikey,
mydico(ikey)%KTYPE) =
mydico(ikey)%KINDEX
1348 idx = minloc(index_typ(:,ityp))
1349 DO WHILE(index_typ(idx(1),ityp).LT.
nkey*2)
1351 index_typ(idx(1),ityp) =
nkey*2
1352 idx = minloc(index_typ(:,ityp))
1356 DEALLOCATE(index_typ)
1366 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: FILENAME
1367 INTEGER :: NFIC,IERR
1368 INTEGER :: IRUB1, IRUB2, IRUB3
1369 INTEGER :: IDX_RUB2, IDX_RUB3
1371 CHARACTER(LEN=10),
EXTERNAL :: I2STR
1375 WRITE(*,*)
'---- DUMPING PROCESS ----' 1376 WRITE(*,*)
'DUMPING IN : ',trim(filename)
1377 OPEN(nfic,file=trim(filename),iostat=ierr)
1378 CALL check_call(ierr,
'DUMP_DICTIONARY')
1380 WRITE(*,*)
'TOTAL NUMBER OF KEY IN THE DICTIONARY: ',
nkey 1383 WRITE(nfic,
'(A)')
'&DYN' 1384 WRITE(nfic,
'(A)')
"/ Description of a keyword" 1385 WRITE(nfic,
'(A)')
"/ NOM : French name" 1386 WRITE(nfic,
'(A)')
"/ NOM1 : English name" 1387 WRITE(nfic,
'(A)')
"/ TYPE : STRING, INTEGER, REAL, LOGICAL" 1388 WRITE(nfic,
'(A)')
"/ INDEX : Index of the keyword" 1389 WRITE(nfic,
'(A)')
"/ TAILLE : Number of values "//
1390 &
"(0 means between 1 and n)" 1391 WRITE(nfic,
'(A)')
"/ (opt) SUBMIT : Chain for files" 1392 WRITE(nfic,
'(A)')
"/ DEFAUT : Defaut value in French" 1393 WRITE(nfic,
'(A)')
"/ DEFAUT1 : Defaut value in English" 1394 WRITE(nfic,
'(A)')
"/ MNEMO : Name of the variable in the code" 1395 WRITE(nfic,
'(A)')
"/ (opt) CONTROLE : min;max for the "//
1397 WRITE(nfic,
'(A)')
"/ (opt) CHOIX : List of possible values" 1398 WRITE(nfic,
'(A)')
"/ (opt) CHOIX1 : CHOIX in french" 1399 WRITE(nfic,
'(A)')
"/ (opt) APPARENCE : Defined how the keyword "//
1401 WRITE(nfic,
'(A)')
"/ LIST, DYNLIST, TUPLE" 1402 WRITE(nfic,
'(A)')
"/ RUBRIQUE : Classification of the "//
1403 &
"keyword 3 level max" 1404 WRITE(nfic,
'(A)')
"/ RUBRIQUE1 : RUBRIQUE but in English" 1405 WRITE(nfic,
'(A)')
"/ (opt) COMPOSE : Used for fudaa" 1406 WRITE(nfic,
'(A)')
"/ (opt) COMPORT : Used for fudaa" 1407 WRITE(nfic,
'(A)')
"/ NIVEAU : Level of the keyword "//
1408 &
"(Level 0 is a mandatory keyword)" 1409 WRITE(nfic,
'(A)')
"/ AIDE : Help in French (LaTeX syntax)" 1410 WRITE(nfic,
'(A)')
"/ AIDE1 : Help in English (LaTeX syntax)" 1413 DO irub1=1,
nrub(lng,1)
1415 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
1416 WRITE(nfic,
'(3A,A,2A)')
'/',repeat(
'//',1),
1417 &
' ',trim(i2str(irub1)),
'-',
1419 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
1423 & (
mydico(ikey)%RUBRIQUE(lng,2)(1:1).EQ.
' '))
THEN 1429 DO irub2=1,
nrub(lng,2)
1432 idx_rub2 = idx_rub2 + 1
1433 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
1434 WRITE(nfic,
'(3A,A,A,A,2A)')
'/',repeat(
'//',2),
1435 &
' ',trim(i2str(irub1)),
'.',
1436 & trim(i2str(idx_rub2)),
'-',
1438 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
1443 & (
mydico(ikey)%RUBRIQUE(lng,3)(1:1).EQ.
' '))
THEN 1449 DO irub3=1,
nrub(lng,3)
1450 IF(
rub2_dep(irub1,irub2,irub3))
THEN 1451 idx_rub3 = idx_rub3 + 1
1452 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
1453 WRITE(nfic,
'(3A,A,A,A,A,A,2A)')
1454 &
'/',repeat(
'//',3),
1455 &
' ',trim(i2str(irub1)),
'.',
1456 & trim(i2str(idx_rub2)),
'.',
1457 & trim(i2str(idx_rub3)),
'-',
1459 WRITE(nfic,
'(2A)')
'/',repeat(
'/',71)
integer, parameter maxcond
subroutine identify_rubrique_depends()
subroutine read_dictionary(FILENAME)
integer, parameter maxdep
integer, parameter lng_en
integer, parameter string_len
integer, parameter maxenum
integer, parameter aide_len
subroutine identify_rubrique()
subroutine read_dependencies(FILENAME)
integer, parameter defaut_len
integer, parameter cond_len
subroutine write_default(NFIC, IKEY, LNG)
subroutine identify_rubrique_idx(RUB, IDX, LEVEL)
subroutine check_index(NFIC)
logical, dimension(:,:,:), allocatable rub2_dep
integer, dimension(2, 3) nrub
logical function has_rubrique(IKEY, IRUB, LEVEL, LNG)
subroutine int2str(STRING, I, POS)
integer, parameter lng_fr
Y. AUDOUIN & J-M HERVOUET (EDF LAB, LNHE) 09/05/2014 V7P0 First version.
character(len=string_len), dimension(2, rmax, 3) rubrique
subroutine dump_list(NFIC, KTYPE, STR, STR_LEN, CMD, CMD_LEN)
character(len=1), dimension(rmax, 3) rubrique_info
integer, parameter keyword_len
subroutine identify_key(CHAINE, ILONG, NUMERO, LNG)
subroutine dump_dictionary_index(FILENAME)
character(len=keyword_len) function get_hash_value(IKEY, ID, LNG)
integer function identify_keyword(KEY_NAME, LNG)
logical, dimension(:,:), allocatable rub1_dep
subroutine dump_dictionary_rub(FILENAME)
character(len=keyword_len) function dble_quote(STRIN)
subroutine dump_keyword(NFIC, IKEY)
integer, parameter path_len
integer, parameter consigne_len
integer, parameter choix_len
type(keyword), dimension(nmax *4) mydico
logical erreur
Y. AUDOUIN (EDF LAB, LNHE) 09/05/2014 V7P0 First version.