1 |
chuckv |
4 |
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 |
|
|
|