.ad 8
.bm 8
.fm 4
.bt $Copyright (c) 2000-2004 SAP AG$$Page %$
.tm 12
.hm 6
.hs 3
.TT 1 $SQL$Project Distributed Database System$VAK34$
.tt 2 $$$
.TT 3 $ThomasA$AK_PERSISTENT_OBJECTS$2000-10-31$
***********************************************************
.nf
 
 
    ========== licence begin  GPL
    Copyright (c) 2000-2004 SAP AG
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    ========== licence end
 
.fo
.nf
.sp
MODULE  : Kernel_Sink
=========
.sp
Purpose :
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        PROCEDURE
              a34AbapRead (VAR acv : tak_all_command_glob;
                    VAR handle    : tsp00_MoveObj;
                    VAR row_count : tsp00_Int4;
                    VAR buf_size  : tsp00_Int4;
                    VAR pBuf      : tsp00_MoveObjPtr;
                    VAR e         : tsp00_Int2);
 
        PROCEDURE
              a34AbapWrite (VAR acv : tak_all_command_glob;
                    VAR handle    : tsp00_MoveObj;
                    row_size      : tsp00_Int4;
                    row_count     : tsp00_Int4;
                    VAR buf       : tsp00_MoveObj;
                    VAR e         : tsp00_Int2);
 
        PROCEDURE
              a34AllocPacket (VAR acv : tak_all_command_glob;
                    VAR packet_ptr : tsp1_packet_ptr;
                    VAR size       : tsp00_Int4);
 
        PROCEDURE
              a34BasisError (VAR acv : tak_all_command_glob;
                    e : tgg00_BasisError);
 
        PROCEDURE
              a34ClassMapSyskey(ContainerId : tsp00_Int4;
                    VAR SysKey : tgg00_SysInfoKey);
 
        PROCEDURE
              a34ContainerSyskey (SchemaId : tsp00_Int4;
                    VAR Guid     : tsp00_C16;
                    ContainerNo  : tsp00_Int4;
                    VAR Syskey   : tgg00_SysInfoKey);
 
        PROCEDURE
              a34call_semantic (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a34CreateSchema(VAR acv  : tak_all_command_glob;
                    VAR SchemaNameWyde : tak_WydeArray;
                    VAR SchemaId       : tsp00_Int4;
                    VAR e              : tgg00_BasisError);
 
        PROCEDURE
              a34DropContainer(VAR acv : tak_all_command_glob;
                    SchemaId     : tsp00_Int4;
                    VAR Guid     : tsp00_C16;
                    ContainerNo  : tsp00_Int4;
                    VAR b_err    : tgg00_BasisError);
 
        PROCEDURE
              a34DropSchema (VAR acv : tak_all_command_glob;
                    SchemaId   : tsp00_Int4;
                    VAR e      : tgg00_BasisError);
 
        PROCEDURE (* PTS 1110334 *)
              a34ExistsContainer (VAR acv : tak_all_command_glob;
                    VAR SchemaId     : tsp00_Int4;
                    VAR guid         : tsp00_C16;
                    container_no     : tsp00_Int4;
                    VAR e            : tgg00_BasisError);
 
        PROCEDURE
              a34ExistsSchema(VAR acv  : tak_all_command_glob;
                    VAR SchemaNameWyde : tak_WydeArray;
                    VAR SchemaId       : tsp00_Int4;
                    VAR e              : tgg00_BasisError);
 
        PROCEDURE
              a34GetContainerInfo(VAR acv : tak_all_command_glob;
                    ContainerHandle     : tsp00_Int4;
                    VAR Guid            : tsp00_C16;
                    VAR SchemaId        : tsp00_Int4;
                    VAR ContainerNo     : tsp00_Int4;
                    VAR e               : tgg00_BasisError);
 
        PROCEDURE
              a34InitOms (VAR acv : tak_all_command_glob);
 
        FUNCTION
              a34IsUnicodeLivecacheUser(VAR acv : tak_all_command_glob) : boolean;
 
        PROCEDURE
              a34Lock (VAR acv     : tak_all_command_glob;
                    pKey           : tsp00_MoveObjPtr;
                    KeyLen         : integer;
                    lockExclusive  : boolean;
                    VAR e          : tgg00_BasisError);
 
        PROCEDURE
              a34RegisterClass (VAR acv : tak_all_command_glob;
                    SchemaId        : tsp00_Int4;
                    VAR guid        : tsp00_C16;
                    VAR className   : tsp00_KnlIdentifier;
                    size            : tsp00_Int4;
                    container_no    : tsp00_Int4;
                    VAR coldesc     : tgg00_ObjColDesc;
                    VAR containerId : tgg01_ContainerId;
                    VAR e           : tsp00_Int2);
 
        PROCEDURE
              a34SchemaRefSyskey (VAR SchemaName : tsp00_KnlIdentifier;
                    VAR Syskey : tgg00_SysInfoKey);
 
        PROCEDURE
              a34SchemaSyskey (SchemaId : tsp00_Int4;
                    VAR Syskey : tgg00_SysInfoKey);
 
        PROCEDURE
              a34GetErrormsg (VAR acv : tak_all_command_glob;
                    error           : tsp00_Int2;
                    VAR errtext     : tsp00_MoveObj;
                    VAR errtextlen  : integer);
 
        PROCEDURE
              a34GetSchemaName (VAR acv : tak_all_command_glob;
                    SchemaId           : tsp00_Int4;
                    VAR SchemaNameWyde : tak_WydeArray;
                    VAR e              : tgg00_BasisError);
 
        PROCEDURE
              a34HResultError (VAR acv : tak_all_command_glob;
                    hresult : tsp00_Int4);
 
        PROCEDURE
              a34InquireKey (VAR Trans : tgg00_TransContext;
                    VAR ObjFile : tgg00_FileId;
                    VAR ColDesc : tgg00_ObjColDesc);
 
        PROCEDURE
              a34OpMsg (
                    isError : boolean;
                    VAR Buf : tsp00_MoveObj;
                    BufLen  : tsp00_Int4);
 
        PROCEDURE
              a34Receive (VAR acv : tak_all_command_glob;
                    VAR out_packet_ptr : tsp1_packet_ptr);
 
        PROCEDURE
              a34Request (VAR acv : tak_all_command_glob;
                    sql_packet_ptr : tsp1_packet_ptr);
 
        PROCEDURE
              a34outstanding_packet (VAR acv : tak_all_command_glob;
                    VAR e : tsp00_Int2);
 
        PROCEDURE
              a34Restart (VAR acv : tak_all_command_glob);
 
        FUNCTION
              a34ReturnCode (b_err : tgg00_BasisError) : tsp00_Int2;
 
        PROCEDURE
              a34Rollback (VAR acv : tak_all_command_glob;
                    VAR keeplock : tsp00_MoveObj;
                    keep_len     : tsp00_Int4;
                    VAR e        : tsp00_Int2);
 
        FUNCTION
              a34SchemaIdExists (VAR acv : tak_all_command_glob;
                    SchemaId : tsp00_Int4) : tak_sysbufferaddress;
 
        PROCEDURE
              a34Sequence (VAR acv : tak_all_command_glob;
                    VAR seqname  : tsp00_KnlIdentifier (*ptocSynonym const tsp00_KnlIdentifier VAR_ARRAY_REF *);
                    VAR seqid    : tgg00_Surrogate;
                    VAR seqInfo  : tgg00_SeqInfo;
                    VAR e        : tsp00_Int2);
 
        PROCEDURE
              a34SetError (VAR acv : tak_all_command_glob;
                    error           : tsp00_Int2;
                    VAR errtext     : tsp00_MoveObj;
                    errtextlen      : integer;
                    codetype        : tsp00_CodeType);
 
        PROCEDURE
              a34SubtransCommit (VAR acv : tak_all_command_glob;
                    VAR e    : tsp00_Int2);
 
        PROCEDURE
              a34SubtransRollback (VAR acv : tak_all_command_glob;
                    VAR e    : tsp00_Int2);
 
        PROCEDURE
              a34SubtransStart (VAR acv : tak_all_command_glob;
                    VAR e    : tsp00_Int2);
 
        PROCEDURE
              a34UnLock (VAR acv  : tak_all_command_glob;
                    pKey           : tsp00_MoveObjPtr;
                    KeyLen         : integer;
                    lockExclusive  : boolean;
                    VAR e          : tgg00_BasisError);
 
        PROCEDURE
              a34VTrace (VAR acv  : tak_all_command_glob;
                    VAR trace_obj : tsp00_MoveObj;
                    trace_len     : tsp00_Int4);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              Scanner : VAK01;
 
        VAR
              a01defaultkey        : tgg00_SysInfoKey;
              a01char_size         : integer;
              a01_il_b_identifier  : tsp00_KnlIdentifier;
              a01_i_oms_container  : tsp00_KnlIdentifier;
              a01_i_oms_schema     : tsp00_KnlIdentifier;
              a01_i_sapr3          : tsp00_KnlIdentifier;
 
        FUNCTION
              a01aligned_cmd_len (len : tsp00_Int4) : tsp00_Int4;
 
        PROCEDURE
              a01setl_identifier (
                    VAR id         : tsp00_KnlIdentifier;
                    set_identifier : tsp00_KnlIdentifier);
 
      ------------------------------ 
 
        FROM
              AK_semantic_scanner_tools : VAK05;
 
        PROCEDURE
              a05_nextval_get (VAR acv : tak_all_command_glob;
                    m2_type      : tgg00_MessType2;
                    VAR seq_id   : tgg00_Surrogate;
                    VAR seq_info : tgg00_SeqInfo;
                    VAR dest     : tsp00_C20;
                    destpos      : integer;
                    VAR actlen   : integer);
 
        PROCEDURE
              a05surrogate_get (VAR acv : tak_all_command_glob;
                    VAR surrogate  : tgg00_Surrogate);
 
        PROCEDURE
              a05_unsigned_int2_get (
                    VAR acv  : tak_all_command_glob;
                    pos      : integer;
                    l        : tsp00_Int2;
                    err_code : tsp00_Int4;
                    VAR int  : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_universal_semantic_tools : VAK06;
 
        PROCEDURE
              a06init_curr_retpart (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a06finish_curr_retpart (VAR acv : tak_all_command_glob;
                    part_kind : tsp1_part_kind;
                    arg_count : tsp00_Int2);
 
        PROCEDURE
              a06reset_retpart (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a06retpart_move (VAR acv : tak_all_command_glob;
                    moveobj_ptr : tsp00_MoveObjPtr;
                    move_len    : tsp00_Int4);
 
        PROCEDURE
              a06lsend_mess_buf (VAR acv : tak_all_command_glob;
                    VAR mblock      : tgg00_MessBlock;
                    call_from_rsend : boolean;
                    VAR b_err       : tgg00_BasisError);
 
      ------------------------------ 
 
        FROM
              AK_error_handling : VAK07;
 
        PROCEDURE
              a07_b_put_error (VAR acv : tak_all_command_glob;
                    b_err    : tgg00_BasisError;
                    err_code : tsp00_Int4);
 
        PROCEDURE
              a07_const_b_put_error (VAR acv : tak_all_command_glob;
                    b_err      : tgg00_BasisError;
                    err_code   : tsp00_Int4;
                    param_addr : tsp00_MoveObjPtr;
                    const_len  : integer);
 
        PROCEDURE
              a07msg_kernelsink_get (
                    VAR acv        : tak_all_command_glob;
                    msgno          : tsp00_Int2;
                    VAR err_text   : tsp00_MoveObj;
                    VAR msglen     : integer);
 
      ------------------------------ 
 
        FROM
              AK_error_handling : VAK071;
 
        FUNCTION
              a07_return_code (
                    b_err   : tgg00_BasisError;
                    sqlmode : tsp00_SqlMode) : tsp00_Int2;
 
      ------------------------------ 
 
        FROM
              Systeminfo_cache :  VAK10;
 
        PROCEDURE
              a10del_sysinfo (VAR acv : tak_all_command_glob;
                    VAR syskey  : tgg00_SysInfoKey;
                    VAR b_err   : tgg00_BasisError);
 
        PROCEDURE
              a10add_sysinfo (VAR acv : tak_all_command_glob;
                    VAR syspoint : tak_sysbufferaddress;
                    VAR b_err    : tgg00_BasisError);
 
        PROCEDURE
              a10get_sysinfo (VAR acv : tak_all_command_glob;
                    VAR syskey   : tgg00_SysInfoKey;
                    dstate       : tak_directory_state;
                    VAR syspoint : tak_sysbufferaddress;
                    VAR b_err    : tgg00_BasisError);
 
        PROCEDURE
              a10_key_del  (VAR acv : tak_all_command_glob;
                    VAR syskey : tgg00_SysInfoKey);
 
        PROCEDURE
              a10key_del  (VAR acv : tak_all_command_glob;
                    VAR  syspointer : tak_sysbufferaddress);
 
        PROCEDURE
              a10next_sysinfo (VAR acv : tak_all_command_glob;
                    VAR syskey   : tgg00_SysInfoKey;
                    stop_prefix  : integer;
                    dstate       : tak_directory_state;
                    rec_kind     : tsp00_C2;
                    VAR syspoint : tak_sysbufferaddress;
                    VAR b_err    : tgg00_BasisError);
 
        PROCEDURE
              a10_nil_get_sysinfo (VAR acv : tak_all_command_glob;
                    VAR syskey   : tgg00_SysInfoKey;
                    dstate       : tak_directory_state;
                    syslen       : tsp00_Int2;
                    VAR syspoint : tak_sysbufferaddress;
                    VAR b_err    : tgg00_BasisError);
 
      ------------------------------ 
 
        FROM
              AK_Table : VAK11;
 
        PROCEDURE
              a11put_date_time (VAR date : tsp00_Int4;
                    VAR time : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              AK_Synonym : VAK23;
 
        PROCEDURE
              a23AttachPublicSequence (VAR acv : tak_all_command_glob;
                    VAR sequenceName : tsp00_KnlIdentifier;
                    VAR sequenceId   : tgg00_Surrogate;
                    VAR seqInfo      : tgg00_SeqInfo);
 
        PROCEDURE
              a23create_sequence (VAR acv : tak_all_command_glob;
                    VAR sequence_id   : tgg00_Surrogate;
                    VAR sequence_name : tsp00_KnlIdentifier;
                    VAR colinfo       : tak00_columninfo;
                    is_serial         : boolean;
                    is_temp_table     : boolean;
                    tree_index        : integer);
 
      ------------------------------ 
 
        FROM
              AK_Index : VAK24;
 
        PROCEDURE
              a24ObjectIndex (VAR acv  : tak_all_command_glob;
                    VAR ClassSurrogate : tgg00_Surrogate;
                    VAR ColDesc        : tgg00_ObjColDesc;
                    VAR e              : tgg00_BasisError); (* PTS 1106736 *)
 
      ------------------------------ 
 
        FROM
              AK_dialog_tools : VAK260;
 
        PROCEDURE
              a260hresult_error (hresult : tsp00_Int4;
                    VAR dbproc_name : tsp00_KnlIdentifier;
                    VAR errtext     : tsp00_C64;
                    VAR e           : tgg00_BasisError);
 
      ------------------------------ 
 
        FROM
              Kernel_Sink_1 : VAK341;
 
        PROCEDURE
              ak341CreateObjFile (VAR Trans  : tgg00_TransContext;
                    VAR ObjFile    : tgg00_FileId;
                    ObjLen         : tsp00_Int4;
                    KeyLen         : tsp00_Int4;
                    partitionedKey : boolean); (* PTS 1109486 *)
 
        PROCEDURE
              ak341DropContainer (VAR acv : tak_all_command_glob;
                    VAR ObjFile : tgg00_FileId;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              ak341LoadLibOms(VAR acv : tak_all_command_glob);
 
        PROCEDURE
              ak341NilConsistentTrans (VAR Trans : tgg00_TransContext);
              
        PROCEDURE
              ak341VarObjGuid (VAR guid : tsp00_C16);
 
      ------------------------------ 
 
        FROM
              AK_Connect : VAK51;
 
        PROCEDURE
              a51_internal_trans (VAR acv : tak_all_command_glob;
                    VAR old_trans : tgg00_UnivTrans);
 
        PROCEDURE
              a51close_internal_trans (VAR acv : tak_all_command_glob;
                    VAR old_trans : tgg00_UnivTrans;
                    m_type        : tgg00_MessType);
 
      ------------------------------ 
 
        FROM
              AK_Lock_Commit_Rollback : VAK52;
 
        PROCEDURE
              a52_ex_commit_rollback (VAR acv : tak_all_command_glob;
                    m_type         : tgg00_MessType;
                    n_rel          : boolean;
                    normal_release : boolean);
 
        PROCEDURE
              a52new_subtrans (VAR acv : tak_all_command_glob;
                    VAR subtrans_name : tsp00_KnlIdentifier);
 
        PROCEDURE
              a52end_rollback_subtrans (VAR acv : tak_all_command_glob;
                    VAR subtrans_name : tsp00_KnlIdentifier;
                    m_type : tgg00_MessType);
 
      ------------------------------ 
 
        FROM
              DBS_Commands : VAK93;
 
        PROCEDURE
              a93request (acv_addr  : tak_acv_address;
                    in_packet_ptr   : tsp1_packet_ptr);
 
        PROCEDURE
              a93packet_vtrace (VAR t : tgg00_TransContext;
                    trace_object      : tgg00_VtraceType;
                    packet_ptr        : tsp1_packet_ptr);
 
        PROCEDURE
              a93swap_to_application (VAR packet : tsp1_packet_ptr;
                    a_mess_code      : tsp00_CodeType;
                    a_mess_swap      : tsp00_SwapKind;
                    a_parameter_spec : tak_param_list);
 
        PROCEDURE
              a93swap_from_application (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              KB_transaction : VKB53;
 
        PROCEDURE
              k53key_unlock (VAR t : tgg00_TransContext;
                    UnlockMode     : tgg00_LockReqMode;
                    TabId          : tgg00_Surrogate;
                    VAR k          : tgg00_SysInfoKey);
 
        PROCEDURE
              k53lock (VAR t        : tgg00_TransContext;
                    VAR LockTabId   : tgg00_Surrogate;
                    VAR k           : tgg00_Lkey;
                    WantedMode      : tgg00_LockReqMode;
                    WantedState     : tgg00_LockReqState;
                    Nowait          : boolean;
                    CollisionTest   : boolean;
                    VAR GrantedMode : tgg00_LockReqMode);
 
        PROCEDURE
              k53wait (VAR t  : tgg00_TransContext;
                    MessType  : tgg00_MessType;
                    MessType2 : tgg00_MessType2);
 
      ------------------------------ 
 
        FROM
              KB_get : VKB71;
 
        PROCEDURE
              k71num_err_to_b_err (num_err : tsp00_NumError;
                    VAR e : tgg00_BasisError);
 
      ------------------------------ 
 
        FROM
              filesysteminterface_1 : VBD01;
 
        VAR
              b01niltree_id : tgg00_FileId;
 
        PROCEDURE
              b01vstate_fileversion (VAR t : tgg00_TransContext;
                    VAR file_id : tgg00_FileId);
 
      ------------------------------ 
 
        FROM
              filesysteminterface_2 : VBD02;
 
        PROCEDURE
              b02get_record (VAR t : tgg00_TransContext;
                    VAR file_id : tgg00_FileId;
                    VAR rk      : tgg00_Lkey;
                    VAR b       : tgg00_Rec);
 
      ------------------------------ 
 
        FROM
              Trace : VBD120;
 
        PROCEDURE
              b120InsertTrace (
                    VAR Trans  : tgg00_TransContext;
                    TraceLayer : tgg00_Debug;
                    TraceType  : tgg00_VtraceType;
                    BodyLen    : tsp00_Int2;
                    pEntry     : tsp00_Addr);
 
        PROCEDURE
              b120MoveObjectTrace (
                    VAR Trans  : tgg00_TransContext;
                    TraceLayer : tgg00_Debug;
                    TraceType  : tgg00_VtraceType;
                    Length     : tsp00_Int4;
                    pEntry     : tsp00_BytePtr);
 
      ------------------------------ 
 
        FROM
              Configuration_Parameter : VGG01;
 
        VAR
              g01code          : tgg04_CodeGlobals;
              g01tabid         : tgg04_TabIdGlobals;
              g01unicode       : boolean;
              g01vtrace        : tgg00_VtraceState;
 
        PROCEDURE
              g01mblock_init (VAR source_trans : tgg00_TransContext;
                    mess_type  : tgg00_MessType;
                    mess2_type : tgg00_MessType2;
                    VAR mblock : tgg00_MessBlock);
 
        PROCEDURE
              g01datapart_init (VAR mblock : tgg00_MessBlock;
                    datapart_ptr  : tgg00_DataPartPtr;
                    datapart_size : tsp00_Int4);
 
        FUNCTION
              g01oms_stream_timeout : tsp00_Int4; (* PTS 1115635 *)
 
        PROCEDURE
              g01optextmsg (msg_prio : tsp3_priority;
                    msg_type  : tsp3_msg_type;
                    msg_no    : tsp00_Int4;
                    msg_label : tsp00_C8;
                    msg_text  : tsp00_C40);
 
        PROCEDURE
              g01qual_init (VAR mblock : tgg00_MessBlock;
                    qual_ptr   : tgg00_QualBufPtr;
                    qual_size  : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              GG_cpp_auxiliary_functions : VGG06;
 
        PROCEDURE
              gg06SetNilRef (VAR PageRef : tgg91_PageRef);
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG101;
 
        PROCEDURE
              SAPDB_PascalFill (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    obj_upb     : tsp00_Int4;
                    obj         : tsp00_MoveObjPtr;
                    obj_pos     : tsp00_Int4;
                    length      : tsp00_Int4;
                    fillchar    : char;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              SAPDB_PascalUnicodeFill (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    obj_upb     : tsp00_Int4;
                    obj         : tsp00_MoveObjPtr;
                    obj_pos     : tsp00_Int4;
                    length      : tsp00_Int4;
                    fillchar    : tsp00_C2;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              SAPDB_PascalForcedUnicodeFill (
                    obj_upb     : tsp00_Int4;
                    obj         : tsp00_MoveObjPtr;
                    obj_pos     : tsp00_Int4;
                    length      : tsp00_Int4;
                    fillchar    : tsp00_C2 );
 
        PROCEDURE
              SAPDB_PascalMove (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    source_upb  : tsp00_Int4;
                    dest_upb    : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    src_pos     : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    dest_pos    : tsp00_Int4;
                    length      : tsp00_Int4;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              SAPDB_PascalOverlappingMove (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    source_upb  : tsp00_Int4;
                    dest_upb    : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    src_pos     : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    dest_pos    : tsp00_Int4;
                    length      : tsp00_Int4;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              SAPDB_PascalForcedFill (
                    size        : tsp00_Int4;
                    m           : tsp00_MoveObjPtr;
                    pos         : tsp00_Int4;
                    len         : tsp00_Int4;
                    fillchar    : char);
 
        PROCEDURE
              SAPDB_PascalForcedMove (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
        PROCEDURE
              SAPDB_PascalForcedOverlappingMove (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
        PROCEDURE
              g10mv (
                    mod_id      : tsp00_C6;            
                    mod_num     : tsp00_Int4;
                    source_upb  : tsp00_Int4;          
                    dest_upb    : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;       
                    src_pos     : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;       
                    dest_pos    : tsp00_Int4;
                    length      : tsp00_Int4;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              s10mv (
                    source_upb  : tsp00_Int4;       
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;    
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;    
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              GG_edit_routines : VGG17;
 
        PROCEDURE
              g17int4to_line (
                    intval    : tsp00_Int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp00_C50 (*ptocSynonym char**));
 
      ------------------------------ 
 
        FROM
              Unicode-Utilities : VGG20;
 
        PROCEDURE
              g20unifill (size : tsp00_Int4;
                    m         : tsp00_MoveObjPtr;
                    pos       : tsp00_Int4;
                    len       : tsp00_Int4;
                    filluchar : tsp00_C2);
 
      ------------------------------ 
 
        FROM
              Packet_handling: VSP26;
 
        PROCEDURE
              s26find_part (VAR segm : tsp1_segment;
                    part_kind        : tsp1_part_kind;
                    VAR part_ptr     : tsp1_part_ptr);
 
        PROCEDURE
              s26first_segment_init (packet_ptr : tsp1_packet_ptr;
                    segm_kind                 : tsp1_segment_kind;
                    VAR new_segm_ptr          : tsp1_segment_ptr);
 
        FUNCTION
              s26packet_len (packet_ptr : tsp1_packet_ptr) : tsp00_Int4;
 
      ------------------------------ 
 
        FROM
              GET-Conversions : VSP40;
 
        PROCEDURE
              s40glint (
                    VAR buf  : tsp00_C20;
                    pos      : tsp00_Int4;
                    len      : integer;
                    VAR dest : tsp00_Int4;
                    VAR res  : tsp00_NumError);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-80 : VSP80;
 
        PROCEDURE
              s80uni_trans
                    (src_ptr        : tsp00_MoveObjPtr;
                    src_len         : tsp00_Int4;
                    src_codeset     : tsp00_Int2;
                    dest_ptr        : tsp00_MoveObjPtr;
                    VAR dest_len    : tsp00_Int4;
                    dest_codeset    : tsp00_Int2;
                    trans_options   : tsp8_uni_opt_set;
                    VAR rc          : tsp8_uni_error;
                    VAR err_char_no : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              RTE_kernel : VEN101;
 
        PROCEDURE
              vmalloc (length : tsp00_Int4;
                    VAR p     : tsp1_packet_ptr;
                    VAR ok    : boolean);
 
        PROCEDURE
              vreceive (pid              : tsp00_TaskId;
                    timeout              : tsp00_Int4;
                    VAR rcv_packet_ptr   : tsp1_packet_ptr;
                    VAR rcv_packet_len   : tsp00_Int4;
                    VAR reply_packet_ptr : tsp1_packet_ptr;
                    VAR reply_packet_len : tsp00_Int4;
                    VAR returncode       : tsp1_comm_error);
 
        PROCEDURE
              vreply (pid            : tsp00_TaskId;
                    reply_packet_ptr : tsp1_packet_ptr;
                    reply_packet_len : tsp00_Int4;
                    VAR returncode   : tsp1_comm_error);
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              g17int4to_line;
 
              tsp00_Line tsp00_C50
 
        PROCEDURE
              b120InsertTrace;
 
              tgg11_VtraceBodyPtr tsp00_Addr
 
        PROCEDURE
              a07msg_kernelsink_get;
 
              tak_order_errortext tsp00_MoveObj
 
        PROCEDURE
              a05_nextval_get;
 
              tsp00_MoveObj tsp00_C20
 
        PROCEDURE
              vmalloc;
 
              tsp00_ObjAddr tsp1_packet_ptr
 
        PROCEDURE
              s40glint;
 
              tsp00_MoveObj tsp00_C20
 
        PROCEDURE
              k53key_unlock;
 
              tgg00_Lkey tgg00_SysInfoKey
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : ThomasA
.sp
.cp 3
Created : 1985-03-14
.sp
.cp 3
.sp
.cp 3
Release :      Date : 2000-10-31
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
 
.sp 2
.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
 
.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
CONST
      c_release          = true;
      c_is_error         = true;
      NoWait_c           = true;
      CollisionTest_c    = true;
 
TYPE
 
      tak34RecBuf = RECORD
            CASE boolean OF
                true :
                    (reckeyoffset : ARRAY[1..cgg_rec_key_offset] OF char;
                    oid           : tgg00_OidSpace;
                    isDeleted     : boolean);
                false :
                    (rec          : tgg00_Rec);
                END;
            (*ENDCASE*) 
 
 
VAR
      ak34OmsSchemaSeqId    : tgg00_Surrogate;
      ak34OmsContainerSeqId : tgg00_Surrogate;
      ak34VarObjGuid        : tsp00_C16;   (* PTS 1102769 T.A. 1999-06-15 *)
 
 
(*------------------------------*) 
 
PROCEDURE
      a34AbapRead (VAR acv : tak_all_command_glob;
            VAR handle    : tsp00_MoveObj;
            VAR row_count : tsp00_Int4;
            VAR buf_size  : tsp00_Int4;
            VAR pBuf      : tsp00_MoveObjPtr;
            VAR e         : tsp00_Int2);
 
VAR
      retcode           : tsp1_comm_error;
      reply_length      : tsp00_Int4;
      rcv_packet_len    : tsp00_Int4;
      reply_packet_size : tsp00_Int4;
      pMsg              : tsp00_MoveObjPtr;
      data_part_ptr     : tsp1_part_ptr;
      msg               : tsp00_C40;
 
BEGIN
e := e_ok;
a34outstanding_packet (acv, e);
IF  e = e_ok
THEN
    BEGIN
    a06reset_retpart       (acv);
    a06init_curr_retpart   (acv);
    a06retpart_move        (acv, @handle, sizeof(tsp00_Addr));
    a06finish_curr_retpart (acv, sp1pk_abap_istream, MAX_INT2_SP00);
    row_count    := 0;
    reply_length := s26packet_len (acv.a_out_packet);
    acv.a_out_packet^.sp1_header.sp1h_varpart_len := reply_length
          - sizeof (acv.a_out_packet^.sp1_header);
    IF  g01vtrace.vtrAny_gg00
    THEN
        a93packet_vtrace (acv.a_transinf.tri_trans,
              ak_send, acv.a_out_packet);
    (*ENDIF*) 
    WITH acv DO
        BEGIN
        (* Change request 1001193, T.A. 23.10.1998 *)
        (* PTS 1102369 E.Z. *)
        (* PTS 1102365 E.Z. *)
        a93swap_to_application (a_out_packet, a_mess_code,
              a_out_packet^.sp1_header.sp1h_mess_swap,
              a_parameter_spec);
        END;
    (*ENDWITH*) 
    vreply (acv.a_transinf.tri_trans.trTaskId_gg00,
          acv.a_out_packet, reply_length, retcode);
    IF  retcode = sp1ce_ok
    THEN
        vreceive (acv.a_transinf.tri_trans.trTaskId_gg00, g01oms_stream_timeout,
              acv.a_in_packet, rcv_packet_len,
              acv.a_out_packet, reply_packet_size, retcode);
    (*ENDIF*) 
    IF  retcode = sp1ce_ok
    THEN
        BEGIN
        IF  acv.a_cmd_packet_header.sp1h_mess_swap <> g01code.kernel_swap
        THEN (* Change request 1001193, T.A. 23.10.1998 *)
            a93swap_from_application (acv);
        (*ENDIF*) 
        IF  g01vtrace.vtrAny_gg00
        THEN
            a93packet_vtrace (acv.a_transinf.tri_trans,
                  ak_receive, acv.a_in_packet);
        (*ENDIF*) 
        s26find_part (acv.a_in_packet^.sp1_segm, sp1pk_data, data_part_ptr);
        IF  data_part_ptr <> NIL
        THEN
            BEGIN
            IF  sp1pa_last_packet in data_part_ptr^.sp1p_attributes
            THEN
                e := e_no_next_record;
            (*ENDIF*) 
            row_count := data_part_ptr^.sp1p_arg_count;
            pBuf      := @data_part_ptr^.sp1p_buf;
            buf_size  := data_part_ptr^.sp1p_buf_size;
            END
        ELSE
            BEGIN
            e := e_oms_istream_error;
            ak34store_msgtext (acv, e);
            s26find_part (acv.a_in_packet^.sp1_segm, sp1pk_errortext, data_part_ptr);
            IF  data_part_ptr = NIL
            THEN
                BEGIN
                msg  := 'istream : no data and no error found    ';
                pMsg := @msg;
                a34OpMsg (c_is_error, pMsg^, sizeof(msg));
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        WITH acv.a_out_packet^ DO
            BEGIN
            sp1_header := acv.a_cmd_packet_header;
            sp1_header.sp1h_varpart_size := reply_packet_size -
                  sizeof (sp1_header);
            sp1_header.sp1h_varpart_size := (sp1_header.sp1h_varpart_size DIV
                  csp1_part_align_length) * csp1_part_align_length;
            END;
        (*ENDWITH*) 
        s26first_segment_init (acv.a_out_packet,
              sp1sk_return, acv.a_return_segm);
        acv.a_curr_retpart := NIL;
        END
    ELSE
        ak34vreceive_error (acv, retcode, e);
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34AbapWrite (VAR acv : tak_all_command_glob;
            VAR handle    : tsp00_MoveObj;
            row_size      : tsp00_Int4;
            row_count     : tsp00_Int4;
            VAR buf       : tsp00_MoveObj;
            VAR e         : tsp00_Int2);
 
VAR
      retcode           : tsp1_comm_error;
      buf_pos           : tsp00_Int4;
      length            : tsp00_Int4;
      move_len          : tsp00_Int4;
      reply_length      : tsp00_Int4;
 
BEGIN
e := e_ok;
IF  row_count = 0
THEN
    a34outstanding_packet (acv, e)
ELSE
    BEGIN
    length  := row_count * row_size;
    buf_pos := 1;
    WHILE (length > 0) AND (e = e_ok) DO
        BEGIN
        a34outstanding_packet (acv, e);
        IF  e = e_ok
        THEN
            BEGIN
            a06reset_retpart       (acv);
            a06init_curr_retpart   (acv);
            a06retpart_move        (acv, @handle, sizeof(tsp00_Addr));
            a06finish_curr_retpart (acv, sp1pk_abap_ostream, 1);
            a06init_curr_retpart   (acv);
            IF  length > acv.a_curr_retpart^.sp1p_buf_size
            THEN
                move_len := (acv.a_curr_retpart^.sp1p_buf_size DIV row_size) * row_size
            ELSE
                move_len := length;
            (*ENDIF*) 
            a06retpart_move        (acv, @buf[buf_pos], move_len);
            a06finish_curr_retpart (acv, sp1pk_data, move_len DIV row_size);
            buf_pos      := buf_pos + move_len;
            length       := length - move_len;
            reply_length := s26packet_len (acv.a_out_packet);
            IF  g01vtrace.vtrAny_gg00
            THEN
                a93packet_vtrace (acv.a_transinf.tri_trans,
                      ak_send, acv.a_out_packet);
            (*ENDIF*) 
            WITH acv DO
                BEGIN
                (* Change request 1001193, T.A. 23.10.1998 *)
                (* PTS 1102369 E.Z. *)
                (* PTS 1102365 E.Z. *)
                a93swap_to_application (a_out_packet, a_mess_code,
                      a_out_packet^.sp1_header.sp1h_mess_swap,
                      a_parameter_spec);
                END;
            (*ENDWITH*) 
            vreply (acv.a_transinf.tri_trans.trTaskId_gg00,
                  acv.a_out_packet, reply_length, retcode);
            IF  retcode = sp1ce_ok
            THEN
                acv.a_outstanding_packet := true
            ELSE
                ak34vreceive_error (acv, retcode, e);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDWHILE*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34vreceive_error (VAR acv : tak_all_command_glob;
            retcode : tsp1_comm_error;
            VAR e   : tsp00_Int2);
 
BEGIN
(* acv.a_in_packet and acv.a_out_packet are nil now, assign *)
(* new memory to them                                       *)
(* session will be terminated, so a_ap_tree can be used     *)
acv.a_in_packet := @acv.a_ap_tree^;
WITH acv.a_cmd_packet_header DO
    BEGIN
    sp1h_varpart_size :=
          (cak_init_node DIV 2 * sizeof (acv.a_ap_tree^[1])) -
          sizeof (acv.a_cmd_packet_header);
    sp1h_varpart_len  := 0;
    sp1h_no_of_segm   := 0;
    END;
(*ENDWITH*) 
acv.a_out_packet := @acv.a_ap_tree^[cak_init_node DIV 2 + 1];
WITH acv.a_out_packet^ DO
    BEGIN
    sp1_header := acv.a_cmd_packet_header;
    sp1_header.sp1h_varpart_size :=
          (cak_init_node DIV 2 * sizeof (acv.a_ap_tree^[1])) -
          sizeof (sp1_header);
    sp1_header.sp1h_varpart_size := (sp1_header.sp1h_varpart_size DIV
          csp1_part_align_length) * csp1_part_align_length;
    END;
(*ENDWITH*) 
s26first_segment_init (acv.a_out_packet,
      sp1sk_return, acv.a_return_segm);
acv.a_curr_retpart := NIL;
IF  retcode = sp1ce_timeout
THEN
    e := e_response_timeout
ELSE
    e := e_net_line_down; (* PTS 1108516 *)
(*ENDIF*) 
(* PTS 1107485 E.Z. *)
acv.a_abap_tab_comm_ok := false;
(* PTS 1107551 E.Z. *)
acv.a_cmd_part  := NIL;
acv.a_abap_part := NIL;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34AllocPacket (VAR acv : tak_all_command_glob;
            VAR packet_ptr : tsp1_packet_ptr;
            VAR size       : tsp00_Int4);
 
CONST
      c_packet_size = 2;
 
VAR
      ok : boolean;
 
BEGIN
size := c_packet_size * sizeof (tsp00_Buf);
IF  acv.a_dbp_packet_ptr = NIL
THEN
    BEGIN
    vmalloc (size, acv.a_dbp_packet_ptr, ok);
    IF  NOT ok
    THEN
        size := 0
    (*ENDIF*) 
    END;
(*ENDIF*) 
packet_ptr := acv.a_dbp_packet_ptr
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34BasisError (VAR acv : tak_all_command_glob;
            e : tgg00_BasisError);
 
BEGIN
a07_b_put_error (acv, e, 1)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34SchemaRefSyskey (VAR SchemaName : tsp00_KnlIdentifier;
            VAR Syskey : tgg00_SysInfoKey);
 
BEGIN
Syskey.sauthid     := cgg_zero_id;
Syskey.sentrytyp   := cak_eschemaref;
Syskey.slinkage    := cak_init_linkage;
Syskey.sidentifier := SchemaName;
Syskey.skeylen   := sizeof(Syskey.sauthid) + sizeof(Syskey.sentrytyp) +
      sizeof (Syskey.slinkage) + sizeof(Syskey.sidentifier)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34SchemaSyskey (SchemaId : tsp00_Int4;
            VAR Syskey : tgg00_SysInfoKey);
 
VAR
      ix : integer;
 
BEGIN
Syskey.sschema_id := cgg_zero_id;
FOR ix := 1 TO 4 DO
    BEGIN
    Syskey.sschema_id[5 - ix] := chr(SchemaId MOD 256);
    SchemaId := SchemaId DIV 256
    END;
(*ENDFOR*) 
Syskey.sentrytyp   := cak_eschema;
Syskey.slinkage    := cak_init_linkage;
Syskey.skeylen   := sizeof(Syskey.sschema_id) + sizeof(Syskey.sentrytyp) +
      sizeof (Syskey.slinkage)
END;
 
(*------------------------------*) 
 
PROCEDURE (* PTS 1110334 *)
      a34ExistsContainer (VAR acv : tak_all_command_glob;
            VAR SchemaId     : tsp00_Int4;
            VAR guid         : tsp00_C16;
            container_no     : tsp00_Int4;
            VAR e            : tgg00_BasisError);
 
VAR
      p          : tak_sysbufferaddress;
      GuidSyskey : tgg00_SysInfoKey;
 
BEGIN
a34ContainerSyskey (SchemaId, guid, container_no, GuidSyskey);
a10_key_del    (acv, GuidSyskey);
a10get_sysinfo (acv, GuidSyskey, d_release, p, e);
END;
 
(*------------------------------*) 
 
FUNCTION
      ak34ExistsSchema (VAR acv : tak_all_command_glob;
            VAR SchemaName : tsp00_KnlIdentifier;
            VAR   e        : tgg00_BasisError) : tak_sysbufferaddress;
 
VAR
      p      : tak_sysbufferaddress;
      Syskey : tgg00_SysInfoKey;
 
BEGIN
a34SchemaRefSyskey (SchemaName, Syskey);
a10_key_del (acv, Syskey);
a10get_sysinfo (acv, Syskey, d_release, p, e);
IF  e = e_ok
THEN
    ak34ExistsSchema := p
ELSE
    BEGIN
    IF  e = e_sysinfo_not_found
    THEN
        e := e_ok;
    (*ENDIF*) 
    ak34ExistsSchema := NIL;
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34GetSchemaName (VAR acv : tak_all_command_glob;
            SchemaId           : tsp00_Int4;
            VAR SchemaNameWyde : tak_WydeArray;
            VAR e              : tgg00_BasisError);
 
VAR
      aux     : char;
      ix      : integer;
      pos     : integer;
      i2c2    : tsp_int_map_c2;
      pSchema : tak_sysbufferaddress;
 
BEGIN
acv.a_returncode := 0;
pSchema := ak34SchemaIdExists (acv, SchemaId, e);
IF  e = e_ok
THEN
    IF  pSchema <> NIL
    THEN
        BEGIN
        e  := e_ok;
        ix := 0;
        IF  g01unicode
        THEN
            BEGIN
            pos := 0;
            REPEAT
                pos := pos + 1;
                i2c2.map_c2[1] := pSchema^.sschema.sch_name[pos];
                pos := pos + 1;
                i2c2.map_c2[2] := pSchema^.sschema.sch_name[pos];
                IF  g01code.kernel_swap <> sw_normal
                THEN
                    BEGIN
                    aux            := i2c2.map_c2[1];
                    i2c2.map_c2[1] := i2c2.map_c2[2];
                    i2c2.map_c2[2] := aux;
                    END;
                (*ENDIF*) 
                ix := ix + 1;
                SchemaNameWyde[ix] := i2c2.map_int;
            UNTIL
                (SchemaNameWyde[ix] = 0) OR (pos >= sizeof(pSchema^.sschema.sch_name));
            (*ENDREPEAT*) 
            END
        ELSE
            BEGIN
            ix := 0;
            REPEAT
                ix := ix + 1;
                SchemaNameWyde[ix] := ord(pSchema^.sschema.sch_name[ix]);
            UNTIL
                (SchemaNameWyde[ix] = 0) OR (ix = sizeof(pSchema^.sschema.sch_name));
            (*ENDREPEAT*) 
            END;
        (*ENDIF*) 
        END
    ELSE
        e := e_unknown_name;
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      a34SchemaIdExists (VAR acv : tak_all_command_glob;
            SchemaId : tsp00_Int4) : tak_sysbufferaddress;
 
VAR
      e          : tgg00_BasisError;
 
BEGIN
a34SchemaIdExists := ak34SchemaIdExists (acv, SchemaId, e);
IF  (e <> e_ok) AND (e <> e_sysinfo_not_found)
THEN
    a07_b_put_error (acv, e, 1);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      ak34SchemaIdExists (VAR acv : tak_all_command_glob;
            SchemaId : tsp00_Int4;
            VAR e    : tgg00_BasisError) : tak_sysbufferaddress;
 
CONST
      c_lock_exclusive = true;
 
VAR
      pSchema    : tak_sysbufferaddress;
      Syskey     : tgg00_SysInfoKey;
 
BEGIN
e := e_ok;
a34SchemaSyskey (SchemaId, Syskey);
IF  acv.a_command_kind <> show_command (* PTS 1106235 *)
THEN
    BEGIN
    a34Lock (acv, @Syskey.all, Syskey.skeylen, NOT c_lock_exclusive, e);
    IF  e = e_ok
    THEN
        a10_key_del    (acv, Syskey);
    (*ENDIF*) 
    END
ELSE
    e := e_ok;
(*ENDIF*) 
IF  e = e_ok
THEN
    a10get_sysinfo (acv, Syskey, d_release, pSchema, e);
(*ENDIF*) 
IF  e = e_ok
THEN
    ak34SchemaIdExists := pSchema
ELSE
    BEGIN
    IF  e = e_sysinfo_not_found
    THEN
        e := e_ok;
    (*ENDIF*) 
    ak34SchemaIdExists := NIL;
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34BuildId(VAR acv : tak_all_command_glob;
            VAR SequenceId : tgg00_Surrogate;
            VAR SchemaId   : tsp00_Int4);
 
VAR
      num_err    : tsp00_NumError;
      b_err      : tgg00_BasisError;
      seq_buf    : tak_sysbufferaddress;
      number     : tsp00_C20;
      number_len : integer;
      sysk       : tgg00_SysInfoKey;
 
BEGIN
sysk           := a01defaultkey;
sysk.stableid  := SequenceId;
sysk.sentrytyp := cak_esequence;
a10get_sysinfo (acv, sysk, d_release, seq_buf, b_err);
IF  b_err = e_ok
THEN
    BEGIN
    a05_nextval_get (acv,
          mm_nil, SequenceId, seq_buf^.ssequence.seq_info, number, 1, number_len);
    IF  acv.a_returncode = 0
    THEN
        BEGIN
        s40glint (number, 2, (number_len - 2) * 2, SchemaId, num_err);
        IF  num_err <> num_ok
        THEN
            BEGIN
            k71num_err_to_b_err (num_err, b_err);
            a07_b_put_error (acv, b_err, 1)
            END;
        (*ENDIF*) 
        END
    (*ENDIF*) 
    END
ELSE
    a07_b_put_error (acv, b_err, 1);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34CreateSchema(VAR acv  : tak_all_command_glob;
            VAR SchemaNameWyde : tak_WydeArray;
            VAR SchemaId       : tsp00_Int4;
            VAR e              : tgg00_BasisError);
 
VAR
      SchemaName : tsp00_KnlIdentifier;
 
BEGIN
ak34MakeSchemaIdentifier (SchemaNameWyde, SchemaName, e);
IF  e = e_ok
THEN
    ak34CreateSchema (acv, SchemaName, SchemaId, e);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34MakeSchemaIdentifier(
            VAR SchemaNameWyde   : tak_WydeArray;
            VAR SchemaIdentifier : tsp00_KnlIdentifier;
            VAR e                : tgg00_BasisError
            );
 
VAR
      i2c2       : tsp_int_map_c2;
      ix         : integer;
      pos        : integer;
 
BEGIN
e := e_ok;
FOR ix := 1 TO sizeof(a01_il_b_identifier) DO
    SchemaIdentifier[ix] := chr(0);
(*ENDFOR*) 
ix               := 1;
pos              := 1;
WHILE ix < sizeof(SchemaIdentifier) DIV 2 DO
    BEGIN
    IF  g01unicode
    THEN
        BEGIN
        i2c2.map_int := SchemaNameWyde[ix];
        IF  g01code.kernel_swap = sw_normal
        THEN
            BEGIN
            SchemaIdentifier[pos  ] := i2c2.map_c2[1];
            SchemaIdentifier[pos+1] := i2c2.map_c2[2];
            END
        ELSE
            BEGIN
            SchemaIdentifier[pos  ] := i2c2.map_c2[2];
            SchemaIdentifier[pos+1] := i2c2.map_c2[1];
            END;
        (*ENDIF*) 
        pos := pos + 2
        END
    ELSE
        BEGIN
        IF  SchemaNameWyde[ix] > 255
        THEN
            BEGIN
            e  := e_not_translatable;
            ix := sizeof(SchemaIdentifier);
            END;
        (*ENDIF*) 
        SchemaIdentifier[pos] := chr(SchemaNameWyde[ix]);
        pos                   := pos + 1;
        END;
    (*ENDIF*) 
    IF  SchemaNameWyde[ix] = 0
    THEN (* exit loop *)
        ix := sizeof(SchemaIdentifier)
    ELSE
        ix := ix + 1;
    (*ENDIF*) 
    END;
(*ENDWHILE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34CreateSchema(VAR acv : tak_all_command_glob;
            VAR SchemaName     : tsp00_KnlIdentifier;
            VAR SchemaId       : tsp00_Int4;
            VAR e              : tgg00_BasisError);
 
CONST
      c_exclusive = true;
 
VAR
      m_type          : tgg00_MessType;
      pSchemaRef      : tak_sysbufferaddress;
      pSchema         : tak_sysbufferaddress;
      SchemaRefSyskey : tgg00_SysInfoKey;
      SchemaSyskey    : tgg00_SysInfoKey;
      oldContext      : tgg00_UnivTrans;
 
BEGIN
acv.a_returncode := 0;
a34SchemaRefSyskey (SchemaName, SchemaRefSyskey);
e := e_ok;
a34UnLock (acv, @SchemaRefSyskey.all, SchemaRefSyskey.skeylen, NOT c_exclusive, e);
a51_internal_trans (acv, oldContext);
e :=  acv.a_transinf.tri_trans.trError_gg00;
IF  e = e_ok
THEN
    BEGIN
    IF  ak34ExistsSchema(acv, SchemaName, e) <> NIL
    THEN
        e := e_duplicate_schema
    ELSE
        IF  e = e_ok
        THEN
            BEGIN
            a10_nil_get_sysinfo (acv, SchemaRefSyskey, d_release,
                  sizeof (tak_schema_ref_record), pSchemaRef, e);
            IF  e = e_ok
            THEN
                BEGIN
                ak34BuildId (acv, ak34OmsSchemaSeqId, SchemaId);
                pSchemaRef^.sschemaref.schr_segmentid := cak00_local_segment_id;
                pSchemaRef^.sschemaref.schr_filler    := 0;
                pSchemaRef^.sschemaref.schr_schema_id := SchemaId;
                a10add_sysinfo (acv, pSchemaRef, e)
                END;
            (*ENDIF*) 
            IF  e = e_ok
            THEN
                BEGIN
                a34SchemaSyskey    (SchemaId, SchemaSyskey);
                a10_nil_get_sysinfo (acv, SchemaSyskey, d_release,
                      sizeof (tak_schema_record), pSchema, e);
                IF  e = e_ok
                THEN
                    BEGIN
                    pSchema^.sschema.sch_segmentid := cak00_local_segment_id;
                    pSchema^.sschema.sch_filler    := cgg_zero_c2;
                    a11put_date_time (pSchema^.sschema.sch_date, pSchema^.sschema.sch_time);
                    pSchema^.sschema.sch_name := SchemaName;
                    a10add_sysinfo (acv, pSchema, e)
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
    (*ENDIF*) 
    IF  e = e_ok
    THEN
        m_type := m_commit
    ELSE
        m_type := m_rollback;
    (*ENDIF*) 
    acv.a_transinf.tri_trans.trError_gg00 := e;
    a51close_internal_trans (acv, oldContext, m_type);
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34DropSchema (VAR acv : tak_all_command_glob;
            SchemaId   : tsp00_Int4;
            VAR e      : tgg00_BasisError);
 
CONST
      c_exclusive = true;
 
VAR
      closeTrans_e    : tgg00_BasisError;
      m_type          : tgg00_MessType;
      pSchema         : tak_sysbufferaddress;
      SchemaRefSyskey : tgg00_SysInfoKey;
      SchemaSyskey    : tgg00_SysInfoKey;
      oldContext      : tgg00_UnivTrans;
      rteCommRec      : tsp00_RteCommRec;
      rteCommRecAddr  : tsp00_RteCommAddr;
 
BEGIN
acv.a_returncode := 0;
pSchema := a34SchemaIdExists (acv, SchemaId);
IF  pSchema = NIL
THEN
    e := e_unknown_schema
ELSE
    IF  pSchema^.sschema.sch_name = a01_i_oms_schema
    THEN
        e := e_missing_privilege
    ELSE
        BEGIN
        a34SchemaSyskey    (SchemaId, SchemaSyskey);
        a34SchemaRefSyskey (pSchema^.sschema.sch_name, SchemaRefSyskey);
        (* prevent from cancelling *)
        rteCommRec           := acv.a_transinf.tri_trans.trRteCommPtr_gg00^;
        rteCommRec.to_cancel := false;
        rteCommRecAddr       := acv.a_transinf.tri_trans.trRteCommPtr_gg00;
        acv.a_transinf.tri_trans.trRteCommPtr_gg00 := @rteCommRec;
        e := e_ok;
        ak34drop_all_containers (acv, SchemaId, e);
        IF  e = e_ok
        THEN
            BEGIN
            (* release the locks, otherwise internal trans will collide with them *)
            a34UnLock (acv, @SchemaSyskey.all, SchemaSyskey.skeylen, NOT c_exclusive, e);
            a34UnLock (acv, @SchemaRefSyskey.all, SchemaRefSyskey.skeylen, NOT c_exclusive, e);
            END;
        (*ENDIF*) 
        IF  e = e_ok
        THEN
            BEGIN
            a51_internal_trans (acv, oldContext);
            e := acv.a_transinf.tri_trans.trError_gg00;
            END;
        (*ENDIF*) 
        IF  e = e_ok
        THEN
            BEGIN
            a10del_sysinfo (acv, SchemaRefSyskey, e);
            IF  e = e_ok
            THEN
                a10del_sysinfo (acv, SchemaSyskey, e);
            (*ENDIF*) 
            IF  e = e_ok
            THEN
                m_type := m_commit
            ELSE
                m_type := m_rollback;
            (*ENDIF*) 
            acv.a_transinf.tri_trans.trError_gg00 := e;
            a51close_internal_trans (acv, oldContext, m_type);
            END;
        (*ENDIF*) 
        acv.a_transinf.tri_trans.trRteCommPtr_gg00 := rteCommRecAddr;
        END;
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34ExistsSchema(VAR acv  : tak_all_command_glob;
            VAR SchemaNameWyde : tak_WydeArray;
            VAR SchemaId       : tsp00_Int4;
            VAR e              : tgg00_BasisError);
 
VAR
      pSchemaRef : tak_sysbufferaddress;
      SchemaName : tsp00_KnlIdentifier;
 
BEGIN
e                                  := e_ok;
acv.a_returncode := 0;
ak34MakeSchemaIdentifier (SchemaNameWyde, SchemaName, e);
IF  e = e_ok
THEN
    BEGIN
    pSchemaRef := ak34ExistsSchema(acv, SchemaName, e);
    IF   pSchemaRef <> NIL
    THEN
        SchemaId := pSchemaRef^.sschemaref.schr_schema_id
    ELSE
        IF  e = e_ok
        THEN
            e := e_unknown_name;
        (*ENDIF*) 
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34GetErrormsg (VAR acv : tak_all_command_glob;
            error              : tsp00_Int2;
            VAR errtext        : tsp00_MoveObj;
            VAR errtextlen     : integer);
 
BEGIN
a07msg_kernelsink_get (acv, error, errtext, errtextlen)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34HResultError (VAR acv : tak_all_command_glob;
            hresult : tsp00_Int4);
 
VAR
      e       : tgg00_BasisError;
      errtext : tsp00_C64;
      dbproc_name : tsp00_KnlIdentifier;
 
BEGIN
errtext := bsp_c64;
dbproc_name := bsp_knl_identifier;
a260hresult_error (hresult, dbproc_name, errtext, e);
a07_const_b_put_error (acv, e, 1, @errtext, sizeof (errtext))
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34GetContainerInfo(VAR acv : tak_all_command_glob;
            ContainerHandle     : tsp00_Int4;
            VAR Guid            : tsp00_C16;
            VAR SchemaId        : tsp00_Int4;
            VAR ContainerNo     : tsp00_Int4;
            VAR e               : tgg00_BasisError);
 
VAR
      buf    : tak_sysbufferaddress;
      Syskey : tgg00_SysInfoKey;
 
BEGIN
a34ClassMapSyskey (ContainerHandle, Syskey);
a10get_sysinfo (acv, Syskey, d_release, buf, e);
IF  e = e_ok
THEN
    BEGIN
    Guid        := buf^.sclassmap.cmr_guid;
    SchemaId    := buf^.sclassmap.cmr_schema;
    ContainerNo := buf^.sclassmap.cmr_container_no;
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34InitOms (VAR acv : tak_all_command_glob);
 
VAR
      ix            : integer;
      b_err         : tgg00_BasisError;
      DummySchemaId : tsp00_Int4;
      DummyColInfo  : tak00_columninfo;
 
BEGIN
ak34BuildSequenceIds;
ix := sizeof(a01_i_oms_schema);
WHILE a01_i_oms_schema[ix] = bsp_c1 DO
    BEGIN
    a01_i_oms_schema[ix] := chr(0);
    ix := ix - a01char_size
    END;
(*ENDWHILE*) 
a23create_sequence (acv, ak34OmsSchemaSeqId, a01_i_oms_schema, DummyColInfo, false, false, 0);
IF  acv.a_returncode = 0
THEN
    BEGIN
    ak34CreateSchema (acv, a01_i_oms_schema, DummySchemaId, b_err);
    IF  b_err <> e_ok
    THEN
        a07_b_put_error (acv, b_err, 1);
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  acv.a_returncode = 0
THEN
    a23create_sequence (acv, ak34OmsContainerSeqId, a01_i_oms_container, DummyColInfo, false, false, 0);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34InquireKey (VAR Trans : tgg00_TransContext;
            VAR ObjFile : tgg00_FileId;
            VAR ColDesc : tgg00_ObjColDesc);
 
VAR
      ix   : integer;
 
      Key  : RECORD
            CASE boolean OF
                true  :
                    (LKey   : tgg00_Lkey);
                false :
                    (Syskey : tgg00_SysInfoKey);
                END;
            (*ENDCASE*) 
 
 
      Res : RECORD
            CASE boolean OF
                true  :
                    (Rec    : tgg00_Rec);
                false :
                    (InvRec : tak_mindexrecord);
                END;
            (*ENDCASE*) 
 
 
BEGIN
Trans.trError_gg00 := e_ok;
a34ClassMapSyskey(ObjFile.fileObjFileNo_gg00, Key.Syskey);
Key.Syskey.sentrytyp := cak_emindex;
b02get_record      (Trans, g01tabid.sys2_cat, Key.LKey, Res.Rec);
IF  Trans.trError_gg00 = e_ok
THEN
    BEGIN
    IF  (ColDesc.colHashList_gg00 = NIL) OR
        (ColDesc.colHashCount_gg00 < Res.InvRec.indexdef[1].icount)
    THEN
        Trans.trError_gg00 := e_invalid
    ELSE
        BEGIN
        ColDesc.colHashCount_gg00 := Res.InvRec.indexdef[1].icount;
        FOR ix := 1 TO Res.InvRec.indexdef[1].icount DO
            ColDesc.colHashList_gg00^[ix] := Res.InvRec.indexdef[1].icolstack[ix];
        (*ENDFOR*) 
        END
    (*ENDIF*) 
    END
ELSE
    ColDesc.colHashCount_gg00 := 0;
(*ENDIF*) 
IF  Trans.trError_gg00 = e_key_not_found
THEN
    Trans.trError_gg00 := e_ok
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      a34IsUnicodeLivecacheUser(VAR acv : tak_all_command_glob) : boolean;
 
BEGIN
a34IsUnicodeLivecacheUser := acv.a_defaultcode = csp_unicode;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34call_semantic (VAR acv : tak_all_command_glob);
 
VAR
      dummy_e    : tgg00_BasisError;
      start_node : integer;
 
BEGIN
start_node := acv.a_ap_tree^[0].n_lo_level;
CASE acv.a_ap_tree^[start_node].n_subproc OF
    cak_i_all :
        ak34drop_all_containers (acv, cak_is_undefined, dummy_e);
    cak_i_drop :
        ak34drop_container (acv, start_node);
    OTHERWISE
        a07_b_put_error (acv, e_not_implemented, 1);
    END;
(*ENDCASE*) 
IF  acv.a_returncode <> 0
THEN
    acv.a_part_rollback := true
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34RegisterClass (VAR acv : tak_all_command_glob;
            SchemaId        : tsp00_Int4;
            VAR guid        : tsp00_C16;
            VAR className   : tsp00_KnlIdentifier;
            size            : tsp00_Int4;
            container_no    : tsp00_Int4;
            VAR coldesc     : tgg00_ObjColDesc;
            VAR containerId : tgg01_ContainerId;
            VAR e           : tsp00_Int2);
 
BEGIN
acv.a_returncode := 0; (* PTS 1123843 *)
ak34guid_to_treeid (acv, SchemaId, guid, className,
      containerId, size, container_no, coldesc, e);
IF  e <> e_ok
THEN
    e := a34ReturnCode(e)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34commit_rollback (VAR acv : tak_all_command_glob;
            m_type       : tgg00_MessType;
            VAR keeplock : tsp00_MoveObj;
            keep_len     : tsp00_Int4;
            VAR e        : tsp00_Int2);
 
VAR
      b_err   : tgg00_BasisError;
      oidcnt  : tsp00_Int4;
      lx      : tsp00_Int4;
      keypos  : tsp00_Int4;
      mblock  : tgg00_MessBlock;
      qual    : tgg00_QualBuf;
      data    : tgg00_Rec;
 
BEGIN
IF  keep_len = 0
THEN
    BEGIN
    a52_ex_commit_rollback (acv, m_type, NOT c_release, NOT c_release);
    e := acv.a_returncode
    END
ELSE
    BEGIN
    oidcnt := keep_len DIV sizeof (tgg00_OidSpace);
    keypos := 1;
    b_err  := e_ok;
    g01mblock_init   (acv.a_transinf.tri_trans,
          m_type, mm_keep_lock, mblock);
    g01qual_init     (mblock, @qual, sizeof (qual));
    g01datapart_init (mblock, @data, sizeof (data));
    mblock.mb_data_len := cgg_rec_key_offset;
    mblock.mb_qual_len := MB_PART1_LOCKHEAD_MXGG04;
    mblock.mb_struct   := mbs_lock;
    IF  oidcnt > MAX_QUALBUF_LOCKS_GG00
    THEN
        e :=  e_too_many_mb_data
    ELSE
        BEGIN
        mblock.mb_qual^.mlock_cnt := oidcnt;
        FOR lx := 1 TO oidcnt DO
            BEGIN
            WITH mblock.mb_qual^.mlock[lx] DO
                BEGIN
                lockTabId_gg00      := g01tabid.sys2_cat.fileTabId_gg00;
                lockKeyLen_gg00     := sizeof (tgg00_OidSpace);
                lockMode_gg00       := lckRowExcl_egg00;
                lockState_gg00      := [  ];
                lockKeyPos_gg00     := keypos;
                keypos              := keypos + lockKeyLen_gg00;
                mblock.mb_qual_len  := mblock.mb_qual_len + LOCK_MXGG04;
                mblock.mb_data_len  := mblock.mb_data_len + lockKeyLen_gg00
                END;
            (*ENDWITH*) 
            END;
        (*ENDFOR*) 
        g10mv ('VAK34 ',   1,    
              keep_len, sizeof (data), @keeplock, 1,
              @mblock.mb_data^.mbp_buf, cgg_rec_key_offset + 1, keep_len, b_err);
        END;
    (*ENDIF*) 
    IF  b_err = e_ok
    THEN
        a06lsend_mess_buf (acv, mblock, false, b_err);
    (*ENDIF*) 
    e :=  b_err
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34ContainerSyskey (SchemaId : tsp00_Int4;
            VAR Guid     : tsp00_C16;
            ContainerNo  : tsp00_Int4;
            VAR Syskey   : tgg00_SysInfoKey);
 
VAR
      ix : integer;
 
BEGIN
Syskey.sschema_id := cgg_zero_id;
FOR ix := 1 TO 4 DO
    BEGIN
    Syskey.sschema_id[5 - ix] := chr(SchemaId MOD 256);
    SchemaId := SchemaId DIV 256
    END;
(*ENDFOR*) 
FOR ix := 1 TO 4 DO
    BEGIN
    Syskey.sschema_id[9 - ix] := chr(ContainerNo MOD 256);
    ContainerNo := ContainerNo DIV 256
    END;
(*ENDFOR*) 
Syskey.sentrytyp     := cak_econtainer;
Syskey.slinkage      := cak_init_linkage;
Syskey.sguid         := Guid;
Syskey.skeylen       := sizeof (Syskey.sschema_id) + sizeof (Syskey.sentrytyp) +
      sizeof (Syskey.slinkage) + sizeof (Syskey.sguid)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34ClassMapSyskey(ContainerId : tsp00_Int4;
            VAR SysKey :  tgg00_SysInfoKey);
 
VAR
      ix : integer;
 
BEGIN
SysKey := a01defaultkey;
IF  ContainerId = -1
THEN
    BEGIN
    ContainerId    := 0;
    SysKey.skeylen := sizeof (SysKey.sclassflag)
    END;
(*ENDIF*) 
SysKey.sclassflag  := cak_class_site;
FOR ix := 1 TO 4 DO
    BEGIN
    SysKey.sclassid[5 - ix] := chr(ContainerId MOD 256);
    ContainerId := ContainerId DIV 256
    END;
(*ENDFOR*) 
SysKey.sentrytyp := cak_eclassmap;
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34guid_to_treeid (VAR acv : tak_all_command_glob;
            VAR SchemaId     : tsp00_Int4;
            VAR guid         : tsp00_C16;
            VAR className    : tsp00_KnlIdentifier;
            VAR containerId  : tgg01_ContainerId;
            VAR size         : tsp00_Int4;
            container_no     : tsp00_Int4;
            VAR coldesc      : tgg00_ObjColDesc;
            VAR e            : tgg00_BasisError);
 
CONST
      c_is_error  = true;
      c_with_zero = true;
 
VAR
      nilGetErr          : tgg00_BasisError;
      m_type             : tgg00_MessType;
      ContainerSurrogate : tsp00_Int4;
      buf                : tak_sysbufferaddress;
      buf1               : tak_sysbufferaddress;
      sysk               : tgg00_SysInfoKey;
      GuidSyskey         : tgg00_SysInfoKey;
      oldContext         : tgg00_UnivTrans;
      errMsg             : tsp00_C50;
      pMoveObj           : tsp00_MoveObjPtr;
 
BEGIN
(* ADIS 1001167 T.A. 10.07.1998 *)
e := e_ok;
acv.a_transinf.tri_trans.trError_gg00 := e;
a51_internal_trans (acv, oldContext);
IF  e = e_ok
THEN
    BEGIN
    IF  a34SchemaIdExists(acv, SchemaId) = NIL
    THEN
        e := e_unknown_schema
    ELSE
        BEGIN
        acv.a_is_ddl := no_ddl;
        IF  guid = ak34VarObjGuid (* PTS 1102769 T.A. 1999-06-15 *)
        THEN
            size := 126; (* yields good page usage *)
        (*ENDIF*) 
        a34ContainerSyskey (SchemaId, guid, container_no, GuidSyskey);
        a10_key_del    (acv, GuidSyskey);
        a10get_sysinfo (acv, GuidSyskey, d_release, buf, e);
        IF  e = e_sysinfo_not_found
        THEN
            BEGIN
            a10_nil_get_sysinfo (acv, GuidSyskey, d_fix,
                  sizeof (tak_class_record), buf, nilGetErr);
            IF  nilGetErr <> e_ok
            THEN
                e := nilGetErr
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        CASE  e OF
            e_ok :
                BEGIN (* container for guid already exists *)
                IF  size <> buf^.sclass.fsize
                THEN
                    BEGIN (* PTS 1122329 *)
                    pMoveObj := @errMsg;
                    errMsg   := 'wrong container size for class                    ';
                    a34OpMsg (c_is_error, pMoveObj^, sizeof(errMsg));
                    pMoveObj := @className;
                    a34OpMsg (c_is_error, pMoveObj^, sizeof(className));
                    errMsg   := 'old size is        new size is                    ';
                    g17int4to_line (buf^.sclass.fsize, NOT c_with_zero, 6, 13, errMsg);
                    g17int4to_line (size, NOT c_with_zero, 10, 31, errMsg);
                    pMoveObj := @errMsg;
                    a34OpMsg (c_is_error, pMoveObj^, sizeof(errMsg));
                    e := e_invalid_blocksize;
                    END
                ELSE
                    BEGIN
                    containerId := buf^.sclass.ftree;
                    b01vstate_fileversion (acv.a_transinf.tri_trans, containerId);
                    a34InquireKey (acv.a_transinf.tri_trans, containerId, coldesc)
                    END;
                (*ENDIF*) 
                END;
            e_sysinfo_not_found :
                BEGIN (* create a container for class identified by guid *)
                e := e_ok;
                ak34BuildId (acv, ak34OmsContainerSeqId, ContainerSurrogate);
                a34ClassMapSyskey (ContainerSurrogate, sysk);
                a10_nil_get_sysinfo (acv, sysk, d_release,
                      sizeof (tak_class_map_guid_record), buf1, e);
                IF  e = e_ok
                THEN
                    WITH buf1^.sclassmap DO
                        BEGIN
                        cmr_segmentid    := cak00_local_segment_id;
                        cmr_container_no := container_no;
                        cmr_schema       := SchemaId;
                        cmr_guid         := guid;
                        a10add_sysinfo (acv, buf1, e)
                        END;
                    (*ENDWITH*) 
                (*ENDIF*) 
                IF  e = e_ok
                THEN
                    BEGIN
                    containerId := b01niltree_id;
                    IF  guid = ak34VarObjGuid
                    THEN
                        containerId.fileObjFileType_gg00 := oftVarLenObjFile_egg00
                    ELSE
                        containerId.fileObjFileType_gg00 := oftFixLenObjFile_egg00;
                    (*ENDIF*) 
                    containerId.fileObjFileNo_gg00  := ContainerSurrogate;
                    containerId.fileType_gg00       := [ftsPerm_egg00, ftsConcurrent_egg00];
                    gg06SetNilRef (containerId.fileUserRef_gg00);
                    containerId.fileVersion_gg00.ci2_gg00 := cgg_dummy_file_version;
                    containerId.fileTfn_gg00              := tfnObj_egg00;
                    IF  (coldesc.colHashList_gg00 = NIL) OR
                        (coldesc.colHashCount_gg00 < 1)
                    THEN
                        (* KeyLen = 0 *)
                        ak341CreateObjFile (acv.a_transinf.tri_trans, containerId, size, 0, false)
                    ELSE
                        ak341CreateObjFile (acv.a_transinf.tri_trans, containerId, size,
                              coldesc.colHashList_gg00^[1].elen_var,
                              coldesc.colInvCount_gg00 <> 0 (* PTS 1109717 *));
                    (*ENDIF*) 
                    e := acv.a_transinf.tri_trans.trError_gg00;
                    IF  (e = e_ok) AND (coldesc.colHashCount_gg00 > 0)
                    THEN
                        a24ObjectIndex (acv, sysk.stableid, coldesc, e); (* PTS 1106736 *)
                    (*ENDIF*) 
                    IF  e = e_ok
                    THEN
                        BEGIN
                        containerId.fileRootCheck_gg00 := ROOT_CHECK_GG00;
                        buf^.sclass.fsegmentid  := cak00_local_segment_id;
                        buf^.sclass.ftree       := containerId;
                        buf^.sclass.findexexist := coldesc.colHashCount_gg00 > 0;
                        buf^.sclass.ffiller     := false;
                        buf^.sclass.ftree.fileRoot_gg00 := NIL_PAGE_NO_GG00;
                        buf^.sclass.fsize       := size;
                        a01setl_identifier (buf^.sclass.fclassname, className);
                        a10add_sysinfo (acv, buf, e);
                        a10key_del     (acv, buf)
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            OTHERWISE ;
            END;
        (*ENDCASE*) 
        acv.a_is_ddl := no_ddl
        END;
    (*ENDIF*) 
    IF  e = e_ok
    THEN
        m_type := m_commit
    ELSE
        m_type := m_rollback;
    (*ENDIF*) 
    acv.a_transinf.tri_trans.trError_gg00 := e;
    a51close_internal_trans (acv, oldContext, m_type);
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34OpMsg (
            isError    : boolean;
            VAR Buf    : tsp00_MoveObj;
            BufLen     : tsp00_Int4);
 
VAR
      ln_len      : integer;
      msg_type    : tsp3_msg_type;
      ix          : tsp00_Int4;
      jx          : tsp00_Int4;
      pc40        : ^tsp00_C40;
      c40         : tsp00_C40;
 
BEGIN
ix := 1;
WHILE BufLen > 0 DO
    BEGIN
    pc40  := @Buf[ix];
    IF  BufLen > sizeof (tsp00_C40)
    THEN
        ln_len := sizeof(tsp00_C40)
    ELSE
        BEGIN
        ln_len := BufLen;
        FOR jx := 1 TO ln_len DO
            c40[jx] := pc40^[jx];
        (*ENDFOR*) 
        FOR jx := ln_len + 1 TO sizeof(c40) DO
            c40[jx] := ' ';
        (*ENDFOR*) 
        pc40 := @c40;
        END;
    (*ENDIF*) 
    IF  isError
    THEN
        msg_type := sp3m_error
    ELSE
        msg_type := sp3m_info;
    (*ENDIF*) 
    g01optextmsg (sp3p_console, msg_type,  csp3_ak_msg, csp3_n_obj, pc40^);
    BufLen := BufLen - ln_len;
    ix     := ix     + ln_len;
    END;
(*ENDWHILE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Receive (VAR acv : tak_all_command_glob;
            VAR out_packet_ptr : tsp1_packet_ptr);
 
BEGIN
out_packet_ptr := NIL;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Request (VAR acv : tak_all_command_glob;
            sql_packet_ptr : tsp1_packet_ptr);
 
BEGIN
ak341NilConsistentTrans(acv.a_transinf.tri_trans);   (* PTS 1126193 *)
a93request (@acv, sql_packet_ptr);
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Restart (VAR acv : tak_all_command_glob);
 
BEGIN
ak341VarObjGuid (ak34VarObjGuid); (* PTS 1102769 T.A. 1999-06-15 *)
ak34BuildSequenceIds;
ak341LoadLibOms(acv);
END;
 
(*------------------------------*) 
 
FUNCTION
      a34ReturnCode (b_err : tgg00_BasisError) : tsp00_Int2;
 
BEGIN
a34ReturnCode := a07_return_code (b_err, sqlm_internal)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Rollback (VAR acv : tak_all_command_glob;
            VAR keeplock : tsp00_MoveObj;
            keep_len     : tsp00_Int4;
            VAR e        : tsp00_Int2);
 
VAR
      no_of_com_objects : tsp00_Int4;
 
BEGIN
no_of_com_objects       := acv.a_no_of_com_objects;
acv.a_no_of_com_objects := 0; (* no callback to com object *)
ak34commit_rollback (acv, m_rollback, keeplock, keep_len, e);
acv.a_no_of_com_objects := no_of_com_objects
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Sequence (VAR acv : tak_all_command_glob;
            VAR seqname  : tsp00_KnlIdentifier;
            VAR seqid    : tgg00_Surrogate;
            VAR seqInfo  : tgg00_SeqInfo;
            VAR e        : tsp00_Int2);
 
VAR
      ix           : integer;
      jx           : integer;
      m_type       : tgg00_MessType;
      oldContext   : tgg00_UnivTrans;
 
BEGIN
acv.a_returncode    := 0;
acv.a_transinf.tri_trans.trError_gg00 := e_ok;
a51_internal_trans (acv, oldContext);
IF  acv.a_transinf.tri_trans.trError_gg00 = e_ok
THEN
    BEGIN
    IF  g01unicode
    THEN
        BEGIN
        jx := sizeof(seqname);
        FOR ix := sizeof(seqname) DIV 2 DOWNTO 1 DO
            BEGIN
            seqname[jx]   := seqname[ix];
            seqname[jx-1] := chr(0);
            jx := jx - 2;
            END;
        (*ENDFOR*) 
        END;
    (*ENDIF*) 
    a23AttachPublicSequence (acv, seqname, seqid, seqInfo);
    e := acv.a_returncode;
    IF  e = e_ok
    THEN
        m_type := m_commit
    ELSE
        m_type := m_rollback;
    (*ENDIF*) 
    acv.a_transinf.tri_trans.trError_gg00 := e;
    a51close_internal_trans (acv, oldContext, m_type);
    IF  acv.a_transinf.tri_trans.trError_gg00 <> e_ok
    THEN
        a07_b_put_error (acv, acv.a_transinf.tri_trans.trError_gg00, 1);
    (*ENDIF*) 
    END
ELSE
    a07_b_put_error (acv, acv.a_transinf.tri_trans.trError_gg00, 1);
(*ENDIF*) 
e := acv.a_returncode
END;
 
(* PTS 1108151 F.F. 31-OCT-2000 enable UCS2 *)
(*------------------------------*) 
 
PROCEDURE
      a34SetError (VAR acv : tak_all_command_glob;
            error          : tsp00_Int2;
            VAR errtext    : tsp00_MoveObj;
            errtextlen     : integer;
            codetype       : tsp00_CodeType);
 
VAR
      ix                : integer;
      e                 : tsp8_uni_error;
      err_char_no       : tsp00_Int4;
      filluchar         : tsp00_C2;
      dest_len          : tsp00_Int4;
 
BEGIN
(* PTS 1102574, T.A. 1999-05-05 *)
acv.a_dca.stop_msg_set   := true;
acv.a_dca.msgno          := error;
IF  errtextlen > sizeof (acv.a_dca.stop_msg)
THEN
    errtextlen := sizeof (acv.a_dca.stop_msg);
(*ENDIF*) 
dest_len := sizeof (acv.a_dca.stop_msg);
s80uni_trans (@errtext, errtextlen,
      codetype, @acv.a_dca.stop_msg[ 1 ], dest_len,
      acv.a_out_packet^.sp1_header.sp1h_mess_code, [ ],
      e, err_char_no);
IF  e <> uni_ok
THEN
    BEGIN
    IF  acv.a_out_packet^.sp1_header.sp1h_mess_code = csp_ascii
    THEN
        errtextlen := err_char_no
    ELSE
        errtextlen := err_char_no * 2;
    (*ENDIF*) 
    END
ELSE
    errtextlen := dest_len;
(*ENDIF*) 
IF  errtextlen < sizeof(acv.a_dca.stop_msg)
THEN
    BEGIN
    IF  acv.a_out_packet^.sp1_header.sp1h_mess_code = csp_ascii
    THEN
        FOR ix := errtextlen + 1 TO sizeof (acv.a_dca.stop_msg) DO
            acv.a_dca.stop_msg[ix] := bsp_c1
        (*ENDFOR*) 
    ELSE
        BEGIN
        IF  acv.a_out_packet^.sp1_header.sp1h_mess_code = csp_unicode_swap
        THEN
            BEGIN
            filluchar[ 1 ] := csp_ascii_blank;
            filluchar[ 2 ] := csp_unicode_mark;
            END
        ELSE
            BEGIN
            filluchar[ 2 ] := csp_unicode_mark;
            filluchar[ 1 ] := csp_ascii_blank;
            END;
        (*ENDIF*) 
        g20unifill ( sizeof (acv.a_dca.stop_msg),
              @acv.a_dca.stop_msg[ 1 ],
              errtextlen + 1,
              sizeof (acv.a_dca.stop_msg) - errtextlen,
              filluchar );
        END;
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34SubtransStart (VAR acv : tak_all_command_glob;
            VAR e    : tsp00_Int2);
 
BEGIN
acv.a_returncode := 0;
acv.a_ex_kind                      := only_executing;
acv.a_in_internal_subtr            := false;
a52new_subtrans (acv, a01_il_b_identifier);
e := acv.a_returncode;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34SubtransCommit (VAR acv : tak_all_command_glob;
            VAR e : tsp00_Int2);
 
BEGIN
acv.a_returncode := 0;
acv.a_ex_kind                      := only_executing;
acv.a_in_internal_subtr            := false;
a52end_rollback_subtrans (acv, a01_il_b_identifier, m_end);
e := acv.a_returncode;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34SubtransRollback (VAR acv : tak_all_command_glob;
            VAR e : tsp00_Int2);
 
BEGIN
acv.a_returncode := 0;
acv.a_ex_kind                      := only_executing;
acv.a_in_internal_subtr            := false;
a52end_rollback_subtrans (acv, a01_il_b_identifier, m_rollback);
e := acv.a_returncode;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34VTrace (VAR acv : tak_all_command_glob;
            VAR trace_obj : tsp00_MoveObj;
            trace_len     : tsp00_Int4);
 
BEGIN
IF  trace_len <= sizeof (tsp00_Line)
THEN
    b120InsertTrace (acv.a_transinf.tri_trans,
          ta, td_none, trace_len, @trace_obj)
ELSE
    b120MoveObjectTrace (acv.a_transinf.tri_trans,
          ta, td_none, trace_len, @trace_obj)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34BuildSequenceIds;
 
VAR
      ix : integer;
 
BEGIN
FOR ix := 1 TO sizeof(ak34OmsSchemaSeqId) DO
    ak34OmsSchemaSeqId[ix] := chr(255);
(*ENDFOR*) 
ak34OmsContainerSeqId := ak34OmsSchemaSeqId;
ak34OmsContainerSeqId[sizeof(ak34OmsContainerSeqId)] := chr(254)
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34DropContainer(VAR acv : tak_all_command_glob;
            SchemaId     : tsp00_Int4;
            VAR Guid     : tsp00_C16;
            ContainerNo  : tsp00_Int4;
            VAR b_err    : tgg00_BasisError);
 
CONST
      c_exclusive = true;
 
VAR
      m_type            : tgg00_MessType;
      pSchema           : tak_sysbufferaddress;
      Syskey            : tgg00_SysInfoKey;
      buf               : tak_sysbufferaddress;
      oldContext        : tgg00_UnivTrans;
      ContainerId       : tgg01_ContainerId;
 
BEGIN
acv.a_returncode := 0;
pSchema := a34SchemaIdExists (acv, SchemaId);
IF  pSchema = NIL
THEN
    b_err := e_unknown_schema
ELSE
    BEGIN
    b_err := e_ok;
    a34ContainerSyskey (SchemaId, Guid, ContainerNo, Syskey);
    a34UnLock (acv, @Syskey.all, Syskey.skeylen, NOT c_exclusive, b_err);
    b_err := e_ok;
    acv.a_transinf.tri_trans.trError_gg00 := b_err;
    a51_internal_trans (acv, oldContext);
    IF  b_err = e_ok
    THEN
        BEGIN
        a10get_sysinfo (acv, Syskey, d_fix, buf, b_err);
        IF  b_err <> e_ok
        THEN
            b_err := e_unknown_name
        ELSE
            BEGIN
            ContainerId := buf^.sclass.ftree;
            a34ClassMapSyskey (ContainerId.fileObjFileNo_gg00, Syskey);
            a10del_sysinfo (acv, Syskey, b_err);
            IF  b_err = e_ok
            THEN
                a10del_sysinfo (acv, buf^.syskey, b_err);
            (*ENDIF*) 
            IF  b_err = e_ok
            THEN
                ak341DropContainer (acv, ContainerId, b_err);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  b_err = e_ok
        THEN
            m_type := m_commit
        ELSE
            m_type := m_rollback;
        (*ENDIF*) 
        acv.a_transinf.tri_trans.trError_gg00 := b_err;
        a51close_internal_trans (acv, oldContext, m_type);
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34drop_all_containers (VAR acv : tak_all_command_glob;
            SchemaId  : tsp00_Int4;
            VAR b_err : tgg00_BasisError);
 
VAR
      closeTrans_e    : tgg00_BasisError;
      m_type          : tgg00_MessType;
      buf             : tak_sysbufferaddress;
      containerFile   : tgg00_FileId;
      sysk            : tgg00_SysInfoKey;
      ContainerSyskey : tgg00_SysInfoKey;
      oldContext      : tgg00_UnivTrans;
      error           : tsp00_C50;
      pError          : tsp00_MoveObjPtr;
 
BEGIN
a34ClassMapSyskey (-1, sysk);
REPEAT
    a10next_sysinfo (acv, sysk, 0, d_release,
          sysk.sentrytyp, buf, b_err);
    IF  (b_err = e_ok)
        AND
        ((SchemaId = cak_is_undefined) OR (buf^.sclassmap.cmr_schema = SchemaId))
    THEN
        BEGIN
        (* drop each container in its own transaction, because drop container is not able to rollback *)
        a51_internal_trans (acv, oldContext);
        b_err := acv.a_transinf.tri_trans.trError_gg00;
        IF  b_err = e_ok
        THEN
            BEGIN
            a34ContainerSyskey (buf^.sclassmap.cmr_schema,
                  buf^.sclassmap.cmr_guid, buf^.sclassmap.cmr_container_no, ContainerSyskey);
            a10del_sysinfo (acv, sysk, b_err);
            IF  b_err = e_ok
            THEN
                BEGIN
                a10get_sysinfo  (acv, ContainerSyskey, d_release, buf, b_err);
                IF  b_err = e_ok
                THEN
                    BEGIN
                    containerFile := buf^.sclass.ftree;
                    a10del_sysinfo (acv, buf^.syskey, b_err);
                    IF  b_err = e_ok
                    THEN
                        BEGIN
                        ak341DropContainer (acv, containerFile, b_err);
                        IF  b_err <> e_ok
                        THEN
                            BEGIN
                            pError := @error;
                            error  := 'could not drop file            e =                ';
                            g17int4to_line (containerFile.fileObjFileNo_gg00, false, 10, 21, error);
                            g17int4to_line (b_err, false, 10, 35, error);
                            a34OpMsg (c_is_error, pError^, sizeof(error));
                            IF  b_err = e_file_not_found
                            THEN
                                b_err := e_ok;
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            IF  b_err = e_ok
            THEN
                m_type := m_commit
            ELSE
                m_type := m_rollback;
            (*ENDIF*) 
            acv.a_transinf.tri_trans.trError_gg00 := b_err;
            a51close_internal_trans (acv, oldContext, m_type);
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
UNTIL
    b_err <> e_ok;
(*ENDREPEAT*) 
IF  b_err = e_no_next_record
THEN
    b_err := e_ok
ELSE
    IF  SchemaId = cak_is_undefined
    THEN
        a07_b_put_error (acv, b_err, 1)
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34drop_container (VAR acv : tak_all_command_glob;
            start_node : integer);
 
VAR
      b_err        : tgg00_BasisError;
      class_id     : tsp00_Int2;
      buf          : tak_sysbufferaddress;
      sysk         : tgg00_SysInfoKey;
      guid_sysk    : tgg00_SysInfoKey;
 
BEGIN
start_node := acv.a_ap_tree^[start_node].n_sa_level;
a05_unsigned_int2_get (acv, acv.a_ap_tree^[start_node].n_pos,
      acv.a_ap_tree^[start_node].n_length, e_invalid_unsign_integer, class_id);
a34ClassMapSyskey (class_id, sysk);
a10get_sysinfo     (acv, sysk, d_fix, buf, b_err);
IF  b_err = e_ok
THEN
    BEGIN
    a34ContainerSyskey (0, buf^.sclassmap.cmr_guid, buf^.sclassmap.cmr_container_no, guid_sysk);
    a10get_sysinfo     (acv, guid_sysk, d_fix, buf, b_err);
    IF  b_err = e_ok
    THEN
        BEGIN
        ak341DropContainer (acv, buf^.sclass.ftree, b_err);
        IF  b_err = e_ok
        THEN
            a10del_sysinfo (acv, guid_sysk, b_err);
        (*ENDIF*) 
        IF  b_err = e_ok
        THEN
            a10del_sysinfo (acv, sysk, b_err);
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  b_err <> e_ok
    THEN
        a07_b_put_error (acv, b_err, 1)
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak34store_msgtext(VAR acv : tak_all_command_glob;
            e : tsp00_Int2);
 
VAR
      ix          : integer;
      max         : tsp00_Int4;
      errtext_ptr : tsp1_part_ptr;
 
BEGIN
acv.a_dca.msgno := e;
FOR ix := 1 TO sizeof (acv.a_dca.stop_msg) DO
    acv.a_dca.stop_msg[ix] := bsp_c1;
(*ENDFOR*) 
s26find_part (acv.a_in_packet^.sp1_segm, sp1pk_errortext, errtext_ptr);
IF  errtext_ptr <> NIL
THEN
    BEGIN
    a34OpMsg (c_is_error, errtext_ptr^.sp1p_buf, errtext_ptr^.sp1p_buf_len);
    IF  errtext_ptr^.sp1p_buf_len > sizeof (acv.a_dca.stop_msg)
    THEN
        max := sizeof (acv.a_dca.stop_msg)
    ELSE
        max := errtext_ptr^.sp1p_buf_len;
    (*ENDIF*) 
    FOR ix := 1 TO max DO
        acv.a_dca.stop_msg[ix] := errtext_ptr^.sp1p_buf[ix];
    (*ENDFOR*) 
    acv.a_dca.stop_msg_set := max > 0
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34outstanding_packet (VAR acv : tak_all_command_glob;
            VAR e : tsp00_Int2);
 
VAR
      retcode           : tsp1_comm_error;
      rcv_packet_len    : tsp00_Int4;
      reply_packet_size : tsp00_Int4;
      errtext_ptr       : tsp1_part_ptr;
 
BEGIN
IF  acv.a_outstanding_packet
THEN
    BEGIN
    vreceive (acv.a_transinf.tri_trans.trTaskId_gg00, g01oms_stream_timeout,
          acv.a_in_packet, rcv_packet_len,
          acv.a_out_packet, reply_packet_size, retcode);
    acv.a_outstanding_packet := false;
    IF  retcode <> sp1ce_ok
    THEN
        ak34vreceive_error (acv, retcode, e)
    ELSE
        BEGIN
        IF  acv.a_cmd_packet_header.sp1h_mess_swap <> g01code.kernel_swap
        THEN (* Change request 1001193, T.A. 23.10.1998 *)
            a93swap_from_application (acv);
        (*ENDIF*) 
        IF  g01vtrace.vtrAny_gg00
        THEN
            a93packet_vtrace (acv.a_transinf.tri_trans,
                  ak_receive, acv.a_in_packet);
        (*ENDIF*) 
        s26find_part (acv.a_in_packet^.sp1_segm, sp1pk_errortext, errtext_ptr);
        IF  errtext_ptr <> NIL
        THEN
            BEGIN
            e :=  e_oms_ostream_error;
            ak34store_msgtext (acv, e)
            END;
        (*ENDIF*) 
        WITH acv.a_out_packet^ DO
            BEGIN
            sp1_header := acv.a_cmd_packet_header;
            sp1_header.sp1h_varpart_size := reply_packet_size -
                  sizeof (sp1_header);
            (* the following statement can be dropped when the rte *tsp00_Int4)
                  (* guarantees a properly aligned packet size !!! J.P.  *)
            sp1_header.sp1h_varpart_size := (sp1_header.sp1h_varpart_size DIV
                  csp1_part_align_length) * csp1_part_align_length;
            END;
        (*ENDWITH*) 
        s26first_segment_init (acv.a_out_packet, sp1sk_return, acv.a_return_segm);
        acv.a_curr_retpart := NIL
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34Lock (VAR acv     : tak_all_command_glob;
            pKey           : tsp00_MoveObjPtr;
            KeyLen         : integer;
            lockExclusive  : boolean;
            VAR e          : tgg00_BasisError);
 
VAR
      k            : tgg00_Lkey;
      WantedMode   : tgg00_LockReqMode;
      DummyGranted : tgg00_LockReqMode;
 
BEGIN
acv.a_transinf.tri_trans.trError_gg00 := e_ok;
k.len := KeyLen;
g10mv ('VAK34 ',   2,    
      KeyLen, sizeof(k.k), @pKey^, 1, @k.k, 1, KeyLen, e);
IF  lockExclusive
THEN
    WantedMode := lckRowExcl_egg00
ELSE
    WantedMode := lckRowShare_egg00;
(*ENDIF*) 
k53lock (acv.a_transinf.tri_trans, g01tabid.sys2_cat.fileTabId_gg00, k, WantedMode, [ ],
      NOT NoWait_c, NOT CollisionTest_c, DummyGranted);
IF  acv.a_transinf.tri_trans.trError_gg00 = e_wait_for_lock_release
THEN
    k53wait (acv.a_transinf.tri_trans, m_lock, mm_nil);
(*ENDIF*) 
e := acv.a_transinf.tri_trans.trError_gg00
END;
 
(*------------------------------*) 
 
PROCEDURE
      a34UnLock (VAR acv  : tak_all_command_glob;
            pKey           : tsp00_MoveObjPtr;
            KeyLen         : integer;
            lockExclusive  : boolean;
            VAR e          : tgg00_BasisError);
 
VAR
      WantedMode : tgg00_LockReqMode;
      Syskey     : tgg00_SysInfoKey;
 
BEGIN
acv.a_transinf.tri_trans.trError_gg00 := e_ok;
IF  lockExclusive
THEN
    WantedMode := lckRowExcl_egg00
ELSE
    WantedMode := lckRowShare_egg00;
(*ENDIF*) 
Syskey.skeylen  := KeyLen;
g10mv ('VAK34 ',   3,    
      KeyLen, sizeof(Syskey.all), @pKey^, 1, @Syskey.all, 1, KeyLen, e);
k53key_unlock (acv.a_transinf.tri_trans, WantedMode,
      g01tabid.sys2_cat.fileTabId_gg00, Syskey);
e := acv.a_transinf.tri_trans.trError_gg00
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
