home *** CD-ROM | disk | FTP | other *** search
- character*2 function kupper(c)
- c
- c CONVERTS LOWER-CASE LETTERS TO UPPER-CASE. SEMI-PORTABLE VERSION.
- c ALGORITHM ALLOWS FOR NON-ALPHABETIC CHARACTERS WITHIN THE (a-z)
- c INTERVAL (AS WITH EBCDIC)
- c
- c AL STANGENBERGER, FORESTRY, U.C. BERKELEY AUGUST 1988
- c
- c PARAMETERS:
- c ICA = DECIMAL CODE FOR UPPER-CASE A
- c ICZ = DECIMAL CODE FOR UPPER-CASE Z
- c ICLA = DECIMAL CODE FOR LOWER-CASE a
- c ICLZ = DECIMAL CODE FOR UPPER-CASE z
- c
- c ASCII PARAMETERS
- c PARAMETER (ICA=65,ICLA=97,ICZ=90,ICLZ=122)
- c
- c EBCDIC PARAMETERS
- c PARAMETER (ICA=193,ICLA=129,ICZ=233,ICLZ=169)
- c
- c UNIX ASCII PARAMETERS FOR FORCING TO LOWER CASE
- parameter (icla=65,ica=97,iclz=90,icz=122)
- c
- character c2
- character*2 tbl(icla:iclz),c,kbl
- character*26 lC,UC
- logical setup
- c
- c NORMAL UPPER/LOWER CASE STRINGS
- c DATA LC/'abcdefghijklmnopqrstuvwxyz'/
- c DATA UC/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
- c
- c REVERSED STRINGS FOR UNIX TO FORCE LOWER-CASE
- data uc/'abcdefghijklmnopqrstuvwxyz'/
- data lc/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
- c
- data setup/.true./
- data kbl/' @'/
- c
- c BUILD TRANSLATION TABLE FIRST PASS.
- c (NOTE - EBCDIC HAS SOME NON-ALPHABETIC CHARS IN THE INTERVAL, SO
- c BUILD A TABLE WHICH WON'T TRANSLATE THEM.)
- if (setup) then
- j=1
- do 10 i=icla,iclz
- tbl(i)=' '
- c2=char(i)
- if (c2.eq.lc(j:j)) then
- tbl(i)(1:1)=uc(j:j)
- j=j+1
- else
- tbl(i)(1:1)=c2(1:1)
- end if
- 10 continue
- c
- setup=.false.
- end if
- if (c(2:2).eq.kbl(2:2)) then
- kupper=c
- return
- end if
- c
- c IF C OUTSIDE OF LOWER-CASE RANGE, RETURN
- i=ichar(c(1:1))
- if (i.ge.icla.and.i.le.iclz) then
- kupper=tbl(i)
- else
- kupper=c
- end if
- return
- end
-