PageRenderTime 52ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/WPS/ungrib/src/gbytesys.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 493 lines | 222 code | 1 blank | 270 comment | 0 complexity | f7e5d78cc419e6c28f4e06e64cd1d780 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !-----------------------------------------------------------------------
  2. ! Choice of computers
  3. !-----------------------------------------------------------------------
  4. !
  5. ! CRAY XMP,YMP/UNICOS (#define CRAY)
  6. ! VAX/VMS (#define VAX)
  7. ! Stardent 1500/3000/UNIX (#define STARDENT)
  8. ! IBM RS/6000-AIX (#define IBM)
  9. ! SUN Sparcstation (#define SUN)
  10. ! SGI Silicon Graphics (#define SGI)
  11. ! HP 7xx (#define HP)
  12. ! DEC ALPHA (#define ALPHA)
  13. ! +------------------------------------------------------------------+
  14. ! _ SYSTEM DEPENDENT ROUTINES _
  15. ! _ _
  16. ! _ This module contains short utility routines that are not _
  17. ! _ of the FORTRAN 77 standard and may differ from system to system. _
  18. ! _ These include bit manipulation, I/O, JCL calls, and vector _
  19. ! _ functions. _
  20. ! +------------------------------------------------------------------+
  21. ! +------------------------------------------------------------------+
  22. !
  23. ! DATA SET UTILITY AT LEVEL 003 AS OF 02/25/92
  24. SUBROUTINE GBYTE_G1(IN,IOUT,ISKIP,NBYTE)
  25. !
  26. ! THIS PROGRAM WRITTEN BY.....
  27. ! DR. ROBERT C. GAMMILL, CONSULTANT
  28. ! NATIONAL CENTER FOR ATMOSPHERIC RESEARCH
  29. ! MAY 1972
  30. !
  31. ! CHANGES FOR CRAY Y-MP8/832
  32. ! CRAY CFT77 FORTRAN
  33. ! JULY 1992, RUSSELL E. JONES
  34. ! NATIONAL WEATHER SERVICE
  35. !
  36. ! THIS IS THE FORTRAN VERSION OF GBYTE
  37. !
  38. INTEGER IN(*)
  39. INTEGER IOUT
  40. #if defined (CRAY) || defined (BIT64)
  41. INTEGER MASKS(64)
  42. !
  43. DATA NBITSW/64/
  44. !
  45. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 64 BIT
  46. ! COMPUTER
  47. !
  48. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  49. 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  50. 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  51. 67108863, 134217727, 268435455, 536870911, 1073741823, &
  52. 2147483647, 4294967295, 8589934591, 17179869183, &
  53. 34359738367, 68719476735, 137438953471, 274877906943, &
  54. 549755813887, 1099511627775, 2199023255551, 4398046511103, &
  55. 8796093022207, 17592186044415, 35184372088831, &
  56. 70368744177663, 140737488355327, 281474976710655, &
  57. 562949953421311, 1125899906842623, 2251799813685247, &
  58. 4503599627370495, 9007199254740991, 18014398509481983, &
  59. 36028797018963967, 72057594037927935, 144115188075855871, &
  60. 288230376151711743, 576460752303423487, 1152921504606846975, &
  61. 2305843009213693951, 4611686018427387903, 9223372036854775807, &
  62. -1/
  63. #else
  64. INTEGER MASKS(32)
  65. !
  66. DATA NBITSW/32/
  67. !
  68. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 32 BIT
  69. ! COMPUTER
  70. !
  71. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  72. 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  73. 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  74. 67108863, 134217727, 268435455, 536870911, 1073741823, &
  75. 2147483647, -1/
  76. #endif
  77. !
  78. ! NBYTE MUST BE LESS THAN OR EQUAL TO NBITSW
  79. !
  80. ICON = NBITSW - NBYTE
  81. IF (ICON.LT.0) RETURN
  82. MASK = MASKS(NBYTE)
  83. !
  84. ! INDEX TELLS HOW MANY WORDS INTO THE ARRAY 'IN' THE NEXT BYTE APPEARS.
  85. !
  86. INDEX = ISKIP / NBITSW
  87. !
  88. ! II TELLS HOW MANY BITS THE BYTE IS FROM THE LEFT SIDE OF THE WORD.
  89. !
  90. II = MOD(ISKIP,NBITSW)
  91. !
  92. ! MOVER SPECIFIES HOW FAR TO THE RIGHT NBYTE MUST BE MOVED IN ORDER
  93. ! TO BE RIGHT ADJUSTED.
  94. !
  95. MOVER = ICON - II
  96. !
  97. IF (MOVER.GT.0) THEN
  98. IOUT = IAND(ISHFT(IN(INDEX+1),-MOVER),MASK)
  99. !
  100. ! THE BYTE IS SPLIT ACROSS A WORD BREAK.
  101. !
  102. ELSE IF (MOVER.LT.0) THEN
  103. MOVEL = - MOVER
  104. MOVER = NBITSW - MOVEL
  105. IOUT = IAND(IOR(ISHFT(IN(INDEX+1),MOVEL), &
  106. & ISHFT(IN(INDEX+2),-MOVER)),MASK)
  107. !
  108. ! THE BYTE IS ALREADY RIGHT ADJUSTED.
  109. !
  110. ELSE
  111. IOUT = IAND(IN(INDEX+1),MASK)
  112. ENDIF
  113. !
  114. RETURN
  115. END
  116. !
  117. ! +------------------------------------------------------------------+
  118. SUBROUTINE GBYTES_G1(IN,IOUT,ISKIP,NBYTE,NSKIP,N)
  119. !
  120. ! THIS PROGRAM WRITTEN BY.....
  121. ! DR. ROBERT C. GAMMILL, CONSULTANT
  122. ! NATIONAL CENTER FOR ATMOSPHERIC RESEARCH
  123. ! MAY 1972
  124. !
  125. ! CHANGES FOR CRAY Y-MP8/832
  126. ! CRAY CFT77 FORTRAN
  127. ! JULY 1992, RUSSELL E. JONES
  128. ! NATIONAL WEATHER SERVICE
  129. !
  130. ! THIS IS THE FORTRAN VERSION OF GBYTES.
  131. !
  132. INTEGER IN(*)
  133. INTEGER IOUT(*)
  134. #if defined (CRAY) || defined (BIT64)
  135. !CDIR$ INTEGER=64
  136. INTEGER MASKS(64)
  137. !
  138. DATA NBITSW/64/
  139. !
  140. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 64 BIT
  141. ! COMPUTER
  142. !
  143. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  144. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  145. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  146. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  147. & 2147483647, 4294967295, 8589934591, 17179869183, &
  148. & 34359738367, 68719476735, 137438953471, 274877906943, &
  149. & 549755813887, 1099511627775, 2199023255551, 4398046511103, &
  150. & 8796093022207, 17592186044415, 35184372088831, &
  151. & 70368744177663, 140737488355327, 281474976710655, &
  152. & 562949953421311, 1125899906842623, 2251799813685247, &
  153. & 4503599627370495, 9007199254740991, 18014398509481983, &
  154. & 36028797018963967, 72057594037927935, 144115188075855871, &
  155. & 288230376151711743, 576460752303423487, 1152921504606846975, &
  156. & 2305843009213693951, 4611686018427387903, 9223372036854775807, &
  157. & -1/
  158. #else
  159. INTEGER MASKS(32)
  160. !
  161. DATA NBITSW/32/
  162. !
  163. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 32 BIT
  164. ! COMPUTER
  165. !
  166. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  167. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  168. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  169. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  170. & 2147483647, -1/
  171. #endif
  172. !
  173. ! NBYTE MUST BE LESS THAN OR EQUAL TO NBITSW
  174. !
  175. ICON = NBITSW - NBYTE
  176. IF (ICON.LT.0) RETURN
  177. MASK = MASKS(NBYTE)
  178. !
  179. ! INDEX TELLS HOW MANY WORDS INTO THE ARRAY 'IN' THE NEXT BYTE APPEARS.
  180. !
  181. INDEX = ISKIP / NBITSW
  182. !
  183. ! II TELLS HOW MANY BITS THE BYTE IS FROM THE LEFT SIDE OF THE WORD.
  184. !
  185. II = MOD(ISKIP,NBITSW)
  186. !
  187. ! ISTEP IS THE DISTANCE IN BITS FROM THE START OF ONE BYTE TO THE NEXT.
  188. !
  189. ISTEP = NBYTE + NSKIP
  190. !
  191. ! IWORDS TELLS HOW MANY WORDS TO SKIP FROM ONE BYTE TO THE NEXT.
  192. !
  193. IWORDS = ISTEP / NBITSW
  194. !
  195. ! IBITS TELLS HOW MANY BITS TO SKIP AFTER SKIPPING IWORDS.
  196. !
  197. IBITS = MOD(ISTEP,NBITSW)
  198. !
  199. DO 10 I = 1,N
  200. !
  201. ! MOVER SPECIFIES HOW FAR TO THE RIGHT A BYTE MUST BE MOVED IN ORDER
  202. !
  203. ! TO BE RIGHT ADJUSTED.
  204. ! TO BE RIGHT ADJUSTED.
  205. !
  206. MOVER = ICON - II
  207. !
  208. ! THE BYTE IS SPLIT ACROSS A WORD BREAK.
  209. !
  210. IF (MOVER.LT.0) THEN
  211. MOVEL = - MOVER
  212. MOVER = NBITSW - MOVEL
  213. IOUT(I) = IAND(IOR(ISHFT(IN(INDEX+1),MOVEL), &
  214. & ISHFT(IN(INDEX+2),-MOVER)),MASK)
  215. !
  216. ! RIGHT ADJUST THE BYTE.
  217. !
  218. ELSE IF (MOVER.GT.0) THEN
  219. IOUT(I) = IAND(ISHFT(IN(INDEX+1),-MOVER),MASK)
  220. !
  221. ! THE BYTE IS ALREADY RIGHT ADJUSTED.
  222. !
  223. ELSE
  224. IOUT(I) = IAND(IN(INDEX+1),MASK)
  225. ENDIF
  226. !
  227. ! INCREMENT II AND INDEX.
  228. !
  229. II = II + IBITS
  230. INDEX = INDEX + IWORDS
  231. IF (II.GE.NBITSW) THEN
  232. II = II - NBITSW
  233. INDEX = INDEX + 1
  234. ENDIF
  235. !
  236. 10 CONTINUE
  237. RETURN
  238. END
  239. !
  240. ! +------------------------------------------------------------------+
  241. SUBROUTINE SBYTE_G1(IOUT,IN,ISKIP,NBYTE)
  242. ! THIS PROGRAM WRITTEN BY.....
  243. ! DR. ROBERT C. GAMMILL, CONSULTANT
  244. ! NATIONAL CENTER FOR ATMOSPHERIC RESEARCH
  245. ! JULY 1972
  246. ! THIS IS THE FORTRAN VERSIONS OF SBYTE.
  247. ! FORTRAN 90
  248. ! AUGUST 1990 RUSSELL E. JONES
  249. ! NATIONAL WEATHER SERVICE
  250. !
  251. ! USAGE: CALL SBYTE (PCKD,UNPK,INOFST,NBIT)
  252. !
  253. ! INPUT ARGUMENT LIST:
  254. ! UNPK - NBITS OF THE RIGHT SIDE OF UNPK IS MOVED TO
  255. ! ARRAY PCKD. INOFST BITS ARE SKIPPED OVER BEFORE
  256. ! THE DATA IS MOVED, NBITS ARE STORED.
  257. ! INOFST - A FULLWORD INTEGER SPECIFYING THE INITAL OFFSET
  258. ! IN BITS OF THE FIRST BYTE, COUNTED FROM THE
  259. ! LEFTMOST BIT IN PCKD.
  260. ! NBITS - A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
  261. ! IN EACH BYTE TO BE PACKED. LEGAL BYTE WIDTHS
  262. ! ARE IN THE RANGE 1 - 32.
  263. ! OUTPUT ARGUMENT LIST:
  264. ! PCKD - THE FULLWORD IN MEMORY TO WHICH PACKING IS TO
  265. ! BEGIN STARTING AT BIT INOFST. THE INOSTAT BITS
  266. ! ARE NOT ALTERED.
  267. !
  268. INTEGER IN
  269. INTEGER IOUT(*)
  270. #if defined (CRAY) || defined (BIT64)
  271. INTEGER MASKS(64)
  272. !
  273. DATA NBITSW/64/
  274. !
  275. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 64 BIT
  276. ! COMPUTER
  277. !
  278. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  279. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  280. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  281. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  282. & 2147483647, 4294967295, 8589934591, 17179869183, &
  283. & 34359738367, 68719476735, 137438953471, 274877906943, &
  284. & 549755813887, 1099511627775, 2199023255551, 4398046511103, &
  285. & 8796093022207, 17592186044415, 35184372088831, &
  286. & 70368744177663, 140737488355327, 281474976710655, &
  287. & 562949953421311, 1125899906842623, 2251799813685247, &
  288. & 4503599627370495, 9007199254740991, 18014398509481983, &
  289. & 36028797018963967, 72057594037927935, 144115188075855871, &
  290. & 288230376151711743, 576460752303423487, 1152921504606846975, &
  291. & 2305843009213693951, 4611686018427387903, 9223372036854775807, &
  292. & -1/
  293. #else
  294. INTEGER MASKS(32)
  295. !
  296. DATA NBITSW/32/
  297. !
  298. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 32 BIT
  299. ! COMPUTER
  300. !
  301. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  302. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  303. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  304. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  305. & 2147483647, -1/
  306. #endif
  307. !
  308. ! NBYTE MUST BE LESS THAN OR EQUAL TO NBITSW
  309. !
  310. ICON = NBITSW - NBYTE
  311. IF (ICON.LT.0) RETURN
  312. MASK = MASKS(NBYTE)
  313. !
  314. ! INDEX TELLS HOW MANY WORDS INTO IOUT THE NEXT BYTE IS TO BE STORED.
  315. !
  316. INDEX = ISKIP / NBITSW
  317. !
  318. ! II TELLS HOW MANY BITS IN FROM THE LEFT SIDE OF THE WORD TO STORE IT.
  319. !
  320. II = MOD(ISKIP,NBITSW)
  321. !
  322. J = IAND(MASK,IN)
  323. MOVEL = ICON - II
  324. !
  325. ! BYTE IS TO BE STORED IN MIDDLE OF WORD. SHIFT LEFT.
  326. !
  327. IF (MOVEL.GT.0) THEN
  328. MSK = ISHFT(MASK,MOVEL)
  329. IOUT(INDEX+1) = IOR(IAND(NOT(MSK),IOUT(INDEX+1)), &
  330. & ISHFT(J,MOVEL))
  331. !
  332. ! THE BYTE IS TO BE SPLIT ACROSS A WORD BREAK.
  333. !
  334. ELSE IF (MOVEL.LT.0) THEN
  335. MSK = MASKS(NBYTE+MOVEL)
  336. IOUT(INDEX+1) = IOR(IAND(NOT(MSK),IOUT(INDEX+1)), &
  337. & ISHFT(J,MOVEL))
  338. ITEMP = IAND(MASKS(NBITSW+MOVEL),IOUT(INDEX+2))
  339. IOUT(INDEX+2) = IOR(ITEMP,ISHFT(J,NBITSW+MOVEL))
  340. !
  341. ! BYTE IS TO BE STORED RIGHT-ADJUSTED.
  342. !
  343. ELSE
  344. IOUT(INDEX+1) = IOR(IAND(NOT(MASK),IOUT(INDEX+1)),J)
  345. ENDIF
  346. !
  347. RETURN
  348. END
  349. !
  350. ! +------------------------------------------------------------------+
  351. SUBROUTINE SBYTES_G1(IOUT,IN,ISKIP,NBYTE,NSKIP,N)
  352. ! THIS PROGRAM WRITTEN BY.....
  353. ! DR. ROBERT C. GAMMILL, CONSULTANT
  354. ! NATIONAL CENTER FOR ATMOSPHERIC RESEARCH
  355. ! JULY 1972
  356. ! THIS IS THE FORTRAN VERSIONS OF SBYTES.
  357. !
  358. ! FORTRAN 90
  359. ! AUGUST 1990 RUSSELL E. JONES
  360. ! NATIONAL WEATHER SERVICE
  361. !
  362. ! USAGE: CALL SBYTES (PCKD,UNPK,INOFST,NBIT, NSKIP,ITER)
  363. !
  364. ! INPUT ARGUMENT LIST:
  365. ! UNPK - NBITS OF THE RIGHT SIDE OF EACH WORD OF ARRAY
  366. ! UNPK IS MOVED TO ARRAY PCKD. INOFST BITS ARE
  367. ! SKIPPED OVER BEFORE THE 1ST DATA IS MOVED, NBITS
  368. ! ARE STORED, NSKIP BITS ARE SKIPPED OVER, THE NEXT
  369. ! NBITS ARE MOVED, BIT ARE SKIPPED OVER, ETC. UNTIL
  370. ! ITER GROUPS OF BITS ARE PACKED.
  371. ! INOFST - A FULLWORD INTEGER SPECIFYING THE INITAL OFFSET
  372. ! IN BITS OF THE FIRST BYTE, COUNTED FROM THE
  373. ! LEFTMOST BIT IN PCKD.
  374. ! NBITS - A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
  375. ! IN EACH BYTE TO BE PACKED. LEGAL BYTE WIDTHS
  376. ! ARE IN THE RANGE 1 - 32.
  377. ! NSKIP - A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
  378. ! TO SKIP BETWEEN SUCCESSIVE BYTES. ALL NON-NEGATIVE
  379. ! SKIP COUNTS ARE LEGAL.
  380. ! ITER - A FULLWORD INTEGER SPECIFYING THE TOTAL NUMBER OF
  381. ! BYTES TO BE PACKED, AS CONTROLLED BY INOFST,
  382. ! NBIT AND NSKIP ABOVE. ALL NON-NEGATIVE ITERATION
  383. ! COUNTS ARE LEGAL.
  384. !
  385. ! OUTPUT ARGUMENT LIST:
  386. ! PCKD - THE FULLWORD IN MEMORY TO WHICH PACKING IS TO
  387. ! BEGIN STARTING AT BIT INOFST. THE INOSTAT BITS
  388. ! ARE NOT ALTERED. NSKIP BITS ARE NOT ALTERED.
  389. !
  390. INTEGER IN(*)
  391. INTEGER IOUT(*)
  392. #if defined (CRAY) || defined (BIT64)
  393. INTEGER MASKS(64)
  394. !
  395. DATA NBITSW/64/
  396. !
  397. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 64 BIT
  398. ! COMPUTER
  399. !
  400. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  401. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  402. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  403. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  404. & 2147483647, 4294967295, 8589934591, 17179869183, &
  405. & 34359738367, 68719476735, 137438953471, 274877906943, &
  406. & 549755813887, 1099511627775, 2199023255551, 4398046511103, &
  407. & 8796093022207, 17592186044415, 35184372088831, &
  408. & 70368744177663, 140737488355327, 281474976710655, &
  409. & 562949953421311, 1125899906842623, 2251799813685247, &
  410. & 4503599627370495, 9007199254740991, 18014398509481983, &
  411. & 36028797018963967, 72057594037927935, 144115188075855871, &
  412. & 288230376151711743, 576460752303423487, 1152921504606846975, &
  413. & 2305843009213693951, 4611686018427387903, 9223372036854775807, &
  414. & -1/
  415. #else
  416. INTEGER MASKS(32)
  417. !
  418. DATA NBITSW/32/
  419. !
  420. ! MASKS TABLE PUT IN DECIMAL SO IT WILL COMPILE ON ANY 32 BIT
  421. ! COMPUTER
  422. !
  423. DATA MASKS / 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, &
  424. & 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, &
  425. & 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, &
  426. & 67108863, 134217727, 268435455, 536870911, 1073741823, &
  427. & 2147483647, -1/
  428. #endif
  429. !
  430. ! NBYTE MUST BE LESS THAN OR EQUAL TO NBITSW
  431. !
  432. ICON = NBITSW - NBYTE
  433. IF (ICON.LT.0) RETURN
  434. MASK = MASKS(NBYTE)
  435. !
  436. ! INDEX TELLS HOW MANY WORDS INTO IOUT THE NEXT BYTE IS TO BE STORED.
  437. !
  438. INDEX = ISKIP / NBITSW
  439. !
  440. ! II TELLS HOW MANY BITS IN FROM THE LEFT SIDE OF THE WORD TO STORE IT.
  441. !
  442. II = MOD(ISKIP,NBITSW)
  443. !
  444. ! ISTEP IS THE DISTANCE IN BITS FROM ONE BYTE POSITION TO THE NEXT.
  445. !
  446. ISTEP = NBYTE + NSKIP
  447. !
  448. ! IWORDS TELLS HOW MANY WORDS TO SKIP FROM ONE BYTE TO THE NEXT.
  449. !
  450. IWORDS = ISTEP / NBITSW
  451. !
  452. ! IBITS TELLS HOW MANY BITS TO SKIP AFTER SKIPPING IWORDS.
  453. !
  454. IBITS = MOD(ISTEP,NBITSW)
  455. !
  456. DO 10 I = 1,N
  457. J = IAND(MASK,IN(I))
  458. MOVEL = ICON - II
  459. !
  460. ! BYTE IS TO BE STORED IN MIDDLE OF WORD. SHIFT LEFT.
  461. !
  462. IF (MOVEL.GT.0) THEN
  463. MSK = ISHFT(MASK,MOVEL)
  464. IOUT(INDEX+1) = IOR(IAND(NOT(MSK),IOUT(INDEX+1)), &
  465. & ISHFT(J,MOVEL))
  466. !
  467. ! THE BYTE IS TO BE SPLIT ACROSS A WORD BREAK.
  468. !
  469. ELSE IF (MOVEL.LT.0) THEN
  470. MSK = MASKS(NBYTE+MOVEL)
  471. IOUT(INDEX+1) = IOR(IAND(NOT(MSK),IOUT(INDEX+1)), &
  472. & ISHFT(J,MOVEL))
  473. ITEMP = IAND(MASKS(NBITSW+MOVEL),IOUT(INDEX+2))
  474. IOUT(INDEX+2) = IOR(ITEMP,ISHFT(J,NBITSW+MOVEL))
  475. !
  476. ! BYTE IS TO BE STORED RIGHT-ADJUSTED.
  477. !
  478. ELSE
  479. IOUT(INDEX+1) = IOR(IAND(NOT(MASK),IOUT(INDEX+1)),J)
  480. ENDIF
  481. !
  482. II = II + IBITS
  483. INDEX = INDEX + IWORDS
  484. IF (II.GE.NBITSW) THEN
  485. II = II - NBITSW
  486. INDEX = INDEX + 1
  487. ENDIF
  488. !
  489. 10 CONTINUE
  490. !
  491. RETURN
  492. END