1 SUBROUTINE UPC
(CHR
,NCHR
,IBAY
,IBIT
)
3 C$$$ SUBPROGRAM DOCUMENTATION BLOCK
6 C PRGMMR: WOOLLEN ORG: NP20 DATE: 1994-01-06
8 C ABSTRACT: THIS SUBROUTINE UNPACKS AND RETURNS A CHARACTER STRING OF
9 C LENGTH NCHR CONTAINED WITHIN NCHR BYTES OF IBAY, STARTING WITH BIT
10 C (IBIT+1). ON OUTPUT, IBIT IS UPDATED TO POINT TO THE LAST BIT THAT
11 C WAS UNPACKED. NOTE THAT THE STRING TO BE UNPACKED DOES NOT
12 C NECESSARILY NEED TO BE ALIGNED ON A BYTE BOUNDARY WITHIN IBAY.
14 C PROGRAM HISTORY LOG:
15 C 1994-01-06 J. WOOLLEN -- ORIGINAL AUTHOR
16 C 2003-11-04 J. ATOR -- ADDED DOCUMENTATION
17 C 2003-11-04 S. BENDER -- ADDED REMARKS/BUFRLIB ROUTINE
19 C 2003-11-04 D. KEYSER -- UNIFIED/PORTABLE FOR WRF; ADDED HISTORY
21 C 2009-03-23 J. ATOR -- TREAT NULL CHARACTERS AS BLANKS;
22 C PREVENT OVERFLOW OF CHR
24 C USAGE: CALL UPC (CHR, NCHR, IBAY, IBIT)
25 C INPUT ARGUMENT LIST:
26 C NCHR - INTEGER: NUMBER OF BYTES OF IBAY WITHIN WHICH TO
27 C UNPACK CHR (I,E, THE NUMBER OF CHARACTERS IN CHR)
28 C IBAY - INTEGER: *-WORD PACKED BINARY ARRAY CONTAINING PACKED
30 C IBIT - INTEGER: BIT POINTER WITHIN IBAY INDICATING BIT AFTER
31 C WHICH TO START UNPACKING
33 C OUTPUT ARGUMENT LIST:
34 C CHR - CHARACTER*(*): UNPACKED CHARACTER STRING OF LENGTH
36 C IBIT - INTEGER: BIT POINTER WITHIN IBAY INDICATING LAST BIT
40 C THIS SUBROUTINE IS THE INVERSE OF BUFR ARCHIVE LIBRARY ROUTINE
43 C THIS ROUTINE CALLS: IPKM IUPM UPB
44 C THIS ROUTINE IS CALLED BY: RDCMPS RDTREE READLC STNDRD
45 C UFBGET UFBTAB UFBTAM WRCMPS
46 C Normally not called by any application
50 C LANGUAGE: FORTRAN 77
51 C MACHINE: PORTABLE TO ALL PLATFORMS
55 COMMON /CHARAC
/ IASCII
,IATOE
(0:255),IETOA
(0:255)
56 COMMON /HRDWRD
/ NBYTW
,NBITW
,IORD
(8)
60 DIMENSION IBAY
(*),IVAL
(2)
61 EQUIVALENCE
(CVAL
,IVAL
)
63 C----------------------------------------------------------------------
64 C----------------------------------------------------------------------
69 NUMCHR
= MIN
(NCHR
,LEN
(CHR
))
71 CALL UPB
(IVAL
(1),8,IBAY
,IBIT
)
75 CHR
(I
:I
) = CVAL
(LB
:LB
)
77 IF(IASCII
.EQ
.0) CALL IPKM
(CHR
(I
:I
),1,IATOE
(IUPM
(CHR
(I
:I
),8)))