.CM *ID* VSP60    VDN      changed on 1992-06-30-10.48.36 by CARSTEN   *
.ad 8
.bm 8
.fm 4
.bt $Copyright by   SAP AG, 1998$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $SQL$Project Distributed Database System$VSP60$
.tt 2 $$$
.tt 3 $$RTE-Extension-60$1998-09-07$
***********************************************************
.nf


    ========== licence begin LGPL
    Copyright (C) 2000 SAP AG

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    ========== licence end

.fo
.nf
.sp
Module  : RTE-Extension-60
=========
.sp
Purpose :
         min,max,length,s60uppcase,s60lowercase,s60concat,s60substr
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        FUNCTION
              s60len0 (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj;
                    searchchar : char) : tsp_int4;
 
        FUNCTION
              s60len1 (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj;
                    searchchar : char) : tsp_int4;
 
        FUNCTION
              s60len2 (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj;
                    searchchar : char) : tsp_int4;
 
        FUNCTION
              s60islower(c : char) : boolean;
 
        FUNCTION
              s60isupper(c : char) : boolean;
 
        FUNCTION
              s60tocap (
                    c : char ) : char;
 
        FUNCTION
              s60toupper (
                    c : char ) : char;
 
        FUNCTION
              s60tolower (
                    c : char ) : char;
 
        FUNCTION
              s60minimal (
                    i1 : tsp_int4;
                    i2 : tsp_int4) : tsp_int4;
 
        FUNCTION
              s60maximal (
                    i1 : tsp_int4;
                    i2 : tsp_int4) : tsp_int4;
 
        PROCEDURE
              s60uppcase (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj);
 
        PROCEDURE
              s60upp1case (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj);
 
        PROCEDURE
              s60lowercase (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj);
 
        PROCEDURE
              s60low1case (
                    startpos   : tsp_int4;
                    endpos     : tsp_int4;
                    VAR object : tsp_moveobj);
 
        PROCEDURE
              s60concat (
                    VAR firstop  : tsp_moveobj;
                    s60len1      : tsp_int4;
                    VAR secondop : tsp_moveobj;
                    s60len2      : tsp_int4;
                    VAR result   : tsp_moveobj;
                    startpos     : tsp_int4);
 
        PROCEDURE
              s60substr (
                    maxlen        : tsp_int4;
                    VAR object    : tsp_moveobj;
                    startpos      : tsp_int4;
                    len           : tsp_int4;
                    VAR result    : tsp_moveobj;
                    VAR resultlen : tsp_int4);
 
        FUNCTION
              s60isnu1meric (
                    VAR str : tsp_moveobj;
                    len     : tsp_int2) : boolean;
 
        FUNCTION
              s60isnu2meric (
                    VAR str : tsp_moveobj;
                    len     : tsp_int2) : boolean;
 
        PROCEDURE
              s60upstring (
                    VAR source : tsp_moveobj;
                    spos       : tsp_int4;
                    VAR dest   : tsp_moveobj;
                    dpos       : tsp_int4;
                    len        : tsp_int4);
 
        PROCEDURE
              s60up1string (
                    VAR source : tsp_moveobj;
                    spos       : tsp_int4;
                    VAR dest   : tsp_moveobj;
                    dpos       : tsp_int4;
                    len        : tsp_int4);
 
        PROCEDURE
              s60lowstring (
                    VAR source : tsp_moveobj;
                    spos       : tsp_int4;
                    VAR dest   : tsp_moveobj;
                    dpos       : tsp_int4;
                    len        : tsp_int4);
 
        PROCEDURE
              s60low1string (
                    VAR source : tsp_moveobj;
                    spos       : tsp_int4;
                    VAR dest   : tsp_moveobj;
                    dpos       : tsp_int4;
                    len        : tsp_int4);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              RTE-Extension-10 : VSP30;
 
        FUNCTION
              s30lnr (
                    VAR str : tsp_moveobj;
                    val     : char;
                    start   : tsp_int4;
                    cnt     : tsp_int4) : tsp_int4;
 
        FUNCTION
              s30lenl (
                    VAR str : tsp_moveobj;
                    val     : char;
                    start   : tsp_int4;
                    cnt     : tsp_int4) : tsp_int4;
 
      ------------------------------ 
 
        FROM
              RTE-Extension-10 : VSP10;
 
        PROCEDURE
              s10mv1 (
                    size1    : tsp_int4;    size2 : tsp_int4;
                    VAR val1 : tsp_moveobj; p1    : tsp_int4;
                    VAR val2 : tsp_moveobj; p2    : tsp_int4;
                    cnt      : tsp_int4);
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : 
.sp
.cp 3
Created : 1988-09-01
.sp
.cp 3
Version : 1998-09-07
.sp
.cp 3
Release :      Date : 1998-09-07
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
 
.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
 
.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
(*------------------------------*) 
 
FUNCTION
      s60minimal (
            i1 : tsp_int4;
            i2 : tsp_int4) : tsp_int4;
 
BEGIN
IF  i1 > i2
THEN
    s60minimal := i2
ELSE
    s60minimal := i1;
(*ENDIF*) 
END; (* s60minimal *)
 
(*------------------------------*) 
 
FUNCTION
      s60maximal (
            i1 : tsp_int4;
            i2 : tsp_int4) : tsp_int4;
 
BEGIN
IF  i1 > i2
THEN
    s60maximal := i1
ELSE
    s60maximal := i2;
(*ENDIF*) 
END; (* s60maximal *)
 
(*------------------------------*) 
 
FUNCTION
      s60len1 (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj;
            searchchar : char) : tsp_int4;
 
BEGIN
s60len1 := s60len0 (startpos,endpos,object,searchchar);
END; (* s60len1 *)
 
(*------------------------------*) 
 
FUNCTION
      s60len2 (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj;
            searchchar : char) : tsp_int4;
 
BEGIN
s60len2 := s60len0 (startpos,endpos,object,searchchar);
END; (* s60len2 *)
 
(*------------------------------*) 
 
FUNCTION
      s60len0 (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj;
            searchchar : char) : tsp_int4;
 
BEGIN
IF  startpos < endpos
THEN
    s60len0 := s30lenl (object,searchchar,startpos,endpos-startpos+1)
ELSE
    s60len0 := s30lnr (object,searchchar,endpos,startpos-endpos+1)
(*ENDIF*) 
END; (* s60len0 *)
 
(*------------------------------*) 
 
PROCEDURE
      s60uppcase (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := startpos TO endpos DO
    object[ i ] := s60toupper( object[ i ] );
(*ENDFOR*) 
END; (* s60uppcase *)
 
(*------------------------------*) 
 
PROCEDURE
      s60upp1case (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj);
 
BEGIN
s60uppcase (startpos,endpos,object);
END; (* s60upp1case *)
 
(*------------------------------*) 
 
PROCEDURE
      s60lowercase (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := startpos TO endpos DO
    object[ i ] := s60tolower( object[ i ] );
(*ENDFOR*) 
END; (* s60lowercase *)
 
(*------------------------------*) 
 
PROCEDURE
      s60low1case (
            startpos   : tsp_int4;
            endpos     : tsp_int4;
            VAR object : tsp_moveobj);
 
BEGIN
s60lowercase (startpos,endpos,object);
END; (* s60low1case *)
 
(*------------------------------*) 
 
PROCEDURE
      s60concat (
            VAR firstop  : tsp_moveobj;
            s60len1      : tsp_int4;
            VAR secondop : tsp_moveobj;
            s60len2      : tsp_int4;
            VAR result   : tsp_moveobj;
            startpos     : tsp_int4);
 
BEGIN
s10mv1 (sizeof (firstop), sizeof (result),
      firstop, 1, result, startpos, s60len1);
s10mv1 (sizeof (secondop), sizeof (result),
      secondop, 1, result, startpos+s60len1+1, s60len2);
END; (* s60concat *)
 
(*------------------------------*) 
 
PROCEDURE
      s60substr (
            maxlen        : tsp_int4;
            VAR object    : tsp_moveobj;
            startpos      : tsp_int4;
            len           : tsp_int4;
            VAR result    : tsp_moveobj;
            VAR resultlen : tsp_int4);
 
BEGIN
IF  len = 0
THEN
    len := maxlen - startpos + 1;
(*ENDIF*) 
s10mv1 (sizeof (object), sizeof (result), object, startpos,
      result, 1, len);
resultlen := len;
END; (* s60substr *)
 
(*------------------------------*) 
 
FUNCTION
      s60islower(c : char) : boolean;
 
BEGIN
s60islower := c in [ 'a'..'i','j'..'r','s'..'z' ];
END;
 
(*------------------------------*) 
 
FUNCTION
      s60isupper(c : char) : boolean;
 
BEGIN
s60isupper := c in [ 'A'..'I','J'..'R','S'..'Z' ];
END;
 
(*------------------------------*) 
 
FUNCTION
      s60tocap (
            c : char ) : char;
 
BEGIN
IF  s60islower(c)
THEN
    s60tocap := chr ( ord (c) + (ord ('A') - ord ('a')))
ELSE
    s60tocap := c;
(*ENDIF*) 
END; (* s60tocap *)
 
(*------------------------------*) 
 
FUNCTION
      s60toupper (
            c : char ) : char;
 
BEGIN
IF  s60islower(c)
THEN
    s60toupper := chr ( ord (c) + (ord ('A') - ord ('a')))
ELSE
    s60toupper := c;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      s60tolower (
            c : char ) : char;
 
BEGIN
IF  s60isupper(c)
THEN
    s60tolower := chr ( ord (c) + (ord ('a') - ord ('A')))
ELSE
    s60tolower := c;
(*ENDIF*) 
END; (* s60tolower *)
 
(*------------------------------*) 
 
FUNCTION
      s60isnu1meric (
            VAR str : tsp_moveobj;
            len     : tsp_int2) : boolean;
      (* B.M. Rel 3.0.0C 25 Mar 1991 *)
 
VAR
      i  : tsp_int4;
      ok : boolean;
 
BEGIN
i := 0;
REPEAT
    i := i + 1;
    ok := (str [  i  ] >= '0')
          AND (str [  i  ] <= '9');
UNTIL
    (i = len) OR (NOT ok);
(*ENDREPEAT*) 
s60isnu1meric := ok;
END; (* s60isnu1meric *)
 
(*------------------------------*) 
 
FUNCTION
      s60isnu2meric (
            VAR str : tsp_moveobj;
            len     : tsp_int2) : boolean;
 
BEGIN
s60isnu2meric := s60isnu1meric( str, len);
END; (* s60isnu2meric *)
 
(*------------------------------*) 
 
PROCEDURE
      s60upstring (
            VAR source : tsp_moveobj;
            spos       : tsp_int4;
            VAR dest   : tsp_moveobj;
            dpos       : tsp_int4;
            len        : tsp_int4);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60toupper( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60upstring *)
 
(*------------------------------*) 
 
PROCEDURE
      s60up1string (
            VAR source : tsp_moveobj;
            spos       : tsp_int4;
            VAR dest   : tsp_moveobj;
            dpos       : tsp_int4;
            len        : tsp_int4);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60toupper( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60up1string *)
 
(*------------------------------*) 
 
PROCEDURE
      s60lowstring (
            VAR source : tsp_moveobj;
            spos       : tsp_int4;
            VAR dest   : tsp_moveobj;
            dpos       : tsp_int4;
            len        : tsp_int4);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60tolower( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60lowstring *)
 
(*------------------------------*) 
 
PROCEDURE
      s60low1string (
            VAR source : tsp_moveobj;
            spos       : tsp_int4;
            VAR dest   : tsp_moveobj;
            dpos       : tsp_int4;
            len        : tsp_int4);
 
VAR
      i : tsp_int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60tolower( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60low1string *)
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
*-PRETTY-*  statements    :         48
*-PRETTY-*  lines of code :        346        PRETTYX 3.10 
*-PRETTY-*  lines in file :        598         1997-12-10 
.PA 
