/* @lastChanged: "1998-02-17 12:00"
 
 * @filename:   vut14
 * @purpose:    "UT_diag_scheme_5"
 * @release:    7.1.0.0
 * @see:        "-.-"
 *
 * @Copyright (c) 1998-2005 SAP AG"
 */
 
.tt 1 $SAP$LiveCache$VUT14$
.tt 3 $$UT_diag_scheme_5$2000-11-17$
 
.nf

.nf

.nf

    ========== licence begin  GPL
    Copyright (c) 1998-2005 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


.fo
***********************************************************
 
Module  : UT_diag_scheme_5
 
Define  :
 
        PROCEDURE
              u14linkrec (VAR term : tut_terminal;
                    VAR s        : tak_systembuffer;
                    protect_mode : char;
                    VAR modified : boolean;
                    VAR pfkey    : tut_pfkey);
 
        PROCEDURE
              u14named_index_rec (VAR term : tut_terminal;
                    VAR s        : tak_systembuffer;
                    protect_mode : char;
                    VAR modified : boolean;
                    VAR pfkey    : tut_pfkey);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              UT_diag_scheme_4 : VUT13;
 
        PROCEDURE
              u13stack_entry (VAR st_entry : tgg00_StackEntry;
                    VAR mask       : tut_term_mask;
                    mask_index     : integer;
                    VAR ok         : tut_ok_array;
                    VAR modified   : boolean);
 
      ------------------------------ 
 
        FROM
              UT_diag_scheme_2 : VUT11;
 
        PROCEDURE
              u11datatype_in_out (VAR datatype : tsp00_DataType;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11maskerror (VAR term : tut_terminal;
                    VAR ok        : tut_ok_array;
                    VAR mask      : tut_term_mask;
                    mask_size     : integer;
                    VAR pfkey     : tut_pfkey);
 
        PROCEDURE
              u11newpage (VAR term : tut_terminal;
                    msgheader : tsp00_C20);
 
        PROCEDURE
              u11boolean_in_out (VAR in_out_bool : boolean;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11int1in_out (VAR int1 : tsp00_Uint1;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11int2in_out (VAR int2 : tsp00_Int2;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11int4in_out (VAR int4 : tsp00_Int4;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11surrogate_in_out (VAR surrogate : tgg00_Surrogate;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11namein_out (VAR out : tsp00_Name;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR modified : boolean);
 
        PROCEDURE
              u11c1inout (VAR c1 : char;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
        PROCEDURE
              u11c2inout (VAR c2 : tsp00_C2;
                    VAR mask     : tut_term_mask;
                    mask_index   : integer;
                    VAR ok       : boolean;
                    VAR modified : boolean);
 
      ------------------------------ 
 
        FROM
              TA_terminal_IO : VTA09;
 
        PROCEDURE
              t09putmsg (VAR term     : tut_terminal;
                    VAR msg           : tsp00_Line;
                    is_warning        : boolean;
                    immediate_display : boolean);
 
        PROCEDURE
              t09mask (VAR t09    : tut_terminal;
                    count_names   : integer;
                    mask_size     : integer;
                    VAR mask_spec : tut_term_mask;
                    return_pf_key : boolean;
                    VAR pfkey     : tut_pfkey);
 
        PROCEDURE
              t09newscreen_page (VAR t09 : tut_terminal);
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : ThomasA
.sp
.cp 3
Created : 1986-01-17
.sp
.cp 3
Version : 2000-11-17
.sp
.cp 3
Release :      Date : 2000-11-17
.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    :
 
 
CONST
      msg20_singleindex    = ' SINGLE INDEX RECORD';
      msg20_namedindex     = ' NAMED INDEX RECORD ';
      msg20_link_rec       = '    LINK RECORD     ';
 
 
(*------------------------------*) 
 
PROCEDURE
      u14named_index_rec (VAR term : tut_terminal;
            VAR s        : tak_systembuffer;
            protect_mode : char;
            VAR modified : boolean;
            VAR pfkey    : tut_pfkey);
 
VAR
      dummy           : boolean;
      index_modified  : boolean;
      is_input        : boolean;
      mask_cnt        : integer;
      name_cnt        : integer;
      i               : integer;
      i2              : tsp00_Int2;
      index           : tsp00_Int2;
      rel_index       : tsp00_Int2;
      stack           : tgg00_StackEntry;
      ok              : tut_ok_array;
      mask            : tut_term_mask;
 
BEGIN
dummy     := true;
is_input  := false;
FOR i := 1 TO cut_mask_items DO
    BEGIN
    mask[ i ].upper_case       := true;
    mask[ i ].msg_in_attr[ 1 ] := cut_protected;
    mask[ i ].msg_in_attr[ 2 ] := protect_mode;
    END;
(*ENDFOR*) 
term.use_pfkeys := true;
index           := 0;
u11newpage (term, msg20_namedindex);
REPEAT
    t09newscreen_page(term);
    index_modified := false;
    IF  NOT is_input
    THEN
        BEGIN
        FOR i := 1 TO cut_mask_items DO
            BEGIN
            mask[ i ].in_name := bsp_name;
            mask[ i ].code_input       := false;
            ok   [ i ] := true
            END;
        (*ENDFOR*) 
        END;
    (*ENDIF*) 
    IF  index = 0
    THEN
        BEGIN
        rel_index      := 0;
        mask[ 1 ].msg  := 'RECORD LENGTH  (HEX)';
        mask[ 1 ].msg_in_attr[ 2 ] := protect_mode;
        u11int2in_out (s.b_sl,
              mask, 1, ok[ 1 ], modified);
        mask[ 2 ].msg  := 'ISURROGATE     (HEX)';
        u11surrogate_in_out (s.syskey.sauthid,
              mask, 2, ok[ 2 ], modified);
        mask[ 3 ].msg  := 'ENTRYTYPE      (HEX)';
        u11c2inout (s.syskey.sentrytyp,
              mask, 3, ok[ 3 ], modified);
        mask[ 4 ].msg  := 'LINKAGE        (HEX)';
        u11c2inout (s.syskey.slinkage,
              mask, 4, ok[ 4 ], modified);
        mask[ 5 ].msg  := 'ISEGMENTID     (HEX)';
        u11c2inout (s.smindex.isegmentid,
              mask, 5, ok[ 5 ], modified);
        mask[ 6 ].msg  := 'INDEXCOUNT     (HEX)';
        u11int1in_out (s.smindex.indexcount,
              mask, 6, ok[ 6 ], modified);
        name_cnt := 6;
        mask_cnt := 6
        END;
    (*ENDIF*) 
    IF  index MOD 18 = 1
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := cut_unprotected;
        mask[ 1 ].msg  := 'INDEX ENTRY    (HEX)';
        u11int2in_out (rel_index,
              mask, 1, ok[ 1 ], index_modified);
        IF  index_modified
        THEN
            IF  rel_index = 0
            THEN
                index := 0
            ELSE
                index := (rel_index - 1) * 18 + 1
            (*ENDIF*) 
        ELSE
            BEGIN
            mask[ 2 ].msg  := 'INDEXNAME           ';
            u11namein_out (s.smindex.indexdef[ rel_index ].indexn_prefix,
                  mask, 2, modified);
            mask[ 3 ].msg  := 'INDEXNO        (HEX)';
            u11int2in_out (s.smindex.indexdef[ rel_index ].indexno,
                  mask, 3, ok[ 3 ], modified);
            mask[ 4 ].msg  := 'ICOUNT         (HEX)';
            u11int1in_out (s.smindex.indexdef[ rel_index ].icount,
                  mask, 4, ok[ 4 ], modified);
            mask[ 5 ].msg  := 'IUNIQUE             ';
            u11boolean_in_out (s.smindex.indexdef[ rel_index ].iunique,
                  mask, 5, ok[ 5 ], modified);
            mask[ 6 ].msg  := 'IFILL               ';
            u11boolean_in_out (s.smindex.indexdef[ rel_index ].ifill,
                  mask, 6, ok[ 6 ], modified);
            mask[ 7 ].msg  := 'CREATE DATE    (HEX)';
            u11int4in_out (s.smindex.indexdef[ rel_index ].idatecre,
                  mask, 7, ok[ 7 ], modified);
            mask[ 8 ].msg  := 'CREATE TIME    (HEX)';
            u11int4in_out (s.smindex.indexdef[ rel_index ].itimecre,
                  mask, 8, ok[ 8 ], modified);
            mask[ 9 ].msg  := 'INITDATE       (HEX)';
            u11int4in_out (s.smindex.indexdef[ rel_index ].iinitdate,
                  mask, 9, ok[ 9 ], modified);
            mask[ 10 ].msg  := 'INITTIME       (HEX)';
            u11int4in_out (s.smindex.indexdef[ rel_index ].iinittime,
                  mask, 10, ok[ 10 ], modified);
            (*mask[ 11 ].msg  := 'IFILLER2       (HEX)';
                  u11int4in_out (s.smindex.indexdef[ rel_index ].ifiller2,
                  mask, 11, ok[ 11 ], modified);*)
            name_cnt := 10;
            mask_cnt := 10
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  index MOD 18 = 2
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := protect_mode;
        FOR i := 1 TO s.smindex.indexdef[ rel_index ].icount DO
            BEGIN
            mask[ i ].msg  := 'ICOLSEQ (  )   (HEX)';
            mask[ i ].msg[ 11 ] := chr(ord('0') + i MOD 10);
            mask[ i ].msg[ 10 ] := chr(ord('0') + i DIV 10);
            i2 := s.smindex.indexdef[ rel_index ].icolseq[ i ];
            u11int2in_out (i2,
                  mask, i, ok[ i ], modified);
            s.smindex.indexdef[ rel_index ].icolseq[ i ] := i2
            END;
        (*ENDFOR*) 
        name_cnt := s.smindex.indexdef[ rel_index ].icount;
        mask_cnt := name_cnt
        END;
    (*ENDIF*) 
    IF  index MOD 18 > 2
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := cut_protected;
        mask[ 1 ].msg := 'STACK INDEX    (HEX)';
        i2 := index MOD 18 - 2;
        u11int2in_out (i2,
              mask, 1, ok[ 1 ], modified);
        WITH s.smindex.indexdef[ rel_index ] DO
            BEGIN
            stack := icolstack[ i2 ];
            u13stack_entry (stack, mask, 1, ok, modified);
            icolstack[ i2 ] := stack
            END;
        (*ENDWITH*) 
        name_cnt := 6;
        mask_cnt := 6
        END;
    (*ENDIF*) 
    IF  NOT is_input
    THEN
        BEGIN
        t09newscreen_page(term);
        t09mask (term, name_cnt, mask_cnt, mask, true, pfkey);
        t09putmsg (term, term.blankline, false, false);
        CASE pfkey OF
            pf_up, pf_down, pf_end, pf_run :
                is_input := true;
            pf_cancel :
                modified := false;
            OTHERWISE;
            END;
        (*ENDCASE*) 
        END
    ELSE
        BEGIN
        u11maskerror (term, ok, mask, cut_mask_items, pfkey);
        IF  ok[ 1 ]
        THEN
            CASE pfkey OF
                pf_up :
                    BEGIN
                    IF  (index MOD 18 = 1) AND (index > 1)
                    THEN
                        index := index - 18
                    ELSE
                        index := index - 1;
                    (*ENDIF*) 
                    pfkey := pf_none
                    END;
                pf_down :
                    BEGIN
                    IF  rel_index = 0
                    THEN
                        index := index + 1
                    ELSE
                        IF  index MOD 18 - 2 >=
                            s.smindex.indexdef[ rel_index ].icount
                        THEN
                            index := rel_index * 18 + 1
                        ELSE
                            index := index + 1;
                        (*ENDIF*) 
                    (*ENDIF*) 
                    pfkey := pf_none
                    END;
                pf_run :
                    pfkey := pf_none;
                OTHERWISE ;
                END;
            (*ENDCASE*) 
        (*ENDIF*) 
        is_input := false
        END;
    (*ENDIF*) 
    IF  index < 0
    THEN
        index := 0
    ELSE
        IF  index > s.smindex.indexcount * 18
        THEN
            index := 0;
        (*ENDIF*) 
    (*ENDIF*) 
UNTIL
    (pfkey <> pf_none) AND NOT is_input;
(*ENDREPEAT*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      u14linkrec (VAR term : tut_terminal;
            VAR s        : tak_systembuffer;
            protect_mode : char;
            VAR modified : boolean;
            VAR pfkey    : tut_pfkey);
 
VAR
      dummy           : boolean;
      index_modified  : boolean;
      is_input        : boolean;
      c               : char;
      mask_cnt        : integer;
      name_cnt        : integer;
      i               : integer;
      i2              : tsp00_Int2;
      index           : tsp00_Int2;
      rel_index       : tsp00_Int2;
      stack           : tgg00_StackEntry;
      ok              : tut_ok_array;
      mask            : tut_term_mask;
 
BEGIN
dummy     := true;
is_input  := false;
FOR i := 1 TO cut_mask_items DO
    BEGIN
    mask[ i ].upper_case       := true;
    mask[ i ].msg_in_attr[ 1 ] := cut_protected;
    mask[ i ].msg_in_attr[ 2 ] := protect_mode;
    END;
(*ENDFOR*) 
term.use_pfkeys := true;
index                := 0;
u11newpage (term, msg20_link_rec);
REPEAT
    t09newscreen_page(term);
    index_modified := false;
    IF  NOT is_input
    THEN
        BEGIN
        FOR i := 1 TO cut_mask_items DO
            BEGIN
            mask[ i ].in_name := bsp_name;
            mask[ i ].code_input       := false;
            ok   [ i ] := true
            END;
        (*ENDFOR*) 
        END;
    (*ENDIF*) 
    IF  index = 0
    THEN
        BEGIN
        rel_index := 0;
        mask[ 1 ].msg  := 'RECORD LENGTH  (HEX)';
        mask[ 1 ].msg_in_attr[ 2 ] := protect_mode;
        u11int2in_out (s.b_sl,
              mask, 1, ok[ 1 ], modified);
        mask[ 2 ].msg  := 'LSURROGATE     (HEX)';
        u11surrogate_in_out (s.syskey.sauthid,
              mask, 2, ok[ 2 ], modified);
        mask[ 3 ].msg  := 'ENTRYTYPE      (HEX)';
        u11c2inout (s.syskey.sentrytyp,
              mask, 3, ok[ 3 ], modified);
        mask[ 4 ].msg  := 'LINKAGE        (HEX)';
        u11c2inout (s.syskey.slinkage,
              mask, 4, ok[ 4 ], modified);
        mask[ 5 ].msg  := 'LSEGMENTID     (HEX)';
        u11c2inout (s.slink.lsegmentid,
              mask, 5, ok[ 5 ], modified);
        mask[ 6 ].msg  := 'LINKCOUNT      (HEX)';
        u11int2in_out (s.slink.linkcount,
              mask, 6, ok[ 6 ], modified);
        name_cnt := 6;
        mask_cnt := 6
        END;
    (*ENDIF*) 
    IF  index MOD 18 = 1
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := cut_unprotected;
        mask[ 1 ].msg  := 'INDEX ENTRY    (HEX)';
        u11int2in_out (rel_index,
              mask, 1, ok[ 1 ], index_modified);
        IF  index_modified
        THEN
            IF  rel_index = 0
            THEN
                index := 0
            ELSE
                index := (rel_index - 1) * 18 + 1
            (*ENDIF*) 
        ELSE
            BEGIN
            mask[ 2 ].msg  := 'LTABLEID       (HEX)';
            u11surrogate_in_out (s.slink.linkdef[ rel_index ].ltableid,
                  mask, 2, ok[ 2 ], modified);
            mask[ 3 ].msg  := 'LINKNAME            ';
            u11namein_out (s.slink.linkdef[ rel_index ].linkn_prefix,
                  mask, 3, modified);
            mask[ 4 ].msg  := 'LFILLER        (HEX)';
            u11int2in_out (s.slink.linkdef[ rel_index ].lfiller1,
                  mask, 4, ok[ 4 ], modified);
            mask[ 5 ].msg  := 'CREATE DATE    (HEX)';
            u11int4in_out (s.slink.linkdef[ rel_index ].ldatecre,
                  mask, 5, ok[ 5 ], modified);
            mask[ 6 ].msg  := 'CREATE TIME    (HEX)';
            u11int4in_out (s.slink.linkdef[ rel_index ].ltimecre,
                  mask, 6, ok[ 6 ], modified);
            mask[ 7 ].msg  := 'LDATATYPE           ';
            u11datatype_in_out (s.slink.linkdef[ rel_index ].ldatatyp,
                  mask, 7, ok[ 7 ], modified);
            mask[ 8 ].msg  := 'LACTION        (HEX)';
            u11int1in_out (s.slink.linkdef[ rel_index ].laction,
                  mask, 8, ok[ 8 ], modified);
            mask[ 9 ].msg  := 'LCOLCOUNT      (HEX)';
            u11int1in_out (s.slink.linkdef[ rel_index ].lcolcount,
                  mask, 9, ok[ 9 ], modified);
            mask[ 10 ].msg  := 'LINDEXID            ';
            c := s.slink.linkdef[ rel_index ].lindexid[ 1 ];
            u11c1inout (c, mask, 10, ok[ 10 ], modified);
            s.slink.linkdef[ rel_index ].lindexid[ 1 ] := c;
            name_cnt := 10;
            mask_cnt := 10
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  index MOD 18 = 2
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := protect_mode;
        FOR i := 1 TO 16 DO
            BEGIN
            mask[ i ].msg  := 'LRECPOS (  )   (HEX)';
            mask[ i ].msg[ 11 ] := chr(ord('0') + i MOD 10);
            mask[ i ].msg[ 10 ] := chr(ord('0') + i DIV 10);
            i2 := s.slink.linkdef[ rel_index ].lrecpos[ i ];
            u11int2in_out (i2,
                  mask, i, ok[ i ], modified);
            s.slink.linkdef[ rel_index ].lrecpos[ i ] := i2
            END;
        (*ENDFOR*) 
        name_cnt := 16;
        mask_cnt := name_cnt
        END;
    (*ENDIF*) 
    IF  index MOD 18 > 2
    THEN
        BEGIN
        rel_index := index DIV 18 + 1;
        mask[ 1 ].msg_in_attr[ 2 ] := cut_protected;
        mask[ 1 ].msg := 'STACK INDEX    (HEX)';
        i2 := index MOD 18 - 2;
        u11int2in_out (i2,
              mask, 1, ok[ 1 ], modified);
        WITH s.slink.linkdef[ rel_index ] DO
            BEGIN
            stack := lstack[ i2 ];
            u13stack_entry (stack, mask, 1, ok, modified);
            lstack[ i2 ] := stack
            END;
        (*ENDWITH*) 
        name_cnt := 6;
        mask_cnt := 6
        END;
    (*ENDIF*) 
    IF  NOT is_input
    THEN
        BEGIN
        t09newscreen_page(term);
        t09mask (term, name_cnt, mask_cnt, mask, true, pfkey);
        t09putmsg (term, term.blankline, false, false);
        CASE pfkey OF
            pf_up, pf_down, pf_end, pf_run :
                is_input := true;
            pf_cancel :
                modified := false;
            OTHERWISE;
            END;
        (*ENDCASE*) 
        END
    ELSE
        BEGIN
        u11maskerror (term, ok, mask, cut_mask_items, pfkey);
        IF  ok[ 1 ]
        THEN
            CASE pfkey OF
                pf_up :
                    BEGIN
                    IF  (index MOD 18 = 1) AND (index > 1)
                    THEN
                        index := index - 18
                    ELSE
                        index := index - 1;
                    (*ENDIF*) 
                    pfkey := pf_none
                    END;
                pf_down :
                    BEGIN
                    IF  rel_index = 0
                    THEN
                        index := index + 1
                    ELSE
                        IF  index MOD 18 - 2 >=
                            s.slink.linkdef[ rel_index ].lcolcount
                        THEN
                            index := rel_index * 18 + 1
                        ELSE
                            index := index + 1;
                        (*ENDIF*) 
                    (*ENDIF*) 
                    pfkey := pf_none
                    END;
                pf_run :
                    pfkey := pf_none;
                OTHERWISE ;
                END;
            (*ENDCASE*) 
        (*ENDIF*) 
        is_input := false
        END;
    (*ENDIF*) 
    IF  index < 0
    THEN
        index := 0
    ELSE
        IF  index > s.slink.linkcount * 18
        THEN
            index := 0;
        (*ENDIF*) 
    (*ENDIF*) 
UNTIL
    (pfkey <> pf_none) AND NOT is_input;
(*ENDREPEAT*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
*-PRETTY-*  statements    :        228
*-PRETTY-*  lines of code :        488        PRETTYX 3.10 
*-PRETTY-*  lines in file :        696         1997-12-10 
.PA 
