Removes leading array elements that contain zero.
To include only the trim function in a DLL directly from this source file put the following lines in the DLL source:
%In_DLL = 1 #INCLUDE "MSD_VLUTrim.bas"The #IF will skip the PBMAIN() for you.
The function TrimVLU_to_MSD should compile in PowerBASIC For Windows (PBWin) Versions 8, 9 or 10 and PowerBASIC Console Compiler (PBCC) Versions 4, 5 or 6. The DEC$() function is new in PBWin 10 and PBCC 6, for earlier versions change to STR$() or FORMAT$(). All PBCC versions will ignore $$CRLF and wrap to next line at console width.
'file name: MSD_VLUTrim.bas 'for stand alone testing #if not %def(%In_DLL) #compile exe #dim all function pbmain () as long local TestArray1(), TestArray2(), TestArray3() as dword local R0, R1, UB1, R2, UB2, R3, UB3 as long 'test undimensioned - - - - - - - - - - - - - - - - - R0 = TrimVLU_to_MSD(TestArray1()) 'test two leading zero elements - - - - - - - - - - - dim TestArray1(4) TestArray1(2) = 321 R1 = TrimVLU_to_MSD(TestArray1()) UB1 = ubound(TestArray1()) 'test ubound non-zero (no change needed) - - - - - - - dim TestArray2(4) TestArray2(4) = 1 R2 = TrimVLU_to_MSD(TestArray2()) UB2 = ubound(TestArray2()) 'test all zero elements - - - - - - - - - - - - - - - - dim TestArray3(4) R3 = TrimVLU_to_MSD(TestArray3()) UB3 = ubound(TestArray3()) ? dec$(R0) + " should be -2" + $$crlf + _ dec$(R1) + dec$(UB1, 0, 1, 1) + "should be 0 2" + $$crlf + _ dec$(R2) + dec$(UB2, 0, 1, 1) + "should be 0 4" + $$crlf + _ dec$(R3) + dec$(UB3, 0, 1, 1) + "should be -1 0" end function #endif '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Function to be included in DLL. function TrimVLU_to_MSD alias "TrimVLUtoMSD" (byref VLU_Num() as dword) export _ as long local UpBnd, CurDig as long 'vars to hold upper bound and current digit UpBnd = ubound(VLU_Num) if UpBnd = -1 then 'test for undimensioned array, also see the web page. function = -2 'error code for undimensioned array exit function end if if VLU_Num(UpBnd) then exit function 'ubound is already MSD, not a leading zero else 'at least one leading 0 for CurDig = UpBnd - 1 to 0 step -1 if VLU_Num(CurDig) then redim preserve VLU_Num(CurDig) exit function end if next end if redim VLU_Num(0) function = -1 'error code for all digits 0. end function
Created on 21 December 2021; last edit 21 Dec 2021.