.CM  SCRIPT , Version - 1.1 , last edited by holger
.ad 8
.bm 8
.fm 4
.bt $Copyright by   SAP AG, 2001$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $SQL$Project Distributed Database System$VMT96$
.tt 2 $$$
.tt 3 $DanielD$trace sql packet$1996-06-13$
***********************************************************
.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  : trace sql packet
=========
.sp
Purpose :
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        PROCEDURE
              m96packet (
                    layer      : tsp_layer;
                    VAR packet : tsp1_packet;
                    comment    : tsp_c30);
 
        PROCEDURE
              m96control (
                    layer    : tsp_layer;
                    VAR ctrl : tin_packet_control );
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              Test_Procedures: VMT90;
 
        PROCEDURE
              m90int4 (
                    layer : tsp_layer;
                    nam   : tsp_sname;
                    int   : tsp_int4);
 
        PROCEDURE
              m90addr (
                    layer    : tsp_layer;
                    nam      : tsp_sname;
                    bufaddr  : tsp1_packet_ptr);
 
        PROCEDURE
              m90addr1 (
                    layer    : tsp_layer;
                    nam      : tsp_sname;
                    bufaddr  : tsp1_segment_ptr);
 
        PROCEDURE
              m90addr2 (
                    layer    : tsp_layer;
                    nam      : tsp_sname;
                    bufaddr  : tsp1_part_ptr);
 
        PROCEDURE
              m90line (
                    layer  : tsp_layer;
                    VAR ln : tsp_line);
 
        PROCEDURE
              m90wstring (
                    VAR str : tsp_moveobj;
                    strpos  : integer;
                    len     : integer );
 
        PROCEDURE
              m90buf (
                    layer   : tsp_layer;
                    VAR buf : tsp_moveobj;
                    pos_anf : integer;
                    pos_end : integer);
 
        PROCEDURE
              m90wc30 (
                    str : tsp_c30;
                    len : integer );
 
        PROCEDURE
              m90wint ( int : tsp_int4 );
 
        PROCEDURE
              m90wchar ( ch : char;
                    count : integer );
 
        PROCEDURE
              m90nl;
 
        FUNCTION
              m90istest_on (
                    layer : tsp_layer ) : boolean;
 
      ------------------------------ 
 
        FROM
              Packet_handling: VSP26;
 
        PROCEDURE
              s26nextpart (VAR part_ptr : tsp1_part_ptr);
 
        PROCEDURE
              s26next_segment (VAR segm_ptr : tsp1_segment_ptr);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-30: VSP30;
 
        FUNCTION
              s30klen (
                    VAR str : tsp_c30;
                    val     : char;
                    cnt     : integer) : integer;
 
      ------------------------------ 
 
        FROM
              GET-Conversions: VSP40;
 
        PROCEDURE
              s40g4int (
                    VAR buf  : tsp_moveobj;
                    pos      : tsp_int4;
                    VAR dest : tsp_int4;
                    VAR res  : tsp_num_error);
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              m90wstring;
 
              tsp_any_packed_char   tsp_moveobj
              tsp_any_packed_char   tsp_moveobj
 
        PROCEDURE
              m90buf;
 
              tsp_buf              tsp_moveobj
              tsp_buf              tsp_moveobj
 
        FUNCTION
              s30klen;
 
              tsp_moveobj          tsp_c30
              tsp_moveobj          tsp1_packet
 
        PROCEDURE
              m90addr;
 
              tsp_bufaddr tsp1_packet_ptr
 
        PROCEDURE
              m90addr1;
 
              tsp_bufaddr tsp1_segment_ptr
 
        PROCEDURE
              m90addr2;
 
              tsp_bufaddr tsp1_part_ptr
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : DanielD
.sp
.cp 3
Created : 1995-07-13
.sp
.cp 3
Version : 2001-03-19
.sp
.cp 3
Release :  6.1.2     Date : 1994-06-24
.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    :
 
 
(*------------------------------*) 
 
PROCEDURE
      m96smesstype (
            mess_type : tsp1_cmd_mess_type;
            VAR buf : tsp_c30);
 
BEGIN
CASE mess_type OF
    sp1m_nil:
        buf := 'nil                           ';
    sp1m_cmd_lower_bound:
        buf := 'cmd_lower_bound               ';
    sp1m_dbs:
        buf := 'dbs                           ';
    sp1m_parse:
        buf := 'parse                         ';
    sp1m_cfill0:
        buf := 'cfill0                        ';
    sp1m_syntax:
        buf := 'syntax                        ';
    sp1m_cfill1:
        buf := 'cfill1                        ';
    sp1m_cfill2:
        buf := 'cfill2                        ';
    sp1m_cfill3:
        buf := 'cfill3                        ';
    sp1m_cfill4:
        buf := 'cfill4                        ';
    sp1m_cfill5:
        buf := 'cfill5                        ';
    sp1m_cmd_upper_bound:
        buf := 'cmd_upper_bound               ';
    sp1m_no_cmd_lower_bound:
        buf := 'no_cmd_lower_bound            ';
    sp1m_execute:
        buf := 'execute                       ';
    sp1m_ncfill0:
        buf := 'ncfill0                       ';
    sp1m_putval:
        buf := 'putval                        ';
    sp1m_getval:
        buf := 'getval                        ';
    sp1m_load:
        buf := 'load                          ';
    sp1m_unload:
        buf := 'unload                        ';
    sp1m_ncfill1:
        buf := 'ncfill1                       ';
    sp1m_ncfill2:
        buf := 'ncfill2                       ';
    sp1m_ncfill3:
        buf := 'ncfill3                       ';
    sp1m_ncfill4:
        buf := 'ncfill4                       ';
    sp1m_ncfill5:
        buf := 'ncfill5                       ';
    sp1m_no_cmd_upper_bound:
        buf := 'no_cmd_upper_bound            ';
    sp1m_hello:
        buf := 'hello                         ';
    sp1m_util_lower_bound:
        buf := 'util_lower_bound              ';
    sp1m_utility:
        buf := 'utility                       ';
    sp1m_incopy:
        buf := 'incopy                        ';
    sp1m_ufill1:
        buf := 'ufill1                        ';
    sp1m_outcopy:
        buf := 'outcopy                       ';
    sp1m_diag_outcopy :
        buf := 'diag_outcopy                  ';
    sp1m_ufill3:
        buf := 'ufill3                        ';
    sp1m_ufill4:
        buf := 'ufill4                        ';
    sp1m_ufill5:
        buf := 'ufill5                        ';
    sp1m_ufill6:
        buf := 'ufill6                        ';
    sp1m_ufill7:
        buf := 'ufill7                        ';
    sp1m_util_upper_bound:
        buf := 'util_upper_bound              ';
    sp1m_specials_lower_bound:
        buf := 'specials_lower_bound          ';
    sp1m_switch:
        buf := 'switch                        ';
    sp1m_switchlimit:
        buf := 'switchlimit                   ';
    sp1m_buflength:
        buf := 'buflength                     ';
    sp1m_minbuf:
        buf := 'minbuf                        ';
    sp1m_maxbuf:
        buf := 'maxbuf                        ';
    sp1m_state_utility:
        buf := 'state_utility                 ';
    sp1m_sfill2:
        buf := 'sfill2                        ';
    sp1m_sfill3:
        buf := 'sfill3                        ';
    sp1m_sfill4:
        buf := 'sfill4                        ';
    sp1m_sfill5:
        buf := 'sfill5                        ';
    sp1m_specials_upper_bound:
        buf := 'specials_upper_bound          ';
    OTHERWISE:
        buf := 'Unknown mess type             ';
    END;
(*ENDCASE*) 
END; (* m96smesstype *)
 
(*------------------------------*) 
 
PROCEDURE
      m96ssqlmode (
            sql_mode : tsp1_sqlmode;
            VAR buf  : tsp_c30);
 
BEGIN
CASE sql_mode OF
    sp1sm_nil:
        buf := 'nil                           ';
    sp1sm_session_sqlmode:
        buf := 'session_sqlmode               ';
    sp1sm_adabas:
        buf := 'adabas                        ';
    sp1sm_ansi:
        buf := 'ansi                          ';
    sp1sm_db2:
        buf := 'db2                           ';
    sp1sm_oracle:
        buf := 'oracle                        ';
    OTHERWISE:
        buf := 'Unknown SQL mode              ';
    END;
(*ENDCASE*) 
END; (* m96ssqlmode *)
 
(*------------------------------*) 
 
PROCEDURE
      m96sproducer (
            producer : tsp1_producer;
            VAR buf  : tsp_c30);
 
BEGIN
CASE producer OF
    sp1pr_nil:
        buf := 'nil                           ';
    sp1pr_user_cmd:
        buf := 'user_cmd                      ';
    sp1pr_internal_cmd:
        buf := 'internal_cmd                  ';
    sp1pr_kernel:
        buf := 'kernel                        ';
    OTHERWISE:
        buf := 'Unknown Producer              ';
    END;
(*ENDCASE*) 
END; (* m96sproducer *)
 
(*------------------------------*) 
 
PROCEDURE
      m96ssqlfunction (
            function_code : tsp_int2;
            VAR buf  : tsp_c30);
 
BEGIN
CASE function_code OF
    csp1_nil_fc:
        buf := 'special function              ';
    csp1_create_table_fc:
        buf := 'create_table                  ';
    csp1_set_role_fc:
        buf := 'set_role                      ';
    csp1_insert_fc:
        buf := 'insert                        ';
    csp1_select_fc:
        buf := 'select                        ';
    csp1_update_fc:
        buf := 'update                        ';
    csp1_drop_role_fc:
        buf := 'drop_role                     ';
    csp1_drop_view_fc:
        buf := 'drop_view                     ';
    csp1_drop_table_fc:
        buf := 'drop_table                    ';
    csp1_delete_fc:
        buf := 'delete                        ';
    csp1_create_view_fc:
        buf := 'create_view                   ';
    csp1_drop_user_fc:
        buf := 'drop_user                     ';
    csp1_create_role_fc:
        buf := 'create_role                   ';
    csp1_create_sequence_fc:
        buf := 'create_sequence               ';
    csp1_alter_sequence_fc:
        buf := 'alter_sequence                ';
    csp1_unused1_fc:
        buf := 'unused1                       ';
    csp1_drop_sequence_fc:
        buf := 'drop_sequence                 ';
    csp1_create_schema_fc:
        buf := 'create_schema                 ';
    csp1_create_cluster_fc:
        buf := 'create_cluster                ';
    csp1_create_user_fc:
        buf := 'create_user                   ';
    csp1_create_index_fc:
        buf := 'create_index                  ';
    csp1_drop_index_fc:
        buf := 'drop_index                    ';
    csp1_drop_cluster_fc:
        buf := 'drop_cluster                  ';
    csp1_validate_index_fc:
        buf := 'validate_index                ';
    csp1_create_procedure_fc:
        buf := 'create_procedure              ';
    csp1_alter_procedure_fc:
        buf := 'alter_procedure               ';
    csp1_alter_table_fc:
        buf := 'alter_table                   ';
    csp1_explain_fc:
        buf := 'explain                       ';
    csp1_grant_fc:
        buf := 'grant                         ';
    csp1_revoke_fc:
        buf := 'revoke                        ';
    csp1_create_synonym_fc:
        buf := 'create_synonym                ';
    csp1_drop_synonym_fc:
        buf := 'drop_synonym                  ';
    csp1_alter_system_swith_log_fc:
        buf := 'alter_system_swith_log        ';
    csp1_set_transaction_fc:
        buf := 'set_transaction               ';
    csp1_pl_sql_execute_fc:
        buf := 'pl_sql_execute                ';
    csp1_lock_table_fc:
        buf := 'lock_table                    ';
    csp1_unused2_fc:
        buf := 'unused2                       ';
    csp1_rename_fc:
        buf := 'rename                        ';
    csp1_comment_fc:
        buf := 'comment                       ';
    csp1_audit_fc:
        buf := 'audit                         ';
    csp1_noaudit_fc:
        buf := 'noaudit                       ';
    csp1_alter_index_fc:
        buf := 'alter_index                   ';
    csp1_create_external_database_fc:
        buf := 'create_external_database      ';
    csp1_drop_external_database_fc:
        buf := 'drop_external_database        ';
    csp1_create_database_fc:
        buf := 'create_database               ';
    csp1_alter_database_fc:
        buf := 'alter_database                ';
    csp1_create_rollback_segment_fc:
        buf := 'create_rollback_segment       ';
    csp1_alter_rollback_segment_fc:
        buf := 'alter_rollback_segment        ';
    csp1_drop_rollback_segment_fc:
        buf := 'drop_rollback_segment         ';
    csp1_create_ts_tablespace_fc:
        buf := 'create_tablespace             ';
    csp1_alter_ts_tablespace_fc:
        buf := 'alter_tablespace              ';
    csp1_drop_ts_tablespace_fc:
        buf := 'drop_tablespace               ';
    csp1_alter_session_fc:
        buf := 'alter_session                 ';
    csp1_alter_user_fc:
        buf := 'alter_user                    ';
    csp1_commit_fc:
        buf := 'commit                        ';
    csp1_rollback_fc:
        buf := 'rollback                      ';
    csp1_savepoint_fc:
        buf := 'savepoint                     ';
    csp1_create_control_file_fc:
        buf := 'create_control_file           ';
    csp1_alter_tracing_fc:
        buf := 'alter_tracing                 ';
    csp1_create_trigger_fc:
        buf := 'create_trigger                ';
    csp1_alter_trigger_fc:
        buf := 'alter_trigger                 ';
    csp1_drop_trigger_fc:
        buf := 'drop_trigger                  ';
    csp1_analyze_table_fc:
        buf := 'analyze_table                 ';
    csp1_analyze_index_fc:
        buf := 'analyze_index                 ';
    csp1_analyze_cluster_fc:
        buf := 'analyze_cluster               ';
    csp1_create_profile_fc:
        buf := 'create_profile                ';
    csp1_drop_profile_fc:
        buf := 'drop_profile                  ';
    csp1_alter_profile_fc:
        buf := 'alter_profile                 ';
    csp1_drop_procedure_fc:
        buf := 'drop_procedure                ';
    csp1_unused3_fc:
        buf := 'unused3                       ';
    csp1_alter_resource_cost_fc:
        buf := 'alter_resource_cost           ';
    csp1_create_sl_snapshot_log_fc:
        buf := 'create_snapshot_log           ';
    csp1_alter_sl_snapshot_log_fc:
        buf := 'alter_snapshot_log            ';
    csp1_drop_sl_snapshot_log_fc:
        buf := 'drop_snapshot_log             ';
    csp1_create_snapshot_fc:
        buf := 'create_snapshot               ';
    csp1_alter_snapshot_fc:
        buf := 'alter_snapshot                ';
    csp1_drop_snapshot_fc:
        buf := 'drop_snapshot                 ';
    csp1_select_direct_fc:
        buf := 'select_direct                 ';
    csp1_select_first_fc:
        buf := 'select_first                  ';
    csp1_select_last_fc:
        buf := 'select_last                   ';
    csp1_select_next_fc:
        buf := 'select_next                   ';
    csp1_select_prev_fc:
        buf := 'select_prev                   ';
    csp1_fetch_first_fc:
        buf := 'fetch_first                   ';
    csp1_fetch_last_fc:
        buf := 'fetch_last                    ';
    csp1_fetch_next_fc:
        buf := 'fetch_next                    ';
    csp1_fetch_prev_fc:
        buf := 'fetch_prev                    ';
    csp1_fetch_pos_fc:
        buf := 'fetch_pos                     ';
    csp1_fetch_same_fc:
        buf := 'fetch_same                    ';
    csp1_string_command_fc:
        buf := 'string command                ';
    csp1_connect_fc:
        buf := 'connect                       ';
    csp1_drop_parseid_fc:
        buf := 'drop parsid                   ';
    csp1_close_fc:
        buf := 'close                         ';
    csp1_usage_fc:
        buf := 'usage                         ';
    csp1_serverdb_fc:
        buf := 'serverdb                      ';
    csp1_monitor_fc:
        buf := 'monitor                       ';
    csp1_set_fc:
        buf := 'set                           ';
    csp1_link_fc:
        buf := 'link                          ';
    csp1_create_domain_fc:
        buf := 'create domain                 ';
    csp1_drop_domain_fc:
        buf := 'drop domain                   ';
    csp1_describe_fc:
        buf := 'describe                      ';
    csp1_alter_password_fc:
        buf := 'alter password                ';
    csp1_putval_fc:
        buf := 'putval                        ';
    csp1_getval_fc:
        buf := 'getval                        ';
    csp1_diagnose_fc:
        buf := 'diagnose                      ';
    csp1_unlock_fc:
        buf := 'unlock                        ';
    csp1_refresh_fc:
        buf := 'refresh                       ';
    csp1_clear_snapshot_log_fc:
        buf := 'clear snapshot log            ';
    csp1_next_stamp_fc:
        buf := 'next stamp                    ';
    csp1_exists_table_fc:
        buf := 'exists table                  ';
    csp1_commit_release_fc:
        buf := 'commit release                ';
    csp1_rollback_release_fc:
        buf := 'rollback release              ';
    csp1_drda_native_ddl_fc:
        buf := 'drda nativ ddl                ';
    csp1_select_into_fc:
        buf := 'select into                   ';
    csp1_minsert_fc:
        buf := 'minsert                       ';
    csp1_mselect_fc:
        buf := 'mselect                       ';
    csp1_mupdate_fc:
        buf := 'mupdate                       ';
    csp1_mdelete_fc:
        buf := 'mdelete                       ';
    csp1_mfetch_first_fc:
        buf := 'mfetch_first                  ';
    csp1_mfetch_last_fc:
        buf := 'mfetch_last                   ';
    csp1_mfetch_next_fc:
        buf := 'mfetch_next                   ';
    csp1_mfetch_prev_fc:
        buf := 'mfetch_prev                   ';
    csp1_mfetch_pos_fc:
        buf := 'mfetch_pos                    ';
    csp1_mfetch_same_fc:
        buf := 'mfetch_same                   ';
    OTHERWISE:
        buf := 'Unknown SQL Function          ';
    END;
(*ENDCASE*) 
END; (* m96ssqlfunction *)
 
(*------------------------------*) 
 
PROCEDURE
      m96spartkind (
            part_kind : tsp1_part_kind;
            VAR buf : tsp_c30);
 
BEGIN
CASE part_kind OF
    sp1pk_nil:
        buf := 'nil                           ';
    sp1pk_appl_parameter_description:
        buf := 'appl_parameter_description    ';
    sp1pk_columnnames:
        buf := 'columnnames                   ';
    sp1pk_command:
        buf := 'command                       ';
    sp1pk_conv_tables_returned:
        buf := 'conv_tables_returned          ';
    sp1pk_data:
        buf := 'data                          ';
    sp1pk_errortext:
        buf := 'errortext                     ';
    sp1pk_getinfo:
        buf := 'getinfo                       ';
    sp1pk_modulname:
        buf := 'modulname                     ';
    sp1pk_page:
        buf := 'page                          ';
    sp1pk_parsid:
        buf := 'parsid                        ';
    sp1pk_parsid_of_select:
        buf := 'parsid_of_select              ';
    sp1pk_resultcount:
        buf := 'resultcount                   ';
    sp1pk_resulttablename:
        buf := 'resulttablename               ';
    sp1pk_shortinfo:
        buf := 'shortinfo                     ';
    sp1pk_user_info_returned:
        buf := 'user_info_returned            ';
    sp1pk_surrogate:
        buf := 'surrogate                     ';
    sp1pk_bdinfo:
        buf := 'bdinfo                        ';
    sp1pk_longdata:
        buf := 'longdata                      ';
    OTHERWISE:
        buf := 'Unknown part kind             ';
    END;
(*ENDCASE*) 
END; (* m96spartkind *)
 
(*------------------------------*) 
 
PROCEDURE
      m96warningset (
            layer : tsp_layer;
            warningset : tsp_warningset;
            indent : integer);
 
VAR
      w : tsp_warnings;
      warnings : boolean;
 
BEGIN
IF  m90istest_on (layer)
THEN
    BEGIN
    warnings := false;
    IF  indent > 0
    THEN
        m90wchar (bsp_c1, indent);
    (*ENDIF*) 
    m90wc30 ('Warnings: [                   ', 11 );
    FOR w := warn1 TO warn15_serverdb_not_in_majority DO
        BEGIN
        IF  w in warningset
        THEN
            BEGIN
            IF  warnings
            THEN
                m90wchar (',', 1);
            (* use string instead of number *)
            (*ENDIF*) 
            m90wint (ord(w));
            warnings := true
            END;
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
    m90wchar (']', 1);
    m90nl;
    END;
(*ENDIF*) 
END; (* m96warningset *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_packetheader (
            VAR header : tsp1_packet_header;
            VAR comment : tsp_c30);
 
BEGIN
m90wc30 (comment, s30klen (comment, bsp_c1, sizeof(comment)) + 1);
m90wchar ( ':', 1);
m90wchar ( ' ', 1);
m90wint (header.sp1h_no_of_segm);
m90wc30 ( ' Segments (                   ', 11);
m90wint (header.sp1h_varpart_size);
m90wc30 ( ' bytes)                       ', 7);
m90nl;
END; (* m96_packetheader *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_segmentheader (
            VAR header : tsp1_segment_header);
 
VAR
      cmd_segment : boolean;
      enumbuf : tsp_c30;
 
BEGIN
cmd_segment := header.sp1s_segm_kind = sp1sk_cmd;
m90wchar ( bsp_c1, 5);
IF  cmd_segment
THEN
    BEGIN
    m96smesstype (header.sp1c_mess_type, enumbuf);
    m90wc30 (enumbuf, s30klen (enumbuf, bsp_c1, sizeof(enumbuf)));
    END
ELSE
    m90wc30 ('return                        ', 7);
(*ENDIF*) 
m90wc30 ( ' SEGMENT                      ', 9 );
m90wint (header.sp1s_own_index);
m90wchar (':', 1);
m90wchar (bsp_c1, 1);
m90wint (header.sp1s_no_of_parts);
m90wc30 (' Part(s), Length              ', 17);
m90wint (header.sp1s_segm_len);
m90nl;
IF  cmd_segment
THEN
    BEGIN
    m90wchar (bsp_c1, 8);
    m96ssqlmode (header.sp1c_sqlmode, enumbuf);
    m90wc30 (enumbuf, s30klen (enumbuf, bsp_c1, sizeof(enumbuf)) + 1);
    m96sproducer (header.sp1c_producer, enumbuf);
    m90wc30 (enumbuf, s30klen (enumbuf, bsp_c1, sizeof(enumbuf)) + 1);
    IF  header.sp1c_commit_immediately
    THEN
        m90wc30 ( 'commit                        ', 7 );
    (*ENDIF*) 
    IF  header.sp1c_ignore_costwarning
    THEN
        m90wc30 ( 'ignore costwarning            ', 18);
    (*ENDIF*) 
    IF  header.sp1c_prepare
    THEN
        m90wc30 ( 'prepare                       ', 8 );
    (*ENDIF*) 
    IF  header.sp1c_with_info
    THEN
        m90wc30 ( 'with info                     ', 10);
    (*ENDIF*) 
    END
ELSE
    BEGIN
    (* dump state header.sp1r_sqlstate *)
    m90wc30 ('        Returncode            ', 19);
    m90wint (header.sp1r_returncode);
    IF  (header.sp1r_errorpos > 0)
    THEN
        BEGIN
        m90wc30 ( ' Errorpos                     ', 10);
        m90wint (header.sp1r_errorpos);
        m90wchar (bsp_c1, 1);
        END;
    (*ENDIF*) 
    m90wchar (bsp_c1, 1);
    m96ssqlfunction (header.sp1r_function_code, enumbuf);
    m90wc30 (enumbuf, s30klen (enumbuf, bsp_c1, sizeof(enumbuf)));
    IF  header.sp1r_extern_warning <> []
    THEN
        BEGIN
        m90nl;
        m96warningset (xx, header.sp1r_extern_warning, 10);
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
m90nl;
END; (* m96_segmentheader *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_put_char_buf (
            VAR buf : tsp_moveobj;
            bpos    : integer;
            epos    : integer );
 
CONST
      l = 70;
 
VAR
      b     : tsp_line;
      loops : integer;
      i     : integer;
      j     : integer;
 
BEGIN
FOR i := 1 TO mxsp_line DO
    b [i]  := bsp_c1;
(*ENDFOR*) 
loops := (epos - bpos) DIV l;
IF  (epos - bpos) MOD l > 0
THEN
    loops := loops + 1;
(*ENDIF*) 
FOR i := 1 TO loops
      DO
    BEGIN
    FOR j := 1 TO l
          DO
        IF  (i-1)*l+j <= epos
        THEN
            b  [j]  := buf [ (i-1)*l + j] ;
        (*ENDIF*) 
    (*ENDFOR*) 
    m90line (xx, b);
    FOR j := 1 TO l DO
        b [j]  := bsp_c1;
    (*ENDFOR*) 
    END;
(*ENDFOR*) 
END; (* m96_put_char_buf *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_cmd_part (
            VAR cmd_buf : tsp_moveobj;
            len : integer);
 
BEGIN
m96_put_char_buf (cmd_buf, 1, len);
END; (* m96_cmd_part *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_resultcount_part (
            VAR count_part : tsp_moveobj);
 
VAR
      cnt : tsp_int4;
      res      : tsp_num_error;
 
BEGIN
s40g4int (count_part, 2, cnt, res);
m90wchar (bsp_c1, 5);
IF  cnt > 0
THEN
    m90wint (cnt)
ELSE
    m90wc30 ('Unknown Count                 ', 13);
(*ENDIF*) 
m90nl;
END; (* m96_resultcount_part *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_shortinfo_part (
            VAR info_part : tsp_moveobj;
            args : integer);
 
VAR
      i : integer;
      bufpos : integer;
 
BEGIN
bufpos := 1;
FOR i := 1 TO args DO
    BEGIN
    m90buf (xx, info_part, bufpos, bufpos + sizeof (tsp1_param_info) - 1);
    bufpos := bufpos + sizeof(tsp1_param_info);
    END;
(*ENDFOR*) 
END; (* m96_shortinfo_part *)
 
(*------------------------------*) 
 
PROCEDURE
      m96_part (
            VAR part : tsp1_part);
 
VAR
      enumbuf : tsp_c30;
 
BEGIN
m90wchar (bsp_c1, 5);
m96spartkind (part.sp1p_part_kind, enumbuf);
m90wc30 (enumbuf, s30klen (enumbuf, bsp_c1, sizeof(enumbuf)));
IF  part.sp1p_attributes <> []
THEN
    BEGIN
    m90wc30 (' Attr                         ', 5);
    m90wchar (',', 1);
    END;
(*ENDIF*) 
m90wchar (bsp_c1, 1);
m90wint (part.sp1p_arg_count);
m90wc30 (' Args  Length                 ', 14);
m90wint (part.sp1p_buf_len);
m90wc30 (' of                           ', 4);
m90wint (part.sp1p_buf_size);
m90nl;
IF  part.sp1p_buf_len <= 0
THEN
    BEGIN
    m90wc30 ('        Part is empty         ', 21);
    m90nl;
    END
ELSE
    BEGIN
    CASE part.sp1p_part_kind OF
        sp1pk_command:
            m96_cmd_part (part.sp1p_buf, part.sp1p_buf_len);
        sp1pk_conv_tables_returned:
            BEGIN
            m90wc30 ('        Tables not dumped     ', 25);
            m90nl;
            END;
        sp1pk_errortext:
            BEGIN
            m90wchar (bsp_c1, 8);
            m90wstring (part.sp1p_buf, 1, part.sp1p_buf_len);
            m90nl;
            END;
        sp1pk_resultcount:
            m96_resultcount_part (part.sp1p_buf);
        sp1pk_shortinfo:
            m96_shortinfo_part (part.sp1p_buf, part.sp1p_arg_count);
        OTHERWISE:
            m90buf (xx, part.sp1p_buf, 1, part.sp1p_buf_len);
        END;
    (*ENDCASE*) 
    END;
(*ENDIF*) 
END; (* m96_part *)
 
(*------------------------------*) 
 
PROCEDURE
      m96packet (
            layer      : tsp_layer;
            VAR packet : tsp1_packet;
            comment    : tsp_c30);
 
VAR
      curr_segm      : integer;
      curr_part      : integer;
      segm_ptr       : tsp1_segment_ptr;
      part_ptr       : tsp1_part_ptr;
 
BEGIN
IF  m90istest_on (layer)
THEN
    WITH packet DO
        BEGIN
        m90addr (layer, '@packet     ', @packet);
        m96_packetheader (sp1_header, comment);
        segm_ptr := @sp1_segm;
        FOR curr_segm := 1 TO sp1_header.sp1h_no_of_segm DO
            BEGIN
            IF  curr_segm > 1
            THEN
                BEGIN
                s26next_segment (segm_ptr);
                END;
            (*ENDIF*) 
            m96_segmentheader (segm_ptr^.sp1s_segm_header);
            part_ptr := @segm_ptr^.sp1p_part;
            FOR curr_part := 1 TO segm_ptr^.sp1s_no_of_parts DO
                BEGIN
                IF  curr_part > 1
                THEN
                    s26nextpart (part_ptr);
                (*ENDIF*) 
                m96_part (part_ptr^);
                END
            (*ENDFOR*) 
            END
        (*ENDFOR*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END; (* m96packet *)
 
(*------------------------------*) 
 
PROCEDURE
      m96control (
            layer    : tsp_layer;
            VAR ctrl : tin_packet_control );
 
BEGIN
IF  m90istest_on (layer)
THEN
    WITH ctrl DO
        BEGIN
        m90addr (layer, 'send packet ', snd_packet_ptr);
        m90addr (layer, 'rec packet  ', rcv_packet_ptr);
        m90addr1 (layer, 'segment     ', curr_segm_ptr);
        m90addr2 (layer, 'part        ', curr_part_ptr);
        m90int4 ( layer, 'packet stat ', packet_stat );
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END; (* m96control *)
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
*-PRETTY-*  statements    :        345
*-PRETTY-*  lines of code :        854        PRETTYX 3.10 
*-PRETTY-*  lines in file :       1106         1997-12-10 
.PA 
