summaryrefslogtreecommitdiff
path: root/Ganlib/src/LCMLIB.f
blob: ceacc8e043e7f3c450280ebd52399c06b9d0a472 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
*DECK LCMLIB
      SUBROUTINE LCMLIB(IPLIST)
*
*----------------------------------------------------------------------
*
*Purpose:
* List the LCM entries contained in a table or a XSM file.
*
*Copyright:
* Copyright (C) 1993 Ecole Polytechnique de Montreal
*
*Author(s): A. Hebert
*
*Parameters: input
* IPLIST  address of the table or handle to the XSM file.
*
*----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPLIST
*----
*  LOCAL VARIABLES
*----
      PARAMETER (NTYPE=11)
      CHARACTER NAMT*12,NAMLCM*12,MYNAME*12,FIRST*12,CTYPE(NTYPE)*16,
     1 CMEDIU(2)*8
      LOGICAL EMPTY,LCM
      SAVE CTYPE,CMEDIU
      CHARACTER(LEN=12) HSIGN
      DATA (CTYPE(ITY),ITY=1,NTYPE)/'DIRECTORY','INTEGER','REAL',
     > 'CHARACTER','DOUBLE PRECISION','LOGICAL','COMPLEX','UNDEFINED',
     > ' ',' ','LIST'/
      DATA (CMEDIU(II),II=1,2)/'TABLE','XSM FILE'/
*
      CALL LCMINF(IPLIST,NAMLCM,MYNAME,EMPTY,ILONG,LCM)
      IMED=1
      IF(.NOT.LCM) IMED=2
      ITOT=0
      NAMT=' '
      IF(ILONG.EQ.-1) THEN
         IF(EMPTY) THEN
            WRITE (6,80) MYNAME,CMEDIU(IMED),NAMLCM
            RETURN
         ENDIF
         CALL LCMNXT(IPLIST,NAMT)
         FIRST=NAMT
         WRITE(6,100) MYNAME,CMEDIU(IMED),NAMLCM
         INMT=0
*
   10    INMT=INMT+1
         CALL LCMLEN(IPLIST,NAMT,ILONG,ITYLCM)
         IF((ITYLCM.EQ.0).OR.(ITYLCM.EQ.10)) THEN
            WRITE (6,120) INMT,NAMT,ILONG,CTYPE(ITYLCM+1)
         ELSE IF((ITYLCM.GE.1).AND.(ITYLCM.LE.6)) THEN
            IF((ILONG.EQ.3).AND.(ITYLCM.EQ.3)) THEN
               CALL LCMGTC(IPLIST,NAMT,12,HSIGN)
               WRITE (6,110) INMT,NAMT,ILONG,CTYPE(ITYLCM+1),
     1         HSIGN
            ELSE
               WRITE (6,120) INMT,NAMT,ILONG,CTYPE(ITYLCM+1)
            ENDIF
            ITOT=ITOT+ILONG
         ELSE
            WRITE (6,120) INMT,NAMT,ILONG,CTYPE(8)
         ENDIF
         CALL LCMNXT(IPLIST,NAMT)
         IF(NAMT.EQ.FIRST) GO TO 20
         GO TO 10
*
   20    WRITE(6,130) MYNAME,ITOT
      ELSE
         IF(ILONG.EQ.0) THEN
            WRITE (6,90) MYNAME,CMEDIU(IMED),NAMLCM
            RETURN
         ENDIF
         WRITE(6,100) MYNAME,CMEDIU(IMED),NAMLCM
         DO 30 INMT=1,ILONG
         CALL LCMLEL(IPLIST,INMT,ILONG,ITYLCM)
         IF((ITYLCM.EQ.0).OR.(ITYLCM.EQ.10)) THEN
            WRITE (6,120) INMT,NAMT,ILONG,CTYPE(ITYLCM+1)
         ELSE IF((ITYLCM.GE.1).AND.(ITYLCM.LE.6)) THEN
            WRITE (6,120) INMT,NAMT,ILONG,CTYPE(ITYLCM+1)
            ITOT=ITOT+ILONG
         ELSE
            WRITE (6,120) INMT,NAMT,ILONG,CTYPE(8)
         ENDIF
   30    CONTINUE
         WRITE(6,140) MYNAME,ITOT
      ENDIF
      RETURN
*
   80 FORMAT (/10H LCMLIB: ',A12,31H' IS AN EMPTY DIRECTORY OF THE ,A8,
     1 2H ',A12,2H'.)
   90 FORMAT (/10H LCMLIB: ',A12,26H' IS AN EMPTY LIST OF THE ,A8,2H ',
     1 A12,2H'.)
  100 FORMAT (//38H LCMLIB: CONTENT OF ACTIVE DIRECTORY ',A12,
     1 9H' OF THE ,A8,2H ',A12,2H'://5X,10HBLOCK NAME,10(1H-),4X,
     2 6HLENGTH,4X,4HTYPE/)
  110 FORMAT (1X,I8,3H  ',A12,1H',I10,4X,A16,2H=',A12,1H')
  120 FORMAT (1X,I8,3H  ',A12,1H',I10,4X,A16)
  130 FORMAT (//37H TOTAL NUMBER OF WORDS ON DIRECTORY ',A12,3H' =,
     > I10/)
  140 FORMAT (//32H TOTAL NUMBER OF WORDS ON LIST ',A12,3H' =,I10/)
      END