I must create one array from two array
Local aPrompt := { "a", "b", "c", "d", "e", "f", "g", "h", "i" }
Local aData := { { " ", " ", " ", "2", " ", "3", "8", " ", "1" }, ;
{ " ", " ", " ", "7", " ", "6", " ", "5", "2" }, ;
{ "2", " ", " ", " ", " ", " ", " ", "7", "9" }, ;
{ " ", "2", " ", "1", "5", "7", "9", "3", "4" }, ;
{ " ", " ", "3", " ", " ", " ", "1", " ", " " }, ;
{ "9", "1", "7", "3", "8", "4", " ", "2", " " }, ;
{ "1", "8", " ", " ", " ", " ", " ", " ", "6" }, ;
{ "7", "3", " ", "6", " ", "1", " ", " ", " " }, ;
{ "6", " ", "5", "8", " ", "9", " ", " ", " " } }
I wish an array type
for n= 1 to 9
AAdd( aTest,{ aPrompt[n],{adata[1][n],;
adata[2][n],;
adata[3][n],;
adata[4][n],;
adata[5][n],;
adata[6][n],;
adata[7][n],;
adata[8][n],;
adata[9][n] } } )
next
why it not run ?
I tried also with
For n= 1 to 9
aEval(aPrompt, {|x| aAdd( atest, {aPrompt[x],aSudoku[n][x] })} )
next
one array from two ( sudoku revenge)
- Silvio.Falconi
- Posts: 7136
- Joined: Thu Oct 18, 2012 7:17 pm
- Been thanked: 1 time
one array from two ( sudoku revenge)
Last edited by Silvio.Falconi on Tue Jan 20, 2015 8:15 am, edited 1 time in total.
Re: one array from two
Silvio,
The array aSudoku must be extended to aSudoku[10][9] :
As well cells with a value must be excluded for EDIT_GET .

best regards
Uwe
The array aSudoku must be extended to aSudoku[10][9] :
As well cells with a value must be excluded for EDIT_GET .

Code: Select all | Expand
Local aSudoku := { { "a", " ", " ", " ", "2", " ", "3", "8", " ", "1" }, ;
{ "b", " ", " ", " ", "7", " ", "6", " ", "5", "2" }, ;
{ "c", "2", " ", " ", " ", " ", " ", " ", "7", "9" }, ;
{ "d", " ", "2", " ", "1", "5", "7", "9", "3", "4" }, ;
{ "e", " ", " ", "3", " ", " ", " ", "1", " ", " " }, ;
{ "f", "9", "1", "7", "3", "8", "4", " ", "2", " " }, ;
{ "g", "1", "8", " ", " ", " ", " ", " ", " ", "6" }, ;
{ "h", "7", "3", " ", "6", " ", "1", " ", " ", " " }, ;
{ "i", "6", " ", "5", "8", " ", "9", " ", " ", " " } }
@ 10, 20 XBROWSE oBrw OF oDlg ARRAY aSudoku ;
LINES CELL cols{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } ;
HEADER " ", "1", "2", "3", "4","5","6", "7","8","9" ;
COLSIZES 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 ;
SIZE 135, 91 NOBORDER PIXEL
// Set a color for the 1. column
oBrw:aCols[ 1 ]:bClrStd = { || { , 15195087 } }
oBrw:aCols[1]:nDataStrAlign := AL_CENTER
best regards
Uwe

Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
- Silvio.Falconi
- Posts: 7136
- Joined: Thu Oct 18, 2012 7:17 pm
- Been thanked: 1 time
Re: one array from two
Yes of vourse... this i know also I ...but i loaf asudoku fron a big file txt where are many string of 81 cr..
I take one dtring and make the array asudoku
i wish create another array from asudoku and a prompt..not with hand but from fwh source...
in this case we have the originsl asudoku and the atest
We need asudoku otinal to control wich the user insert on cell
we can calc the possibility numbers when the user want insert a number on a cell
to make this calc we have need the original asudoku. .
I take one dtring and make the array asudoku
i wish create another array from asudoku and a prompt..not with hand but from fwh source...
in this case we have the originsl asudoku and the atest
We need asudoku otinal to control wich the user insert on cell
we can calc the possibility numbers when the user want insert a number on a cell
to make this calc we have need the original asudoku. .
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
- Silvio.Falconi
- Posts: 7136
- Joined: Thu Oct 18, 2012 7:17 pm
- Been thanked: 1 time
Re: one array from two
Uwe,
Now it is ok
now the function is bad !! because if the user click on first column the function must make none command
Now it is ok
Code: Select all | Expand
//Project sudoku with xbrowse
#include "Fivewin.ch"
#include "Xbrowse.ch"
FUNCTION MAIN()
Local odlg, oSay[9]
Local aSudoku := { { " ", " ", " ", "2", " ", "3", "8", " ", "1" }, ; //test sample
{ " ", " ", " ", "7", " ", "6", " ", "5", "2" }, ;
{ "2", " ", " ", " ", " ", " ", " ", "7", "9" }, ;
{ " ", "2", " ", "1", "5", "7", "9", "3", "4" }, ;
{ " ", " ", "3", " ", " ", " ", "1", " ", " " }, ;
{ "9", "1", "7", "3", "8", "4", " ", "2", " " }, ;
{ "1", "8", " ", " ", " ", " ", " ", " ", "6" }, ;
{ "7", "3", " ", "6", " ", "1", " ", " ", " " }, ;
{ "6", " ", "5", "8", " ", "9", " ", " ", " " } }
Local aPrompt := { "a", "b", "c", "d", "e", "f", "g", "h", "i" }
Local atest:= {}
Local aoriginal:= aclone(asudoku)
For n=1 to 9
aadd( atest,{aprompt[n],aSudoku[1][n],;
aSudoku[2][n],;
aSudoku[3][n],;
aSudoku[4][n],;
aSudoku[5][n],;
aSudoku[6][n],;
aSudoku[7][n],;
aSudoku[8][n],;
aSudoku[9][n],;
})
next
// xbrowser atest
DEFINE DIALOG oDlg SIZE 81*5,81*5;
COLOR CLR_BLACK,CLR_WHITE PIXEL
@ 10, 20 XBROWSE oBrw OF oDlg ARRAY atest ;
LINES CELL cols{ 1,2,3,4,5,6,7,8,9,10 } ;
HEADER "","1", "2", "3", "4","5","6", "7","8","9" ;
COLSIZES 25,25, 25, 25, 25, 25, 25, 25, 25, 25, 25 ;
SIZE 135, 91 NOBORDER PIXEL
oBrw:aCols[ 1 ]:bClrStd = { || { , 15195087 } }
oBrw:aCols[1]:nDataStrAlign := AL_CENTER
oBrw:bLClicked := { | nRow, nCol | C_ACTION( aSudoku, oBrw:KeyNo(), oBrw:SelectedCol():nCreationOrder, aPrompt ) }
Ut_BrwRowConfig( oBrw )
oBrw:CreateFromCode()
aeval( oBrw:aCols, { |oCols| oCols:nEditType := EDIT_GET, ;
oCols:lAllowSizing := .F., ;
oCols:nDataStrAlign := AL_CENTER } )
ACTIVATE DIALOG oDlg
RETURN NIL
// ---------
FUNCTION C_ACTION(aSudoku, nRPos, nCPos, aPrompt)
IF EMPTY( aSudoku[nRPos][nCPos] )
MsgAlert( "Row : " + aPrompt[nRPos] + CRLF + ;
"Col : " + ALLTRIM(STR(nCPos)), "Position" )
ENDIF
RETURN(NIL)
// ------
FUNCTION Ut_BrwRowConfig( oBrw )
oBrw:lRecordSelector := .F. // .t.
oBrw:lAllowRowSizing := .F.
oBrw:lColDividerComplete := .t. // .f.
oBrw:lAllowColSwapping := .f.
oBrw:lAllowColHiding := .f.
oBrw:lFastEdit := .f.
oBrw:nRowSel := 1
oBrw:nColSel := 1
oBrw:nColOffset := 1
oBrw:nFreeze := 0
oBrw:nCaptured := 0
oBrw:nLastEditCol := 0
oBrw:nStretchCol := -1
oBrw:lRecordSelector := .F.
oBrw:lHScroll := .F.
oBrw:lVScroll := .F.
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY // LINESTYLE_NOLINES
* oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // MARQSTYLE_SOLIDCELL
oBrw:lheader :=.t.
RETURN nil
now the function is bad !! because if the user click on first column the function must make none command
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Re: one array from two ( sudoku revenge)
Silvio,
I found another nice solution,
that keeps the numbered area clean.

best regards
Uwe
I found another nice solution,
that keeps the numbered area clean.

Code: Select all | Expand
//Project sudoku with xbrowse
#include "Fivewin.ch"
#include "Xbrowse.ch"
FUNCTION MAIN()
Local odlg, oBrw1, oBrw2
Local aSudoku := { { " ", " ", " ", "2", " ", "3", "8", " ", "1" }, ;
{ " ", " ", " ", "7", " ", "6", " ", "5", "2" }, ;
{ "2", " ", " ", " ", " ", " ", " ", "7", "9" }, ;
{ " ", "2", " ", "1", "5", "7", "9", "3", "4" }, ;
{ " ", " ", "3", " ", " ", " ", "1", " ", " " }, ;
{ "9", "1", "7", "3", "8", "4", " ", "2", " " }, ;
{ "1", "8", " ", " ", " ", " ", " ", " ", "6" }, ;
{ "7", "3", " ", "6", " ", "1", " ", " ", " " }, ;
{ "6", " ", "5", "8", " ", "9", " ", " ", " " } }
Local aLines[9][1]
nAsc := 96
I := 1
FOR I := 1 TO 9
nAsc++
aLines[I][1] := CHR( nAsc )
NEXT
DEFINE DIALOG oDlg SIZE 81*5,81*5;
COLOR CLR_BLACK,CLR_WHITE PIXEL
// ----- Left xBrowse with char's < a - i > can be extended with other infos ( col's ) ------------
@ 10, 15 XBROWSE oBrw1 OF oDlg ARRAY aLines ;
LINES CELL cols{ 1 } ;
HEADER " " ;
COLSIZES 15 ;
SIZE 15, 91 NOBORDER PIXEL
Ut_BrwRowConfig( oBrw1 )
oBrw1:CreateFromCode()
aeval( oBrw1:aCols, { |oCols| oCols:lAllowSizing := .F., ;
oCols:nDataStrAlign := AL_CENTER } )
oBrw1:aCols[ 1 ]:bClrStd = { || { , 15195087 } }
oBrw1:aCols[1]:nDataStrAlign := AL_CENTER
// ------- Numbered area - connected to oBrw1 -------
@ 10, oBrw1:nRight XBROWSE oBrw2 OF oDlg ARRAY aSudoku ;
LINES CELL cols{ 1,2,3,4,5,6,7,8,9,10 } ;
HEADER "1", "2", "3", "4","5","6", "7","8","9" ;
COLSIZES 25, 25, 25, 25, 25, 25, 25, 25, 25 ;
SIZE 121, 91 NOBORDER PIXEL
oBrw2:bLClicked := { | nRow, nCol | oBrw1:GoTop(), oBrw1:GoDown( oBrw2:KeyNo() -1 ), oBrw1:Refresh(), ;
C_ACTION( aSudoku, oBrw2:KeyNo(), oBrw2:SelectedCol():nCreationOrder, aLines) }
Ut_BrwRowConfig( oBrw2 )
oBrw2:CreateFromCode()
aeval( oBrw2:aCols, { |oCols| oCols:nEditType := EDIT_GET, ;
oCols:lAllowSizing := .F., ;
oCols:nDataStrAlign := AL_CENTER } )
ACTIVATE DIALOG oDlg
RETURN NIL
// ---------
FUNCTION C_ACTION(aSudoku, nRPos, nCPos, aLines)
IF EMPTY( aSudoku[nRPos][nCPos] )
MsgAlert( "Line : " + aLines[nRPos][1] + CRLF + ; // line-info browser 1
"Row : " + ALLTRIM(STR(nRPos)) + CRLF + ; // row-info browser 2
"Col : " + ALLTRIM(STR(nCPos)), "Position" ) // col-info browser 2
ENDIF
RETURN(NIL)
// ------
FUNCTION Ut_BrwRowConfig( oBrw )
oBrw:lRecordSelector := .F. // .t.
oBrw:lAllowRowSizing := .F.
oBrw:lColDividerComplete := .t. // .f.
oBrw:lAllowColSwapping := .f.
oBrw:lAllowColHiding := .f.
oBrw:lFastEdit := .f.
oBrw:nRowSel := 1
oBrw:nColSel := 1
oBrw:nColOffset := 1
oBrw:nFreeze := 0
oBrw:nCaptured := 0
oBrw:nLastEditCol := 0
oBrw:nStretchCol := -1
oBrw:lRecordSelector := .F.
oBrw:lHScroll := .F.
oBrw:lVScroll := .F.
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY // LINESTYLE_NOLINES
* oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // MARQSTYLE_SOLIDCELL
oBrw:lheader :=.t.
RETURN nil
best regards
Uwe

Last edited by ukoenig on Tue Jan 20, 2015 1:20 pm, edited 4 times in total.
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
i work with FW.
If you have any questions about special functions, maybe i can help.
- Silvio.Falconi
- Posts: 7136
- Joined: Thu Oct 18, 2012 7:17 pm
- Been thanked: 1 time
Re: one array from two ( sudoku revenge)
Uwe,

save level1.txt into .\data folder
I put also the color but it not run ok (see ColorCellNew())
I made the func Wichnumbers to show on say the number possibles but this functionnot run ok
level1.txt

save level1.txt into .\data folder
I put also the color but it not run ok (see ColorCellNew())
I made the func Wichnumbers to show on say the number possibles but this functionnot run ok
Code: Select all | Expand
//Project sudoku with xbrowse
#include "Fivewin.ch"
#include "Xbrowse.ch"
Static oSquare
Static aData
Static aSudoku
Static aOriginal
static oSayText1
static cMessage
FUNCTION MAIN()
Local odlg, oSay[9]
Local aPrompt := { "a", "b", "c", "d", "e", "f", "g", "h", "i" }
Local oFontSquare
cMessage :="MESSAGE"
aData:= {}
aSudoku := SudokuLoad(1) //nLevl1
aOriginal:= aSudoku
//create the aData
For n=1 to 9
aadd( aData,{aprompt[n],aSudoku[1][n],;
aSudoku[2][n],;
aSudoku[3][n],;
aSudoku[4][n],;
aSudoku[5][n],;
aSudoku[6][n],;
aSudoku[7][n],;
aSudoku[8][n],;
aSudoku[9][n],;
})
next
DEFINE FONT oFontSquare NAME "Ms Sans Serif" SIZE 0, -22
DEFINE DIALOG oDlg SIZE 81*5,81*5;
COLOR CLR_BLACK,CLR_WHITE PIXEL ;
Title "Sudoku with Xbrowse"
@ 10, 20 XBROWSE oSquare OF oDlg ARRAY aData ;
LINES CELL cols{ 1,2,3,4,5,6,7,8,9,10 } ;
HEADER "","1", "2", "3", "4","5","6", "7","8","9" ;
COLSIZES 25,30, 30, 30, 30, 30, 30, 30, 30, 30, 30 ;
SIZE 156,156 NOBORDER PIXEL FONT oFontSquare
@ 180,10 say oSayText1 Prompt cMessage OF oDlg size 150,10 PIXEL TRANSPARENT update
oSquare:aCols[ 1 ]:bClrStd = { || { , 15195087 } }
oSquare:aCols[1]:nDataStrAlign := AL_CENTER
*oSquare:bLClicked := { | nRow, nCol | C_ACTION(oSquare, aSudoku, oSquare:KeyNo(), oSquare:SelectedCol():nCreationOrder, aPrompt ) }
Ut_BrwRowConfig( oSquare )
oSquare:bChange := { || oSayText1:SetText(WichNumber(aOriginal,aData)) }
For n=2 to 10
oSquare:aCols[n]:bClrstd := {|| { 0, ColorCellNew() } }
next
oSquare:CreateFromCode()
aeval( oSquare:aCols, { |oCols| oCols:nEditType := EDIT_GET, ;
oCols:lAllowSizing := .F., ;
oCols:nDataStrAlign := AL_CENTER ;
} )
ACTIVATE DIALOG oDlg
RETURN NIL
// ---------
FUNCTION C_ACTION(oSquare,atest, nRPos, nCPos, aPrompt)
Local nvalore:= oSquare:nat
If nCPos = 1
else
nCPos:= nCPos-1
endif
/*
IF EMPTY( atest[nRPos][nCPos] )
MsgAlert( "Row : " + aPrompt[nRPos] + CRLF + ;
"Col : " + ALLTRIM(STR(nCPos)), "Position" )
ENDIF
*/
RETURN(NIL)
//---------------------------------------------------------------------//
Function WichNumber(aOriginal,aData)
Local lFound:= .t.
Local aNumbers := {}
Local cNumber := ""
Local num,n,m
Local nCol := oSquare:SelectedCol():nCreationOrder
Local nRPos := oSquare:KeyNo()
Local nCPos := IIF(nCPos=1, nCol+1 , nCol)
local nRowStart := int((nRPos-1)/3) * 3 + 1
local nRowEnd := nRowstart + 2
local nColStart := (int((nCPos-1)/3) * 3 + 1)
local nColEnd := nColstart + 2
if nRPos > 0 .and. nCPos > 1
if val(aOriginal[nRPos, nCPos]) > 0
cMessage:= ""
else
for num := 1 to 9 // numeri to found
lFound := .T.
for n := 1 to 9
if aData[nRPos,n] == num
lFound := .F.
endif
if aData[n,nCPos] == num
lFound := .F.
endif
next
for n := nRowStart to nRowEnd
for m := nColStart to nColEnd
if val(aData[n,m]) == num
lFound := .F.
endif
next
next
if lFound
aadd(aNumbers,num)
endif
next
if len(aNumbers) > 0
for num := 1 to len(aNumbers)
if num == 1
cNumber += alltrim(str(aNumbers[num]))
else
cNumber += ", "+ alltrim(str(aNumbers[num]))
endif
next num
cMessage := "Numeri Possibili: "+cNumber
else
cMessage := "Numeri Possibili: "
endif
endif
endif
return cMessage
//-------------------------------------------------------------------//
// Lod a Sudoku from file txt
Function SudokuLoad(nLevel)
Local aLoadstring:= Load_File_Sudoku(nLevel)
Local nConteggioSudoku:=Len(aLoadstring)
Local nSudoku:= 1//nRandom(nConteggioSudoku-1)+1
Local nBlocchi,nCelle ,nGet:= 0
Local cSudoku:= alltrim(aLoadstring[nSudoku])
Local atest:= {}
Local anumeri := {}
Local cNumeri:=""
Local nNumero:= 0
local arows:= {}
local acols:= {}
Local ncol:= 0
For nBlocchi=1 to 9
For nCelle=1 to 9
ncol+= 1
nNumero+=1
If alltrim(StrChar( cSudoku, nNumero ))=="0"
cStringa:=" "
else
cStringa:=alltrim(StrChar( cSudoku, nNumero))
endif
aadd( acols, cStringa)
IF nCol== 9
aadd( arows, {acols[1],;
acols[2],;
acols[3],;
acols[4],;
acols[5],;
aCols[6],;
acols[7],;
aCols[8],;
aCols[9]} )
nCol:= 0
acols:= {}
endif
next
next
return arows
//------------------------------------------------------------//
Function Load_File_Sudoku(nLevel)
Local cPathdata:=".\data\"
Local cFile:=cPathdata+"level"+alltrim(str(nLevel))+".txt"
Local aTest := {}
Local n
Local oText
oText:= TTxtFile():New( cFile )
FOR n = 1 to oText:RecCount()
AADD( aTest, oText:ReadLine() )
// MsgAlert( aTest[n], "Array-line : " + ALLTRIM(STR(n)) )
oText:Skip()
NEXT
oText:Close()
Return atest
//--------------------------------------------------------------//
Function ColorCellNew()
Local nCol := oSquare:SelectedCol():nCreationOrder
Local nRPos := oSquare:KeyNo()
Local nCPos := IIF(nCPos=1, nCol+1 , nCol)
Local ncolor
Do case
case nRPos <= 3
do case
case nCPos <= 3
nColor := 4294133
case nCPos > 3 .and. nCPos <= 6 // second col
nColor := 4294133
case nCPos > 6 // third col
nColor := 4294133
endcase
case nRPos > 3 .and. nRPos <= 6
do case
case nCPos <= 3 // first col
nColor := 10681847
case nCPos > 3 .and. nCPos <= 6
nColor := 4294133
case nCPos > 6
nColor := 10681847
endcase
case nRPos > 6
do case
case nCPos <= 3
nColor := 10677245
case nCPos > 3 .and. nCPos <= 6
nColor := 4294133
case nCPos > 6
nColor := 10677245
endcase
endcase
Return ncolor
// ------
FUNCTION Ut_BrwRowConfig( oSquare )
oSquare:lRecordSelector := .F. // .t.
oSquare:lAllowRowSizing := .F.
oSquare:lColDividerComplete := .t. // .f.
oSquare:lAllowColSwapping := .f.
oSquare:lAllowColHiding := .f.
oSquare:lFastEdit := .f.
oSquare:nRowSel := 1
oSquare:nColSel := 1
oSquare:nColOffset := 1
oSquare:nFreeze := 0
oSquare:nCaptured := 0
oSquare:nLastEditCol := 0
*oSquare:nStretchCol := -1
oSquare:lRecordSelector := .F.
oSquare:lHScroll := .F.
oSquare:lVScroll := .F.
oSquare:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oSquare:nColDividerStyle := LINESTYLE_LIGHTGRAY // LINESTYLE_NOLINES
* oSquare:nMarqueeStyle := MARQSTYLE_HIGHLROW // MARQSTYLE_SOLIDCELL
oSquare:lheader :=.t.
RETURN nil
level1.txt
Code: Select all | Expand
001700509573024106800501002700295018009400305652800007465080071000159004908007053
029650178705180600100900500257800309600219005900007046573400021800020453010395000
008203500009670408346050702430010059967005001000496203280034067703500904004107020
800005216045862007670009500769204030020001765001670009004096800907400601306107940
700020548052008000430957106900061700041030695307509001083075469200080350074306000
705002030230100056090536720406081205809004000300095648040053180523000069001429003
740680900060100080012054736307800120008401570490720060209500040500069308106047205
460020905920145680005300004008964302200500800356200490090070003630850710017609208
437205610082060050000301028091807000703950186040006207200798045004003072379002060
002905047507023006036010950610204008005800004048590213200300701870002039069147020
920870605084036079006001008510709020300012087402300960007253100005048702231000804
062100950908035006040029170250000084400502600890463205020357000070006502685004731
001700905305098024690015007908350012400900536032046000089003040203801650050029073
203070016100026704706480030001800490094710062320094080600003005902157048405060903
486051230002070004005840109000568090904000700368094512009130028003085970817600040
902500607003840090014760302601005000000100264237684509306420900000006023429071806
571390240300850009080010035043205001260041750005600820004123500152008096007009410
806047003901083547300900600680090300012376084009800706290760031003502060108400270
508900216090168045406200000360500801829017530000039600705486120040050360680001007
056120400100030906308760105700000000084371692061095078870903204000607800613040709
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com