File: wrtmsg.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, sid
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (136 lines) | stat: -rw-r--r-- 3,671 bytes parent folder | download | duplicates (2)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
      SUBROUTINE WRTMSG (FILEX)
C
      EXTERNAL        LSHIFT,RSHIFT,ANDF,ORF,COMPLF
      INTEGER         FILE,FILEX,TITLE,TTLSAV(32,6),COUNT,LST(50),
     1                FOR(100),RET,EJECT,REW,BLANK,FORMAX,MASK1(5),
     2                MASK2(5),POS,ANDF,ORF,RSHIFT,COMPLF,SYSX
CWKBI
      CHARACTER*1     FORMT(400)
      COMMON /OUTPUT/ TITLE(32,6)
      COMMON /MACHIN/ MACH
      COMMON /SYSTEM/ SYSX(41)
CWKBI
      EQUIVALENCE     (FORMT, FOR)
      EQUIVALENCE  (XLST,LST)
      EQUIVALENCE     (SYSX( 2),MO   ), (SYSX( 9),MAXLIN),
     1                (SYSX(12),COUNT), (SYSX(39),NBPC  ),
     2                (SYSX(40),NBPW ), (SYSX(41),NCPW  )
      DATA    LSTMAX, REW,FORMAX,BLANK/ 50,1,100,4H     /
C
      N2CPW  = NCPW/2
      N2CPW1 = N2CPW - 1
      NBPC2  = 2*NBPC
      MASK1(1) = RSHIFT(COMPLF(0),NBPC2)
      MASK2(1) = COMPLF(MASK1(1))
      DO 10 I  = 2,N2CPW
      MASK1(I) = ORF(MASK2(1),RSHIFT(MASK1(I-1),NBPC2))
      MASK2(I) = COMPLF(MASK1(I))
   10 CONTINUE
      FILE = FILEX
C
      DO 20 J = 1,6
      DO 20 I = 1,32
      TTLSAV(I,J) = TITLE(I,J)
   20 CONTINUE
C
   30 COUNT = MAXLIN
   40 CALL READ (*500,*30,FILE,N,1,0,NF)
      IF (N) 100,130,110
C
C     A TITLE OR SUBTITLE FOLLOWS.
C
  100 N = -N
      IF (N .LE. 6) CALL FREAD (FILE,TITLE(1,N),32,0)
      IF (N .GT. 6) CALL FREAD (FILE,0,-32,0)
      GO TO 30
C
C     A MESSAGE FOLLOWS...N = NUMBER OF LIST ITEMS.
C
  110 IF (N .LE. LSTMAX) GO TO 120
      CALL FREAD (FILE,0,-N,0)
      GO TO 130
  120 IF (N .NE. 0) CALL FREAD (FILE,LST,N,0)
C
C     READ THE CORRESPONDING FORMAT...NF = SIZE OF THE FORMAT.
C
  130 CALL FREAD (FILE,NF,1,0)
      IF (NF) 140,150,160
  140 COUNT = COUNT - NF
      GO TO 130
  150 COUNT = MAXLIN
      GO TO 130
  160 IF (NF .LE. FORMAX) GO TO 170
      CALL FREAD (FILE,0,-NF,0)
      GO TO 30
  170 CALL FREAD (FILE,FOR,NF,0)
C
C     CONDENSE FOR ARRAY TO ACQUIRE CONTIGUOUS HOLLERITH STRINGS.
C
      IF (NCPW .EQ. 4) GO TO 300
      DO 290 I = 2,NF
      K1 = 1
      POS= 2*I - 1
      J  = (POS+N2CPW1)/N2CPW
      K2 = POS - N2CPW*(J-1)
      ASSIGN 200 TO RET
      GO TO 240
  200 CONTINUE
      K1 = 2
      IF (K2+1 .LE. N2CPW) GO TO 210
      K2 = 1
      J  = J + 1
      GO TO 220
  210 K2 = K2 + 1
  220 CONTINUE
      ASSIGN 230 TO RET
      GO TO 240
  230 CONTINUE
      GO TO 290
  240 IF (K2-K1) 250,260,270
  250 FOR(J) = ORF(ANDF(FOR(J),MASK1(K2)),
     1         LSHIFT(ANDF(FOR(I),MASK2(K1)),(NBPC2*(K1-K2))))
      GO TO 280
  260 FOR(J) = ORF(ANDF(FOR(J),MASK1(K2)),ANDF(FOR(I),MASK2(K1)))
      GO TO 280
  270 FOR(J) = ORF(ANDF(FOR(J),MASK1(K2)),
     1         RSHIFT(ANDF(FOR(I),MASK2(K1)),(NBPC2*(K2-K1))))
      GO TO 280
  280 CONTINUE
      GO TO RET, (200,230)
  290 CONTINUE
  300 CONTINUE
C
C     PRINT THE LINE
C
      IF (EJECT(1) .EQ. 0) GO TO 450
      DO 440 J = 4,6
      DO 410 I = 1,32
      IF (TITLE(I,J) .NE. BLANK) GO TO 420
  410 CONTINUE
      COUNT = COUNT - 1
      GO TO 440
  420 WRITE  (MO,430) (TITLE(I,J),I=1,32)
  430 FORMAT (2X,32A4)
  440 CONTINUE
      WRITE  (MO,430)
      COUNT = COUNT + 1
C
  450 IF(N.EQ.0 .AND. (MACH.EQ.5 .OR. MACH.EQ.12) )GO TO 470
      IF (MACH .EQ. 5 .OR. MACH .EQ. 12 ) GO TO 460
      CALL FORWRT ( FORMT, LST, N )
      GO TO 40
  460 WRITE (MO,FOR,ERR=465) (LST(J),J=1,N)
  465 CONTINUE
      GO TO 40
  470 WRITE (MO,FOR)
      GO TO 40
C
C     END OF MESSAGE FILE
C
  500 CALL CLOSE (FILE,REW)
      DO 510 J = 1,6
      DO 510 I = 1,32
      TITLE(I,J) = TTLSAV(I,J)
  510 CONTINUE
      RETURN
      END