I have some old (~1995) legacy fortran code which is compiled with g77 compiler and fails on gfortran.
The problem is in following lines (incompatible types conversion, character to integer):
INTEGER CKYAN
DATA CKYAN / 'KYAN' /
The variable CKYAN is used only once as trigger:
IF(IWVTX.EQ.CKYAN)THEN
CALL FDCVERTEXSWITCHTOKYAN()
ENDIF
The integer IWVTX is read from input file (string 'KYAN' or some other string).
I do not have any significant experience in fortran and I fail to find any documentation on what is going on when I initialize integer variable from the string. I have checked with the g77 compiler. The following code:
INTEGER it,ita,it1,it2,it3,it4,it5,it6
DATA it / 'KYAN' /
DATA ita / 'KYAN' /
DATA it1 / 'K' /
DATA it2 / 'Y' /
DATA it3 / 'A' /
DATA it4 / 'N' /
DATA it5 / 'O' /
DATA it6 / 'o' /
write(*,*) 'test', it, ita, it1, it2, it3, it4, it5, it6
produces the output:
1312905547 1312905547 538976331 538976345 538976321 538976334 538976335 538976367
So, if the strings are equal the numbers are also equal. If one letter goes next to the other, it's code is incremented by 1.
The questions are the following:
- What is going on here?
- Is there a function that does the same and available gfortran?
- Or is there a simple way to fix this, not touching any other files?
Can anybody help me with this? Thank you in advance.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…