1 |
MODULE STRINGS |
2 |
IMPLICIT NONE |
3 |
CONTAINS |
4 |
!======================================================= |
5 |
LOGICAL FUNCTION STRCMP(sStr1,sStr2) |
6 |
!Comparison of two C strings or a C string and Fortran |
7 |
!string. Stops comparison when it finds \0. |
8 |
|
9 |
CHARACTER*(*),INTENT(IN):: sStr1 |
10 |
CHARACTER*(*),INTENT(IN):: sStr2 |
11 |
|
12 |
INTEGER:: Len1, Len2, k |
13 |
|
14 |
Len1=LEN(sStr1) |
15 |
Len2=LEN(sStr2) |
16 |
STRCMP=.TRUE. |
17 |
k=1 |
18 |
DO |
19 |
IF (k.GT.Len1 .OR. k.GT.Len2) RETURN |
20 |
IF (sStr1(k:k).EQ.CHAR(0) .AND. sStr2(k:k).EQ.CHAR(0)) THEN |
21 |
RETURN |
22 |
ELSE IF (sStr1(k:k).NE.sStr2(k:k)) THEN |
23 |
STRCMP=.FALSE. |
24 |
RETURN |
25 |
END IF |
26 |
k=k+1 |
27 |
END DO |
28 |
|
29 |
END FUNCTION STRCMP |
30 |
!========================================================= |
31 |
FUNCTION C2F(sStr) |
32 |
!C string to Fortran string conversion. Resulting string |
33 |
!is padded with blanks. |
34 |
|
35 |
CHARACTER(*),INTENT(IN):: sStr |
36 |
CHARACTER(LEN=LEN(sStr)):: C2F |
37 |
|
38 |
INTEGER:: nRes |
39 |
|
40 |
nRes=SCAN(sStr,CHAR(0)) |
41 |
IF (nRes.EQ.0) THEN |
42 |
C2F=sStr |
43 |
ELSE |
44 |
C2F=sStr(1:nRes-1) |
45 |
END IF |
46 |
|
47 |
END FUNCTION C2F |
48 |
!========================================================= |
49 |
INTEGER FUNCTION CLEN(szString) |
50 |
!C-length of zero-terminated string |
51 |
|
52 |
CHARACTER(*),INTENT(IN):: szString |
53 |
|
54 |
CLEN=SCAN(szString,CHAR(0)) |
55 |
IF (CLEN.EQ.0) CLEN=LEN(szString) |
56 |
|
57 |
END FUNCTION CLEN |
58 |
!========================================================= |
59 |
END MODULE |
60 |
|
61 |
!!F2C string conversion is simple (TRIM(String)//CHAR(0)). |
62 |
|
63 |
|