'encoding UTF-8 Do not remove or change this line! '************************************************************************** ' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ' ' Copyright 2000, 2010 Oracle and/or its affiliates. ' ' OpenOffice.org - a multi-platform office productivity suite ' ' This file is part of OpenOffice.org. ' ' OpenOffice.org is free software: you can redistribute it and/or modify ' it under the terms of the GNU Lesser General Public License version 3 ' only, as published by the Free Software Foundation. ' ' OpenOffice.org is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU Lesser General Public License version 3 for more details ' (a copy is included in the LICENSE file that accompanied this code). ' ' You should have received a copy of the GNU Lesser General Public License ' version 3 along with OpenOffice.org. If not, see ' ' for a copy of the LGPLv3 License. ' '/****************************************************************************** '* '* owner : joerg.skottke@oracle.com '* '* short description : Replacements for routines in t_lists.inc adds some '* '\****************************************************************************** function hListDelete( aList() as string, iItemToDelete as integer ) as boolean '///

Delete one item from a list specified by index

'///Prerequisite: Array compatible with those from t_lists.inc
'///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))
const CFN = "hListDelete::" const INDEX_CORRECTION = 1 dim iCurrentItem as integer ' Increment-Variable if ( GVERBOSE ) then printlog( CFN & "Removing: " & aList( iItemToDelete ) & " at pos " & iItemToDelete ) endif ' Move all items down by one in the list beginning with the item after ' iItemToDelete for iCurrentItem = ( iItemToDelete + INDEX_CORRECTION ) to ListCount( aList() ) aList( iCurrentItem - INDEX_CORRECTION ) = aList( iCurrentItem ) next iCurrentItem ' Delete the last entry, it is no longer used and it is duplicate to the item ' at iListSizeOld-1 (iListSizeNew) aList( iCurrentItem ) = "" aList( 0 ) = iCurrentItem - INDEX_CORRECTION end function '******************************************************************************* function hListAppend( sNewString as string, aTargetList() as string ) as integer '///

Append an item to an existing list

'///Prerequisite: Array compatible with those from t_lists.inc '///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))
const CFN = "hListAppend::" const RC_ARRAY_TOO_SMALL = -1 dim iCurrentListSize as integer dim iNewListSize as integer dim iArraySize as integer dim irc as integer iCurrentListSize = val( aTargetList( 0 ) ) iNewListSize = iCurrentListSize + 1 iArraySize = ubound( aTargetList() ) if ( iNewListSize > iArraySize ) then warnlog ( CFN & "Cannot append, array too small" ) printlog( CFN & "Array-Size.....: " & iArraySize ) printlog( CFN & "Requested index: " & iNewListSize ) hListAppend() = RC_ARRAY_TOO_SMALL else aTargetList( iNewListSize ) = sNewString aTargetList( 0 ) = iNewListSize hListAppend() = iNewListSize endif end function '******************************************************************************* function hManageComparisionList( sFileIn as string, sFileOut as string, sListOut() as string ) as integer '///

Function to create or compare a list to a reference

'///Prerequisite: List of items to compare, input- and outputfilename
'///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))
'///BEWARE: This is a core function and used by many tests!
'///Please read the inline documentation for further reference

'///Function parameters: '///
    '///+
  1. sFileIn = The file that contains the reference data
  2. '///+
  3. sFileOut = The file new lists are written to in case of an error
  4. '///+
  5. sListOut() = The list containing the newly retrieved data.
  6. '///
'///Description: '/// end function '******************************************************************************* function hListCompare( aListOne() as String, aListTwo() as String ) as integer const CFN = "hListcompare::" '///

Compare two lists with each other, where list TWO is the reference

'///Prerequisites: Two lists compatible with listfunctions
'///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))
'///Duplicates gCompare2Lists but does not print warnlogs, evaluate returncode instead '/// end function '******************************************************************************* function hListPrependString( aList() as string, cString as string ) as boolean '///

Insert a string infront of each item in a list

'///Prerequisites: A list compatible with listfunctions
'///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))

'///Note that the function alters the input list. If the list contains '///+ strings of the type "MyString" the items will be changed to '///+ read "Some Text : MyString"
'///Input: '///
    '///+
  1. List (string)
  2. '///+
  3. A text to be inserted infront of every item in the list
  4. '///
'///Returns: '///
    '///+
  1. Errorcondition (boolean)
  2. '/// '///
'///Description: '/// end function '******************************************************************************* function hListAppendList( aBaseList() as string, aListToAppend() as string ) as integer '///

Append one list to another

'///Prerequisites: A list compatible with listfunctions
'///About listfunctions: All listfunctions rely on a special type of '///+ array. This can be string arrays and - in some cases - numeric '///+ arrays. What makes the arrays unique is that the first item which '///+ has the index 0 contains the number of items in the list to be used, '///+ anything that is stored beyond this number is ignored. This has three '///+ consequences: 1) all listfunctions that alter an array must update '///+ the index stored in array(0) and 2) it is possible that the index '///+ point beyond ubound of the array which will most likely cause a '///+ runtime error. 3) Means that arrays may only have an upper boundary '///+ declared, all loops must start with index array(1) and must end with '///+ index array(val( array(0))

'///Input: '///
    '///+
  1. Target list (string)
  2. '///+
  3. Source list (string)
  4. '///
'///Returns: '///
    '///+
  1. Listsize (integer)
  2. '/// '///
'///Description: '/// end function '******************************************************************************* function hCountMatchesInList( acItemList() as string, cSearchTerm as string ) as integer '///

Find out how many times a string is found in a list

'///Parameter(s):
'///
    '///+
  1. List to be searched (String)
  2. '/// '///+
  3. Expression to search for (String)
  4. '/// '///
'///Returns:
'///
    '///+
  1. Number of hits (Integer)
  2. '/// '///
const CFN = "hCountMatchesInList::" dim iHitCount as integer dim iCurrentItem as integer if ( GVERBOSE ) then printlog( CFN & "Begin with term: " & cSearchTerm ) for iCurrentItem = 1 to ListCount( acItemList() ) if ( GVERBOSE ) then printlog( acItemList( iCurrentItem ) ) if ( instr( acItemList( iCurrentItem ), cSearchTerm ) > 0 ) then iHitCount = iHitCount + 1 endif next iCurrentItem if ( GVERBOSE ) then printlog( CFN & "Exit with result: " & iHitCount ) hCountMatchesInList() = iHitCount end function '******************************************************************************* function hListResultEvaluation( i_diffcount as integer, i_allowed_delta as integer ) as boolean ' This function evaluates the outcome of hManageComaprisionList() or ' hListCompare(). This extra step is done because in some cases the ' program installations might differ slightly - in some CWS (when using the ' archive) we can end up having a different set of import/export filters. ' So the evaluation must allow for a specific number of mismatches which is ' specified in i_allowed_delta. hListResultEvaluation() = true ' If lists are identical we return directly. if ( i_diffcount = 0 ) then printlog( "The lists are identical. Good" ) exit function endif ' if we have differences we need to have a closer look. ' Note that the difference is optional. if ( i_allowed_delta <> 0 ) then if ( i_diffcount = i_allowed_delta ) then printlog( "The lists have the allowed delta of " & i_allowed_delta ) exit function endif endif warnlog( "The list check failed, please review the test." ) hListResultEvaluation() = false end function