File: cpystr.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 (103 lines) | stat: -rw-r--r-- 2,957 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
      SUBROUTINE CPYSTR (INBLK,OUTBLK,FLAG,COL)
C
C     CPYSTR COPIES A LOGICAL RECORD WRITTEN IN STRING FORMAT
C     FROM ONE FILE TO ANOTHER FILE.
C
C     INBLK  = 15-WORD STRING COMMUNICATION BLOCK FOR INPUT FILE
C     OUTBLK = 15-WORD STRING COMMUNICATION BLOCK FOR OUTPUT FILE
C     FLAG .NE. 0 MEANS 1ST CALL GETSTR HAS BEEN MADE FOR THE RECORD
C          .EQ. 0 MEANS 1ST CALL GETSTR HAS NOT BEEN MADE
C     COL .EQ. 0 MEANS COLUMN NUMBER IS IN INBLK(12)
C         .NE. 0 MEANS COL IS COLUMN NUMBER
C
C
      INTEGER          INBLK(15),OUTBLK(15),FLAG,PRC,WORDS,RLCMPX,TYPE,
     1                 PREC,RC,OUT,COL
      DOUBLE PRECISION XND(1)
      COMMON /ZZZZZZ/  XNS(1)
      COMMON /TYPE  /  PRC(2),WORDS(4),RLCMPX(4)
      EQUIVALENCE      (XNS(1),XND(1))
C
C     ON OPTION, MAKE 1ST CALL TO GETSTR AND THEN INITIALIZE
C
      IF (FLAG .NE. 0) GO TO 10
      INBLK(8) = -1
      CALL GETSTR (*50,INBLK)
   10 OUTBLK(2) = INBLK(2)
      OUTBLK(3) = INBLK(3)
      OUTBLK(4) = INBLK(4)
      OUTBLK(8) = -1
      OUTBLK(12) = COL
      IF (COL .EQ. 0) OUTBLK(12) = INBLK(12)
      OUTBLK(13)= 0
      TYPE = INBLK(2)
      PREC = PRC(TYPE)
      RC   = RLCMPX(TYPE)
C
C     COPY A STRING
C
   12 CALL PUTSTR (OUTBLK)
      NPREV = 0
      OUTBLK(7) = MIN0(INBLK(6),OUTBLK(6))
   14 IN   = INBLK(5)
      OUT  = OUTBLK(5)
      NSTR = OUT + RC*(OUTBLK(7) - NPREV) - 1
      IF (PREC .EQ. 2) GO TO 18
C
      DO 16 JOUT = OUT,NSTR
      XNS(JOUT) = XNS(IN)
      IN = IN + 1
   16 CONTINUE
      GO TO 20
C
   18 DO 19 JOUT = OUT,NSTR
      XND(JOUT) = XND(IN)
      IN = IN + 1
   19 CONTINUE
C
C     TEST FOR END OF INPUT STRING(S)
C
   20 IF (OUTBLK(7) .EQ. INBLK(6)+NPREV) GO TO 30
      OUTBLK(13) = OUTBLK(13) + OUTBLK(7)
      CALL ENDPUT (OUTBLK)
      OUTBLK(4) = OUTBLK(4) + OUTBLK(7)
      INBLK(6)  = INBLK(6)  - (OUTBLK(7) - NPREV)
      INBLK(5)  = IN
      GO TO 12
C
C     INPUT STRING HAS BEEN COPIED.  GET ANOTHER STRING.
C
   30 CALL ENDGET (INBLK)
      CALL GETSTR (*40,INBLK)
C
C     TEST FOR STRING CONTIGUOUS WITH PREVIOUS STRING.
C     IF SO, AND IF TERMS AVAILABLE, CONCATENATE WITH PREVIOUS STRING.
C
      IF (INBLK(4) .NE. OUTBLK(4)+OUTBLK(7)) GO TO 35
      IF (OUTBLK(7).GE. OUTBLK(6)) GO TO 35
      OUTBLK(5) = NSTR + 1
      NPREV     = OUTBLK(7)
      OUTBLK(7) = MIN0(OUTBLK(7)+INBLK(6),OUTBLK(6))
      GO TO 14
   35 OUTBLK(13) = OUTBLK(13) + OUTBLK(7)
      CALL ENDPUT (OUTBLK)
      OUTBLK(4) = INBLK(4)
      GO TO 12
C
C     NO MORE STRINGS -  CLOSE RECORD AND RETURN
C
   40 OUTBLK(8) = 1
      CALL ENDPUT (OUTBLK)
      OUTBLK(13) = (OUTBLK(13)+OUTBLK(7))*WORDS(TYPE)
      RETURN
C
C     HERE IF NO STRINGS IN RECORD - MAKE A NULL RECORD
C
   50 OUTBLK(2) = 1
      OUTBLK(3) = 0
      OUTBLK(8) = -1
      CALL PUTSTR (OUTBLK)
      OUTBLK(8) = 1
      CALL ENDPUT (OUTBLK)
      RETURN
      END