.CM *ID* VSP60    VDN      changed on 1992-06-30-10.48.36 by CARSTEN   *
.ad 8
.bm 8
.fm 4
.bt $Copyright (c) 1998-2004 SAP AG$$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

.nf


    ========== licence begin  GPL
    Copyright (c) 1998-2004 SAP AG

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

    This program 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 General Public License for more details.

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

.fo


.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   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj;
                    searchchar : char) : tsp00_Int4;
 
        FUNCTION
              s60len1 (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj;
                    searchchar : char) : tsp00_Int4;
 
        FUNCTION
              s60len2 (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj;
                    searchchar : char) : tsp00_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 : tsp00_Int4;
                    i2 : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s60maximal (
                    i1 : tsp00_Int4;
                    i2 : tsp00_Int4) : tsp00_Int4;
 
        PROCEDURE
              s60uppcase (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj);
 
        PROCEDURE
              s60upp1case (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj);
 
        PROCEDURE
              s60lowercase (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj);
 
        PROCEDURE
              s60low1case (
                    startpos   : tsp00_Int4;
                    endpos     : tsp00_Int4;
                    VAR object : tsp00_MoveObj);
 
        PROCEDURE
              s60concat (
                    VAR firstop  : tsp00_MoveObj;
                    s60len1      : tsp00_Int4;
                    VAR secondop : tsp00_MoveObj;
                    s60len2      : tsp00_Int4;
                    VAR result   : tsp00_MoveObj;
                    startpos     : tsp00_Int4);
 
        PROCEDURE
              s60substr (
                    maxlen        : tsp00_Int4;
                    VAR object    : tsp00_MoveObj;
                    startpos      : tsp00_Int4;
                    len           : tsp00_Int4;
                    VAR result    : tsp00_MoveObj;
                    VAR resultlen : tsp00_Int4);
 
        FUNCTION
              s60isnu1meric (
                    VAR str : tsp00_MoveObj;
                    len     : tsp00_Int2) : boolean;
 
        FUNCTION
              s60isnu2meric (
                    VAR str : tsp00_MoveObj;
                    len     : tsp00_Int2) : boolean;
 
        PROCEDURE
              s60upstring (
                    VAR source : tsp00_MoveObj;
                    spos       : tsp00_Int4;
                    VAR dest   : tsp00_MoveObj;
                    dpos       : tsp00_Int4;
                    len        : tsp00_Int4);
 
        PROCEDURE
              s60up1string (
                    VAR source : tsp00_MoveObj;
                    spos       : tsp00_Int4;
                    VAR dest   : tsp00_MoveObj;
                    dpos       : tsp00_Int4;
                    len        : tsp00_Int4);
 
        PROCEDURE
              s60lowstring (
                    VAR source : tsp00_MoveObj;
                    spos       : tsp00_Int4;
                    VAR dest   : tsp00_MoveObj;
                    dpos       : tsp00_Int4;
                    len        : tsp00_Int4);
 
        PROCEDURE
              s60low1string (
                    VAR source : tsp00_MoveObj;
                    spos       : tsp00_Int4;
                    VAR dest   : tsp00_MoveObj;
                    dpos       : tsp00_Int4;
                    len        : tsp00_Int4);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              RTE-Extension-30 : VSP30;
 
        FUNCTION
              s30lnr (
                    VAR str : tsp00_MoveObj;
                    val     : char;
                    start   : tsp00_Int4;
                    cnt     : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s30lenl (
                    VAR str : tsp00_MoveObj;
                    val     : char;
                    start   : tsp00_Int4;
                    cnt     : tsp00_Int4) : tsp00_Int4;
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG101;
 
        PROCEDURE
              SAPDB_PascalForcedMove (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
        PROCEDURE
              s10mv (
                    source_upb  : tsp00_Int4;       
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;    
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;    
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_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 : tsp00_Int4;
            i2 : tsp00_Int4) : tsp00_Int4;
 
BEGIN
IF  i1 > i2
THEN
    s60minimal := i2
ELSE
    s60minimal := i1;
(*ENDIF*) 
END; (* s60minimal *)
 
(*------------------------------*) 
 
FUNCTION
      s60maximal (
            i1 : tsp00_Int4;
            i2 : tsp00_Int4) : tsp00_Int4;
 
BEGIN
IF  i1 > i2
THEN
    s60maximal := i1
ELSE
    s60maximal := i2;
(*ENDIF*) 
END; (* s60maximal *)
 
(*------------------------------*) 
 
FUNCTION
      s60len1 (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj;
            searchchar : char) : tsp00_Int4;
 
BEGIN
s60len1 := s60len0 (startpos,endpos,object,searchchar);
END; (* s60len1 *)
 
(*------------------------------*) 
 
FUNCTION
      s60len2 (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj;
            searchchar : char) : tsp00_Int4;
 
BEGIN
s60len2 := s60len0 (startpos,endpos,object,searchchar);
END; (* s60len2 *)
 
(*------------------------------*) 
 
FUNCTION
      s60len0 (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj;
            searchchar : char) : tsp00_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   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj);
 
VAR
      i : tsp00_Int4;
 
BEGIN
FOR i := startpos TO endpos DO
    object[ i ] := s60toupper( object[ i ] );
(*ENDFOR*) 
END; (* s60uppcase *)
 
(*------------------------------*) 
 
PROCEDURE
      s60upp1case (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj);
 
BEGIN
s60uppcase (startpos,endpos,object);
END; (* s60upp1case *)
 
(*------------------------------*) 
 
PROCEDURE
      s60lowercase (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj);
 
VAR
      i : tsp00_Int4;
 
BEGIN
FOR i := startpos TO endpos DO
    object[ i ] := s60tolower( object[ i ] );
(*ENDFOR*) 
END; (* s60lowercase *)
 
(*------------------------------*) 
 
PROCEDURE
      s60low1case (
            startpos   : tsp00_Int4;
            endpos     : tsp00_Int4;
            VAR object : tsp00_MoveObj);
 
BEGIN
s60lowercase (startpos,endpos,object);
END; (* s60low1case *)
 
(*------------------------------*) 
 
PROCEDURE
      s60concat (
            VAR firstop  : tsp00_MoveObj;
            s60len1      : tsp00_Int4;
            VAR secondop : tsp00_MoveObj;
            s60len2      : tsp00_Int4;
            VAR result   : tsp00_MoveObj;
            startpos     : tsp00_Int4);
 
BEGIN
s10mv (sizeof (firstop), sizeof (result),
      @firstop, 1, @result, startpos, s60len1);
s10mv (sizeof (secondop), sizeof (result),
      @secondop, 1, @result, startpos+s60len1+1, s60len2);
END; (* s60concat *)
 
(*------------------------------*) 
 
PROCEDURE
      s60substr (
            maxlen        : tsp00_Int4;
            VAR object    : tsp00_MoveObj;
            startpos      : tsp00_Int4;
            len           : tsp00_Int4;
            VAR result    : tsp00_MoveObj;
            VAR resultlen : tsp00_Int4);
 
BEGIN
IF  len = 0
THEN
    len := maxlen - startpos + 1;
(*ENDIF*) 
s10mv (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 : tsp00_MoveObj;
            len     : tsp00_Int2) : boolean;
      (* B.M. Rel 3.0.0C 25 Mar 1991 *)
 
VAR
      i  : tsp00_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 : tsp00_MoveObj;
            len     : tsp00_Int2) : boolean;
 
BEGIN
s60isnu2meric := s60isnu1meric( str, len);
END; (* s60isnu2meric *)
 
(*------------------------------*) 
 
PROCEDURE
      s60upstring (
            VAR source : tsp00_MoveObj;
            spos       : tsp00_Int4;
            VAR dest   : tsp00_MoveObj;
            dpos       : tsp00_Int4;
            len        : tsp00_Int4);
 
VAR
      i : tsp00_Int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60toupper( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60upstring *)
 
(*------------------------------*) 
 
PROCEDURE
      s60up1string (
            VAR source : tsp00_MoveObj;
            spos       : tsp00_Int4;
            VAR dest   : tsp00_MoveObj;
            dpos       : tsp00_Int4;
            len        : tsp00_Int4);
 
VAR
      i : tsp00_Int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60toupper( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60up1string *)
 
(*------------------------------*) 
 
PROCEDURE
      s60lowstring (
            VAR source : tsp00_MoveObj;
            spos       : tsp00_Int4;
            VAR dest   : tsp00_MoveObj;
            dpos       : tsp00_Int4;
            len        : tsp00_Int4);
 
VAR
      i : tsp00_Int4;
 
BEGIN
FOR i := 1 TO len DO
    dest[ dpos+i-1 ] := s60tolower( source[ spos+i-1 ] );
(*ENDFOR*) 
END; (* s60lowstring *)
 
(*------------------------------*) 
 
PROCEDURE
      s60low1string (
            VAR source : tsp00_MoveObj;
            spos       : tsp00_Int4;
            VAR dest   : tsp00_MoveObj;
            dpos       : tsp00_Int4;
            len        : tsp00_Int4);
 
VAR
      i : tsp00_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 
