one array from two ( sudoku revenge)

one array from two ( sudoku revenge)

Postby Silvio.Falconi » Mon Jan 19, 2015 9:01 pm

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
Last edited by Silvio.Falconi on Tue Jan 20, 2015 8:15 am, edited 1 time in total.
User avatar
Silvio.Falconi
 
Posts: 7061
Joined: Thu Oct 18, 2012 7:17 pm

Re: one array from two

Postby ukoenig » Mon Jan 19, 2015 10:23 pm

Silvio,

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

Image

Code: Select all  Expand view

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 :D
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.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: one array from two

Postby Silvio.Falconi » Tue Jan 20, 2015 12:09 am

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. .
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
User avatar
Silvio.Falconi
 
Posts: 7061
Joined: Thu Oct 18, 2012 7:17 pm

Re: one array from two

Postby Silvio.Falconi » Tue Jan 20, 2015 8:13 am

Uwe,
Now it is ok
Code: Select all  Expand view

//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
User avatar
Silvio.Falconi
 
Posts: 7061
Joined: Thu Oct 18, 2012 7:17 pm

Re: one array from two ( sudoku revenge)

Postby ukoenig » Tue Jan 20, 2015 12:53 pm

Silvio,

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

Image

Code: Select all  Expand view


//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 :D
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.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: one array from two ( sudoku revenge)

Postby Silvio.Falconi » Tue Jan 20, 2015 1:09 pm

Uwe,

Image

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 view

//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 view
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
User avatar
Silvio.Falconi
 
Posts: 7061
Joined: Thu Oct 18, 2012 7:17 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 94 guests