Ignore:
Timestamp:
Oct 30, 2017 3:39:15 PM (5 years ago)
Author:
vondreele
Message:

fix MAR345 & CBF importers to work for python 3.6 as well as python 2.7; revised importers & new fortran decompression routines for py3.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fsource/pack_f.for

    r3136 r3144  
    1515      INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1
    1616      INTEGER*2 TMP
    17       LOGICAL*1 CMPR(0:N-1)
     17      CHARACTER*1 CMPR(0:N-1)
    1818      DATA BITDECODE /0,4,5,6,7,8,16,32/
    1919      DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007',
     
    4040            SPILLBITS = 0
    4141          ELSE
    42             SPILL = CMPR(IN)
    43 C            SPILL = ICHAR(CMPR(IN))
     42            SPILL = ICHAR(CMPR(IN))
    4443            IN = IN+1
    4544            SPILLBITS = 8
     
    6564                END IF
    6665              ELSE
    67                 SPILL = CMPR(IN)
    68 C                SPILL = ICHAR(CMPR(IN))
     66                SPILL = ICHAR(CMPR(IN))
    6967                IN = IN+1
    7068                SPILLBITS = 8
     
    119117
    120118     
     119      SUBROUTINE PACK_F3(N,CMPR,MX,MY,IMG)
     120
     121Cf2py intent(in) N
     122Cf2py intent(in) CMPR
     123Cf2py depend(N) CMPR
     124Cf2py intent(in) MX
     125Cf2py intent(in) MY
     126Cf2py intent(in,out) IMG
     127Cf2py depend(MX,MY) IMG
     128
     129      IMPLICIT NONE
     130      INTEGER*4 BITDECODE(0:7),SETBITS(0:16),IN,N,MX,MY,BITNUM
     131      INTEGER*4 PIXEL,SPILLBITS,USEDBITS,VALIDS,WINDOW,TOTAL
     132      INTEGER*4 IMG(0:MX-1,0:MY-1),NEXTINT
     133      INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1
     134      INTEGER*2 TMP
     135      INTEGER*1 CMPR(0:N-1)
     136      DATA BITDECODE /0,4,5,6,7,8,16,32/
     137      DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007',
     138     1  Z'000F',Z'001F',Z'003F',Z'007F',Z'00FF',
     139     1  Z'01FF',Z'03FF',Z'07FF',Z'0FFF',Z'1FFF',
     140     1  Z'3FFF',Z'7FFF',Z'FFFF'/
     141
     142      PIXEL = 0
     143      SPILLBITS = 0
     144      SPILL = 0
     145      USEDBITS = 0
     146      VALIDS = 0
     147      WINDOW = 0
     148      ROW = 0
     149      COL = 0
     150      TOTAL = MX*MY
     151      MM1 = MX-1
     152      IN = 0
     153      DO WHILE (PIXEL .LT. TOTAL)
     154        IF (VALIDS .LT. 6) THEN
     155          IF (SPILLBITS .GT. 0) THEN
     156            WINDOW = IOR(WINDOW,ISHFT(SPILL,VALIDS))
     157            VALIDS = VALIDS + SPILLBITS
     158            SPILLBITS = 0
     159          ELSE
     160            SPILL = ICHAR(CHAR(CMPR(IN)))
     161            IN = IN+1
     162            SPILLBITS = 8
     163          END IF
     164        ELSE
     165          PIXNUM = ISHFT(1,IAND(WINDOW,SETBITS(3)))
     166          WINDOW = ISHFT(WINDOW,-3)
     167          BITNUM = BITDECODE(IAND(WINDOW,SETBITS(3)))
     168          WINDOW = ISHFT(WINDOW,-3)
     169          VALIDS = VALIDS-6
     170          DO WHILE ( (PIXNUM .GT. 0) .AND. (PIXEL .LT. TOTAL) )
     171            IF ( VALIDS .LT. BITNUM ) THEN
     172              IF ( SPILLBITS .GT. 0 ) THEN
     173                WINDOW = IOR(WINDOW,ISHFT(SPILL,VALIDS))
     174                IF ( (32-VALIDS) .GT. SPILLBITS ) THEN
     175                  VALIDS = VALIDS + SPILLBITS
     176                  SPILLBITS = 0
     177                ELSE
     178                  USEDBITS = 32-VALIDS
     179                  SPILL = ISHFT(SPILL,-USEDBITS)
     180                  SPILLBITS = SPILLBITS-USEDBITS
     181                  VALIDS = 32
     182                END IF
     183              ELSE
     184                SPILL = ICHAR(CHAR(CMPR(IN)))
     185                IN = IN+1
     186                SPILLBITS = 8
     187              END IF               
     188            ELSE
     189              PIXNUM = PIXNUM-1
     190              IF ( BITNUM .EQ. 0 ) THEN
     191                NEXTINT = 0
     192              ELSE
     193                NEXTINT = IAND(WINDOW,SETBITS(BITNUM))
     194                VALIDS = VALIDS-BITNUM
     195                WINDOW = ISHFT(WINDOW,-BITNUM)
     196                IF ( BTEST(NEXTINT,BITNUM-1) )
     197     1            NEXTINT = IOR(NEXTINT,NOT(SETBITS(BITNUM)))
     198              END IF
     199
     200              ROW = PIXEL/MX
     201              COL = MOD(PIXEL,MX)
     202              IF ( PIXEL .GT. MX ) THEN
     203                IF ( COL .EQ. 0 ) THEN
     204                  TMP = NEXTINT +
     205     1              (IMG(MM1,ROW-1)+IMG(COL+1,ROW-1)+
     206     1              IMG(COL,ROW-1)+IMG(MM1,ROW-2) +2)/4
     207                ELSE IF ( COL.EQ.MM1 ) THEN
     208                  TMP = NEXTINT +
     209     1              (IMG(COL-1,ROW)+IMG(0,ROW)+
     210     1              IMG(MM1,ROW-1)+IMG(MM1-1,ROW-1) +2)/4
     211                ELSE
     212                  TMP = NEXTINT +
     213     1              (IMG(COL-1,ROW)+IMG(COL+1,ROW-1)+
     214     1              IMG(COL,ROW-1)+IMG(COL-1,ROW-1) +2)/4
     215                END IF
     216              ELSE IF (PIXEL .NE. 0) THEN
     217                TMP = IMG(COL-1,ROW)+NEXTINT
     218              ELSE
     219                TMP = NEXTINT
     220              END IF
     221              IMG(COL,ROW) = TMP
     222              PIXEL = PIXEL+1
     223            END IF
     224          END DO
     225        END IF     
     226      END DO
     227      DO ROW=0,MM1
     228        DO COL=0,MM1
     229            IF ( IMG(COL,ROW).LT.0 ) IMG(COL,ROW) = IMG(COL,ROW)+65536
     230        END DO
     231      END DO
     232     
     233      RETURN
     234      END
     235
Note: See TracChangeset for help on using the changeset viewer.