Previous: argument-list-summary Up: ../chrrtn.html Next: argument-summary
The following list is a pairwise comparison of the CHRxxx primitives with the old KARxxx routines. The argument types are listed in square brackets at the end of each line, with I = INTEGER, H = Hollerith (stored in INTEGER), and C = CHARACTER. The names CHAR, ICHAR, and LEN are FORTRAN 77 intrinsic functions, so they are no longer used for argument names. Although FORTRAN has no reserved keywords, I have encountered at least one compiler which raised an error at the use of names of intrinsics as variable names. The offset arguments (LOCx) are not required in the CHRxxx routines. KARGET and KARPUT have no CHRxxx equivalents because they are trivially done by inline assignment with CHARACTER data. KARPAK and KARUPK have no CHRxxx equivalents because CHARACTER strings are stored packed in all implementations that I am aware of. CHRRI2 and CHRRIX are new; equivalents should have been defined for the KARxxx family. CHRMAT is new; it is a complement to CHRVFY, and an equivalent should have been included in the KARxxx family. CHRCTH and CHRHTC are not required in a pure CHARACTER environment, but are provided to allow conversion between packed Hollerith and CHARACTER data for environments where both continue to co-exist. For example, some FORTRAN 77 implementations require string parameters in OPEN, CLOSE, and INQUIRE statements to be of type CHARACTER, although Hollerith data are permitted elsewhere. Apart from argument type differences, the functionality of each is identical with three exceptions. First, since CHRLCL returns a host CHARACTER value for an ASCII ordinal, it is no longer possible to return a special value as an error flag, as KARLCL does, when the host character set has no equivalent character. This is unlikely to be a problem, in that almost all machines no use 7 or more bits for each character, so equivalents do in fact exist. If it becomes necessary to do so, then the least used character, preferably that corresponding to host ordinal 0, should be returned. Second, the comparison routines, CHRCM2 and CHRCMP, return values -k, 0, +k, instead of -1, 0, +1, when the first string lexically precedes, is equal to, or follows, the second string. The absolute value of k is the index of the character at which the first mismatch is found. Thus, CHRIDX('ABC','ABD',3) will return -3, indicating that the strings differ in the third character, and the first lexically precedes the second in the ASCII character set. Third, the substring index routines, CHRID2 and CHRIDX, return values in the range 0 .. LENA-LENB+1, instead of either 0, or values in the range LOCA .. LOCA+LENA-LENB+1. This is consistent with the omission of the offset arguments. CHARACTER FUNCTION CHRCHR (ORD) [I] INTEGER FUNCTION KARCHR (ORD) [I] INTEGER FUNCTION CHRASC (C) [C] INTEGER FUNCTION KARASC (CHAR) [H] INTEGER FUNCTION CHRCM2 (TEXTA,TEXTB,LENGTH) [CCI] INTEGER FUNCTION KARCM2 (TEXTA,LOCA,TEXTB,LOCB,LENGTH) [HIHII] INTEGER FUNCTION CHRCMP (TEXTA,TEXTB,LENGTH) [CCI] INTEGER FUNCTION KARCMP (TEXTA,LOCA,TEXTB,LOCB,LENGTH) [HIHII] SUBROUTINE CHRCTH (HOLLER,LOC,LENGTH,TEXT) [HIIC] -- no equivalent -- -- equivalent not required -- SUBROUTINE KARGET (CHAR, TEXT, LOC) [HHI] SUBROUTINE CHRHTC (TEXT,HOLLER,LOC,LENGTH) [CHII] -- no equivalent -- INTEGER FUNCTION CHRID2 (TEXTA,LENA,TEXTB,LENB) [CICI] INTEGER FUNCTION KARID2 (TEXTA,LOCA,LENA,TEXTB,LOCB,LENB) [HIIHII] INTEGER FUNCTION CHRIDX (TEXTA,LENA,TEXTB,LENB) [CICI] INTEGER FUNCTION KARIDX (TEXTA,LOCA,LENA,TEXTB,LOCB,LENB) [HIIHII] CHARACTER FUNCTION CHRLC (C) [C] INTEGER FUNCTION KARLC (CHAR) [H] CHARACTER FUNCTION CHRLCL (ASCORD) [I] INTEGER FUNCTION KARLCL (ASCORD) [I] INTEGER FUNCTION CHRLEN (TEXT,LENGTH) [CI] -- no equivalent defined -- INTEGER FUNCTION CHRMAT (TEXT,LENTXT,PATERN,LENPAT) [CICI] -- no equivalent defined -- SUBROUTINE CHRMOV (TARGET,SOURCE,LENGTH) [CCI] SUBROUTINE KARMOV (TARGET,LOCTAR,SOURCE,LOCSRC,LENGTH) [HIHII] INTEGER FUNCTION CHRORD (C) [C] INTEGER FUNCTION KARORD (CHAR) [H] -- equivalent not required -- SUBROUTINE KARPAK (TARGET,LOCTAR,SOURCE,LENGTH) [HIHI] -- equivalent not required -- SUBROUTINE KARPUT (CHAR, TEXT, LOC) [HHI] INTEGER FUNCTION CHRRI2 (TEXTA,LENA,TEXTB,LENB) [CICI] -- no equivalent defined -- INTEGER FUNCTION CHRRIX (TEXTA,LENA,TEXTB,LENB) [CICI] -- no equivalent defined -- SUBROUTINE CHRSWP (TEXTA,TEXTB,LENGTH) [CCI] SUBROUTINE KARSWP (TEXTA,LOCA,TEXTB,LOCB,LENGTH) [HIHII] CHARACTER FUNCTION CHRUC (C) [C] INTEGER FUNCTION KARUC (CHAR) [H] -- equivalent not required -- SUBROUTINE KARUPK (TARGET,SOURCE,LOCSRC,LENGTH) [HHII] INTEGER FUNCTION CHRVFY (TEXT,LENTXT,PATERN,LENPAT) [CICI] INTEGER FUNCTION KARVFY (TEXT,LOCTXT,LENTXT,PATERN,LOCPAT,LENPAT) [HIIHII] SUBROUTINE CHRXLT (TEXT,LENTXT,OLD,NEW,LENSUB) [CICCI] SUBROUTINE KARXLT (TEXT,LOCTXT,LENTXT,OLD,LOCOLD,NEW,LOCNEW,LEN) [HIIHIHII]