/* @lastChanged: "1999-09-02"
 
 * @filename:   vxt11
 * @purpose:    "XT_copy_vtrace"
 * @release:    7.2.0.0
 * @see:        "-.-"
 *
 * @copyright:  (c) 1998-2004 SAP AG"
 */
 
.tt 1 $SAP$LiveCache$VXT11$
.tt 3 $$XT_copy_vtrace$1999-09-02$
 
.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
***********************************************************
 
Module  : XT_copy_vtrace
 
Define  :
 
        PROCEDURE
              x11copy_vtrace (VAR term : tut_terminal;
                    VAR cmd_in_fn      : tsp00_VFilename;
                    cmd_token          : tsp00_Name;
                    VAR pfkey          : tut_pfkey);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              GG_edit_routines : VGG17;
 
        PROCEDURE
              g17int4to_line (int : tsp00_Int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp00_VFilename);
 
        PROCEDURE
              g17sname_to_line (n : tsp00_Sname;
                    VAR ln_len    : integer;
                    VAR ln        : tsp00_Line);
 
      ------------------------------ 
 
        FROM
              TA_terminal_IO : VTA09;
 
        PROCEDURE
              t09frame (VAR t09 : tut_terminal; on : boolean);
 
        PROCEDURE
              t09holding (VAR term : tut_terminal;
                    VAR pfkey      : tut_pfkey);
 
        FUNCTION
              t09is_window_full (VAR term : tut_terminal;
                    wanted_lines: integer): boolean;
 
        PROCEDURE
              t09newscreen_page (VAR term : tut_terminal);
 
        PROCEDURE
              t09pfkeys (VAR t09 : tut_terminal; on : boolean);
 
        PROCEDURE
              t09put (VAR term : tut_terminal;
                    VAR ln     : tsp00_Line;
                    text_attr  : char);
 
        PROCEDURE
              t09putmsg (VAR term     : tut_terminal;
                    VAR msg           : tsp00_Line;
                    is_warning        : boolean;
                    immediate_display : boolean);
 
      ------------------------------ 
 
        FROM
              XT_auxiliary_procedures : VXT05;
 
        PROCEDURE
              x05close_file (VAR f : tut_file);
 
        PROCEDURE
              x05find_lwb_upb_pno (VAR term : tut_terminal;
                    VAR f            : tut_file;
                    wanted_pagetype  : tgg00_PageType;
                    VAR last_checkpt : tsp00_Int4;
                    VAR err          : tsp00_VfReturn);
 
        PROCEDURE
              x05get_direct (VAR term : tut_terminal;
                    VAR f             : tut_file;
                    wanted_block      : tsp00_Int4;
                    wanted_page       : tsp00_Int2;
                    VAR err           : tsp00_VfReturn);
 
        PROCEDURE
              x05get_next (VAR term : tut_terminal;
                    VAR f           : tut_file;
                    VAR err         : tsp00_VfReturn);
 
        PROCEDURE
              x05hostfile_err (VAR term : tut_terminal;
                    io_msg  : tsp00_C6;
                    errtext : tsp00_ErrText);
 
        PROCEDURE
              x05init_file (VAR f : tut_file;
                    VAR blankfilename : tsp00_VFilename);
 
        FUNCTION
              x05is_greater_file_pos (VAR arg1 : tut_file_pos;
                    VAR arg2 : tut_file_pos) : boolean;
 
        PROCEDURE
              x05name_to_int4 (VAR term : tut_terminal;
                    displ_warning : boolean;
                    n             : tsp00_Name;
                    VAR int       : tsp00_Int4;
                    VAR ok        : boolean);
 
        PROCEDURE
              x05open_file (VAR term : tut_terminal;
                    VAR f            : tut_file;
                    skip_mask        : boolean;
                    edit_file        : boolean;
                    rewind_option    : boolean;
                    msg_fn           : tsp00_C20;
                    VAR pfkey        : tut_pfkey);
 
        PROCEDURE
              x05readint4 (VAR term : tut_terminal;
                    init_int  : boolean;
                    is_int2   : boolean;
                    msg       : tsp00_C20;
                    VAR int   : tsp00_Int4;
                    VAR pfkey : tut_pfkey);
 
      ------------------------------ 
 
        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);
 
      ------------------------------ 
 
        FROM
              RTE_driver : VEN102;
 
        PROCEDURE
              sqlfclosep (
                    fhandle : tsp00_Int4;
                    option  : tsp05_RteCloseOption;
                    VAR err : tsp05_RteFileError);
 
        PROCEDURE
              sqlfopenp (
                    VAR fname   : tsp00_VFilename;
                    datakind    : tsp05_RteDataKind;
                    filemode    : tsp05_RteFileMode;
                    buffering   : tsp05_RteBufferingKind;
                    VAR fhandle : tsp00_Int4;
                    VAR err     : tsp05_RteFileError);
 
        PROCEDURE
              sqlfwritep (
                    fhandle : tsp00_Int4;
                    VAR buf : tsp00_MoveObj;
                    inlen   : tsp00_Longint;
                    VAR err : tsp05_RteFileError);
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              g17int4to_line;
 
              tsp00_Line tsp00_VFilename
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : JuergenA
.sp
.cp 3
Created : 1987-04-08
.sp
.cp 3
.sp
.cp 3
Release :      Date : 1999-09-02
.sp
***********************************************************
.sp
.cp 16
.fo
.oc _/1
Specification:
 
.CM *-END-* specification -------------------------------
.fo;.sp 2;.in
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
.CM *-END-* description ---------------------------------
.fo;.sp 2
***********************************************************
.sp
.cp 20
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
CONST
      c_open  = 'OPEN  ';
      c_write = 'WRITE ';
      c_close = 'CLOSE ';
      (* *)
      mx_fn_extension = 3;
      (* *)
      c_displ_warning = true;
      c_edit_file     = true;
      c_immed_displ   = true;
      c_init_int      = true;
      c_int2          = true;
      c_on            = true;
      c_rewind_option = true; (* PTS 1103859 JA 1999-09-02 *)
      c_warning       = true;
      c_with_zero     = true;
 
 
(*------------------------------*) 
 
PROCEDURE
      x11copy_vtrace (VAR term : tut_terminal;
            VAR cmd_in_fn      : tsp00_VFilename;
            cmd_token          : tsp00_Name;
            VAR pfkey          : tut_pfkey);
 
VAR
      is_ok         : boolean;
      io_err        : tsp00_VfReturn;
      prefix_fn_len : integer;
      curr_file_no  : tsp00_Int4;
      curr_page_cnt : tsp00_Int4;
      dummy_i4      : tsp00_Int4;
      max_page_cnt  : tsp00_Int4;
      write_fhandle : tsp00_Int4;
      write_err     : tsp05_RteFileError;
      write_fn      : tsp00_VFilename;
      vtrace_file   : tut_file;
 
BEGIN
pfkey                  := pf_none;
io_err                 := vf_ok;
write_err.sp5fe_result := vf_ok;
curr_file_no           := 1;
curr_page_cnt          := 0;
max_page_cnt           := 0;
write_fhandle          := 0;
x05init_file (vtrace_file, term.blankfilename);
t09frame  (term, c_on);
t09pfkeys (term, c_on);
vtrace_file.utf_fn := cmd_in_fn;
x05open_file (term, vtrace_file, (cmd_token <> bsp_name),
      NOT c_edit_file,
      NOT c_rewind_option, (* PTS 1103859 JA 1999-09-02 *)
      'VTRACE FILE NAME   :', pfkey);
IF  pfkey = pf_none
THEN
    BEGIN
    IF  cmd_token = bsp_name
    THEN
        BEGIN
        t09put (term, term.blankline, cut_protected);
        x05readint4 (term, NOT c_init_int, NOT c_int2,
              'MAX PAGES PER FILE :', max_page_cnt, pfkey)
        END
    ELSE
        BEGIN
        x05name_to_int4 (term, c_displ_warning, cmd_token,
              max_page_cnt, is_ok);
        IF  NOT is_ok
        THEN
            pfkey := pf_end
        (*ENDIF*) 
        END
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  pfkey = pf_none
THEN
    BEGIN
    write_fn     := vtrace_file.utf_fn;
    prefix_fn_len := sizeof (write_fn);
    WHILE (prefix_fn_len > 1) AND (write_fn [prefix_fn_len] = ' ') DO
        prefix_fn_len := prefix_fn_len - 1;
    (*ENDWHILE*) 
    prefix_fn_len := prefix_fn_len + 1;
    IF  prefix_fn_len > sizeof (write_fn)  - mx_fn_extension
    THEN
        prefix_fn_len := sizeof (write_fn)  - mx_fn_extension;
    (*ENDIF*) 
    write_fn [prefix_fn_len] := '.';
    t09put (term, term.blankline, cut_protected);
    xt11open_write_file (term, write_fhandle, write_fn,
          prefix_fn_len, curr_file_no, write_err, pfkey)
    END;
(*ENDIF*) 
IF  (pfkey = pf_none) AND (write_err.sp5fe_result = vf_ok)
THEN
    x05find_lwb_upb_pno (term, vtrace_file, ptVtrace_egg00, dummy_i4,
          io_err);
(*ENDIF*) 
IF  (pfkey = pf_none) AND
    (io_err = vf_ok ) AND (write_err.sp5fe_result = vf_ok)
THEN
    x05get_direct (term, vtrace_file,
          vtrace_file.utf_cycle_lwb.utfp_block_no,
          vtrace_file.utf_cycle_lwb.utfp_page_no, io_err);
(*ENDIF*) 
WHILE (pfkey = pf_none)
      AND (write_err.sp5fe_result = vf_ok)
      AND (io_err = vf_ok)
      AND NOT term.is_reset_called DO
    BEGIN
    curr_page_cnt := curr_page_cnt + 1;
    IF  (curr_page_cnt > max_page_cnt) AND (max_page_cnt > 0)
    THEN
        BEGIN
        sqlfclosep (write_fhandle, sp5vf_close_normal, write_err);
        write_fhandle := 0;
        IF  write_err.sp5fe_result <> vf_ok
        THEN
            x05hostfile_err (term, c_close, write_err.sp5fe_text)
        ELSE
            BEGIN
            curr_file_no  := curr_file_no + 1;
            curr_page_cnt := 1;
            xt11open_write_file (term, write_fhandle, write_fn,
                  prefix_fn_len, curr_file_no, write_err, pfkey)
            END
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  (pfkey = pf_none) AND (write_err.sp5fe_result = vf_ok)
    THEN
        WITH vtrace_file DO
            BEGIN
            (* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *)
            sqlfwritep (write_fhandle, utf_page^, utf_page_len,
                  write_err);
            (* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *)
            IF  write_err.sp5fe_result <> vf_ok
            THEN
                x05hostfile_err (term, c_write, write_err.sp5fe_text)
            ELSE
                IF  (utf_pos.utfp_block_no= utf_cycle_upb.utfp_block_no)
                    AND
                    (utf_pos.utfp_page_no = utf_cycle_upb.utfp_page_no)
                THEN
                    io_err := vf_eof
                ELSE
                    IF  io_err = vf_ok
                    THEN
                        BEGIN
                        IF  x05is_greater_file_pos (utf_last, utf_pos)
                        THEN
                            x05get_next (term, vtrace_file, io_err)
                        ELSE
                            x05get_direct (term, vtrace_file,
                                  utf_first.utfp_block_no,
                                  utf_first.utfp_page_no, io_err)
                        (*ENDIF*) 
                        END
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
            END
        (*ENDWITH*) 
    (*ENDIF*) 
    END;
(*ENDWHILE*) 
x05close_file (vtrace_file);
IF  write_fhandle <> 0
THEN
    BEGIN
    sqlfclosep (write_fhandle, sp5vf_close_normal, write_err);
    IF  write_err.sp5fe_result <> vf_ok
    THEN
        x05hostfile_err (term, c_close, write_err.sp5fe_text)
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  pfkey = pf_none
THEN
    t09holding (term, pfkey);
(*ENDIF*) 
IF  pfkey <> pf_cancel
THEN
    pfkey := pf_none
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      xt11open_write_file (VAR term : tut_terminal;
            VAR write_fhandle : tsp00_Int4;
            VAR write_fn      : tsp00_VFilename;
            prefix_fn_len     : integer;
            curr_file_no      : tsp00_Int4;
            VAR write_err     : tsp05_RteFileError;
            VAR pfkey         : tut_pfkey);
 
VAR
      ln_len : integer;
      ln     : tsp00_Line;
 
BEGIN
pfkey                  := pf_none;
write_err.sp5fe_result := vf_ok;
IF  t09is_window_full (term, 2)
THEN
    BEGIN
    t09holding (term, pfkey);
    IF  pfkey = pf_none
    THEN
        t09newscreen_page (term)
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  pfkey = pf_none
THEN
    BEGIN
    g17int4to_line (curr_file_no, c_with_zero, mx_fn_extension,
          prefix_fn_len+1, write_fn);
    (* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *)
    sqlfopenp (write_fn, sp5vf_binary, sp5vf_write, sp5bk_unbuffered,
          write_fhandle, write_err);
    (* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *)
    ln     := term.blankline;
    ln_len := 0;
    g17sname_to_line ('creating:   ', ln_len, ln);
    s10mv (sizeof (write_fn), sizeof (ln),
          @write_fn, 1, @ln, ln_len+2, prefix_fn_len + mx_fn_extension);
    t09put (term, ln, cut_protected);
    t09putmsg (term, term.blankline, NOT c_warning, c_immed_displ);
    IF  write_err.sp5fe_result <> vf_ok
    THEN
        x05hostfile_err (term, c_open, write_err.sp5fe_text)
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
