.ad 8
.bm 8
.fm 4
.bt $Copyright by SAP AG, 2003$$Page %$
.tm 12
.hm 6
.hs 3
.TT 1 $SQL$Project Distributed Database System$VAK07$
.tt 2 $$$
.TT 3 $ElkeZ$AK_error_handling$2000-11-21$
***********************************************************
.nf
 
 
    ========== licence begin  GPL
    Copyright (C) 2000 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
.nf
.sp
MODULE  : AK_error_handling
=========
.sp
Purpose : Schreibt Fehlermeldungen in error Puffer.
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        PROCEDURE
              a07ClientLayoutParam (
                    VAR acv    : tak_all_command_glob;
                    param_no   : integer;
                    param_addr : tsp_moveobj_ptr;
                    param_len  : integer);
 
        PROCEDURE
              a07_const_b_put_error (
                    VAR acv    : tak_all_command_glob;
                    b_err      : tgg_basis_error;
                    err_code   : tsp_int4;
                    param_addr : tsp_moveobj_ptr;
                    const_len  : integer);
 
        PROCEDURE
              a07_error (
                    VAR acv  : tak_all_command_glob;
                    err      : tgg_basis_error;
                    VAR nod1 : tsp_int2;
                    VAR nod2 : tsp_int2);
 
        PROCEDURE
              a07_b_put_error (
                    VAR acv  : tak_all_command_glob;
                    b_err    : tgg_basis_error;
                    err_code : tsp_int4);
 
        PROCEDURE
              a07_kw_put_error (
                    VAR acv  : tak_all_command_glob;
                    b_err    : tgg_basis_error;
                    err_code : tsp_int4;
                    kw       : integer);
 
        PROCEDURE
              a07_nb_put_error (
                    VAR acv  : tak_all_command_glob;
                    b_err    : tgg_basis_error;
                    err_code : tsp_int4;
                    VAR n    : tsp_knl_identifier);
 
        PROCEDURE
              a07_sb_put_error (
                    VAR acv  : tak_all_command_glob;
                    b_err    : tgg_basis_error;
                    err_code : tsp_int4;
                    VAR err  : tgg_err);
 
        PROCEDURE
              a07_tb_put_error (
                    VAR acv     : tak_all_command_glob;
                    b_err       : tgg_basis_error;
                    err_code    : tsp_int4;
                    VAR tab_id  : tgg_surrogate);
 
        FUNCTION
              a07_return_code (
                    b_err   : tgg_basis_error;
                    sqlmode : tsp_sqlmode) : tsp_int2;
 
        PROCEDURE
              a07_intern_error_put (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a07ak_system_error (
                    VAR acv  : tak_all_command_glob;
                    modul_no : integer;
                    id       : integer);
 
        PROCEDURE
              a07const_param (
                    VAR acv    : tak_all_command_glob;
                    param_no   : integer;
                    param_addr : tsp_moveobj_ptr;
                    param_len  : integer);
 
        PROCEDURE
              a07_sysmsg_get (
                    VAR acv        : tak_all_command_glob;
                    direct_or_next : tgg_message2_type;
                    msgno          : tsp_int2;
                    language       : tsp_c3;
                    VAR found      : boolean);
 
        PROCEDURE
              a07msg_kernelsink_get (
                    VAR acv        : tak_all_command_glob;
                    msgno          : tsp_int2;
                    VAR err_text   : tak_order_errortext;
                    VAR msglen     : integer);
 
        PROCEDURE
              a07_uni_error (
                    VAR acv  : tak_all_command_glob;
                    uni_err  : tsp8_uni_error;
                    err_code : tsp_int4);
 
        PROCEDURE
              a07_hex_uni_error (
                    VAR acv     : tak_all_command_glob;
                    uni_err     : tsp8_uni_error;
                    err_code    : tsp_int4;
                    to_unicode  : boolean;
                    bytestr     : tsp_moveobj_ptr;
                    len         : tsp_int4 );
 
        PROCEDURE
              a07parm3_put_error (
                    VAR acv     : tak_all_command_glob;
                    b_err       : tgg_basis_error;
                    err_code    : tsp_int4;
                    VAR param1  : tsp_knl_identifier;
                    VAR param2  : tsp_knl_identifier;
                    VAR param3  : tsp_knl_identifier);
 
        PROCEDURE
              a07put_error_pos (
                    VAR acv : tak_all_command_glob;
                    err_pos : tsp_int4);
 
.CM *-END-* define --------------------------------------
.sp
.cp 3
Use     :
 
        FROM
              Scanner : VAK01;
 
        VAR
              a01char_size       : integer;
              a01sysnullkey      : tgg_sysinfokey;
              a01defaultkey      : tgg_sysinfokey;
              a01kw              : tak_keywordtab;
              a01_i_sysmessages  : tsp_knl_identifier;
              a01_il_b_identifier : tsp_knl_identifier;
 
        PROCEDURE
              a01_next_symbol (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              AK_universal_semantic_tools : VAK06;
 
        PROCEDURE
              a06a_mblock_init (
                    VAR acv    : tak_all_command_glob;
                    mtype      : tgg_message_type;
                    m2type     : tgg_message2_type;
                    VAR tree   : tgg00_FileId);
 
        PROCEDURE
              a06determine_username (
                    VAR acv       : tak_all_command_glob;
                    VAR userid    : tgg_surrogate;
                    VAR user_name : tsp_knl_identifier);
 
        PROCEDURE
              a06lsend_mess_buf (
                    VAR acv         : tak_all_command_glob;
                    VAR mblock      : tgg_mess_block;
                    call_from_rsend : boolean;
                    VAR b_err       : tgg_basis_error);
 
        PROCEDURE
              a06_get_priv  (
                    VAR acv     : tak_all_command_glob;
                    VAR brec    : tak_sysbufferaddress;
                    VAR priv    : tak_privilege);
 
        PROCEDURE
              a06_systable_get (
                    VAR acv     : tak_all_command_glob;
                    dstate      : tak_directory_state;
                    VAR tableid : tgg_surrogate;
                    VAR base_ptr: tak_sysbufferaddress;
                    get_all     : boolean;
                    VAR ok      : boolean);
 
        PROCEDURE
              a06retpart_move (
                    VAR acv     : tak_all_command_glob;
                    moveobj_ptr : tsp_moveobj_ptr;
                    move_len    : tsp_int4);
 
        PROCEDURE
              a06systable_state (
                    VAR acv           : tak_all_command_glob;
                    tablename         : tsp_knl_identifier;
                    VAR tree          : tgg00_FileId);
 
        PROCEDURE
              a06reset_retpart (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a06finish_curr_retpart (
                    VAR acv   : tak_all_command_glob;
                    part_kind : tsp1_part_kind;
                    arg_count : tsp_int2);
 
      ------------------------------ 
 
        FROM
              AK_Identifier_Handling : VAK061;
 
        PROCEDURE
              a061get_colname (
                    VAR col_info : tak00_columninfo;
                    VAR colname  : tsp_knl_identifier);
 
      ------------------------------ 
 
        FROM
              Systeminfo_cache : VAK10;
 
        PROCEDURE
              a10get_sysinfo (
                    VAR acv    : tak_all_command_glob;
                    VAR syskey : tgg_sysinfokey;
                    dstate     : tak_directory_state;
                    VAR syspoint : tak_sysbufferaddress;
                    VAR b_err    : tgg_basis_error);
 
      ------------------------------ 
 
        FROM
              AK_Table : VAK11;
 
        PROCEDURE
              a11getconstraintname (
                    VAR constraint_rec  : tak_constraintrecord;
                    VAR constraint_name : tsp_knl_identifier);
 
      ------------------------------ 
 
        FROM
              AK_Index : VAK24;
 
        PROCEDURE
              a24get_indexname (
                    VAR acv        : tak_all_command_glob;
                    indexbuf       : tak_sysbufferaddress;
                    index          : integer;
                    VAR index_name : tsp_knl_identifier);
 
        PROCEDURE
              a24init_index_scan (
                    VAR acv            : tak_all_command_glob;
                    VAR tabid          : tgg_surrogate;
                    VAR index_scan_rec : tak_index_scan_record);
 
        PROCEDURE
              a24finish_index_scan (
                    VAR acv            : tak_all_command_glob;
                    VAR index_scan_rec : tak_index_scan_record);
 
        FUNCTION
              a24next_named_index (
                    VAR acv            : tak_all_command_glob;
                    VAR index_scan_rec : tak_index_scan_record) : boolean;
 
      ------------------------------ 
 
        FROM
              AK_distributor : VAK35;
 
        PROCEDURE
              a35_asql_statement (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              AK_Connect : VAK51;
 
        PROCEDURE
              a51session_init (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a51get_date_format (
                    VAR acv       : tak_all_command_glob;
                    VAR format    : tsp_c120;
                    has_to_be_uni : boolean);
 
      ------------------------------ 
 
        FROM
              DML_Help_Procedures : VAK542;
 
        PROCEDURE
              a542internal_packet (
                    VAR acv                 : tak_all_command_glob;
                    release_internal_packet : boolean;
                    required_len            : tsp_int4);
 
        PROCEDURE
              a542pop_packet (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              Utilityprocess : VAK94;
 
        VAR
              a94mode : tgg_usemode;
 
      ------------------------------ 
 
        FROM
              KB_functions : VKB05;
 
        PROCEDURE
              k05functions (VAR mblock : tgg00_MessBlock);
 
      ------------------------------ 
 
        FROM
              KB_locklist : VKB51;
 
        PROCEDURE
              k51del_transentry_from_locklist (
                    TaskId         : tsp00_TaskId;
                    VAR TransIndex : tgg00_TransIndex);
 
        PROCEDURE
              k51remove_locks (
                    TaskId            : tsp00_TaskId;
                    TransIndex        : tgg00_TransIndex;
                    VAR TransState    : tgg00_TransState);
 
        FUNCTION
              k51shutdown_wanted (TaskId : tsp00_TaskId) : boolean;
 
      ------------------------------ 
 
        FROM
              error_text_handling : VBD06;
 
        PROCEDURE
              b06get_errtxt (
                    VAR t          : tgg00_TransContext;
                    VAR errlen     : integer;
                    VAR err_type   : tgg00_ErrorText;
                    VAR b_error    : tgg00_BasisError;
                    VAR errtxt     : tsp00_C256);
 
      ------------------------------ 
 
        FROM
              Configuration_Parameter : VGG01;
 
        VAR
              g01code           : tgg_code_globals;
              g01tabid          : tgg_tabid_globals;
              g01unicode        : boolean;
 
        PROCEDURE
              g01optextmsg (
                    msg_prio  : tsp3_priority;
                    msg_type  : tsp3_msg_type;
                    msg_no    : tsp_int4;
                    msg_label : tsp_c8;
                    msg_text  : tsp_c40);
 
      ------------------------------ 
 
        FROM
              Codetransformation_and_Coding : VGG02;
 
        PROCEDURE
              g02pascii_pos_ebcdic (
                    VAR source : tsp_moveobj;
                    srcind   : tsp_int4;
                    VAR dest : tak_order_errortext;
                    destind  : tsp_int4;
                    length   : tsp_int4);
 
      ------------------------------ 
 
        FROM
              GG_edit_routines : VGG17;
 
        PROCEDURE
              g17hexto_line (
                    c          : char;
                    VAR ln_len : integer;
                    VAR ln     : tsp_knl_identifier);
 
        PROCEDURE
              g17int4to_line (
                    int       : tsp00_Int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp_c40);
 
      ------------------------------ 
 
        FROM
              Unicode-Utilities : VGG20;
 
        PROCEDURE
              g20unifill (
                    size      : tsp_int4;
                    m         : tsp_moveobj_ptr;
                    pos       : tsp_int4;
                    len       : tsp_int4;
                    filluchar : tsp_c2);
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG10;
 
        PROCEDURE
              g10mv (
                    mod_id     : tsp_c6;            mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tsp_moveobj;       src_pos  : tsp_int4;
                    VAR destin : tsp_moveobj;       dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv2 (
                    mod_id     : tsp_c6;           mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tsp_moveobj;       src_pos  : tsp_int4;
                    VAR destin : tsp_buf;           dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv3 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_moveobj;         src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv4 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_c256;            src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv5 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_c30;             src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv6 (
                    mod_id     : tsp_c6;            mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tsp_buf;           src_pos  : tsp_int4;
                    VAR destin : tsp_moveobj;       dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv7 (
                    mod_id     : tsp_c6;            mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tak_keyword;       src_pos  : tsp_int4;
                    VAR destin : tsp_moveobj;       dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv9 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_c10;             src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv10 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_c120;            src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv11 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tsp_c80;             src_pos  : tsp_int4;
                    VAR destin : tak_order_errortext; dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv12 (
                    mod_id     : tsp_c6;            mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tsp_moveobj;       src_pos  : tsp_int4;
                    VAR destin : tsp_c80;           dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv13 (
                    mod_id     : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tak_order_errortext; src_pos  : tsp_int4;
                    VAR destin : tsp_c40;             dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mv14 (mod_id  : tsp_c6;              mod_num  : tsp_int4;
                    source_upb : tsp_int4;            dest_upb : tsp_int4;
                    VAR source : tak_order_errortext; src_pos  : tsp_int4;
                    VAR destin : tsp_c80;             dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
        PROCEDURE
              g10mvr (
                    mod_id     : tsp_c6;            mod_num  : tsp_int4;
                    source_upb : tsp_int4;          dest_upb : tsp_int4;
                    VAR source : tsp_moveobj;       src_pos  : tsp_int4;
                    VAR destin : tsp_moveobj;       dest_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR e      : tgg_basis_error);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-30 : VSP30;
 
        FUNCTION
              s30lnr (
                    VAR str : tsp_knl_identifier;
                    val   : char;
                    start : tsp_int4;
                    cnt   : tsp_int4) : tsp_int4;
 
        FUNCTION
              s30lnr1 (
                    VAR str : tsp_moveobj;
                    val   : char;
                    start : tsp_int4;
                    cnt   : tsp_int4) : tsp_int4;
 
        FUNCTION
              s30unilnr (
                    str       : tsp_moveobj_ptr;
                    skip_val  : tsp_c2;
                    start_pos : tsp_int4;
                    length    : tsp_int4) : tsp_int4;
 
      ------------------------------ 
 
        FROM
              GET-Conversions : VSP40;
 
        PROCEDURE
              s40gbyte (
                    VAR buf        : tgg_syskey;
                    pos            : tsp_int4;
                    len            : integer;
                    VAR dest       : tsp_c120;
                    dpos           : tsp_int4;
                    dlen           : integer;
                    VAR truncated  : boolean);
 
      ------------------------------ 
 
        FROM
              PUT-Conversions : VSP41;
 
        PROCEDURE
              s41psint (
                    VAR buf : tsp_moveobj;
                    pos     : tsp_int4;
                    len     : integer;
                    frac    : integer;
                    source  : tsp_int2;
                    VAR res : tsp_num_error);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-80 : VSP80;
 
        PROCEDURE
              s80uni_trans
                    (src_ptr        : tsp_moveobj_ptr;
                    src_len         : tsp_int4;
                    src_codeset     : tsp_int2;
                    dest_ptr        : tsp_moveobj_ptr;
                    VAR dest_len    : tsp_int4;
                    dest_codeset    : tsp_int2;
                    trans_options   : tsp8_uni_opt_set;
                    VAR rc          : tsp8_uni_error;
                    VAR err_char_no : tsp_int4);
 
      ------------------------------ 
 
        FROM
              RTE_kernel : VEN101;
 
        PROCEDURE
              vmessage (
                    prio         : tsp3_priority;
                    msg_type     : tsp3_msg_type;
                    msg_no       : tsp_int4;
                    msg_label    : tsp_c8;
                    VAR msg_line : tsp_c40);
 
        PROCEDURE
              vmessageUnicode(source_encoding : tsp00_Int4;
                    prio         : tsp3_priority;
                    msg_type     : tsp3_msg_type;
                    msg_no       : tsp_int4;
                    msg_label    : tsp_c8;
                    VAR msg_line : tsp_c80);
 
        PROCEDURE
              vsleep (pid : tsp_process_id;
                    limit : tsp_int2);
&       ifdef trace
 
      ------------------------------ 
 
        FROM
              Test_Procedures : VTA01;
 
        PROCEDURE
              t01basis_error (
                    debug : tgg00_Debug;
                    nam   : tsp00_Sname;
                    b_err : tgg00_BasisError);
 
        PROCEDURE
              t01int4 (
                    debug    : tgg00_Debug;
                    nam      : tsp00_Sname;
                    int      : tsp00_Int4);
 
        PROCEDURE
              t01name (
                    debug    : tgg00_Debug;
                    nam      : tak_keyword);
 
        PROCEDURE
              t01moveobj (
                    debug       : tgg00_Debug;
                    VAR moveobj : tsp00_MoveObj;
                    startpos    : tsp00_Int4;
                    endpos      : tsp00_Int4);
&       endif
 
.CM *-END-* use -----------------------------------------
***********************************************************
 
Synonym :
 
        PROCEDURE
              s40gbyte;
 
              tsp_moveobj tgg_syskey
              tsp_moveobj tsp_c120
 
        PROCEDURE
              g17int4to_line;
 
              tsp00_Line tsp_c40
 
        PROCEDURE
              g17hexto_line;
 
              tsp00_Line tsp_knl_identifier
 
        PROCEDURE
              g02pascii_pos_ebcdic;
 
              tsp_moveobj tak_order_errortext
 
        PROCEDURE
              g10mv2;
 
              tsp_moveobj  tsp_buf
 
        PROCEDURE
              g10mv3;
 
              tsp_moveobj  tak_order_errortext
 
        PROCEDURE
              g10mv4;
 
              tsp_moveobj  tsp_c256
              tsp_moveobj  tak_order_errortext
 
        PROCEDURE
              g10mv5;
 
              tsp_moveobj  tsp_c30
              tsp_moveobj  tak_order_errortext
 
        PROCEDURE
              g10mv6;
 
              tsp_moveobj  tsp_buf
 
        PROCEDURE
              g10mv7;
 
              tsp_moveobj tak_keyword
 
        PROCEDURE
              g10mv9;
 
              tsp_moveobj  tsp_c10
              tsp_moveobj  tak_order_errortext
 
        PROCEDURE
              g10mv10;
 
              tsp_moveobj  tsp_c120
              tsp_moveobj  tak_order_errortext
 
        PROCEDURE
              g10mv11;
 
              tsp_moveobj  tsp_c80;
              tsp_moveobj tak_order_errortext
 
        PROCEDURE
              g10mv12;
 
              tsp_moveobj tsp_c80
 
        PROCEDURE
              g10mv13;
 
              tsp_moveobj  tak_order_errortext
              tsp_moveobj  tsp_c40
 
        PROCEDURE
              g10mv14;
 
              tsp_moveobj  tak_order_errortext
              tsp_moveobj  tsp_c80
 
        FUNCTION
              s30lnr;
 
              tsp_moveobj tsp_knl_identifier
&             ifdef TRACE
 
        PROCEDURE
              t01name;
 
              tsp00_Name tak_keyword
&             endif
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : ElkeZ
.sp
.cp 3
Created : 1987-09-22
.sp
.cp 3
.sp
.cp 3
Release :      Date : 2000-11-08
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
 
 
.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
Das Modul geht von folgender Annahme aus :
.nf
create table public.sysmessages
    (language  char  (3)   key,
     msgno     fixed (5,0) key,
     msgtext   char  (160))
 
6.2 change requests and errors included here:
 
CR 1000053 UH
 
.CM *-END-* description ---------------------------------
***********************************************************
.CM -lll-
Code    :
 
 
CONST
      cak_call_from_rsend = true (* a06lsend_mess_buf *);
      c_with_zero         = true  (* g17 *);
 
 
(*------------------------------*) 
 
PROCEDURE
      a07ClientLayoutParam (
            VAR acv    : tak_all_command_glob;
            param_no   : integer;
            param_addr : tsp_moveobj_ptr;
            param_len  : integer);
 
VAR
      ix    : integer;
      jx    : integer;
      c80   : tsp_c80;
      b_err : tgg_basis_error;
 
BEGIN
(* parameter is already in client layout *)
IF  acv.a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode_swap
THEN
    BEGIN
    (* transform to kernel internal format, required for following parameter handling *)
    IF  param_len > sizeof (c80)
    THEN
        param_len := sizeof (c80);
    (*ENDIF*) 
    param_len := param_len DIV 2;
    jx := 1;
    FOR ix := 1 TO param_len DO
        BEGIN
        c80[jx  ] := param_addr^[jx+1];
        c80[jx+1] := param_addr^[jx];
        jx := jx + 2
        END;
    (*ENDFOR*) 
    param_len := param_len*2
    END
ELSE
    BEGIN
    IF  param_len > sizeof (c80)
    THEN
        param_len := sizeof (c80);
    (*ENDIF*) 
    b_err := e_ok;
    g10mv12 ('VAK07 ',   1,    
          param_len, sizeof (c80), param_addr^, 1, c80, 1,
          param_len, b_err)
    END;
(*ENDIF*) 
ak07put_param (acv, param_no, @c80, param_len)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_const_b_put_error (
            VAR acv    : tak_all_command_glob;
            b_err      : tgg_basis_error;
            err_code   : tsp_int4;
            param_addr : tsp_moveobj_ptr;
            const_len  : integer);
 
BEGIN
WITH acv DO
    IF  acv.a_return_segm^.sp1r_returncode = 0
    THEN
        BEGIN
&       ifdef trace
        t01basis_error (ak_sem, 'throw error ', b_err);
&       endif
        IF  b_err = e_cancelled
        THEN
            acv.a_transinf.tri_trans.trRteCommPtr_gg00^.to_cancel:= false;
        (*ENDIF*) 
        acv.a_return_segm^.sp1r_returncode :=
              a07_return_code (b_err, acv.a_sqlmode);
        a07put_error_pos (acv, err_code);
        a07const_param   (acv, 1, param_addr, const_len)
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_error (
            VAR acv  : tak_all_command_glob;
            err      : tgg_basis_error;
            VAR nod1 : tsp_int2;
            VAR nod2 : tsp_int2);
 
BEGIN
WITH  acv, a_scv DO
    BEGIN
    (*initialize nodes*)
    nod1 := 0;
    nod2 := 0;
    IF  a_return_segm^.sp1r_returncode = 0
    THEN
        BEGIN
        IF  (sc_symb = s_eof           ) AND
            (err <> e_wanted_keyword   ) AND
            (err <> e_missing_delimiter) AND
            (err <> e_expr_in_insert_value_list)
        THEN
            err := e_invalid_end_of_command;
        (*ENDIF*) 
        a07_b_put_error (acv, err, sc_sypos);
        END;
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      ak07returncode (
            b_err   : tgg_basis_error;
            sqlmode : tsp_sqlmode) : tsp_int2;
 
VAR
      c40  : tsp_c40;
      pC24 : ^tsp_c24;
 
BEGIN
CASE b_err OF
    e_allocate_failed, e_db2_not_accessible :
        ak07returncode := -920;
    e_append_not_allowed :
        ak07returncode := -9042;
    e_bad_datapage :
        ak07returncode := -9026;
    e_bad_devspace :
        ak07returncode := -9035;
    e_bad_file :
        ak07returncode := -9028;
    e_bad_hostfile_page :
        ak07returncode := -3000;
    e_bad_invfile :
        ak07returncode := -9029;
    e_buffer_limit :
        ak07returncode := -9019;
    e_cachedirectory_full :
        ak07returncode := -9400;
    e_cancelled :
        ak07returncode := - 102;
    e_column_trunc :
        ak07returncode := -2010;
    e_method_not_found :
        ak07returncode := -7503;
    e_serverdb_read_only :
        ak07returncode := - 109;
    e_data_page_corrupted :
        ak07returncode := -9053;
    e_date_time_format_invalid :
        ak07returncode := -3035;
    e_dcom_hresult :
        ak07returncode := -7500;
    e_default_code_invalid :
        ak07returncode := -3025;
    e_devname_invalid :
        ak07returncode := -3037;
    e_devsize_invalid :
        ak07returncode := -3038;
    e_devsize_too_small :
        ak07returncode := -2008;
    e_do_not_access_fdir :
        ak07returncode := -9043;
    e_do_not_drop_fdir :
        ak07returncode := -9040;
    e_duplicate_devname :
        ak07returncode := -6010;
    e_duplicate_filename :
        IF  sqlmode = sqlm_oracle
        THEN
            ak07returncode := - 955
        ELSE
            ak07returncode := -6000;
        (*ENDIF*) 
    e_duplicate_invkey :
        CASE sqlmode OF
            sqlm_ansi :
                ak07returncode := -  25;
            sqlm_oracle :
                ak07returncode := -   1;
            sqlm_db2,
            sqlm_adabas :
                ak07returncode :=   250;
            END;
        (*ENDCASE*) 
    e_duplicate_key :
        CASE sqlmode OF
            sqlm_adabas :
                ak07returncode :=   200;
            sqlm_oracle :
                ak07returncode := -   1;
            OTHERWISE
                ak07returncode := -  20
            END;
        (*ENDCASE*) 
    e_duplicate_sysinfo :
        ak07returncode := -9206;
    e_enough_resultsets :
        ak07returncode := -9202;
    e_expr_in_insert_value_list :
        ak07returncode := cak_e_expr_in_insert;
    e_file_empty :
        ak07returncode :=   100;
    e_file_limit :
        ak07returncode := -3041;
    e_file_not_accessible :
        ak07returncode := -9041;
    e_file_not_found :
        ak07returncode := cak_e_table_or_file_dropped;
    e_file_read_only :
        ak07returncode := - 115;
    e_file_unloaded :
        ak07returncode := - 106;
    e_hostfile_error :
        ak07returncode := - 903;
    e_identifier_too_long :
        ak07returncode := -2014;
    e_illegal_filename :
        ak07returncode := -9004;
    e_illegal_key :
        ak07returncode := -9005;
    e_illegal_page_address :
        ak07returncode := -9050;
    e_illegal_record :
        ak07returncode := -9008;
    e_impossible_mirrored_dev :
        ak07returncode := - 909;
    e_in_union_not_allowed :
        ak07returncode := -7052;
    e_in_view_not_allowed :
        ak07returncode := -7019;
    e_incompatible_log :
        ak07returncode := -8003;
    e_incompatible_savefile :
        ak07returncode := - 111;
    e_incomplete_logsegm :
        ak07returncode := -8033;
    e_inconsistent_db :
        ak07returncode := -7044;
    e_inconsistent_nodetype :
        ak07returncode := -9044;
    e_init_missing :
        ak07returncode := -9020;
    e_inv_list_not_found :
        ak07returncode := -9011;
    e_inv_not_found :
        ak07returncode := -9012;
    e_invalid :
        (* invalid parameter *)
        ak07returncode := -3999;
    e_long_column_missing :
        ak07returncode := -9055; (* PTS 1103382 TS 1999-07-16 *)
    e_too_many_child_requests:
        ak07returncode := -9229;
    e_invalid_label:
        ak07returncode := -2026;
    e_invalid_configuration:
        ak07returncode := -2025;
    e_read_task_crash:
        ak07returncode := - 916;
    e_write_task_crash:
        ak07returncode := - 917;
    e_acknowledgement:
        ak07returncode := -8042;
    e_queue_mismatch:
        ak07returncode := -9228;
    e_bad_pagetype:
        ak07returncode := -7900;
    e_conf_parameter_error:
        ak07returncode := -9414;
    e_invalid_columnname :
        ak07returncode := -3011;
    e_invalid_end_of_command :
        ak07returncode := -3014;
    e_invalid_fbm_mark :
        ak07returncode := -9051;
    e_invalid_invlistpos :
        ak07returncode := -9010;
    e_invalid_keyword :
        ak07returncode := -3008;
    e_invalid_leaves_structure :
        ak07returncode := -9014;
    e_invalid_mirrored_dev :
        ak07returncode := -3053;
    e_invalid_mix_functions_columns :
        ak07returncode := -3021;
    e_invalid_mix_dml_ddl :
        ak07returncode := -3007;
    e_invalid_pattern :
        ak07returncode := -3995;
    e_invalid_root :
        ak07returncode := -9001;
    e_invalid_sponsor :
        ak07returncode := -3055;
    e_invalid_tablename :
        ak07returncode := -3009;
    e_invalid_username :
        ak07returncode := -3003;
    e_key_not_found :
        ak07returncode :=   100;
    e_key_update :
        ak07returncode := -7042;
    e_lock_collision :
        CASE sqlmode OF
            sqlm_oracle :
                ak07returncode := -  54;
            sqlm_adabas :
                ak07returncode :=   400;
            OTHERWISE
                ak07returncode := -  40
            END;
        (*ENDCASE*) 
    e_lock_dirty :
        ak07returncode := -7067;
    e_lock_timeout_invalid :
        ak07returncode := -3027;
    e_logpage_not_found:
        ak07returncode := -9209;
    e_log_not_cold_saved :
        ak07returncode := - 110;
    e_log_reject :
        IF  sqlmode = sqlm_adabas
        THEN
            ak07returncode :=   650
        ELSE
            ak07returncode := -  65;
        (*ENDIF*) 
    e_logdev_not_in_xparam :
        ak07returncode := -3032;
    e_logmode_invalid :
        ak07returncode := -3028;
    e_logsegm_size_invalid :
        ak07returncode := -3034;
    e_no_of_logdev_invalid :
        ak07returncode := -3029;
    e_missing_constant :
        ak07returncode := -5004;
    e_missing_delimiter :
        ak07returncode := -5016;
    e_missing_identifier :
        ak07returncode := -5006;
    e_missing_integer :
        ak07returncode := -5009;
    e_missing_keyword :
        ak07returncode := -3008;
    e_missing_number :
        ak07returncode := -5007;
    e_missing_password :
        ak07returncode := -8047;
    e_missing_string_literal :
        ak07returncode := -5008;
    e_missing_value_spec :
        ak07returncode := -5010;
    e_move_error :
        ak07returncode := e_move_error;
    e_new_hostfile_required :
        ak07returncode := -8020;
    e_no_data_on_tape :
        ak07returncode := -7076;
    e_no_more_memory :
        ak07returncode := - 915;
    e_no_more_temp_space :
        ak07returncode := - 904;
    e_no_next_invkey :
        ak07returncode := -9015;
    e_no_next_record :
        ak07returncode :=   100;
    e_no_of_dev_invalid :
        ak07returncode := -3036;
    e_no_prev_invkey :
        ak07returncode := -9016;
    e_no_prev_record :
        ak07returncode :=   100;
    e_no_servers :
        ak07returncode := -8029;
    e_ok :
        ak07returncode :=     0;
    e_old_fileversion, e_old_leafnodes_number :
        ak07returncode := csp_old_fileversion;
    e_open_write_trans :
        ak07returncode := -9214;
    e_parameter_not_allowed :
        ak07returncode := -7045;
    e_parse_not_implemented :
        ak07returncode := -9000;
    e_pending_lock_collision :
        CASE sqlmode OF
            sqlm_oracle :
                ak07returncode := -  54;
            sqlm_adabas :
                ak07returncode :=   450;
            OTHERWISE
                ak07returncode := -  40
            END;
        (*ENDCASE*) 
    e_progid_not_found :
        ak07returncode := -7501;
    e_program_stack_overflow :
        ak07returncode := - 918;
    e_qual_violation :
        ak07returncode :=   100;
    e_replicated_table_not_allowed :
        ak07returncode := -7073;
    e_rec_not_locked :
        ak07returncode := -5002;
    e_release_caused_by_shutdown :
        IF  sqlmode = sqlm_adabas
        THEN
            ak07returncode :=   710
        ELSE
            ak07returncode := -  71;
        (*ENDIF*) 
    e_record_not_qualified :
        CASE sqlmode OF
            sqlm_oracle :
                ak07returncode := -1402;
            sqlm_adabas :
                ak07returncode :=   300;
            OTHERWISE
                ak07returncode := -  30
            END;
        (*ENDCASE*) 
    e_req_timeout_invalid :
        ak07returncode := -3031;
    e_request_discarded :
        ak07returncode := - 120;
    e_request_timeout :
        CASE sqlmode OF
            sqlm_db2 :
                ak07returncode := - 913;
            sqlm_ansi :
                ak07returncode := -  50;
            sqlm_oracle :
                ak07returncode := -  51;
            sqlm_adabas :
                ak07returncode :=   500;
            END;
        (*ENDCASE*) 
    e_reserved_identifier :
        ak07returncode := -7006;
    e_response_timeout :
        ak07returncode := -9221;
    e_restart_incomplete :
        ak07returncode := -9212;
    e_role_cycle :
        ak07returncode := -7074;
    e_rollb_log_full :
        IF  sqlmode = sqlm_adabas
        THEN
            ak07returncode :=   650
        ELSE
            ak07returncode := -  65;
        (*ENDIF*) 
    e_rollback_wanted :
        ak07returncode := -9998; (* PTS 1108516 *)
    e_sequence_overflow :
        ak07returncode := -2028;
    (* PTS 1110096 E.Z. *)
    e_currval_without_nextval :
        ak07returncode := -2029;
    e_serverdb_error :
        IF  sqlmode = sqlm_adabas
        THEN
            ak07returncode :=   650
        ELSE
            ak07returncode := -  65;
        (*ENDIF*) 
    e_serverdb_name_invalid :
        ak07returncode := -9220;
    e_serverdb_not_empty:
        ak07returncode := - 121;
    e_shutdown :
        ak07returncode := -8000;
    e_skip_upd :
        ak07returncode := -9203;
    e_skip_key_upd :
        ak07returncode := -9226;
    e_special_null :
        ak07returncode := -3024;
    e_stack_op_illegal :
        ak07returncode := -9210;
    e_stack_overflow :
        ak07returncode := -1103;
    e_stack_type_illegal :
        ak07returncode := -9211;
    e_standby_info_not_ok :
        ak07returncode := -9500;
    e_string_column_empty :
        IF  sqlmode = sqlm_adabas
        THEN
            ak07returncode :=   110
        ELSE
            ak07returncode := -  11;
        (*ENDIF*) 
    e_subquery_not_allowed :
        ak07returncode := -7056;
    e_synonym_not_allowed :
        ak07returncode := -7077;
    e_query_not_allowed : (* PTS 1119708 *)
        ak07returncode := -7080;
    e_sysbuf_storage_exceeded :
        ak07returncode := -1003;
    e_sysbuffer_overflow :
        ak07returncode := -2020;
    e_sysdevname_invalid:
        ak07returncode := -3001;
    e_sysinfo_not_found :
        ak07returncode := -9205;
    e_too_many_devspaces :
        ak07returncode := -1010;
    e_too_many_differences :
        ak07returncode := -1026;
    e_too_many_serials :
        ak07returncode := -7072;
    e_too_many_mb_stackentries :
        ak07returncode := -1104;
    e_too_many_mb_data :
        ak07returncode := -1105;
    e_too_many_mb_strat :
        ak07returncode := -1106;
    e_too_small_mb_qual_part :
        ak07returncode := -9412;
    e_illegal_server_mb :
        ak07returncode := -9231;
    e_too_many_file_infos :
        ak07returncode := -1109;
    e_too_small_packet_size :
        ak07returncode := -1114;
    e_too_complicated_constr :
        ak07returncode := -1112;
    e_too_long_viewtext :
        ak07returncode := -1110;
    e_too_many_named_subtrans :
        ak07returncode := -1111;
    e_too_many_intern_cmd :
        ak07returncode := -1107;
    e_too_many_intern_parsinfos :
        ak07returncode := -9411;
    e_too_many_nested_functions :
        ak07returncode := -1113;
    e_too_long_corelated_row :
        ak07returncode := -1108;
    e_too_many_internal_columns :
        ak07returncode := -1115;
    e_too_many_out_param :
        ak07returncode := -7505;
    e_too_long_trigger_params :
        ak07returncode := -1116;
    e_too_complex_trigger_cond :
        ak07returncode := -1117;
    e_too_complex_drda_stmt :
        ak07returncode := -1118;
    e_too_many_constraints :
        ak07returncode := -1119;
    e_too_many_statements_in_trigger :
        ak07returncode := -1120;
    e_too_many_lock_requests:
        ak07returncode := -1000;
    e_too_many_monadic_operators :
        ak07returncode := -1005;
    e_too_many_net_requests:
        ak07returncode := -1025;
    e_too_many_updatesets :
        ak07returncode := -7012;
    e_trans_already_working :
        ak07returncode := -9207;
    e_trigger_failed :
        ak07returncode := -9406;
    e_typelib_not_found :
        ak07returncode := -7502;
    e_unauthorized_serverdb :
        ak07returncode := -8038;
    e_unknown_database_link :
        ak07returncode := -4026;
    e_unknown_serverdb :
        ak07returncode := -9218;
    e_unknown_strategy :
        ak07returncode := -9402;
    e_unsupported_param_type :
        ak07returncode := -7506;
    e_upd_in_nolog_session :
        ak07returncode := -7069;
    e_upd_view_violation :
        CASE sqlmode OF
            sqlm_oracle :
                ak07returncode := -1402;
            sqlm_adabas :
                ak07returncode :=   320;
            OTHERWISE
                ak07returncode := -  32;
            END;
        (*ENDCASE*) 
    e_view_violation :
        ak07returncode :=   100;
    e_vtam_communication_failed :
        ak07returncode := -9230;
    e_wait_for_lock_release :
        CASE sqlmode OF
            sqlm_db2 :
                ak07returncode := - 913;
            sqlm_ansi :
                ak07returncode := -  50;
            sqlm_oracle :
                ak07returncode := -  51;
            sqlm_adabas :
                ak07returncode :=   500;
            END;
        (*ENDCASE*) 
    e_wanted_keyword :
        ak07returncode := -5015;
    e_work_rolled_back :
        CASE sqlmode OF
            sqlm_db2 :
                ak07returncode := - 911;
            sqlm_adabas :
                ak07returncode :=   600;
            OTHERWISE
                ak07returncode := -  60
            END;
        (*ENDCASE*) 
    (* PTS 1103119 E.Z. *)
    e_wrong_database_instance :
        ak07returncode := - 107;
    e_wrong_first_param :
        ak07returncode := -7504;
    e_wrong_hostfile :
        ak07returncode := -3004;
    e_no_log_to_save :
        ak07returncode := - 123;
    e_wrong_password :
        ak07returncode := -3998;
    e_history_not_found :
        ak07returncode := - 122;
    e_new_disk_not_accessible :
        ak07returncode := - 914;
    e_root_check :
        ak07returncode := -9045;
    e_migration_error : (* PTS 1117498 M.Ki. *)
        ak07returncode := -8050;
    e_not_prepared_for_migration :
        ak07returncode := -8049;
    e_no_converter_entry :
        ak07returncode := -9046;
    e_bad_converter_entry :
        ak07returncode := -9054;
    e_invalid_filetype :
        ak07returncode := -9047;
    e_xstart_required :
        ak07returncode := -8041;
    (*=====bad-error================*)
    e_bad_fdir :
        ak07returncode := -9027;
    e_bad_logpage, e_bad_backup_page :
        ak07returncode := -9030;
    e_disk_not_accessible :
        ak07returncode := - 902;
    e_exclusive_violation :
        ak07returncode := -9215;
    e_illegal_branchlength :
        ak07returncode := -9002;
    e_illegal_escape_sequence :
        ak07returncode := -3060;
    e_illegal_entrylength :
        ak07returncode := -9003;
    e_illegal_entrypos :
        ak07returncode := -9023;
    e_illegal_keylength :
        ak07returncode := -9006;
    e_illegal_page_no :
        ak07returncode := -9007;
    e_invalid_entrypos :
        ak07returncode := -9024;
    e_invalid_index_structure :
        ak07returncode := -9013;
    e_log_error :
        ak07returncode := -9209;
    e_log_full :
        ak07returncode := - 901;
    e_net_error :
        ak07returncode := -9224;
    e_net_line_down : (* PTS 1108516 *)
        ak07returncode := -925;
    e_nil_transindex :
        ak07returncode := -9232;
    e_checkpoint_missing :
        ak07returncode := -124; (* PTS 1106264 UH 02-05-2000 *)
    e_no_more_space :
        IF  sqlmode = sqlm_oracle
        THEN
            ak07returncode := -1556
        ELSE
            ak07returncode := - 900;
        (*ENDIF*) 
    e_page_in_wrong_tree :
        ak07returncode := -9018;
    (* Errors for oracle like timestamp functions follows: *)
    e_unknown_day :
        ak07returncode := -3059;
    e_unknown_month :
        ak07returncode := -3062;
    e_no_to_date_format,
    e_date_format_not_recognized,
    e_number_format_not_recogniz,
    e_too_many_precision_specs,
    e_bad_precision_spec :
        ak07returncode := -3063;
    e_to_date_out_of_range,
    e_to_date_invalid_day :
        ak07returncode := -3064;
    e_to_date_too_short_input,
    e_to_date_too_long_input,
    e_unknown_meridian,
    e_to_date_no_letter,
    e_to_date_no_number :
        ak07returncode := -3065;
    e_to_date_inconsistent :
        ak07returncode := -3066;
    e_invalid_timezone :
        ak07returncode := -3067;
    e_to_date_duplicate_format:
        ak07returncode := -6016;
    e_unknown_multibyte_set :
        ak07returncode := -4025;
    e_unitrans_dest_too_short :
        ak07returncode := -2027;
    e_unitrans_src_too_short :
        ak07returncode := -9408;
    e_not_translatable :
        ak07returncode := -8044;
    e_not_trans_to_uni :
        ak07returncode := -8045;
    e_not_trans_from_uni :
        ak07returncode := -8046;
    e_autosave_running :
        ak07returncode := -7071;
    e_invalid_segment_construction :
        ak07returncode := -9409;
    e_too_old_tool :
        ak07returncode := -8048;
    e_primkey_not_found :
        ak07returncode := -9049;
    e_old_parsid :
        ak07returncode := cgg_old_parsid;
    e_unknown_session :
        ak07returncode := -4027;
    OTHERWISE
        IF  (b_err >= -28999) AND (b_err <= -27000)
        THEN (* Errors of C++ Class und SQL Class *)
            BEGIN
            IF  b_err = e_wrong_object_state
            THEN
                b_err := e_object_not_found;
            (*ENDIF*) 
            ak07returncode := b_err
            END
        ELSE
            BEGIN (* PTS 1108516 *)
            c40   := bsp_c40;
            pC24  := @c40;
            pC24^ := 'unexpected basis error :';
            g17int4to_line (b_err, NOT c_with_zero, 10, 25, c40);
            g01optextmsg (sp3p_console, sp3m_error,  csp3_ak_msg, csp3_n_param, c40);
            ak07returncode := -9999
            END;
        (*ENDIF*) 
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      a07_return_code (
            b_err    : tgg_basis_error;
            sqlmode  : tsp_sqlmode) : tsp_int2;
      (******** hak07.h ********)
 
BEGIN
CASE b_err OF
    e_alter_column_not_allowed :
        a07_return_code := -7024;
    e_alter_drop_user_not_allowed :
        a07_return_code := -7048;
    e_backup_is_running:
        a07_return_code := -7079; (* PTS 1108479 UH 2000-11-27 *)
    e_backup_not_running:
        a07_return_code := -7078; (* PTS 1108479 UH 2000-11-27 *)
    e_check_option_not_allowed :
        a07_return_code := -7051;
    e_column_indexed :
        a07_return_code := -7055;
    e_column_must_be_keycolumn :
        a07_return_code := -8007;
    e_col_must_be_no_keycolumn :
        a07_return_code := -7007;
    e_column_must_have_default :
        a07_return_code := -8021;
    e_column_not_indexed :
        a07_return_code := -8030;
    e_command_for_string_not_allow :
        a07_return_code := -7032;
    e_command_timeout :
        IF  sqlmode = sqlm_adabas
        THEN
            a07_return_code :=   700
        ELSE
            a07_return_code := -  70;
        (*ENDIF*) 
    e_const_incompatible_with_typ :
        a07_return_code := -8004;
    e_corelated_subquery_not_allowe :
        a07_return_code := -7011;
    e_costlimit_overflow:
        a07_return_code := - 910;
    e_costwarning_overflow:
        a07_return_code := -   4;
    e_current_of_needs_fetch :
        a07_return_code := -7026;
    e_default_not_allowed :
        a07_return_code := -7004;
    e_default_spec_not_allowed :
        a07_return_code := -7035;
    e_default_not_in_range :
        a07_return_code := -8009;
    e_duplicate_columnname :
        a07_return_code := -6001;
    e_duplicate_constraint :
        a07_return_code := -6011;
    e_duplicate_default :
        a07_return_code := -6012;
    e_duplicate_indexname :
        IF  sqlmode = sqlm_oracle
        THEN
            a07_return_code := - 955
        ELSE
            a07_return_code := -6008;
        (*ENDIF*) 
    e_duplicate_name :
        IF  sqlmode = sqlm_oracle
        THEN
            a07_return_code := - 955
        ELSE
            a07_return_code := -6006;
        (*ENDIF*) 
    e_duplicate_privilege  :
        a07_return_code := -6002;
    e_duplicate_referencename :
        a07_return_code := -6009;
    e_duplicate_resultname :
        a07_return_code := -6003;
    e_duplicate_tablename :
        IF  sqlmode = sqlm_oracle
        THEN
            a07_return_code := - 955
        ELSE
            a07_return_code := -6000;
        (*ENDIF*) 
    e_duplicate_trigger_def:
        a07_return_code := -6013;
    e_duplicate_value :
        a07_return_code := -6014;
    e_foreign_key_must_exist :
        a07_return_code := -8035;
    e_foreign_key_violation :
        CASE sqlmode OF
            sqlm_adabas :
                a07_return_code :=   360;
            OTHERWISE
                a07_return_code := -  36
            END;
        (*ENDCASE*) 
    e_from_select_not_allowed :
        a07_return_code := -7058;
    e_function_not_allowed :
        a07_return_code := -7029;
    e_group_user_not_allowed :
        a07_return_code := -7043;
    e_incompatible_code_spec :
        a07_return_code := -8008;
    e_incompatible_datatypes :
        a07_return_code := -8006;
    e_indexed_table_not_allowed :
        a07_return_code := -7050;
    e_indexname_must_be_unique :
        a07_return_code := -8018;
    e_invalid_blocksize :
        a07_return_code := -3054;
    e_invalid_cachelimit_size :
        a07_return_code := -3051;
    e_invalid_char_position :
        a07_return_code := -3046;
    e_hex0_column_tail :
        a07_return_code := -3010;
    e_invalid_command :
        a07_return_code := -3005;
    e_invalid_costwarning :
        a07_return_code := -8023;
    e_invalid_datalength :
        a07_return_code := -3020;
    e_invalid_escape_char :
        a07_return_code := -3061;
    e_invalid_length_of_datatyp :
        a07_return_code := -3020;
    e_invalid_date :
        a07_return_code := -3048;
    e_invalid_day_of_week :
        a07_return_code := -3059;
    e_null_value_illegal :
        a07_return_code := -7009;
    e_invalid_messcodetype :
        a07_return_code := -   7;
    e_invalid_nodeid :
        a07_return_code := -3056;
    e_num_invalid :
        a07_return_code := -3016;
    e_invalid_number_variable :
        a07_return_code := -3018;
    e_invalid_parameter :
        a07_return_code := -3999;
    e_invalid_range :
        a07_return_code := -7005;
    e_invalid_sequence :
        a07_return_code := -3103;
    e_invalid_subtrans_structure :
        a07_return_code := -3102;
    e_invalid_table_content :
        a07_return_code := -3047;
    e_invalid_termset :
        a07_return_code := -3052;
    e_invalid_time :
        a07_return_code := -3049;
    e_cmd_timeout_invalid :
        a07_return_code := -3030;
    e_invalid_timestamp :
        a07_return_code := -3050;
    e_invalid_unsign_integer :
        a07_return_code := -3017;
    e_invalid_view_column :
        a07_return_code := -7021;
    e_join_fields_too_long :
        a07_return_code := -2009;
    e_key_does_not_exist :
        a07_return_code := -8040;
    e_key_not_allowed :
        a07_return_code := -7002;
    e_link_column_not_allowed :
        a07_return_code := -7038;
    e_link_cycle_not_allowed :
        a07_return_code := -7039;
    e_link_rule_not_allowed :
        a07_return_code := -7040;
    e_link_rule_violation :
        CASE sqlmode OF
            sqlm_db2 :
                a07_return_code := - 530;
            sqlm_adabas :
                a07_return_code :=   350;
            OTHERWISE
                a07_return_code := -  35
            END;
        (*ENDCASE*) 
    e_lock_row_not_allowed :
        a07_return_code := -7061;
    e_mandatory_field_is_null :
        a07_return_code := -5005;
    e_missing_basetable :
        a07_return_code := -8015;
    e_missing_column_definite :
        a07_return_code := -5014;
    e_missing_tablename_definite :
        a07_return_code := -5012;
    e_missing_indexvalue :
        a07_return_code := -5011;
    e_missing_keyfield :
        a07_return_code := -5003;
    e_missing_mandatory_recordfield :
        a07_return_code := -5005;
    e_missing_privilege :
        a07_return_code := -5001;
    e_missing_reuseable :
        a07_return_code := -8014;
    e_missing_update_column :
        a07_return_code := -5013;
    e_missing_viewtable :
        a07_return_code := -8016;
    e_new_session_required :
        IF  sqlmode = sqlm_adabas
        THEN
            a07_return_code :=   750
        ELSE
            a07_return_code := -  75;
        (*ENDIF*) 
    e_no_more_user_temp_space :
        a07_return_code := - 907;
    e_no_open_subtrans :
        a07_return_code := -7065;
    e_no_resulttable_allowed :
        a07_return_code := -7041;
    e_not_allowed_in_temp_table :
        a07_return_code := -7064;
    e_not_implemented :
        a07_return_code := -9000;
    e_not_null_not_allowed :
        a07_return_code := -7003;
    e_null_not_allowed :
        a07_return_code := -7037;
    e_num_overflow :
        a07_return_code := -3019;
    e_num_truncated :
        a07_return_code := -2004;
    e_one_output_field_too_long :
        a07_return_code := -2002;
    e_only_one_recordtype_allowed :
        a07_return_code := -7022;
    e_order_col_must_be_number :
        a07_return_code := -8034;
    e_outer_join_def_error :
        a07_return_code := -3022;
    e_outer_join_not_allowed :
        a07_return_code := -7068;
    e_output_columns_too_long :
        a07_return_code := -2003;
    e_output_field_must_be_group :
        a07_return_code := -8017;
    e_owner_must_be_specified :
        a07_return_code := -8031;
    e_par_in_expl_not_allowed :
        a07_return_code := -7054;
    e_procedure_must_be_recompiled :
        a07_return_code := -8037;
    e_range_for_string_not_allowed :
        a07_return_code := -7031;
    e_referenced_index_not_allowed :
        a07_return_code := -7066;
    e_remote_load_not_allowed :
        a07_return_code := -7060;
    e_restore_catalog_error:
        a07_return_code := -8024;
    e_row_not_found :
        a07_return_code :=   100;
    e_rowno_not_allowed :
        a07_return_code := -7036;
    e_select_col_list_too_long :
        a07_return_code := -2013;
    e_invalid_messagetype :
        a07_return_code := -   5;
    e_save_skipped :
        a07_return_code := -7075;
    e_serverdb_must_be_activated :
        a07_return_code := - 118;
    e_serverdb_already_activated :
        a07_return_code := - 119;
    e_st_col_not_open :
        a07_return_code := -7201;
    e_st_col_open_read_only :
        a07_return_code := -7200;
    e_st_invalid_destpos:
        a07_return_code := -3993;
    e_st_invalid_length :
        a07_return_code := -3989;
    e_st_invalid_pos :
        a07_return_code := -3988;
    e_st_invalid_startpos:
        a07_return_code := -3990;
    e_system_error :
        a07_return_code := -9404;
    e_system_inf_inconsistent :
        a07_return_code := -9204;
    e_table_is_unloaded     :
        a07_return_code :=  cak_e_table_unloaded;
    e_table_must_be_temp    :
        a07_return_code := -8025;
    e_table_not_in_from_list :
        a07_return_code := -8010;
    e_update_not_allowed :
        a07_return_code := -7008;
    e_temp_table_not_allowed :
        a07_return_code := -7063;
    e_too_few_columns :
        a07_return_code := -1201;
    e_too_few_values :
        a07_return_code := -1200;
    e_too_long_key :
        a07_return_code := -2001;
    e_too_long_record :
        a07_return_code := -2000;
    e_too_many_cols_dropped :
        a07_return_code := -7023;
    e_too_many_columns :
        a07_return_code := -1002;
    e_too_many_corr_tables :
        a07_return_code := -1011;
    e_too_many_correlation_columns :
        a07_return_code := -1004;
    e_too_many_indices :
        a07_return_code := -1007;
    e_too_many_joins :
        a07_return_code := -1017;
    (* PTS 1107952 E.Z. *)
    e_too_many_serverdbs :
        a07_return_code := -1022;
    e_too_many_lockunits_specified :
        a07_return_code := -1001;
    e_too_many_order_columns :
        a07_return_code := -1013;
    e_too_many_long_columns :
        a07_return_code := -1754;
    e_too_many_resultsets :
        a07_return_code := -7015;
    e_too_many_sec_links :
        a07_return_code := -1012;
    e_too_many_sourcetables :
        a07_return_code := -1014;
    e_too_many_subqueries :
        a07_return_code := -1102;
    e_too_many_subtrans :
        a07_return_code := -1023;
    e_too_many_termsets :
        a07_return_code := -1024;
    e_too_many_users_connected :
        a07_return_code := -1021;
    e_too_many_values :
        a07_return_code := -1015;
    e_too_many_variables :
        a07_return_code := -1006;
    e_too_short_datapart :
        a07_return_code := -9405;
    e_union_cols_mustbe_compatible :
        a07_return_code := -8028;
    e_unknown_columnname :
        a07_return_code := -4005;
    e_unknown_constraint :
        a07_return_code := -4017;
    e_invalid_datatype :
        a07_return_code := -3002;
    e_unknown_default :
        a07_return_code := -4018;
    e_unknown_domainname :
        a07_return_code := -4006;
    e_unknown_functionname :
        IF  sqlmode = sqlm_ansi
        THEN
            a07_return_code := -3008
        ELSE
            a07_return_code := -4023;
        (*ENDIF*) 
    e_unknown_groupname :
        a07_return_code := -4013;
    e_unknown_indexname :
        a07_return_code := -4011;
    e_unknown_linkname     :
        a07_return_code := -4009;
    e_unknown_mapset :
        a07_return_code := -4010;
    e_unknown_name :
        a07_return_code := -4024;
    e_unknown_ordercolumn:
        a07_return_code := -8013;
    e_unknown_parseid :
        a07_return_code := -4012;
    e_unknown_password :
        a07_return_code := -4002;
    e_unknown_procedure_name :
        a07_return_code := -4016;
    e_unknown_resultname :
        a07_return_code := -4000;
    e_unknown_sequencename :
        a07_return_code := -4020;
    e_unknown_name_of_serverdb :
        a07_return_code := -4014;
    e_unknown_synonymname :
        a07_return_code := -4007;
    e_unknown_tablename:
        IF  sqlmode = sqlm_oracle
        THEN
            a07_return_code := - 942
        ELSE
            a07_return_code := -4004;
        (*ENDIF*) 
    e_unknown_termset :
        a07_return_code := -4015;
    e_unknown_trigger:
        a07_return_code := -4019;
    e_unknown_user :
        a07_return_code := -4003;
    e_unknown_user_password_pair :
        a07_return_code := -4008;
    e_use_cascade :
        a07_return_code := -1755;
    e_use_dbsparse :
        a07_return_code := -   6;
    e_use_fetch_rest :
        a07_return_code := -   2;
    e_user_already_connected :
        a07_return_code := -8022;
    e_user_connected_to_same_task :
        a07_return_code := -8002;
    e_user_not_allowed   :
        a07_return_code := -7017;
    e_user_not_connected :
        a07_return_code := -8001;
    e_value_expr_must_be_param_name :
        a07_return_code := -8005;
    e_range_violation :
        CASE sqlmode OF
            sqlm_oracle :
                a07_return_code := -1402;
            sqlm_adabas :
                a07_return_code :=   300;
            OTHERWISE
                a07_return_code := -  30
            END;
        (*ENDCASE*) 
    e_varchar_not_allowed :
        a07_return_code := -7046;
    e_variable_not_allowed :
        a07_return_code := -7018;
    e_view_col_list_too_long :
        a07_return_code := -2012;
    e_view_def_contradicts_table_de :
        a07_return_code := -7057;
    e_without_datatypes :
        a07_return_code := -7016;
    e_wrong_database_mode :
        a07_return_code := - 101;
    OTHERWISE
        a07_return_code := ak07returncode ( b_err, sqlmode);
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_sysmsg_get (
            VAR acv        : tak_all_command_glob;
            direct_or_next : tgg_message2_type;
            msgno          : tsp_int2;
            language       : tsp_c3;
            VAR found      : boolean);
 
VAR
      get_errmsg   : boolean;
      b_err        : tgg_basis_error;
      treeid       : tgg00_FileId;
      mecode       : integer;
      i            : integer;
      n_ok         : tsp_num_error;
      m_bd_ptr     : tgg00_TempDataCachePtr;
 
BEGIN
WITH acv DO
    BEGIN
    found := false;
    get_errmsg := false;
    IF  ((a94mode = umUser_egg00) AND
        NOT (a_errormsg_loading) AND
        NOT a_in_ddl_trigger)
        OR
        (direct_or_next = mm_next)
    THEN
        IF  g01tabid.sys_msg.fileRoot_gg00 = NIL_PAGE_NO_GG00
        THEN
            BEGIN
            treeid.fileRoot_gg00 := NIL_PAGE_NO_GG00;
            IF  a_sysdir.ci_cache_p <> NIL
            THEN
                BEGIN
                mecode := a_return_segm^.sp1r_returncode;
                a_return_segm^.sp1r_returncode := 0;
                a06systable_state (acv, a01_i_sysmessages, treeid);
                a_return_segm^.sp1r_returncode := mecode
                END;
            (*ENDIF*) 
            get_errmsg := treeid.fileRoot_gg00 <> NIL_PAGE_NO_GG00
            END
        ELSE
            BEGIN
            treeid     := g01tabid.sys_msg;
            get_errmsg := true
            END;
        (*ENDIF*) 
    (*ENDIF*) 
    IF  get_errmsg
    THEN
        BEGIN
        (* we do not want to count msg_gets as strategies *)
        m_bd_ptr := a_transinf.tri_trans.trBdTcachePtr_gg00;
        a_transinf.tri_trans.trBdTcachePtr_gg00 := NIL;
        a06a_mblock_init (acv,
              m_select_row, direct_or_next, treeid);
        WITH a_mblock, mb_qual^, mb_data^ DO
            BEGIN
            mtree.fileHandling_gg00 := [ hsWithoutLock_egg00 ];
            mbp_buf[cgg_rec_key_offset+1] := csp_defined_byte;
            s41psint (mbp_buf, cgg_rec_key_offset+2, 5, 0, msgno, n_ok);
            mbp_buf[cgg_rec_key_offset+6] := csp_ascii_blank;
            FOR i:= 1 TO 3 DO
                mbp_buf[ cgg_rec_key_offset+6+i ]:= language[ i ];
            (*ENDFOR*) 
            IF  n_ok = num_ok
            THEN
                BEGIN
                mbp_keylen   := 9;
                mb_data_len  := cgg_rec_key_offset + mbp_keylen;
                mqual_pos    := mfirst_free;
                mqual_cnt    := 2;
                WITH mb_st^ [1] DO
                    BEGIN
                    etype         := st_varcol;
                    eop           := op_none;
                    ecolno        := 1;
                    elen_var      := 1 + cgg_msgtext_len;
                    ecol_tab[ 1 ] := chr(0);
                    ecol_tab[ 2 ] := chr(1)
                    END;
                (*ENDWITH*) 
                WITH mb_st^ [2] DO
                    BEGIN
                    etype         := st_output;
                    eop_out       := op_o_output;
                    epos          := 1;
                    elen_var      := 1 + cgg_msgtext_len;
                    ecol_pos      := 0;
                    END;
                (*ENDWITH*) 
                mfirst_free  := mfirst_free + 2;
                IF  direct_or_next = mm_next
                THEN
                    BEGIN
                    WITH mb_st^ [3] DO
                        BEGIN
                        etype         := st_varkey;
                        eop           := op_none;
                        epos          := 6;
                        elen_var      := 4;
                        ecol_tab[ 1 ] := chr(0);
                        ecol_tab[ 2 ] := chr(1)
                        END;
                    (*ENDWITH*) 
                    WITH mb_st^ [4] DO
                        BEGIN
                        etype         := st_output;
                        eop_out       := op_o_output;
                        epos          := mb_st^[2].elen_var + 1;
                        elen_var      := 4;
                        ecol_pos      := 0;
                        END;
                    (*ENDWITH*) 
                    WITH mb_st^ [5] DO
                        BEGIN
                        etype         := st_fixkey;
                        eop           := op_none;
                        epos          := 1;
                        elen_var      := 5;
                        ecol_tab[ 1 ] := chr(0);
                        ecol_tab[ 2 ] := chr(1);
                        END;
                    (*ENDWITH*) 
                    WITH mb_st^ [6] DO
                        BEGIN
                        etype         := st_value;
                        eop           := op_eq;
                        epos          := cgg_rec_key_offset+10;
                        elen_var      := 5;
                        ecol_tab[ 1 ] := chr(0);
                        ecol_tab[ 2 ] := chr(0);
                        END;
                    (*ENDWITH*) 
                    mbp_buf[ cgg_rec_key_offset+10 ] := csp_defined_byte;
                    s41psint (mbp_buf, cgg_rec_key_offset+11, 5, 0, msgno, n_ok);
                    mb_data_len  := cgg_rec_key_offset+10+4;
                    mqual_cnt    := 6;
                    mstrat_pos := 7;
                    WITH mb_st^ [7] DO
                        BEGIN
                        etype         := st_strat;
                        eop           := op_none;
                        epos          := cgg_rec_key_offset+1;
                        elen_var      := 9;
                        ecol_tab[ 1 ] := chr(2);
                        ecol_tab[ 2 ] := chr(0);
                        END;
                    (*ENDWITH*) 
                    WITH mb_st^ [8] DO
                        BEGIN
                        etype         := st_strat;
                        eop           := op_none;
                        epos          := 1;
                        elen_var      := 0;
                        ecol_tab[ 1 ] := chr(2);
                        ecol_tab[ 2 ] := chr(0);
                        END;
                    (*ENDWITH*) 
                    mstrat_cnt := 2;
                    mfirst_free  := mfirst_free + 6;
                    END;
                (*ENDIF*) 
                IF  a_sysdir.ci_cache_p = NIL
                THEN
                    BEGIN
                    mb_trns           := @a_transinf.tri_trans;
                    mb_trns^.trState_gg00 := [];
                    k05functions (a_mblock);
                    b_err := mb_trns^.trError_gg00
                    END
                ELSE
                    a06lsend_mess_buf (acv, a_mblock,
                          NOT cak_call_from_rsend, b_err);
                (*ENDIF*) 
                IF  b_err = e_ok
                THEN
                    found:= true;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDWITH*) 
        a_transinf.tri_trans.trBdTcachePtr_gg00 := m_bd_ptr;
        END;
    (*ENDIF*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07msg_kernelsink_get (
            VAR acv        : tak_all_command_glob;
            msgno          : tsp_int2;
            VAR err_text   : tak_order_errortext;
            VAR msglen     : integer);
 
VAR
      found        : boolean;
      errlen       : integer;
      b_err        : tgg_basis_error;
      e            : tsp8_uni_error;
      err_char_no  : tsp_int4;
      char_size    : integer;
 
BEGIN
msglen := 0;
WITH acv DO
    IF  a_in_packet <> NIL
    THEN (* may be nil in case of remote dbfunc call *)
        BEGIN
        IF  a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode
        THEN
            char_size := 2
        ELSE
            char_size := 1;
        (*ENDIF*) 
        a07_sysmsg_get (acv, mm_direct, msgno, a_ak_language, found);
        IF  found
        THEN
            BEGIN
            b_err := e_ok;
            IF  a_mblock.mb_data^.mbp_buf[ 1 ] = csp_unicode_def_byte
            THEN
                BEGIN
                (* multibyte_set *)
                errlen := s30unilnr (@a_mblock.mb_data^.mbp_buf [ 2 ],
                      csp_unicode_blank, 1, sizeof (err_text));
                IF  char_size = 2
                THEN
                    g10mv3 ('VAK07 ',   2,    
                          a_mblock.mb_data_size, sizeof (err_text),
                          a_mblock.mb_data^.mbp_buf, 2, err_text, 1,
                          errlen, b_err)
                ELSE
                    BEGIN
                    msglen := sizeof (err_text);
                    s80uni_trans (@a_mblock.mb_data^.mbp_buf[ 2 ], errlen,
                          csp_unicode, @err_text, msglen,
                          a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                          e, err_char_no);
                    END;
                (*ENDIF*) 
                END
            ELSE
                BEGIN
                msglen := s30lnr1 (a_mblock.mb_data^.mbp_buf,
                      csp_ascii_blank, 2,  cgg_msgtext_len);
                IF  g01code.ctype <> csp_ebcdic
                THEN
                    g10mv3 ('VAK07 ',   3,    
                          a_mblock.mb_data_size, sizeof (err_text),
                          a_mblock.mb_data^.mbp_buf, 2, err_text, 1,
                          msglen, b_err)
                ELSE
                    g02pascii_pos_ebcdic (a_mblock.mb_data^.mbp_buf, 2,
                          err_text, 1, msglen)
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_b_put_error (
            VAR acv  : tak_all_command_glob;
            b_err    : tgg_basis_error;
            err_code : tsp_int4);
 
VAR
      aux_c        : char;
      errlen       : integer;
      kw           : integer;
      etexttype    : tgg_errortext;
      msglen       : integer;
      e            : tsp8_uni_error;
      err_char_no  : tsp_int4;
      move_err     : tgg_basis_error;
      format_buf   : tsp_c120;
 
      err       : RECORD
            CASE boolean OF
                true :
                    (error_no : tsp_int2);
                false :
                    (errtext  : tsp_c256);
                END;
            (*ENDCASE*) 
 
      err_text : tak_order_errortext;
&     ifdef trace
      m_ptr : tsp_moveobj_ptr;
&     endif
 
BEGIN
WITH acv, a_return_segm^ DO
    IF  sp1r_returncode = 0
    THEN
        BEGIN
&       ifdef trace
        t01basis_error (ak_sem, 'throw error ', b_err);
&       endif
        IF  b_err = e_cancelled
        THEN
            a_transinf.tri_trans.trRteCommPtr_gg00^.to_cancel:= false
                  (* PTS 1120378 E.Z. *)
        ELSE
            IF  b_err = e_unknown_user_password_pair
            THEN
                vsleep (a_transinf.tri_trans.trTaskId_gg00, 1);
            (*ENDIF*) 
        (*ENDIF*) 
        IF  b_err = e_function_failed
        THEN
            BEGIN
            b06get_errtxt (a_transinf.tri_trans, errlen,
                  etexttype, b_err, err.errtext);
&           ifdef trace
            t01int4 (ak_sem, 'errlen      ', errlen);
            m_ptr := @err.errtext;
            t01moveobj (ak_sem, m_ptr^, 1, errlen);
&           endif
            a_transinf.tri_trans.trState_gg00 :=
                  a_transinf.tri_trans.trState_gg00 - [tsErrTextExist_egg00];
            IF  g01code.kernel_swap <> sw_normal
            THEN
                BEGIN
                aux_c          := err.errtext[1];
                err.errtext[1] := err.errtext[2];
                err.errtext[2] := aux_c
                END;
            (*ENDIF*) 
            sp1r_returncode := err.error_no;
            IF  errlen > sizeof (tsp_int2)
            THEN
                BEGIN
                a_user_defined_error := true;
                IF  g01unicode
                THEN
                    BEGIN
                    msglen := s30unilnr (@err.errtext, csp_unicode_blank,
                          sizeof(tsp_int2) + 1,
                          sizeof (err.errtext) - sizeof (tsp_int2));
                    errlen := sizeof (err_text);
                    s80uni_trans (@(err.errtext [sizeof (tsp_int2) + 1]), msglen,
                          csp_unicode, @err_text, errlen,
                          a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                          e, err_char_no);
&                   ifdef trace
                    t01int4 (ak_sem, 'msglen      ', msglen);
                    m_ptr := @err.errtext;
                    t01moveobj (ak_sem, m_ptr^, 1, msglen);
                    t01int4 (ak_sem, 'errlen      ', errlen);
                    m_ptr := @err_text;
                    t01moveobj (ak_sem, m_ptr^, 1, errlen);
&                   endif
                    END
                ELSE
                    BEGIN
                    move_err := e_ok;
                    errlen   := errlen - sizeof(tsp_int2);
                    g10mv4 ('VAK07 ',   4,    
                          sizeof (err.errtext), sizeof (err_text),
                          err.errtext, sizeof (tsp_int2) + 1,
                          err_text, 1, errlen, move_err);
                    END;
                (*ENDIF*) 
                a06retpart_move (acv, @err_text, errlen);
                a06finish_curr_retpart (acv, sp1pk_errortext, 1)
                END
            (*ENDIF*) 
            END
        ELSE
            BEGIN
            sp1r_returncode := a07_return_code ( b_err, a_sqlmode);
            IF  (sp1r_returncode = cak_e_table_or_file_dropped)
                AND
                (acv.a_init_ex_kind = only_executing)
            THEN
                sp1r_returncode :=
                      a07_return_code (e_old_fileversion, a_sqlmode);
            (*ENDIF*) 
            a07put_error_pos (acv, err_code);
            a_err_parm_cnt  := 0;
            IF  (b_err = e_invalid_date) OR
                (b_err = e_invalid_time) OR
                (b_err = e_invalid_timestamp)
            THEN
                BEGIN
                kw := cak_i_no_keyword;
                CASE a_dt_format OF
                    dtf_normal :
                        kw := cak_i_internal;
                    dtf_iso    :
                        kw := cak_i_iso;
                    dtf_usa    :
                        kw := cak_i_usa;
                    dtf_eur, dtf_ts_eur :
                        kw := cak_i_eur;
                    dtf_jis    :
                        kw := cak_i_jis;
                    dtf_oracle_date :
                        BEGIN
                        a51get_date_format (acv, format_buf, g01unicode);
                        errlen := (mxsp_c50-csp_attr_byte) * a01char_size;
                        ak07put_param (acv, 1, @format_buf[ 2 ], errlen)
                        END;
                    (* PTS 1112472 E.Z. *)
                    OTHERWISE
                    END;
                (*ENDCASE*) 
                IF  kw <> cak_i_no_keyword
                THEN
                    a07const_param (acv,
                          1, @a01kw[kw], sizeof (a01kw[kw]))
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            a_ak_b_err      := b_err
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07modul_to_text (
            modul_pos    : tsp_int4;
            VAR modulstr : tsp_c10);
 
VAR
      modul_nr     : integer;
      pos_in_modul : integer;
      modul_nr_wid : integer;
      j            : integer;
 
BEGIN
modulstr     := bsp_c10;
modul_nr     := modul_pos DIV 10;
pos_in_modul := modul_pos MOD 10;
modulstr [1] := ':';
modulstr [2] := ' ';
modulstr [3] := 'V';
modulstr [4] := 'A';
modulstr [5] := 'K';
IF  modul_nr > 99
THEN
    modul_nr_wid := 3
ELSE
    modul_nr_wid := 2;
(*ENDIF*) 
j := modul_nr_wid;
WHILE (j > 0) DO
    BEGIN
    modulstr [ 5 + j ] := chr (modul_nr MOD 10 + ord ('0'));
    modul_nr := modul_nr DIV 10;
    j  := pred(j)
    END;
(*ENDWHILE*) 
modulstr [6 + modul_nr_wid] := bsp_c1;
modulstr [7 + modul_nr_wid] := chr (pos_in_modul + ord ('0'));
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_intern_error_put (VAR acv : tak_all_command_glob);
 
CONST
      system_error_len = 14;
 
VAR
      found               : boolean;
      truncated           : boolean;
      special_session     : boolean;
      b_error             : tgg_basis_error;
      move_err            : tgg_basis_error;
      etexttype           : tgg_errortext;
      aux_ret_code        : tsp_int2;
      aux_err_code        : tsp_int4;
      errlen              : integer;
      i                   : integer;
      ix                  : integer;
      pos                 : integer;
      msglen              : integer;
      textlen             : integer;
      hnamelen            : integer;
      move_len            : integer;
      s30                 : tsp_c30;
      err_text            : tak_order_errortext;
      mrecord             : tsp_buf;
      e                   : tsp8_uni_error;
      err_char_no         : tsp_int4;
      char_size           : integer;
      modulstr            : tsp_c10;
      err                 : tgg_err;
      err_p               : ^tsp_c256;
      msg_line            : tsp_c40;
      (* PTS 1107617 E.Z. *)
      msg_uni             : tsp00_C80;
      help_session        : tsp00_C4;
 
      syskey_hex          : RECORD
            CASE boolean OF
                true :
                    (c120 : tsp_c120);
                false :
                    (c40array : ARRAY[1..3] OF tsp_c40);
                END;
            (*ENDCASE*) 
 
      m_trBdTcachePtr_gg00: tgg00_TempDataCachePtr;
 
BEGIN
WITH acv, a_return_segm^ DO
    BEGIN
    IF  a_out_packet^.sp1_header.sp1h_mess_code in
        [ csp_unicode, csp_unicode_swap ]
    THEN
        char_size := 2
    ELSE
        char_size := 1;
    (*ENDIF*) 
    move_err         := e_ok;
    a_retpart_locked := false;
    a06reset_retpart (acv);
    IF  (sp1r_returncode = 100)        AND
        (a_len_row_not_found_text > 0) AND
        (a_session_mess_code = a_mess_code)
    THEN
        a06retpart_move (acv, @a_row_not_found_text,
              a_len_row_not_found_text)
    ELSE
        BEGIN
        IF  (sp1r_returncode =
            a07_return_code (e_unknown_tablename, a_sqlmode)) AND
            (warn10_some_serverdbs_down in
            a_transinf.tri_trans.trWarning_gg00)
        THEN
            sp1r_returncode := -8043
        ELSE
            IF  ((a_sqlmode = sqlm_oracle)
                AND
                (sp1r_returncode =
                a07_return_code (e_duplicate_invkey, a_sqlmode))
                AND
                ((a_return_segm^.sp1r_function_code = csp1_alter_table_fc) OR
                ( a_return_segm^.sp1r_function_code = csp1_create_index_fc)))
            THEN
                sp1r_returncode := -1452
            ELSE
                (* PTS 1116801 E.Z. *)
                IF  sp1r_returncode = cgg_old_parsid
                THEN
                    sp1r_returncode := csp_old_fileversion;
                (*ENDIF*) 
            (*ENDIF*) 
        (*ENDIF*) 
        IF  (a_transinf.tri_trans.trIndex_gg00 = cgg_nil_transindex) AND
            (a94mode = umUser_egg00)
        THEN
            (* PTS 1112223 E.Z. *)
            IF  (acv.a_return_segm^.sp1r_returncode =
                a07_return_code (e_release_caused_by_shutdown, acv.a_sqlmode))
                OR
                (* PTS 1112848 E.Z. *)
                k51shutdown_wanted (a_transinf.tri_trans.trTaskId_gg00)
            THEN
                BEGIN
                special_session := false;
                help_session := cgg_nil_session;
                a_err_parm_cnt := 0;
                a_transinf.tri_trans.trState_gg00 :=
                      a_transinf.tri_trans.trState_gg00 - [tsErrTextExist_egg00]
                END
            ELSE
                BEGIN
                special_session := true;
                (* PTS 1109783 E.Z. *)
                help_session :=  a_transinf.tri_trans.trSessionId_gg00.ci4_gg00;
                (* PTS 1119767 E.Z. *)
                m_trBdTcachePtr_gg00 := a_transinf.tri_trans.trBdTcachePtr_gg00;
                a51session_init (acv);
                a_transinf.tri_trans.trBdTcachePtr_gg00 := m_trBdTcachePtr_gg00;
                END
            (*ENDIF*) 
        ELSE
            BEGIN
            special_session := false;
            help_session := cgg_nil_session;
            END;
        (*ENDIF*) 
        IF  a_transinf.tri_trans.trIndex_gg00 = cgg_nil_transindex
        THEN
            found := false
        ELSE
            a07_sysmsg_get (acv, mm_direct, sp1r_returncode,
                  a_ak_language, found);
        (*ENDIF*) 
        IF  found
        THEN
            IF  a_mblock.mb_data^.mbp_buf[ 1 ] = csp_unicode_def_byte
            THEN
                BEGIN
                (* multibyte_set *)
                msglen := sizeof (err_text);
                errlen := s30unilnr (@a_mblock.mb_data^.mbp_buf [ 2 ],
                      csp_unicode_blank, 1, cgg_msgtext_len);
                s80uni_trans (@a_mblock.mb_data^.mbp_buf[ 2 ], errlen, csp_unicode,
                      @err_text, msglen,
                      a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                      e, err_char_no)
                END
            ELSE
                BEGIN
                msglen := s30lnr1 (a_mblock.mb_data^.mbp_buf,
                      csp_ascii_blank, 2, cgg_msgtext_len);
                IF  g01code.ctype <> csp_ebcdic
                THEN
                    g10mv3 ('VAK07 ',   5,    
                          a_mblock.mb_data_size, sizeof (err_text),
                          a_mblock.mb_data^.mbp_buf, 2, err_text, 1,
                          msglen, move_err)
                ELSE
                    g02pascii_pos_ebcdic (a_mblock.mb_data^.mbp_buf, 2,
                          err_text, 1, msglen)
                (*ENDIF*) 
                END
            (*ENDIF*) 
        ELSE
            BEGIN
            (* PTS 1112223 E.Z. *)
            IF  sp1r_returncode =
                a07_return_code (e_release_caused_by_shutdown, sqlm_adabas)
            THEN
                BEGIN
                msglen := 30;
                s30:= 'Session terminated by shutdown'
                END
            ELSE
                IF  (a_sysdir.ci_cache_p = NIL) AND
                    (sp1r_returncode =
                    a07_return_code (e_no_more_memory, sqlm_adabas))
                THEN
                    (* PTS 1103472 E.Z. *)
                    IF  ((a_ak_language[ 1 ] = chr(71)) AND
                        ( a_ak_language[ 2 ] = chr(69)) AND
                        ( a_ak_language[ 3 ] = chr(82)))
                    THEN
                        BEGIN
                        msglen := 29;
                        s30:= 'Kein Speicher mehr verfgbar  '
                        END
                    ELSE
                        BEGIN
                        msglen := 14;
                        s30:= 'No more memory                '
                        END
                    (*ENDIF*) 
                ELSE
                    (* PTS 1103472 E.Z. *)
                    IF  ((a_ak_language[ 1 ] = chr(71)) AND
                        ( a_ak_language[ 2 ] = chr(69)) AND
                        ( a_ak_language[ 3 ] = chr(82)))
                    THEN
                        BEGIN
                        msglen := 29;
                        s30:= 'Meldungstext nicht verfgbar  '
                        END
                    ELSE
                        BEGIN
                        msglen := 21;
                        s30:= 'Message not available         ';
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
            IF  char_size = 2
            THEN
                BEGIN
                IF  a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode_swap
                THEN
                    FOR i := 1 TO msglen DO
                        BEGIN
                        err_text [ (2*i)-1 ] := s30 [ i ];
                        err_text [ (2*i) ]   := csp_unicode_mark;
                        END
                    (*ENDFOR*) 
                ELSE
                    FOR i := 1 TO msglen DO
                        BEGIN
                        err_text [ (2*i)-1 ] := csp_unicode_mark;
                        err_text [ (2*i) ]   := s30 [ i ];
                        END;
                    (*ENDFOR*) 
                (*ENDIF*) 
                msglen := msglen * 2;
                END
            ELSE
                g10mv5 ('VAK07 ',   6,    
                      sizeof (s30), sizeof (err_text),
                      s30, 1, err_text, 1, msglen, move_err);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  a_err_parm_cnt > 0
        THEN
            ak07substitute_parameters (acv,
                  char_size, err_text, msglen)
        ELSE
            IF  tsErrTextExist_egg00 in a_transinf.tri_trans.trState_gg00
            THEN
                BEGIN
                (*IF  (sp1r_returncode = cak_e_kb_net_line_down) OR
                      (sp1r_returncode = cak_e_kb_ansi_net_line_down) OR
                      (sp1r_returncode = 650)
                      THEN
                      b_error := e_work_rolled_back
                      ELSE*)
                b_error := a_ak_b_err;
                err_p := @err;
                b06get_errtxt (a_transinf.tri_trans, errlen,
                      etexttype, b_error, err_p^);
                a_transinf.tri_trans.trState_gg00 :=
                      a_transinf.tri_trans.trState_gg00 - [ tsErrTextExist_egg00 ];
                IF  ((a_transinf.tri_trans.trError_gg00 = e_ok) AND (errlen > 0))
                THEN
                    BEGIN
                    (* Find valid return code (ref.b06put_errtxt) *)
                    aux_ret_code    := sp1r_returncode;
                    aux_err_code    := sp1r_errorpos;
                    sp1r_returncode := 0;
                    (* error_code := 1; by a07_b_put_error *)
                    a07_b_put_error (acv, b_error, 1);
                    IF  ((aux_ret_code = sp1r_returncode) OR
                        ( aux_ret_code = -912)) (* kb_net_line_down *)
                    THEN
                        BEGIN
                        sp1r_returncode := aux_ret_code;
                        sp1r_errorpos   := aux_err_code
                        END;
                    (* Now process error text : *)
                    (*ENDIF*) 
                    IF  (sp1r_returncode <> 100)
                    THEN
                        CASE etexttype OF
                            errtext_char :
                                BEGIN
                                textlen := sizeof (err_text) - msglen - 2;
                                IF  textlen > 0
                                THEN
                                    BEGIN
                                    IF  char_size = 2
                                    THEN
                                        BEGIN
                                        (* Funktioniert nur wenn err.errt *)
                                        (* immer ASCII ist !!             *)
                                        IF  a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode
                                        THEN
                                            BEGIN
                                            err_text[msglen+1] := csp_unicode_mark;
                                            IF  b_error = e_trigger_failed
                                            THEN
                                                err_text[msglen+2] := ':'
                                            ELSE
                                                err_text[msglen+2] := ',';
                                            (*ENDIF*) 
                                            END
                                        ELSE
                                            BEGIN
                                            err_text[msglen+2] := csp_unicode_mark;
                                            IF  b_error = e_trigger_failed
                                            THEN
                                                err_text[msglen+1] := ':'
                                            ELSE
                                                err_text[msglen+1] := ',';
                                            (*ENDIF*) 
                                            END;
                                        (*ENDIF*) 
                                        msglen := msglen + 2;
                                        s80uni_trans (@err.errt, errlen, csp_ascii,
                                              @err_text [msglen +1], textlen,
                                              a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                                              e, err_char_no);
                                        msglen := msglen + textlen;
                                        END
                                    ELSE
                                        BEGIN
                                        IF  textlen > errlen
                                        THEN
                                            textlen:= errlen;
                                        (*ENDIF*) 
                                        IF  b_error = e_trigger_failed
                                        THEN
                                            err_text[msglen+1] := ':'
                                        ELSE
                                            err_text[msglen+1] := ',';
                                        (*ENDIF*) 
                                        msglen := msglen + 1;
                                        (* ASCII nach EBCDIC fehlt hier *)
                                        g10mv4 ('VAK07 ',   7,    
                                              sizeof (err.errt),
                                              sizeof (err_text),
                                              err.errt, 1, err_text, msglen + 1,
                                              textlen, move_err);
                                        msglen := msglen + textlen;
                                        END;
                                    (*ENDIF*) 
                                    END;
                                (*ENDIF*) 
                                END;
                            errtext_surrogate,
                            errtext_stack :
                                BEGIN
                                (* PTS 1110096 E.Z. *)
                                IF  (sp1r_returncode = a07_return_code (
                                    e_sequence_overflow, a_sqlmode))
                                    OR
                                    (sp1r_returncode = a07_return_code (
                                    e_currval_without_nextval, a_sqlmode))
                                THEN
                                    ak07get_sequence_name (acv, err)
                                ELSE
                                    ak07err_col_index_name (acv, err,
                                          etexttype);
                                (*ENDIF*) 
                                IF  a_err_parm_cnt > 0
                                THEN
                                    ak07substitute_parameters (acv,
                                          char_size, err_text, msglen)
                                (*ENDIF*) 
                                END;
                            END
                        (*ENDCASE*) 
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END
            ELSE
                IF  (sp1r_returncode =
                    a07_return_code (e_wanted_keyword, a_sqlmode))
                    AND
                    (a_err_parm_cnt = 0)
                THEN
                    ak07find_keywords (acv, err_text, msglen);
                (*ENDIF*) 
            (*ENDIF*) 
        (*ENDIF*) 
        IF  (sp1r_returncode =
            a07_return_code (e_system_error, a_sqlmode))
        THEN
            BEGIN
            ak07modul_to_text (sp1r_errorpos, modulstr);
            sp1r_errorpos := 1;
            IF  char_size = 2
            THEN
                BEGIN
                hnamelen := sizeof(err_text) - msglen;
                s80uni_trans (@modulstr, sizeof(modulstr), csp_ascii,
                      @err_text [msglen + 1], hnamelen,
                      a_out_packet^.sp1_header.sp1h_mess_code,
                      [ ], e, err_char_no);
                msglen := msglen + hnamelen;
                END
            ELSE
                BEGIN
                g10mv9 ('VAK07 ',   8,    
                      sizeof (modulstr), sizeof (err_text),
                      modulstr, 1, err_text, msglen + 1,
                      sizeof (modulstr), move_err);
                msglen := msglen + sizeof (modulstr);
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  (sp1r_returncode =
            a07_return_code (e_sysinfo_not_found, a_sqlmode))
            OR
            (sp1r_returncode =
            a07_return_code (e_duplicate_sysinfo, a_sqlmode))
        THEN
            BEGIN
            s40gbyte (a_error_key_ptr^.syskey.all, 1,
                  a_error_key_ptr^.syskey.skeylen, syskey_hex.c120, 1,
                  sizeof (syskey_hex), truncated);
            i       := 2 * a_error_key_ptr^.syskey.skeylen;
            IF  i > sizeof (syskey_hex)
            THEN
                i := sizeof (syskey_hex);
            (*ENDIF*) 
            ix  := 1;
            pos := 1;
            WHILE pos < i DO
                BEGIN
                g01optextmsg (sp3p_console, sp3m_error, csp3_a10_cache_dump,
                      csp3_n_akcache, syskey_hex.c40array[ix]);
                pos := pos + sizeof (syskey_hex.c40array[ix]);
                ix  := ix + 1
                END;
            (*ENDWHILE*) 
            IF  (sizeof(err_text) - msglen) >= char_size
            THEN
                IF  char_size = 2
                THEN
                    IF  a_out_packet^.sp1_header.sp1h_mess_code
                        = csp_unicode_swap
                    THEN
                        BEGIN
                        err_text[msglen + 1] := ':';
                        err_text[msglen + 2] := csp_unicode_mark;
                        msglen := msglen + 2
                        END
                    ELSE
                        BEGIN
                        err_text[msglen + 1] := csp_unicode_mark;
                        err_text[msglen + 2] := ':';
                        msglen := msglen + 2
                        END
                    (*ENDIF*) 
                ELSE
                    BEGIN
                    err_text[msglen + 1] := ':';
                    msglen := msglen + 1
                    END;
                (*ENDIF*) 
            (*ENDIF*) 
            move_len := sizeof(err_text) - msglen;
            IF  char_size = 2
            THEN
                s80uni_trans (@syskey_hex, sizeof(syskey_hex), csp_ascii,
                      @err_text [msglen + 1], move_len,
                      csp_unicode, [ ], e, err_char_no)
            ELSE
                BEGIN
                IF  a_error_key_ptr^.syskey.skeylen * 2 < move_len
                THEN
                    move_len := a_error_key_ptr^.syskey.skeylen * 2;
                (*ENDIF*) 
                IF  move_len > sizeof (syskey_hex.c120)
                THEN
                    move_len := sizeof (syskey_hex.c120);
                (*ENDIF*) 
                g10mv10 ('VAK07 ',   9,    
                      sizeof (syskey_hex.c120), sizeof (err_text),
                      syskey_hex.c120, 1, err_text, msglen + 1,
                      move_len, move_err)
                END;
            (*ENDIF*) 
            msglen := msglen + move_len
            END;
        (*ENDIF*) 
        IF  (sp1r_returncode < -9000) AND
            (* 9000 itself should not turn to -602 *)
            (sp1r_returncode > -10000)
        THEN
            BEGIN
            msg_line := bsp_c40;
            g17int4to_line (sp1r_returncode, NOT c_with_zero, 5, 1, msg_line);
            move_len := sizeof(msg_line) - 6;
            IF  found
            THEN
                errlen := system_error_len
            ELSE
                errlen := 0;
            (*ENDIF*) 
            (* PTS 1107617 E.Z. *)
            IF  char_size = 2
            THEN
                BEGIN
                (* errtext is (swap-)unicode *)
                s80uni_trans (@msg_line, 6, csp_ascii,
                      @msg_uni, textlen,
                      a_out_packet^.sp1_header.sp1h_mess_code,
                      [ ], e, err_char_no);
                move_len := sizeof(msg_uni) - textlen;
                IF  move_len > msglen - errlen
                THEN
                    move_len := msglen - errlen;
                (*ENDIF*) 
                g10mv14 ('VAK07 ',  10,    
                      sizeof (err_text), sizeof (msg_uni),
                      err_text, errlen+1, msg_uni, textlen+1,
                      move_len, move_err);
                vmessageUnicode (a_out_packet^.sp1_header.sp1h_mess_code,
                      sp3p_knldiag, sp3m_error,
                      csp3_a07_system_error, csp3_n_syserror, msg_uni);
                END
            ELSE
                BEGIN
                IF  move_len > msglen - errlen
                THEN
                    move_len := msglen - errlen;
                (*ENDIF*) 
                g10mv13 ('VAK07 ',  11,    
                      sizeof (err_text), sizeof (msg_line),
                      err_text, errlen+1, msg_line, 7,
                      move_len, move_err);
                vmessage (sp3p_knldiag, sp3m_error,
                      csp3_a07_system_error, csp3_n_syserror, msg_line);
                END;
            (*ENDIF*) 
            IF  a_sqlmode = sqlm_oracle (* PTS 1109929 *)
            THEN
                sp1r_returncode := - 602;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        a06retpart_move (acv, @err_text, msglen);
        IF  special_session
        THEN
            WITH a_transinf.tri_trans DO
                BEGIN
                k51remove_locks (trTaskId_gg00, trIndex_gg00, trState_gg00);
                k51del_transentry_from_locklist (trTaskId_gg00, trIndex_gg00);
                (* PTS 1109783 E.Z. *)
                trSessionId_gg00.ci4_gg00 := help_session;
                END;
            (*ENDWITH*) 
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    a06finish_curr_retpart (acv, sp1pk_errortext, 1);
    a_transinf.tri_trans.trWarning_gg00 := [ ];
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07get_sequence_name (
            VAR acv      : tak_all_command_glob;
            VAR err      : tgg_err);
 
VAR
      b_err          : tgg_basis_error;
      aux_returncode : tsp_int2;
      aux_errorpos   : tsp_int4;
      seq_buf        : tak_sysbufferaddress;
      sysk           : tgg_sysinfokey;
 
BEGIN
WITH acv DO
    BEGIN
    aux_returncode := a_return_segm^.sp1r_returncode;
    aux_errorpos   := a_return_segm^.sp1r_errorpos;
    a_return_segm^.sp1r_returncode := 0;
    a_return_segm^.sp1r_errorpos   := 0;
    sysk           := a01defaultkey;
    sysk.stableid  := err.errtableid;
    sysk.sentrytyp := cak_esequence;
    a10get_sysinfo (acv, sysk, d_release,
          seq_buf, b_err);
    IF  b_err = e_ok
    THEN
        ak07identifier_param (acv, 1, seq_buf^.ssequence.seq_name);
    (*ENDIF*) 
    a_return_segm^.sp1r_returncode := aux_returncode;
    a_return_segm^.sp1r_errorpos   := aux_errorpos
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07err_col_index_name (
            VAR acv      : tak_all_command_glob;
            VAR err      : tgg_err;
            etexttype    : tgg_errortext);
 
VAR
      f_ok           : boolean;
      found          : boolean;
      b_err          : tgg_basis_error;
      base_ptr       : tak_sysbufferaddress;
      aux_returncode : tsp_int2;
      aux_errorpos   : tsp_int4;
      index          : integer;
      constr_buf     : tak_sysbufferaddress;
      owner          : tsp_knl_identifier;
      constraint_n   : tsp_knl_identifier;
      index_n        : tsp_knl_identifier;
      colname        : tsp_knl_identifier;
      sysk           : tgg_sysinfokey;
      priv           : tak_privilege;
      index_scan_rec : tak_index_scan_record;
 
BEGIN
WITH acv DO
    BEGIN
    aux_returncode := a_return_segm^.sp1r_returncode;
    aux_errorpos   := a_return_segm^.sp1r_errorpos;
    a_return_segm^.sp1r_returncode := 0;
    a_return_segm^.sp1r_errorpos  := 0;
    IF  (etexttype = errtext_surrogate)
        OR
        ((etexttype = errtext_stack)    AND
        (err.errstacktype <> tfnMulti_egg00))
    THEN
        BEGIN (* Find column stack entry *)
        a06_systable_get (acv, d_release, err.errtableid,
              base_ptr, true, f_ok);
        IF  f_ok
        THEN
            BEGIN
            a06_get_priv (acv, base_ptr, priv);
            IF  (priv.priv_all_set   = []) AND
                (priv.priv_col_exist = [])
            THEN
                f_ok := false
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  f_ok
        THEN
            BEGIN
            IF  (etexttype = errtext_stack)
                AND
                (err.errstack.etype in [st_dummy, st_jump_false])
            THEN
                BEGIN
                (* stack entry containing violated constraint id *)
                sysk := base_ptr^.syskey;
                IF  base_ptr^.syskey.sentrytyp < cak_etemp
                THEN
                    sysk.sentrytyp := cak_econstraint
                ELSE
                    sysk.sentrytyp := cak_etempconstraint;
                (*ENDIF*) 
                sysk.slinkage[1] := err.errstack.ecol_tab[1];
                sysk.slinkage[2] := err.errstack.ecol_tab[2];
                a10get_sysinfo (acv, sysk, d_release,
                      constr_buf, b_err);
                IF  b_err = e_ok
                THEN
                    BEGIN
                    a11getconstraintname (constr_buf^.sconstraint,
                          constraint_n);
                    ak07identifier_param (acv, 1, constraint_n)
                    END;
                (*ENDIF*) 
                END
            ELSE
                BEGIN
                index := base_ptr^.sbase.bfirstcolind;
                WHILE index <> 0 DO
                    WITH base_ptr^.sbase.bcolumn[ index ]^,
                         ccolstack DO
                        IF  ((etype     = err.errstack.etype) AND
                            ((creccolno = ord (err.errstack.ecol_tab[ 1 ])) OR
                            ((epos      = err.errstack.epos) AND
                            (elen_var   = err.errstack.elen_var))))
                        THEN
                            BEGIN
                            a061get_colname (base_ptr^.sbase.bcolumn[index]^,
                                  colname);
                            index := 0;
                            ak07identifier_param (acv, 1, colname)
                            END
                        ELSE
                            index := cnextind;
                        (*ENDIF*) 
                    (*ENDWITH*) 
                (*ENDWHILE*) 
                END;
            (*ENDIF*) 
            ak07identifier_param (acv, -1, base_ptr^.sbase.btablen^);
            a06determine_username (acv,
                  base_ptr^.sbase.bauthid, owner);
            ak07identifier_param (acv, -1, owner)
            END;
        (*ENDIF*) 
        END
    ELSE
        WITH index_scan_rec DO
            BEGIN
            a24init_index_scan (acv, err.errtableid,
                  index_scan_rec);
            found := false;
            WHILE NOT found AND a24next_named_index (acv, index_scan_rec) DO
                WITH isr_buf^.smindex.indexdef[isr_index] DO
                    BEGIN
                    found := ord (err.errstack.ecol_tab[1]) = indexno;
                    IF  found
                    THEN
                        BEGIN
                        a24get_indexname (acv, isr_buf, isr_index,
                              index_n);
                        ak07identifier_param (acv, 1, index_n);
                        END;
                    (* PTS 1114312, T.A. removed code for unnamed indexes *)
                    (*ENDIF*) 
                    END;
                (*ENDWITH*) 
            (*ENDWHILE*) 
            a24finish_index_scan (acv, index_scan_rec)
            END;
        (*ENDWITH*) 
    (*ENDIF*) 
    a_return_segm^.sp1r_returncode := aux_returncode;
    a_return_segm^.sp1r_errorpos   := aux_errorpos;
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07find_keywords (
            VAR acv      : tak_all_command_glob;
            VAR err_text : tak_order_errortext;
            VAR msglen   : integer);
 
CONST
      c_release_packet = true;
      c_max_kw         = 33;
 
VAR
      exit_loop         : boolean;
      found             : boolean;
      aux_ret_code      : tsp_int2;
      aux_errorpos      : tsp_int4;
      aux_function_code : tsp_int2;
      curr_kw           : integer;
      kw_len            : integer;
      kw_size           : integer;
      ix                : integer;
      jx                : integer;
      wrong_kw_len      : integer;
      pos               : tsp_int4;
      move_err          : tgg_basis_error;
      e                 : tsp8_uni_error;
      err_char_no       : tsp_int4;
      c                 : char;
      old_cmd_segm      : tsp1_segment_ptr;
      kw_cnt            : integer;
      prev_pos          : integer;
      char_size         : integer;
      swap_offset       : integer;
      wrong_kw_pos      : tsp_int4;
      wrong_kw          : tsp_c40;
 
      keywords : ARRAY[1..c_max_kw] OF RECORD
            kw : integer;
            p  : integer;
      END;
 
 
BEGIN
IF  g01unicode
THEN
    char_size := 2
ELSE
    char_size := 1;
(*ENDIF*) 
&ifdef trace
t01int4 (ak_sem, 'errorpos    ', acv.a_return_segm^.sp1r_errorpos);
&endif
WITH acv, a_return_segm^ DO
    IF  (sp1r_errorpos > 0) AND
        (sp1r_errorpos <= a_cmd_segm^.sp1p_buf_len + 1)
    THEN
        BEGIN
        a_compact_varpart := false;
        aux_ret_code      := sp1r_returncode;
        aux_errorpos      := sp1r_errorpos;
        aux_function_code := sp1r_function_code;
        sp1r_returncode   := 0;
        move_err          := e_ok;
        old_cmd_segm      := acv.a_cmd_segm;
        kw_size           := char_size * (sizeof (a01kw[1]) + 1);
        a542internal_packet (acv, NOT c_release_packet,
              acv.a_cmd_segm^.sp1p_buf_len * char_size +
              kw_size + char_size + 2);
        IF  sp1r_returncode = 0
        THEN
            BEGIN
            IF  g01unicode
            THEN      (* We can't access the already to unicode transformed *)
                BEGIN (* cmd_part, because it was already disposed in vak93 *)
                (* PTS 1109070 E.Z. *)
                IF  a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode
                THEN
                    BEGIN
                    jx := old_cmd_segm^.sp1p_buf_len;
                    g10mv ('VAK07 ',  12,    
                          old_cmd_segm^.sp1p_buf_size,
                          a_cmd_segm^.sp1p_buf_size,
                          old_cmd_segm^.sp1p_buf, 1,
                          a_cmd_segm^.sp1p_buf, 1,
                          old_cmd_segm^.sp1p_buf_len, move_err)
                    END
                ELSE
                    BEGIN
                    jx := a_cmd_segm^.sp1p_buf_size;
                    s80uni_trans (@old_cmd_segm^.sp1p_buf, old_cmd_segm^.sp1p_buf_len,
                          a_out_packet^.sp1_header.sp1h_mess_code,
                          @a_cmd_segm^.sp1p_buf, jx,
                          csp_unicode, [ ], e, err_char_no)
                    END;
                (*ENDIF*) 
&               ifdef trace
                t01int4    (ak_sem, 'messcode ORG',
                      a_out_packet^.sp1_header.sp1h_mess_code);
                t01moveobj (ak_sem, old_cmd_segm^.sp1p_buf,
                      1, old_cmd_segm^.sp1p_buf_len);
                t01int4    (ak_sem, 'messcode NEW',
                      a_in_packet^.sp1_header.sp1h_mess_code);
                t01moveobj (ak_sem, a_cmd_segm^.sp1p_buf, 1, jx);
                t01int4    (ak_sem, 'uni_err     ', ord (e));
&               endif
                g10mvr ('VAK07 ',  13,    
                      a_cmd_segm^.sp1p_buf_size, a_cmd_segm^.sp1p_buf_size,
                      a_cmd_segm^.sp1p_buf, 2*sp1r_errorpos-1,
                      a_cmd_segm^.sp1p_buf,
                      2*sp1r_errorpos+kw_size+char_size-1,
                      jx - 2*sp1r_errorpos +2, move_err);
                a_cmd_segm^.sp1p_buf[(sp1r_errorpos-1)*2+1] :=
                      csp_unicode_mark;
                a_cmd_segm^.sp1p_buf[sp1r_errorpos*2] := bsp_c1;
                pos := sp1r_errorpos * 2 + 1;
                END
            ELSE
                BEGIN
                g10mv ('VAK07 ',  14,    
                      old_cmd_segm^.sp1p_buf_size,
                      a_cmd_segm^.sp1p_buf_size,
                      old_cmd_segm^.sp1p_buf, 1,
                      a_cmd_segm^.sp1p_buf, 1,
                      sp1r_errorpos - 1, move_err);
                g10mv ('VAK07 ',  15,    
                      old_cmd_segm^.sp1p_buf_size,
                      a_cmd_segm^.sp1p_buf_size,
                      old_cmd_segm^.sp1p_buf, sp1r_errorpos,
                      a_cmd_segm^.sp1p_buf,
                      sp1r_errorpos + kw_size + char_size,
                      old_cmd_segm^.sp1p_buf_len - sp1r_errorpos + 1,
                      move_err);
                a_cmd_segm^.sp1p_buf[sp1r_errorpos] := bsp_c1;
                pos := sp1r_errorpos + 1
                END;
            (*ENDIF*) 
            a_scv.sc_missing_kw_pos  := pos;
            a_cmd_segm^.sp1p_buf_len := old_cmd_segm^.sp1p_buf_len *
                  char_size + kw_size + char_size;
            IF  g01unicode
            THEN
                BEGIN
                a_cmd_segm^.sp1p_buf[pos+kw_size-2] := csp_unicode_mark;
                a_cmd_segm^.sp1p_buf[pos+kw_size-1] := bsp_c1;
                END
            ELSE
                a_cmd_segm^.sp1p_buf[pos + kw_size - 1] := bsp_c1;
            (*ENDIF*) 
            wrong_kw_pos    := pos + kw_size;
            wrong_kw_len    := cak_is_undefined;
            a_scv.sc_newpos := wrong_kw_pos;
            a01_next_symbol (acv);
            IF  a_scv.sc_symb = s_identifier
            THEN
                IF  a_scv.sc_sylength <= kw_size
                THEN
                    BEGIN
                    wrong_kw_len := a_scv.sc_sylength;
                    wrong_kw_pos := a_scv.sc_sypos;
                    jx           := wrong_kw_pos;
                    FOR ix := 1 TO wrong_kw_len DO
                        BEGIN
                        wrong_kw [ix] := a_cmd_segm^.sp1p_buf[jx];
                        jx := jx + 1
                        END;
                    (*ENDFOR*) 
                    END;
&               ifdef trace
                (*ENDIF*) 
            (*ENDIF*) 
            t01int4 (ak_sem, 'wrong_kw_pos', wrong_kw_pos);
&           endif
            c              := ':';
            exit_loop      := false;
            kw_cnt         := 0;
            curr_kw        := cak_i_no_keyword;
            REPEAT
                curr_kw := curr_kw + 1;
                IF  curr_kw = cak_maxkeyword
                THEN
                    exit_loop := true
                ELSE
                    BEGIN
                    IF  g01unicode
                    THEN
                        BEGIN
                        jx := kw_size;
                        s80uni_trans (@a01kw[curr_kw], sizeof (a01kw[curr_kw]),
                              csp_ascii, @a_cmd_segm^.sp1p_buf[pos],
                              jx, csp_unicode, [ ], e, err_char_no)
                        END
                    ELSE
                        g10mv7 ('VAK07 ',  16,    
                              sizeof (a01kw[curr_kw]),
                              a_cmd_segm^.sp1p_buf_size,
                              a01kw[curr_kw], 1,
                              a_cmd_segm^.sp1p_buf, pos,
                              sizeof (a01kw[curr_kw]), move_err);
                    (*ENDIF*) 
                    a_ex_kind       := only_syntax;
                    a_init_ex_kind  := only_syntax;
                    sp1r_returncode := 0;
                    sp1r_errorpos   := 0;
                    a35_asql_statement (acv);
&                   ifdef trace
                    t01name (ak_sem, a01kw[curr_kw]);
                    t01int4 (ak_sem, 'sp1r_errorps', sp1r_errorpos);
                    t01int4 (ak_sem, 'pos         ', pos);
                    t01int4 (ak_sem, 'returncode  ',
                          sp1r_returncode);
&                   endif
                    IF  sp1r_returncode = 0
                    THEN
                        sp1r_errorpos := csp_maxint4
                    ELSE
                        BEGIN
                        IF  (sp1r_errorpos > aux_errorpos + 1) AND
                            (sp1r_errorpos <= aux_errorpos +
                            1 + sizeof (a01kw[curr_kw]))
                        THEN
                            sp1r_errorpos :=
                                  aux_errorpos + 1 + sizeof (a01kw[curr_kw]);
                        (*ENDIF*) 
                        IF  (sp1r_errorpos > aux_errorpos + 1) AND
                            (wrong_kw_len  > 0  )
                        THEN
                            BEGIN (* matching keyword *)
                            ix := sp1r_errorpos;
                            sp1r_returncode := 0;
                            sp1r_errorpos   := 0;
                            IF  g01unicode
                            THEN
                                g20unifill (a_cmd_segm^.sp1p_buf_size,
                                      @a_cmd_segm^.sp1p_buf,
                                      wrong_kw_pos,
                                      wrong_kw_len, csp_unicode_blank)
                            ELSE
                                FOR jx := 0 TO wrong_kw_len  - 1 DO
                                    a_cmd_segm^.sp1p_buf[wrong_kw_pos + jx] := bsp_c1;
                                (*ENDFOR*) 
                            (*ENDIF*) 
                            a35_asql_statement (acv);
                            FOR jx := 1 TO wrong_kw_len DO
                                a_cmd_segm^.sp1p_buf[wrong_kw_pos + jx - 1] :=
                                      wrong_kw[jx];
                            (*ENDFOR*) 
                            IF  sp1r_returncode = 0
                            THEN
                                sp1r_errorpos := csp_maxint4
                            ELSE
                                IF  sp1r_errorpos < ix
                                THEN
                                    sp1r_errorpos := ix
                                (*ENDIF*) 
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    IF  sp1r_errorpos > aux_errorpos + 1
                    THEN
                        BEGIN
                        ix    := 1;
                        found := false;
                        WHILE (ix <= kw_cnt) AND NOT found DO
                            IF  keywords[ix].p > sp1r_errorpos
                            THEN
                                ix := ix + 1
                            ELSE
                                found := true;
                            (*ENDIF*) 
                        (*ENDWHILE*) 
                        FOR jx := kw_cnt DOWNTO ix DO
                            keywords[jx + 1] := keywords[jx];
                        (*ENDFOR*) 
                        keywords[ix].kw  := curr_kw;
                        keywords[ix].p   := sp1r_errorpos;
                        IF  kw_cnt < c_max_kw - 1
                        THEN
                            kw_cnt := kw_cnt + 1;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
            UNTIL
                exit_loop;
            (*ENDREPEAT*) 
&           ifdef trace
            FOR ix := 1 TO kw_cnt DO
                BEGIN
                t01name (ak_sem, a01kw[keywords[ix].kw]);
                t01int4 (ak_sem, 'error_pos   ', keywords[ix].p);
                END;
            (*ENDFOR*) 
&           endif
            CASE  a_out_packet^.sp1_header.sp1h_mess_code OF
                csp_unicode:
                    BEGIN
                    char_size   := 2;
                    swap_offset := 0
                    END;
                csp_unicode_swap:
                    BEGIN
                    char_size   := 2;
                    swap_offset := 1
                    END;
                OTHERWISE
                    BEGIN
                    char_size   := 1;
                    swap_offset := 0
                    END
                END;
            (*ENDCASE*) 
            ix    := 1;
            WHILE ix <= kw_cnt DO
                BEGIN
                curr_kw := keywords[ix].kw;
                kw_len  := sizeof (a01kw[curr_kw]);
                WHILE a01kw[curr_kw, kw_len] = bsp_c1 DO
                    kw_len := kw_len - 1;
                (*ENDWHILE*) 
                kw_len := kw_len * char_size;
                IF  msglen + kw_len + char_size > mxak_order_errortext
                THEN (* exit loop *)
                    BEGIN
                    ix := kw_cnt + 1;
                    IF  msglen + 4 * char_size > mxak_order_errortext
                    THEN (* remove last keyword *)
                        msglen := prev_pos;
                    (*ENDIF*) 
                    FOR jx := 1 TO (4 * char_size) DO
                        err_text [msglen + jx] := csp_unicode_mark;
                    (*ENDFOR*) 
                    err_text [msglen + 1 * char_size - swap_offset] := bsp_c1;
                    err_text [msglen + 2 * char_size - swap_offset] := '.';
                    err_text [msglen + 3 * char_size - swap_offset] := '.';
                    err_text [msglen + 4 * char_size - swap_offset] := '.';
                    msglen := msglen + 4 * char_size;
                    END
                ELSE
                    BEGIN
                    IF  msglen + 4*char_size <= mxak_order_errortext
                    THEN (* There is still enough room for ' ...'. *)
                        prev_pos := msglen;
                    (*ENDIF*) 
                    FOR jx := 1 TO (kw_len + char_size) DO
                        err_text [msglen + jx] := csp_unicode_mark;
                    (*ENDFOR*) 
                    err_text[msglen + char_size - swap_offset] := c;
                    msglen := msglen + char_size;
                    c      := ',';
                    FOR jx := 1 TO kw_len DIV char_size DO
                        err_text[msglen + jx*char_size - swap_offset]
                              := a01kw[curr_kw][jx];
                    (*ENDFOR*) 
                    msglen := msglen + kw_len;
                    ix     := ix + 1
                    END;
                (*ENDIF*) 
                END;
            (*ENDWHILE*) 
            END;
        (*ENDIF*) 
        a542pop_packet (acv);
        a_scv.sc_missing_kw_pos  := cak_is_undefined;
        sp1r_returncode          := aux_ret_code;
        sp1r_errorpos            := aux_errorpos;
        sp1r_function_code       := aux_function_code
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07substitute_parameters (
            VAR acv             : tak_all_command_glob;
            char_size           : integer;
            VAR err_text        : tak_order_errortext;
            VAR msglen          : integer);
 
VAR
      placeholder_found : boolean;
      param_found       : boolean;
      delimiter         : char;
      param_char_size   : integer;
      param_char_diff   : integer;
      ix                : integer;
      param_no          : integer;
      diff              : integer;
      pos               : integer;
      param_pos         : integer;
      param_len         : integer;
      inamelen          : integer;
      markoffset        : integer;
      charoffset        : integer;
      move_err          : tgg_basis_error;
      e                 : tsp8_uni_error;
      err_char_no       : tsp_int4;
 
BEGIN
param_char_diff := 1 (* param_char_size = char_size*);
IF  g01unicode
THEN
    BEGIN
    param_char_size := 2;
    IF  acv.a_out_packet^.sp1_header.sp1h_mess_code <
        csp_unicode_swap
    THEN
        param_char_diff := 2
    (*ENDIF*) 
    END
ELSE
    param_char_size := 1;
(*ENDIF*) 
param_found := false;
pos         := 1 - char_size;
move_err    := e_ok;
WHILE (pos <= msglen) AND (move_err = e_ok) DO
    BEGIN
&   ifdef trace
    t01int4 (ak_sem, 'msglen      ', msglen);
&   endif
    placeholder_found := false;
    REPEAT
        pos := pos + char_size;
        IF  pos + 2 * char_size - 1 <= msglen
        THEN
            IF  acv.a_out_packet^.sp1_header.sp1h_mess_code in
                [ csp_unicode, csp_unicode_swap ]
            THEN
                BEGIN
                IF  acv.a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode
                THEN
                    BEGIN
                    markoffset := 0;
                    charoffset := 1;
                    END
                ELSE
                    BEGIN
                    markoffset := 1;
                    charoffset := 0;
                    END;
                (*ENDIF*) 
                IF  (err_text[pos + markoffset] = csp_unicode_mark) AND
                    (err_text[pos + charoffset] = '$'             ) AND
                    (err_text[pos + markoffset + 2] = csp_unicode_mark) AND
                    (err_text[pos + charoffset + 2] in ['1'..'9'])
                THEN
                    BEGIN
                    placeholder_found := true;
                    param_no := ord (err_text[pos + charoffset + 2])
                          - ord ('0');
                    END;
                (*ENDIF*) 
                END
            ELSE
                IF  (err_text[pos] = '$') AND
                    (err_text[pos+1] in ['1'..'9'])
                THEN
                    BEGIN
                    placeholder_found := true;
                    param_no := ord (err_text[pos+1]) - ord ('0');
                    END;
                (*ENDIF*) 
            (*ENDIF*) 
        (*ENDIF*) 
    UNTIL
        placeholder_found OR (pos > sizeof (err_text));
    (*ENDREPEAT*) 
    IF  placeholder_found AND (param_no <= acv.a_err_parm_cnt)
    THEN
        BEGIN
        (* substitute placeholder by parameter *)
&       ifdef trace
        t01int4 (ak_sem, 'param_no    ', param_no);
&       endif
        param_pos := 1;
        WHILE param_no > 1 DO
            BEGIN
            param_no  := param_no - 1;
            param_pos := param_pos +
                  ord (acv.a_error_params[param_pos]) + 1
            END;
        (*ENDWHILE*) 
        inamelen := ord (acv.a_error_params[param_pos]);
        diff     := (inamelen - 2 * param_char_size) DIV param_char_diff;
        IF  msglen + diff > sizeof (err_text)
        THEN
            BEGIN
            diff     := sizeof (err_text) - msglen;
            inamelen := (diff + 2 * param_char_size) * param_char_diff
            END;
        (*ENDIF*) 
        IF  diff > 0
        THEN
            FOR ix := msglen DOWNTO pos + 2 * char_size DO
                err_text[ix + diff] := err_text[ix]
            (*ENDFOR*) 
        ELSE
            IF  diff < 0
            THEN
                FOR ix := pos + 2 * char_size TO msglen DO
                    err_text[ix - 1 * char_size] := err_text[ix];
                (*ENDFOR*) 
&           ifdef trace
            (*ENDIF*) 
        (*ENDIF*) 
        t01int4 (ak_sem, 'param_pos   ', param_pos);
        t01int4 (ak_sem, 'param_len   ', inamelen);
&       endif
        IF  g01unicode AND
            (acv.a_out_packet^.sp1_header.sp1h_mess_code <> csp_unicode)
        THEN
            BEGIN
            s80uni_trans (@acv.a_error_params[ param_pos+1 ], inamelen,
                  csp_unicode, @err_text[pos], inamelen,
                  acv.a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                  e, err_char_no);
            diff := inamelen - 2 * char_size;
            END
        ELSE
            g10mv11 ('VAK07 ',  17,    
                  sizeof (acv.a_error_params), sizeof (err_text),
                  acv.a_error_params, param_pos+1,
                  err_text, pos, inamelen, move_err);
        (*ENDIF*) 
        msglen := msglen + diff;
        pos := pos + inamelen;
        param_found := true;
        END
    ELSE
        pos := sizeof (err_text) + 1 (* exit loop *)
    (*ENDIF*) 
    END;
(*ENDWHILE*) 
IF  NOT param_found AND (msglen + char_size < sizeof (err_text)) AND
    (move_err = e_ok)
THEN
    BEGIN
    (* old parameter behavior *)
    param_no  := 0;
    pos       := 1;
    delimiter := ':';
    REPEAT
        param_no  := param_no + 1;
        param_len := ord (acv.a_error_params[pos]);
        IF  msglen + char_size + (param_len DIV param_char_diff) > sizeof (err_text)
        THEN
            BEGIN
            param_len := (sizeof (err_text) - char_size - msglen) * param_char_diff;
            param_no  := acv.a_err_parm_cnt;
            END;
        (*ENDIF*) 
        IF  param_len > 0
        THEN
            BEGIN
            IF  char_size = 2
            THEN
                IF  acv.a_out_packet^.sp1_header.sp1h_mess_code
                    = csp_unicode_swap
                THEN
                    BEGIN
                    err_text[ msglen + 1 ] := delimiter;
                    err_text[ msglen + 2 ] := csp_unicode_mark
                    END
                ELSE
                    BEGIN
                    err_text[ msglen + 1 ] := csp_unicode_mark;
                    err_text[ msglen + 2 ] := delimiter
                    END
                (*ENDIF*) 
            ELSE
                err_text[ msglen + 1 ] := delimiter;
            (*ENDIF*) 
            IF  g01unicode AND
                (acv.a_out_packet^.sp1_header.sp1h_mess_code <> csp_unicode)
            THEN
                s80uni_trans (@acv.a_error_params[ pos+1 ], param_len,
                      csp_unicode, @err_text[msglen + char_size + 1], param_len,
                      acv.a_out_packet^.sp1_header.sp1h_mess_code, [ ],
                      e, err_char_no)
            ELSE
                g10mv11 ('VAK07 ',  18,    
                      sizeof (acv.a_error_params), sizeof (err_text),
                      acv.a_error_params, pos + 1,
                      err_text, msglen + char_size + 1,
                      param_len, move_err);
            (*ENDIF*) 
            msglen := msglen + char_size + param_len;
            pos    := pos + 1 + ord (acv.a_error_params[pos]);
            ;
            END;
        (*ENDIF*) 
        delimiter := ',';
    UNTIL
        (param_no = acv.a_err_parm_cnt) OR (move_err <> e_ok);
    (*ENDREPEAT*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_kw_put_error (
            VAR acv  : tak_all_command_glob;
            b_err    : tgg_basis_error;
            err_code : tsp_int4;
            kw       : integer);
 
VAR
      kw_id : tak_keyword;
 
BEGIN
WITH acv DO
    IF  a_return_segm^.sp1r_returncode = 0
    THEN
        BEGIN
&       ifdef trace
        t01basis_error (ak_sem, 'throw error ', b_err);
&       endif
        IF  b_err = e_cancelled
        THEN
            a_transinf.tri_trans.trRteCommPtr_gg00^.to_cancel:= false;
        (*ENDIF*) 
        a_return_segm^.sp1r_returncode :=
              a07_return_code ( b_err, a_sqlmode);
        a07put_error_pos (acv, err_code);
        IF  kw <> cak_i_no_keyword
        THEN
            BEGIN
            IF  kw = cak_i_userid
            THEN
                kw_id := 'OWNER             '
            ELSE
                kw_id := a01kw[kw];
            (*ENDIF*) 
            a07const_param (acv, 1, @kw_id, sizeof (kw_id))
            END
        (*ENDIF*) 
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_nb_put_error (
            VAR acv  : tak_all_command_glob;
            b_err    : tgg_basis_error;
            err_code : tsp_int4;
            VAR n    : tsp_knl_identifier);
 
BEGIN
WITH acv DO
    IF  a_return_segm^.sp1r_returncode = 0
    THEN
        BEGIN
&       ifdef trace
        t01basis_error (ak_sem, 'throw error ', b_err);
&       endif
        IF  b_err = e_cancelled
        THEN
            a_transinf.tri_trans.trRteCommPtr_gg00^.to_cancel:= false;
        (*ENDIF*) 
        a_return_segm^.sp1r_returncode :=
              a07_return_code ( b_err, a_sqlmode);
        a07put_error_pos (acv, err_code);
        ak07identifier_param (acv, 1, n)
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_sb_put_error (
            VAR acv  : tak_all_command_glob;
            b_err    : tgg_basis_error;
            err_code : tsp_int4;
            VAR err  : tgg_err);
 
BEGIN
a07_b_put_error (acv, b_err, err_code);
ak07err_col_index_name (acv, err, errtext_stack)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_tb_put_error (
            VAR acv     : tak_all_command_glob;
            b_err       : tgg_basis_error;
            err_code    : tsp_int4;
            VAR tab_id  : tgg_surrogate);
 
VAR
      b_intern_err : tgg_basis_error;
      n            : tsp_knl_identifier;
      buf          : tak_sysbufferaddress;
      sysk         : tgg_sysinfokey;
 
BEGIN
WITH acv DO
    IF  a_return_segm^.sp1r_returncode = 0
    THEN
        BEGIN
        sysk           := a01sysnullkey;
        sysk.stableid  := tab_id;
        n              := a01_il_b_identifier;
        a10get_sysinfo (acv, sysk, d_release, buf,
              b_intern_err);
        IF  b_intern_err = e_ok
        THEN
            n:= buf^.sbase.btablen^;
        (*ENDIF*) 
        a07_nb_put_error (acv, b_err, err_code, n);
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07ak_system_error (
            VAR acv  : tak_all_command_glob;
            modul_no : integer;
            id       : integer);
 
BEGIN
IF  (modul_no > 0) AND (modul_no < 3200) AND (id > 0) AND (id < 10)
THEN
    id := modul_no * 10 + id
ELSE
    id := 0;
(*ENDIF*) 
a07_b_put_error (acv, e_system_error, -id);
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07const_param (
            VAR acv    : tak_all_command_glob;
            param_no   : integer;
            param_addr : tsp_moveobj_ptr;
            param_len  : integer);
 
VAR
      ix    : integer;
      jx    : integer;
      c80   : tsp_c80;
      b_err : tgg_basis_error;
 
BEGIN
WHILE (param_len > 1) AND (param_addr^[param_len] = bsp_c1) DO (* PTS 1119708 *)
    param_len := param_len - 1;
(*ENDWHILE*) 
IF  g01unicode
THEN
    BEGIN
    IF  param_len > sizeof (c80) DIV 2
    THEN
        param_len := sizeof (c80) DIV 2;
    (*ENDIF*) 
    jx := 1;
    FOR ix := 1 TO param_len DO
        BEGIN
        c80[jx]   := csp_unicode_mark;
        c80[jx+1] := param_addr^[ix];
        jx := jx + 2
        END;
    (*ENDFOR*) 
    param_len := param_len*2
    END
ELSE
    BEGIN
    IF  param_len > sizeof (c80)
    THEN
        param_len := sizeof (c80);
    (*ENDIF*) 
    b_err := e_ok;
    g10mv12 ('VAK07 ',  19,    
          param_len, sizeof (c80), param_addr^, 1, c80, 1,
          param_len, b_err)
    END;
(*ENDIF*) 
ak07put_param (acv, param_no, @c80, param_len)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07parm3_put_error (
            VAR acv     : tak_all_command_glob;
            b_err       : tgg_basis_error;
            err_code    : tsp_int4;
            VAR param1  : tsp_knl_identifier;
            VAR param2  : tsp_knl_identifier;
            VAR param3  : tsp_knl_identifier);
 
BEGIN
IF  acv.a_return_segm^.sp1r_returncode = 0
THEN
    BEGIN
&   ifdef trace
    t01basis_error (ak_sem, 'throw error ', b_err);
&   endif
    IF  b_err = e_cancelled
    THEN
        acv.a_transinf.tri_trans.trRteCommPtr_gg00^.to_cancel:= false;
    (*ENDIF*) 
    acv.a_return_segm^.sp1r_returncode :=
          a07_return_code ( b_err, acv.a_sqlmode);
    a07put_error_pos (acv, err_code);
    ak07identifier_param (acv,  1, param1);
    ak07identifier_param (acv, -1, param2);
    ak07identifier_param (acv, -1, param3)
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07identifier_param (
            VAR acv  : tak_all_command_glob;
            param_no : integer;
            VAR id   : tsp_knl_identifier);
 
VAR
      e           : tsp8_uni_error;
      err_char_no : tsp_int4;
      id_len      : integer;
      map_id_len  : tsp_int4;
      map_id      : tsp_knl_identifier;
 
BEGIN
IF  g01unicode
THEN
    BEGIN
    id_len := s30unilnr (@id, csp_unicode_blank, 1, sizeof(id));
    ak07put_param (acv, param_no, @id, id_len);
    END
ELSE
    BEGIN
    id_len := s30lnr (id, bsp_c1, 1, sizeof (id));
    ak07put_param (acv, param_no, @id, id_len)
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak07put_param (
            VAR acv   : tak_all_command_glob;
            param_no  : integer;
            param_ptr : tsp_moveobj_ptr;
            param_len : integer);
 
VAR
      pos   : integer;
      b_err : tgg_basis_error;
&     ifdef trace
      p     : tsp_moveobj_ptr;
&     endif
 
BEGIN
IF  param_no = 1
THEN
    BEGIN
    acv.a_err_parm_cnt := 0;
    pos                := 1
    END
ELSE
    BEGIN
    param_no := acv.a_err_parm_cnt;
    pos      := 1;
    WHILE param_no > 0 DO
        BEGIN
        param_no := param_no - 1;
        pos      := pos + ord (acv.a_error_params[pos]) + 1
        END;
    (*ENDWHILE*) 
    END;
(*ENDIF*) 
IF  pos + param_len + 1 > sizeof (acv.a_error_params)
THEN
    BEGIN
    param_len := sizeof (acv.a_error_params) - pos;
    IF  param_len MOD a01char_size <> 0
    THEN (* Be shure to have room for complete unicode chars. *)
        param_len := param_len - 1
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  param_len > 0
THEN
    BEGIN
    b_err := e_ok;
    acv.a_error_params[pos] := chr(param_len);
    acv.a_err_parm_cnt      := acv.a_err_parm_cnt + 1;
    g10mv12 ('VAK07 ',  20,    
          param_len, sizeof (acv.a_error_params),
          param_ptr^, 1, acv.a_error_params, pos + 1,
          param_len, b_err);
&   ifdef trace
    p := @acv.a_error_params;
    t01moveobj (ak_sem, p^, 1, pos + param_len);
&   endif
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07put_error_pos (
            VAR acv : tak_all_command_glob;
            err_pos : tsp_int4);
 
VAR
      ti        : integer;
      isunipos  : boolean;
      len       : tsp_int4;
      ierr_pos  : tsp_int4;
 
BEGIN
WITH acv DO
    BEGIN
&   ifdef trace
    t01int4 (ak_sem, 'err_pos     ', err_pos);
    IF  a_ap_tree <> NIL
    THEN
        IF  a_ap_tree^[0].n_sa_level > 0
        THEN
            BEGIN
            ti := a_ap_tree^[0].n_sa_level;
            REPEAT
                WITH a_ap_tree^[ti] DO
                    BEGIN
                    ti := n_sa_level;
                    t01int4 (ak_sem, 'pos         ', n_pos);
                    t01int4 (ak_sem, 'len         ',
                          n_subproc * csp_maxint2 + n_length)
                    END;
                (*ENDWITH*) 
            UNTIL
                ti = 0;
            (*ENDREPEAT*) 
            END;
&       endif
        (*ENDIF*) 
    (*ENDIF*) 
    isunipos := g01unicode AND (err_pos > 0);
    ierr_pos := abs (err_pos);
    a_return_segm^.sp1r_errorpos := ierr_pos;
    IF  (ierr_pos > 1) AND (err_pos > 0)
    THEN
        BEGIN
        a_return_segm^.sp1r_errorpos  := a_return_segm^.sp1r_errorpos +
              a_errpos_offset;
        IF  a_ap_tree <> NIL
        THEN
            IF  a_ap_tree^[0].n_sa_level > 0
            THEN
                BEGIN
                ti := a_ap_tree^[0].n_sa_level;
                REPEAT
                    WITH a_ap_tree^[ti] DO
                        BEGIN
                        ti := n_sa_level;
                        IF  n_pos <= ierr_pos
                        THEN
                            BEGIN
                            len := n_subproc * csp_maxint2 + n_length;
                            a_return_segm^.sp1r_errorpos :=
                                  a_return_segm^.sp1r_errorpos + len;
                            END
                        ELSE
                            ti := 0;
                        (*ENDIF*) 
                        END;
                    (*ENDWITH*) 
                UNTIL
                    ti = 0;
                (*ENDREPEAT*) 
                END;
            (*ENDIF*) 
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  isunipos
    THEN
        a_return_segm^.sp1r_errorpos :=
              (a_return_segm^.sp1r_errorpos - 1) DIV 2 + 1;
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_uni_error (
            VAR acv  : tak_all_command_glob;
            uni_err  : tsp8_uni_error;
            err_code : tsp_int4);
 
VAR
      e : tgg_basis_error;
 
BEGIN
&ifdef TRACE
t01int4 (ak_sem, 'uni_err     ', ord(uni_err));
&endif
CASE uni_err OF
    uni_no_such_encoding :
        e := e_unknown_multibyte_set;
    (* PTS 1117236 E.Z. *)
    uni_not_translatable, uni_translate_warning :
        e := e_not_translatable;
    uni_dest_too_short :
        e := e_unitrans_dest_too_short;
    uni_src_too_short :
        e := e_unitrans_src_too_short;
    OTHERWISE
        e := e_invalid_command;
    END;
(*ENDCASE*) 
a07_b_put_error (acv, e, err_code);
END;
 
(*------------------------------*) 
 
PROCEDURE
      a07_hex_uni_error (
            VAR acv     : tak_all_command_glob;
            uni_err     : tsp8_uni_error;
            err_code    : tsp_int4;
            to_unicode  : boolean;
            bytestr     : tsp_moveobj_ptr;
            len         : tsp_int4 );
 
VAR
      e     : tgg_basis_error;
      uerr  : tsp8_uni_error;
      uepos : tsp_int4;
      n     : tsp_knl_identifier;
      nu    : tsp_knl_identifier;
      nl    : integer;
      nul   : integer;
      ix    : integer;
 
BEGIN
&ifdef TRACE
t01int4 (ak_sem, 'uni_err     ', ord(uni_err));
&endif
CASE uni_err OF
    uni_no_such_encoding :
        e := e_unknown_multibyte_set;
    uni_dest_too_short :
        e := e_unitrans_dest_too_short;
    (* PTS 1107986 E.Z. *)
    uni_src_too_short,
    uni_is_incomplete :
        e := e_unitrans_src_too_short;
    uni_not_translatable,
    uni_translate_warning :
        IF  to_unicode
        THEN
            e := e_not_trans_to_uni
        ELSE
            e := e_not_trans_from_uni;
        (*ENDIF*) 
    OTHERWISE
        e := e_invalid_command;
    END;
(*ENDCASE*) 
IF  uni_err in [ uni_not_translatable, uni_translate_warning ]
THEN
    BEGIN
    n          := bsp_knl_identifier;
    nl         := 1;
    IF  len > sizeof (n) - 1
    THEN
        len := sizeof (n) - 1;
    (*ENDIF*) 
    FOR ix := 1 TO len DO
        g17hexto_line (bytestr^[ix], nl, n);
    (*ENDFOR*) 
    IF  g01unicode
    THEN
        BEGIN
        nul        := sizeof (nu);
        s80uni_trans (@n, nl, csp_ascii,
              @nu, nul, csp_unicode,
              [ ], uerr, uepos);
        IF  nul < sizeof (nu)
        THEN
            g20unifill (sizeof (nu), @nu, nul + 1,
                  sizeof (nu) - nul, csp_unicode_blank)
        (*ENDIF*) 
        END
    ELSE
        nu := n;
    (*ENDIF*) 
    a07_nb_put_error (acv, e, err_code, nu)
    END
ELSE
    a07_b_put_error (acv, e, err_code);
(*ENDIF*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
