Changeset 3144 for trunk/fsource/pack_f.for
- Timestamp:
- Oct 30, 2017 3:39:15 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fsource/pack_f.for
r3136 r3144 15 15 INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1 16 16 INTEGER*2 TMP 17 LOGICAL*1 CMPR(0:N-1)17 CHARACTER*1 CMPR(0:N-1) 18 18 DATA BITDECODE /0,4,5,6,7,8,16,32/ 19 19 DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007', … … 40 40 SPILLBITS = 0 41 41 ELSE 42 SPILL = CMPR(IN) 43 C SPILL = ICHAR(CMPR(IN)) 42 SPILL = ICHAR(CMPR(IN)) 44 43 IN = IN+1 45 44 SPILLBITS = 8 … … 65 64 END IF 66 65 ELSE 67 SPILL = CMPR(IN) 68 C SPILL = ICHAR(CMPR(IN)) 66 SPILL = ICHAR(CMPR(IN)) 69 67 IN = IN+1 70 68 SPILLBITS = 8 … … 119 117 120 118 119 SUBROUTINE PACK_F3(N,CMPR,MX,MY,IMG) 120 121 Cf2py intent(in) N 122 Cf2py intent(in) CMPR 123 Cf2py depend(N) CMPR 124 Cf2py intent(in) MX 125 Cf2py intent(in) MY 126 Cf2py intent(in,out) IMG 127 Cf2py 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.