QtTest: data for code generation added

QtTest: data for code generation added

Added:
codegen/QtTest/QTestEventList.prg

/*

  Qt4xHb - bibliotecas de ligao entre Harbour/xHarbour e Qt Framework 4

  Copyright (C) 2012-2017 Marcos Antonio Gambeta <marcosgambeta@uol.com.br>

*/

#include "hbclass.ch"

CLASS QTestEventList

   DATA pointer
   DATA self_destruction INIT .F.

   METHOD new1
   METHOD new2
   METHOD new
   METHOD delete
   METHOD addDelay
   METHOD addKeyClick1
   METHOD addKeyClick2
   METHOD addKeyClick
   METHOD addKeyClicks
   METHOD addKeyPress1
   METHOD addKeyPress2
   METHOD addKeyPress
   METHOD addKeyRelease1
   METHOD addKeyRelease2
   METHOD addKeyRelease
   METHOD addMouseClick
   METHOD addMouseDClick
   METHOD addMouseMove
   METHOD addMousePress
   METHOD addMouseRelease
   METHOD clear
   METHOD simulate
   METHOD newFrom
   METHOD newFromObject
   METHOD newFromPointer
   METHOD selfDestruction
   METHOD setSelfDestruction
   DESTRUCTOR destroyObject

END CLASS

PROCEDURE destroyObject () CLASS QTestEventList
   IF ::self_destruction
      ::delete()
   ENDIF
RETURN

#pragma BEGINDUMP

#include <QTestEventList>

#include "qt4xhb_common.h"
#include "qt4xhb_macros.h"
#include "qt4xhb_utils.h"

/*
QTestEventList ()
*/
HB_FUNC_STATIC( QTESTEVENTLIST_NEW1 )
{
  QTestEventList * o = new QTestEventList ();
  _qt4xhb_storePointerAndFlag ( o, false );
}

/*
QTestEventList ( const QTestEventList & other )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_NEW2 )
{
  QTestEventList * o = new QTestEventList ( *PQTESTEVENTLIST(1) );
  _qt4xhb_storePointerAndFlag ( o, false );
}

//[1]QTestEventList ()
//[2]QTestEventList ( const QTestEventList & other )

HB_FUNC_STATIC( QTESTEVENTLIST_NEW )
{
  if( ISNUMPAR(0) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_NEW1 );
  }
  else if( ISNUMPAR(1) && ISQTESTEVENTLIST(1) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_NEW2 );
  }
  else
  {
    hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
  }
}

HB_FUNC_STATIC( QTESTEVENTLIST_DELETE )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    delete obj;
    obj = NULL;
    PHB_ITEM self = hb_stackSelfItem();
    PHB_ITEM ptr = hb_itemPutPtr( NULL, NULL );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addDelay ( int msecs )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDDELAY )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->addDelay ( PINT(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addKeyClick ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYCLICK1 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->addKeyClick ( (Qt::Key) hb_parni(1), ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addKeyClick ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYCLICK2 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    char par1 = ISCHAR(1)? (char) hb_parc(1)[0] : (ISNUM(1)? hb_parni(1) : 0);
    obj->addKeyClick ( par1, ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

//[1]void addKeyClick ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
//[2]void addKeyClick ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )

HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYCLICK )
{
  if( ISBETWEEN(1,3) && ISNUM(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYCLICK1 );
  }
  else if( ISBETWEEN(1,3) && ISCHAR(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYCLICK2 );
  }
}

/*
void addKeyClicks ( const QString & keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYCLICKS )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->addKeyClicks ( PQSTRING(1), ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addKeyPress ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYPRESS1 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->addKeyPress ( (Qt::Key) hb_parni(1), ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addKeyPress ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYPRESS2 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    char par1 = ISCHAR(1)? (char) hb_parc(1)[0] : (ISNUM(1)? hb_parni(1) : 0);
    obj->addKeyPress ( par1, ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

//[1]void addKeyPress ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
//[2]void addKeyPress ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )

HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYPRESS )
{
  if( ISBETWEEN(1,3) && ISNUM(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYPRESS1 );
  }
  else if( ISBETWEEN(1,3) && ISCHAR(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYPRESS2 );
  }
}

/*
void addKeyRelease ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYRELEASE1 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->addKeyRelease ( (Qt::Key) hb_parni(1), ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addKeyRelease ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYRELEASE2 )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    char par1 = ISCHAR(1)? (char) hb_parc(1)[0] : (ISNUM(1)? hb_parni(1) : 0);
    obj->addKeyRelease ( par1, ISNIL(2)? Qt::NoModifier : (Qt::KeyboardModifiers) hb_parni(2), OPINT(3,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

//[1]void addKeyRelease ( Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )
//[2]void addKeyRelease ( char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1 )

HB_FUNC_STATIC( QTESTEVENTLIST_ADDKEYRELEASE )
{
  if( ISBETWEEN(1,3) && ISNUM(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYRELEASE1 );
  }
  else if( ISBETWEEN(1,3) && ISCHAR(1) && (ISNUM(2)||ISNIL(2)) && (ISNUM(3)||ISNIL(3)) )
  {
    HB_FUNC_EXEC( QTESTEVENTLIST_ADDKEYRELEASE2 );
  }
}

/*
void addMouseClick ( Qt::MouseButton button, Qt::KeyboardModifiers modifiers = 0, QPoint pos = QPoint(), int delay = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDMOUSECLICK )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  int par2 = ISNIL(2)? 0 :  hb_parni(2);
  if( obj )
  {
    QPoint par3 = ISNIL(3)? QPoint() : *(QPoint *) hb_itemGetPtr( hb_objSendMsg( hb_param(3, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->addMouseClick ( (Qt::MouseButton) hb_parni(1), (Qt::KeyboardModifiers) par2, par3, OPINT(4,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addMouseDClick ( Qt::MouseButton button, Qt::KeyboardModifiers modifiers = 0, QPoint pos = QPoint(), int delay = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDMOUSEDCLICK )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  int par2 = ISNIL(2)? 0 :  hb_parni(2);
  if( obj )
  {
    QPoint par3 = ISNIL(3)? QPoint() : *(QPoint *) hb_itemGetPtr( hb_objSendMsg( hb_param(3, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->addMouseDClick ( (Qt::MouseButton) hb_parni(1), (Qt::KeyboardModifiers) par2, par3, OPINT(4,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addMouseMove ( QPoint pos = QPoint(), int delay = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDMOUSEMOVE )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    QPoint par1 = ISNIL(1)? QPoint() : *(QPoint *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->addMouseMove ( par1, OPINT(2,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addMousePress ( Qt::MouseButton button, Qt::KeyboardModifiers modifiers = 0, QPoint pos = QPoint(), int delay = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDMOUSEPRESS )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  int par2 = ISNIL(2)? 0 :  hb_parni(2);
  if( obj )
  {
    QPoint par3 = ISNIL(3)? QPoint() : *(QPoint *) hb_itemGetPtr( hb_objSendMsg( hb_param(3, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->addMousePress ( (Qt::MouseButton) hb_parni(1), (Qt::KeyboardModifiers) par2, par3, OPINT(4,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void addMouseRelease ( Qt::MouseButton button, Qt::KeyboardModifiers modifiers = 0, QPoint pos = QPoint(), int delay = -1 )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_ADDMOUSERELEASE )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  int par2 = ISNIL(2)? 0 :  hb_parni(2);
  if( obj )
  {
    QPoint par3 = ISNIL(3)? QPoint() : *(QPoint *) hb_itemGetPtr( hb_objSendMsg( hb_param(3, HB_IT_OBJECT ), "POINTER", 0 ) );
    obj->addMouseRelease ( (Qt::MouseButton) hb_parni(1), (Qt::KeyboardModifiers) par2, par3, OPINT(4,-1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void clear ()
*/
HB_FUNC_STATIC( QTESTEVENTLIST_CLEAR )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->clear ();
  }
  hb_itemReturn( hb_stackSelfItem() );
}

/*
void simulate ( QWidget * w )
*/
HB_FUNC_STATIC( QTESTEVENTLIST_SIMULATE )
{
  QTestEventList * obj = (QTestEventList *) hb_itemGetPtr( hb_objSendMsg( hb_stackSelfItem(), "POINTER", 0 ) );
  if( obj )
  {
    obj->simulate ( PQWIDGET(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
}

HB_FUNC_STATIC( QTESTEVENTLIST_NEWFROM )
{
  PHB_ITEM self = hb_stackSelfItem();

  if( hb_pcount() == 1 && ISOBJECT(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  else if( hb_pcount() == 1 && ISPOINTER(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_param(1, HB_IT_POINTER ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }

  hb_itemReturn( self );
}

HB_FUNC_STATIC( QTESTEVENTLIST_NEWFROMOBJECT )
{
  HB_FUNC_EXEC( QTESTEVENTLIST_NEWFROM );
}

HB_FUNC_STATIC( QTESTEVENTLIST_NEWFROMPOINTER )
{
  HB_FUNC_EXEC( QTESTEVENTLIST_NEWFROM );
}

HB_FUNC_STATIC( QTESTEVENTLIST_SELFDESTRUCTION )
{
  hb_retl( (bool) hb_itemGetL( hb_objSendMsg( hb_stackSelfItem(), "SELF_DESTRUCTION", 0 ) ) );
}

HB_FUNC_STATIC( QTESTEVENTLIST_SETSELFDESTRUCTION )
{
  PHB_ITEM self = hb_stackSelfItem();

  if( hb_pcount() == 1 && ISLOG(1) )
  {
    PHB_ITEM des = hb_itemPutL( NULL, hb_parl(1) );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }

  hb_itemReturn( self );
}

#pragma ENDDUMP

error: pathspec 'codegen/QtTest/QTestEventList.prg' did not match any file(s) known to git


added some valentines colors, little early but fun

error: pathspec 'programs/valentines.prg' did not match any file(s) known to git


added new example basiclayouts.prg

added new example basiclayouts.prg

/*

  Qt5xHb Project - Example Program

  Copyright (C) 2012-2017 Marcos Antonio Gambeta

  E-mail:
  marcosgambeta AT outlook DOT com
  marcosgambeta AT gmail DOT com

  Website:
  https://github.com/marcosgambeta/Qt5xHb

  Users Groups:
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb    [ENGLISH]
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb-br [PORTUGUESE]

*/

/*

  Exemplo de uso de leiautes
  Baseado no exemplo "Basic Layouts" do Qt Framework

*/

#include "qt5xhb.ch"
#include "hbclass.ch"

PROCEDURE Main ()

   LOCAL oApp
   LOCAL oDialog

   oApp := QApplication():new()

   oDialog := Dialog():new()

   oDialog:show()

   oApp:exec()

   oDialog:delete()

   oApp:delete()

RETURN

#define NumGridRows 3
#define NumButtons  4

CLASS Dialog INHERIT QDialog

   DATA oMenuBar                           // QMenuBar
   DATA oHorizontalGroupBox                // QGroupBox
   DATA oGridGroupBox                      // QGroupBox
   DATA oFormGroupBox                      // QGroupBox
   DATA oSmallEditor                       // QTextEdit
   DATA oBigEditor                         // QTextEdit
   DATA aLabels INIT array(NumGridRows)    // QLabel
   DATA aLineEdits INIT array(NumGridRows) // QLineEdit
   DATA aButtons INIT array(NumButtons)    // QPushButton
   DATA oButtonBox                         // QDialogButtonBox
   DATA oFileMenu                          // QMenu
   DATA oExitAction                        // QAction

   METHOD new ()
   METHOD createMenu ()
   METHOD createHorizontalGroupBox ()
   METHOD createGridGroupBox ()
   METHOD createFormGroupBox ()
   METHOD delete ()

END CLASS

METHOD new () CLASS Dialog

   LOCAL oMainLayout

   ::super:new()

   ::createMenu()
   ::createHorizontalGroupBox()
   ::createGridGroupBox()
   ::createFormGroupBox()

   ::oBigEditor := QTextEdit():new()
   ::oBigEditor:setPlainText("This widget takes up all the remaining space in the top-level layout.")

   ::oButtonBox := QDialogButtonBox():new(QDialogButtonBox_Ok + QDialogButtonBox_Cancel, Qt_Horizontal)

   ::oButtonBox:onAccepted({||::accept()})
   ::oButtonBox:onRejected({||::reject()})

   oMainLayout := QVBoxLayout():new()
   oMainLayout:setMenuBar(::oMenuBar)
   oMainLayout:addWidget(::oHorizontalGroupBox)
   oMainLayout:addWidget(::oGridGroupBox)
   oMainLayout:addWidget(::oFormGroupBox)
   oMainLayout:addWidget(::oBigEditor)
   oMainLayout:addWidget(::oButtonBox)
   ::setLayout(oMainLayout)

   ::setWindowTitle("Basic Layouts")

RETURN SELF

METHOD createMenu () CLASS Dialog

   ::oMenuBar := QMenuBar():new()

   ::oFileMenu := QMenu():new("&File", SELF)
   ::oExitAction := ::oFileMenu:addAction("E&xit")
   ::oMenuBar:addMenu(::oFileMenu)

   ::oExitAction:onTriggered({||::accept()})

RETURN NIL

METHOD createHorizontalGroupBox () CLASS Dialog

   LOCAL oLayout
   LOCAL nIndex

   ::oHorizontalGroupBox := QGroupBox():new("Horizontal layout")
   oLayout := QHBoxLayout():new()

   FOR nIndex := 1 TO NumButtons
      ::aButtons[nIndex] := QPushButton():new("Button "+alltrim(str(nIndex)))
      oLayout:addWidget(::aButtons[nIndex])
   NEXT nIndex

   ::oHorizontalGroupBox:setLayout(oLayout)

RETURN NIL

METHOD createGridGroupBox () CLASS Dialog

   LOCAL oLayout
   LOCAL nIndex

   ::oGridGroupBox := QGroupBox():new("Grid layout")
   oLayout := QGridLayout():new()

   FOR nIndex := 1 TO NumGridRows
      ::aLabels[nIndex] := QLabel():new("Line "+alltrim(str(nIndex))+":")
      ::aLineEdits[nIndex] := QLineEdit():new()
      oLayout:addWidget(::aLabels[nIndex], nIndex, 0)
      oLayout:addWidget(::aLineEdits[nIndex], nIndex, 1)
   NEXT nIndex

   ::oSmallEditor := QTextEdit():new()
   ::oSmallEditor:setPlainText("This widget takes up about two thirds of the grid layout.")
   oLayout:addWidget(::oSmallEditor, 0, 2, 4, 1)

   oLayout:setColumnStretch(1, 10)
   oLayout:setColumnStretch(2, 20)
   ::oGridGroupBox:setLayout(oLayout)

RETURN NIL

METHOD createFormGroupBox () CLASS Dialog

   LOCAL oLayout

   ::oFormGroupBox := QGroupBox():new("Form layout")
   oLayout := QFormLayout():new()
   oLayout:addRow(QLabel():new("Line 1:"), QLineEdit():new())
   oLayout:addRow(QLabel():new("Line 2, long text:"), QComboBox():new())
   oLayout:addRow(QLabel():new("Line 3:"), QSpinBox():new())
   ::oFormGroupBox:setLayout(oLayout)

RETURN NIL

METHOD delete () CLASS Dialog

   // desconecta sinais
   ::oButtonBox:onAccepted()
   ::oButtonBox:onRejected()
   ::oExitAction:onTriggered()

   // destroi o objeto
   ::super:delete()

RETURN NIL

error: pathspec 'examples/basiclayouts.prg' did not match any file(s) known to git


Update

Update

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/alvarocneto/prestconthack.git/'


make sure we load clipper.xml

make sure we load clipper.xml

svn path=/trunk/kdelibs/kate/; revision=380603

// Test file to test kate's clipper highlighting
// kate: hl Clipper;

//BEGIN INCLUDES
#include <clip-ui.ch>
#include "logo.ch"

#define PRGVERSION	"0.0.1"
//END

//BEGIN CODE
static ws, win
static driver := getDriver()
/* a multiline
     comment
*/

function main( formName )
	local form
	local fileName

	if empty(formName)
		?? "Usage: ./form_ui <form.xfl>&\n"
		CANCEL
	else
		fileName := formName
	endif
	ws  := UIWorkSpace()

	form := UIForm( fileName )
	win  := form:parseFile()
//	?? valtype(win),chr(10)
	if win == NIL
		CANCEL
	endif
	win:show()

	ws:run()
	ws:quit()
return 0

/* Setting dialog */
function settingsDialog()
	?? "TODO: Settings dialog&\n"
return

/* About dialog */
function aboutDialog()
	local dlg := UIWindow("About", win, "aboutDlg", .F.)
	local hl, lside, t, bb, bD

	hl  := UIHBox(,4,8)
	lside := UIVBox()
	lside:add(UIImage(eas_logo_mini,.T.))
	hl:add(lside,.F.,.F.)
	dlg:userSpace:add(hl,.T.,.T.)
	t   := UIVBox()
	hl:add(t,.T.,.T.)

	t:add(UILabel("License: GPL version 2 or later"))
	bb  := UIButtonBar()
	t:add(bb)
	bD := UIButton(win, "&Close", {|o,e| dlg:close() } )
	bb:add( bD )

	dlg:setFocus(bD)
	dlg:setDefault(bD)
	dlg:setPlacement( .T. )
	dlg:show()
return
//END

// Test file to test kate's clipper highlighting

//BEGIN INCLUDES
#include <clip-ui.ch>
#include "logo.ch"

#define PRGVERSION	"0.0.1"
//END

//BEGIN CODE
static ws, win
static driver := getDriver()
/* a multiline
     comment
*/

function main( formName )
	local form
	local fileName

	if empty(formName)
		?? "Usage: ./form_ui <form.xfl>&\n"
		CANCEL
	else
		fileName := formName
	endif
	ws  := UIWorkSpace()

	form := UIForm( fileName )
	win  := form:parseFile()
//	?? valtype(win),chr(10)
	if win == NIL
		CANCEL
	endif
	win:show()

	ws:run()
	ws:quit()
return 0

/* Setting dialog */
function settingsDialog()
	?? "TODO: Settings dialog&\n"
return

/* About dialog */
function aboutDialog()
	local dlg := UIWindow("About", win, "aboutDlg", .F.)
	local hl, lside, t, bb, bD

	hl  := UIHBox(,4,8)
	lside := UIVBox()
	lside:add(UIImage(eas_logo_mini,.T.))
	hl:add(lside,.F.,.F.)
	dlg:userSpace:add(hl,.T.,.T.)
	t   := UIVBox()
	hl:add(t,.T.,.T.)

	t:add(UILabel("License: GPL version 2 or later"))
	bb  := UIButtonBar()
	t:add(bb)
	bD := UIButton(win, "&Close", {|o,e| dlg:close() } )
	bb:add( bD )

	dlg:setFocus(bD)
	dlg:setDefault(bD)
	dlg:setPlacement( .T. )
	dlg:show()
return
//END


Added type casting needed by new compiler

error: pathspec 'Tests/TypedSDK/Explorer/Data' did not match any file(s) known to git
error: pathspec 'Servers.prg' did not match any file(s) known to git


KActionSelector: updates

KActionSelector: updates

- fixes
- parameters checking
- formatting

Modified:
source/KWidgetsAddons/KActionSelector.prg

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/marcosgambeta/KDE5xHb.git/'


tamanhoAtual = len(aBuffer)
asize(aBuffer, tamanhoAtual + len(aCandidato))
acopy(aCandidato, aBuffer, 1, len(aCandidato), tamanhoAtual + 1)

//https://pt.stackoverflow.com/q/348512/101

error: pathspec 'xBase/ADVPLConcatArray.prg' did not match any file(s) known to git


first approach, nested

first approach, nested

translation from Tn to Itm by iota
(no Let yet, we need 'fix' first)

-- item notation

-- basic: http://www.cedar-forest.org/forest/talks/talks2001/talkPPDP2001.ps
-- extended: http://www.cedar-forest.org/forest/talks/talks2001/microsoft.ps

import "LabeledDeBruijn.prg"

data Itm :: Inventory Tag ~> * where
  -- applicator wagon
  AppW :: Itm inv -> Itm inv -> Itm inv
  -- abstractor wagon
  AbsW :: Label n -> Itm [inv; n]i -> Itm inv
  -- argument access
  IArg :: Itm [ups; t]i
  IUp :: Itm [ups; t]i -> Itm [ups; t, t']i
 deriving syntax (it) Nat(IArg, IUp)

iota :: Tm inv -> Itm inv
iota Arg = IArg
iota (Up m) = IUp (iota m)
iota (Up m) = IUp (iota m)
iota (Lm n b) = AbsW n (iota b)
iota (App f a) = AppW (iota a) (iota f)

slide1 = iota (Lm `x (Lm `y (1tm,0tm)tm), 0tm)tm  -- assuming `z = 0tm

error: pathspec 'tests/ItemNotation.prg' did not match any file(s) known to git


Dictionary

Dictionary

#include "protheus.ch"

/**
 * A Dictionary has a linear complexity and is an optimized structure with no
 * visible cost on access of its elements.
 * @package DataStructures
 */
Class Dictionary
  /**
   * Holds a native hashmap object of AdvPL.
   */
  Data oValue

  Method New( aData ) Constructor
  Method Set( cKey, xValue )
  Method Get( cKey )
  Method Unset( cKey )
  Method Dispose()
EndClass

/**
 * Initializes the dictionary. When an array is supplied, convert it to the
 * dictionary, with access by integer.
 * @constructor
 * @author Marcelo Camargo
 * @throws UserException
 * @param aData :: Array<any>
 * @return Dictionary
 */
Method New( aData ) Class Dictionary
  If ValType( aData ) == "A"
    ::oValue := aToHM( aData )
  ElseIf aData == Nil
    ::oValue := HMNew()
  Else
    UserException( "" )
  EndIf
  Return Self

/**
 * Sets a value or redefine a value in the dictionary.
 * @author Marcelo Camargo
 * @return any
 */
Method Set( cKey, xValue ) Class Dictionary
  Return ::oValue:Set( cKey, xValue )

/**
 * Returns either the value of the key of the dictionary or Nil, in case of
 * no value specified for the key.
 * @author Marcelo Camargo
 * @return any
 */
Method Get( cKey ) Class Dictionary
  Local xOut := Nil
  // A pointer to xOut, where, if exists a value by the key, it is there stored
  // by reference
  ::oValue:Get( cKey, @xOut )
  Return xOut

/**
 * Removes a value of the key of the dictionary, if it exists and frees space
 * in the memory.
 * @author Marcelo Camargo
 * @return any
 */
Method Unset( cKey ) Class Dictionary
  Return ::oValue:Del( cKey )

/**
 * Removes all the dictionary from the memory, freeing space.
 * @author Marcelo Camargo
 * @return any
 */
Method Dispose() Class Dictionary
  Return ::oValue:Clean()

error: pathspec 'src/Dictionary.prg' did not match any file(s) known to git


add a testcase

add a testcase

data Foo :: * where
  Nu :: Foo
  Co :: Foo -> Int -> Foo
 deriving syntax (f) LeftList(Nu, Co)

data Bar = Bnu | Bar Bar Int deriving LeftList(b)

data Baz  :: * where
  Nub :: Baz
  Cob :: Baz -> Int -> Baz
 deriving LeftList(z)

len :: Foo -> Int
len []f = 0
len [rest; _]f = 1 + len rest

t0 = len [[]f; 1, 2, 3]f

t1 = len [lazy [1, 2]f; 3, 4]f

[t2; 4, 5]b = [1,2,3,4,5]b

[[1,2,3]z; 4]z = [[1]z; 2, 3, 4]z

[t3; t4]z = [[1]z; 2]z

##test "these do not match up"
 [[1,2,3]z; 4]z = [[1]z; 2, 3]z

error: pathspec 'tests/LeftList.prg' did not match any file(s) known to git


[Templates] Enabled Drag & Drop in template

error: pathspec 'VisualStudio/ProjectPackage/Templates/Projects/Windows/VOMdiApp/Standard' did not match any file(s) known to git
error: pathspec 'Shell.prg' did not match any file(s) known to git


KColorScheme: class updated

KColorScheme: class updated

- method new1 removed
- methods shade1, shade2 and shade3 removed
- formatting

Modified:
source/KDEUI/KColorSchemeClass.prg

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/marcosgambeta/KDE4xHb.git/'


Added a demo of requesting a specific namespace version

/*
  Demo for Webkit usage in Harbour using HBGI library
  If you press mouse right button, it will show a menu for navigation.
  2016 Rafa Carmona
*/

MEMVAR Gtk, GtkSource, GLib, WebKit

INIT PROCEDURE my_init()

   /* Require GTK+ version 2.0 as my installation of WebKitGtk requires this version */
   PUBLIC Gtk := hbgi_import( "Gtk", "2.0" )
   PUBLIC WebKit := hbgi_import( "WebKit" )

   RETURN

FUNCTION Main()

   LOCAL win, button, box, scroll, web, statusbar, contextid

   Gtk:init( hb_AParams() )

   /* Create window */
   win := Gtk:Window:new( Gtk:WindowType:TOPLEVEL )

   /* Add title at the window */
   win:set_title( "Harbour HBGI with WebKit" )

   /* Position window at center */
   win:set_position( Gtk:WindowPosition:CENTER )

   /* Size by default */
   win:set_default_size( 800, 600 )

   /* Connect 'delete-event' signal to quit the main loop */
   win:connect( 'delete-event', {|| Gtk:main_quit() } )

   /* Create vertical Box */
   box := Gtk:VBox:new( .F., 0 )

   /* Box add at Window */
   win:add( box )

   /* Create scroll */
   scroll := Gtk:ScrolledWindow:New( NIL, NIL )

   /* Border 10 */
   scroll:set_border_width( 10 )

   /* Show ALWAYS scrollbar*/
   scroll:set_policy( Gtk:PolicyType:AUTOMATIC, Gtk:PolicyType:ALWAYS )

   /* Add scroll to box */
   box:add( scroll )

   /* Create WebKit! VERY EASY!! */
   web := WebKit:WebView:new()

   /* Put a web app into the webview */
   web:load_uri( "https://harbour.github.io/" )

   /* Add WebKit to the scroll window */
   scroll:add( web )

   /* Simple button, connect 'clicked' signal to exit app */
   button := Gtk:Button:new_with_label( "Exit" )
   button:connect( 'clicked', {|| Gtk:main_quit() } )
   box:pack_start( button, .F., .F., 0 )

   /* Status Bar*/
   statusbar := Gtk:StatusBar:new()
   box:pack_end( statusbar, .F., .T., 0 )

   /* Push message in StatusBar */
   contextid := statusbar:get_context_id( "Statusbar example" )
   statusbar:push( contextid, "WebKit example running with HBGI (c)2016 Rafa Carmona" )

   /* Show ALL widgets */
   win:show_all()

   /* Here, start the main event loop of GTK+ */
   Gtk:main()

   win := NIL
   button := NIL
   web := NIL
   scroll := NIL

   RETURN 0

error: pathspec 'demo/gtk2webkit.prg' did not match any file(s) known to git


add tests for issue 91

add tests for issue 91

-- first example from issue 91
--
f :: ((forall x. Bool) -> Int) -> Bool -> Int
f x = x

-- second example from issue 91
--
kind X k = A k

data Token :: k ~> *0 where
  Token :: forall (k :: *1) (a :: k). Token a

x :: Token (A a)
x = Token :: Token (A a)

error: pathspec 'tests/issue91-redundant-forall.prg' did not match any file(s) known to git


add a FreeEnv variant with static constraint in Environment (the included evidence may be useless anyway...); caveat: does not compile

import "LangPrelude.prg"

data Free :: Tag ~> Row Tag * ~> * where
  Klar :: Free t {}r
  Mehr :: DiffLabel t t' -> Free t r -> Free t {t'=a;r}r
 deriving List(f)

notMentionedIn :: Label a -> Record sh -> Maybe (Free a sh)
notMentionedIn l {} = Just $ Klar
notMentionedIn l {m=v; r} = do
                            diff <- case sameLabel l m of
                                    R x -> Just x
      	      	      	      	    _ -> Nothing
                            r' <- notMentionedIn l r
                            return $ Mehr diff r'
                       where monad maybeM

Just test1 = `a `notMentionedIn` {`g=7, `h='a'}

##test "`a occurs in head position"
  Just test2 = `a `notMentionedIn` {`g=7, `a='a'}

##test "`a occurs in second position"
  Just test3 = `a `notMentionedIn` {`a=7, `b='b'}

data Environment :: Row Tag * ~> * where
  Empty :: Environment {}r
  Extend :: Free t s => Label t -> a -> Environment s -> Environment {t=a;s}r
 deriving Record(e)

verifyEnv :: Record sh -> Maybe (Environment sh)
verifyEnv {} = Just {}e
verifyEnv {l=v; r} = do
                     l' <- l `notMentionedIn` r
                     r' <- verifyEnv r
                     return {l=v; r'}e
                 where monad maybeM

Just test4 = verifyEnv {`g=7, `a='a', `h="hey"}

##test "`g occurs twice"
  Just test5 = verifyEnv {`g=7, `a='a', `g="2"}

error: pathspec 'work/StaticFreeEnv.prg' did not match any file(s) known to git


To continue

To continue

#include "protheus.ch"
#define TOKEN ""
#xtranslate T_<name> <value> => Eval( <name>, <value> )

Function Debbuger( xVar, aTokens )
  Local cExprResult

  If Len( aTokens != 14 )
    Return "Err.: Numero invalido de analisadores de tokens"
  EndIf

  _KEYWORD    := aTokens[ 1 ]
  _NUMBER     := aTokens[ 2 ]
  _STRING     := aTokens[ 3 ]
  _WHITESPACE := aTokens[ 4 ]
  _SYMBOL     := aTokens[ 5 ]
  _NEWLINE    := aTokens[ 6 ]
  _DATE       := aTokens[ 7 ]
  _TRUE       := aTokens[ 8 ]
  _FALSE      := aTokens[ 9 ]
  _NIL        := aTokens[ 10 ]
  _BLOCK      := aTokens[ 11 ]
  _PROPERTY   := aTokens[ 12 ]
  _OBJECT     := aTokens[ 13 ]
  _UNKNOWN    := aTokens[ 14 ]

  cExprResult := ParseExpr( xVar )
  Context := 0
  ConOut( cExprResult )
  Return cExprResult

Function ParseExpr( xVar )
  Local cType := ValType( xVar )

  Do Case
    Case cType == "C" // String
      Return ParseString( xVar )
    Case cType == "N" // Number
      Return ParseNumber( xVar )
    Case cType == "A" // Array
      Return ParseArray( xVar )
    Case cType == "U" // Nil
      Return ParseNil( xVar )
    Case cType == "D" // Date
      Return ParseDate( xVar )
    Case cType == "O" // Object
      Return ParseObject( xVar )
    Case cType == "L" // Logic
      Return ParseLogic( xVar )
    Otherwise
      Return ParseUnknown( xVar )
  EndCase
  Return

Function ParseString( cData )
  Return T_KEYWORD "string"            ;
       + T_SYMBOL  "<"                 ;
       + T_NUMBER  Str( Len( cData ) ) ;
       + T_SYMBOL  ">"                 ;
       + T_SYMBOL  "("                 ;
       + T_STRING  cData               ;
       + T_SYMBOL  ")"                 ;
       + T_NEWLINE TOKEN

Function ParseNumber( nData )
  Return T_KEYWORD "number" ;
       + T_SYMBOL  "("      ;
       + T_SYMBOL  ")"      ;
       + T_NEWLINE TOKEN

Function ParseLogic( lData )
  Local bToken := IIf( lData, _TRUE, _FALSE ) ;
      , cView  := IIf( lData, ".T.", ".F." )
  Return T_bToken cView ;
       + T_NEWLINE TOKEN

Function ParseUnknown( xData )
  Return T_UNKNOWN ValType( xData ) ;
       + T_NEWLINE TOKEN

Function ParseNil
  Return T_NIL     TOKEN ;
       + T_NEWLINE TOKEN

Function ParseArray( aData )
  // Ah, I continue this later!

error: pathspec 'Debugger.prw' did not match any file(s) known to git


QtWebEngineWidgets: updated to use the macro PBOOL

/*

  Qt5xHb - bibliotecas de ligao entre Harbour/xHarbour e Qt Framework 5

  Copyright (C) 2012-2017 Marcos Antonio Gambeta <marcosgambeta@uol.com.br>

*/

#include "hbclass.ch"

CLASS QWebEngineSettings

   DATA pointer
   DATA class_flags INIT 0
   DATA self_destruction INIT .F.

   METHOD globalSettings
   METHOD fontFamily
   METHOD setFontFamily
   METHOD resetFontFamily
   METHOD fontSize
   METHOD setFontSize
   METHOD resetFontSize
   METHOD setAttribute
   METHOD testAttribute
   METHOD resetAttribute
   METHOD defaultTextEncoding
   METHOD setDefaultTextEncoding

   METHOD newFrom
   METHOD newFromObject
   METHOD newFromPointer
   METHOD selfDestruction
   METHOD setSelfDestruction

   DESTRUCTOR destroyObject

END CLASS

PROCEDURE destroyObject () CLASS QWebEngineSettings
   IF ::self_destruction
      ::delete()
   ENDIF
RETURN

#pragma BEGINDUMP

#include <Qt>

#ifndef __XHARBOUR__
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
#include <QWebEngineSettings>
#endif
#endif

#include "qt5xhb_common.h"
#include "qt5xhb_clsid.h"
#include "qt5xhb_utils.h"

#ifdef __XHARBOUR__
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
#include <QWebEngineSettings>
#endif
#endif

/*
static QWebEngineSettings *globalSettings()
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_GLOBALSETTINGS )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * ptr = QWebEngineSettings::globalSettings (  );
  _qt5xhb_createReturnClass ( ptr, "QWEBENGINESETTINGS" );
#endif
}

/*
QString fontFamily(FontFamily which) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_FONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retc( (const char *) obj->fontFamily (  (QWebEngineSettings::FontFamily) par1 ).toLatin1().data() );
  }
#endif
}

/*
void setFontFamily(FontFamily which, const QString &family)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETFONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setFontFamily (  (QWebEngineSettings::FontFamily) par1, PQSTRING(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void resetFontFamily(FontFamily which)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETFONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetFontFamily (  (QWebEngineSettings::FontFamily) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
int fontSize(FontSize type) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_FONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retni( obj->fontSize (  (QWebEngineSettings::FontSize) par1 ) );
  }
#endif
}

/*
void setFontSize(FontSize type, int size)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETFONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setFontSize (  (QWebEngineSettings::FontSize) par1, (int) hb_parni(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void resetFontSize(FontSize type)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETFONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetFontSize (  (QWebEngineSettings::FontSize) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void setAttribute(WebAttribute attr, bool on)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setAttribute (  (QWebEngineSettings::WebAttribute) par1, PBOOL(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
bool testAttribute(WebAttribute attr) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_TESTATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retl( obj->testAttribute (  (QWebEngineSettings::WebAttribute) par1 ) );
  }
#endif
}

/*
void resetAttribute(WebAttribute attr)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetAttribute (  (QWebEngineSettings::WebAttribute) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
QString defaultTextEncoding() const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_DEFAULTTEXTENCODING )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    hb_retc( (const char *) obj->defaultTextEncoding (  ).toLatin1().data() );
  }
#endif
}

/*
void setDefaultTextEncoding(const QString &encoding)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETDEFAULTTEXTENCODING )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    obj->setDefaultTextEncoding ( PQSTRING(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROM )
{
  PHB_ITEM self = hb_stackSelfItem();
  if( hb_pcount() == 1 && ISOBJECT(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  else if( hb_pcount() == 1 && ISPOINTER(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_param(1, HB_IT_POINTER ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  hb_itemReturn( self );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROMOBJECT )
{
  HB_FUNC_EXEC( QWEBENGINESETTINGS_NEWFROM );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROMPOINTER )
{
  HB_FUNC_EXEC( QWEBENGINESETTINGS_NEWFROM );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_SELFDESTRUCTION )
{
  hb_retl( (bool) hb_itemGetL( hb_objSendMsg( hb_stackSelfItem(), "SELF_DESTRUCTION", 0 ) ) );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_SETSELFDESTRUCTION )
{
  PHB_ITEM self = hb_stackSelfItem();
  if( hb_pcount() == 1 && ISLOG(1) )
  {
    PHB_ITEM des = hb_itemPutL( NULL, hb_parl(1) );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  hb_itemReturn( self );
}

#pragma ENDDUMP

/*

  Qt5xHb - bibliotecas de ligao entre Harbour/xHarbour e Qt Framework 5

  Copyright (C) 2012-2017 Marcos Antonio Gambeta <marcosgambeta@uol.com.br>

*/

#include "hbclass.ch"

CLASS QWebEngineSettings

   DATA pointer
   DATA class_flags INIT 0
   DATA self_destruction INIT .F.

   METHOD globalSettings
   METHOD fontFamily
   METHOD setFontFamily
   METHOD resetFontFamily
   METHOD fontSize
   METHOD setFontSize
   METHOD resetFontSize
   METHOD setAttribute
   METHOD testAttribute
   METHOD resetAttribute
   METHOD defaultTextEncoding
   METHOD setDefaultTextEncoding

   METHOD newFrom
   METHOD newFromObject
   METHOD newFromPointer
   METHOD selfDestruction
   METHOD setSelfDestruction

   DESTRUCTOR destroyObject

END CLASS

PROCEDURE destroyObject () CLASS QWebEngineSettings
   IF ::self_destruction
      ::delete()
   ENDIF
RETURN

#pragma BEGINDUMP

#include <Qt>

#ifndef __XHARBOUR__
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
#include <QWebEngineSettings>
#endif
#endif

#include "qt5xhb_common.h"
#include "qt5xhb_clsid.h"
#include "qt5xhb_utils.h"

#ifdef __XHARBOUR__
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
#include <QWebEngineSettings>
#endif
#endif

/*
static QWebEngineSettings *globalSettings()
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_GLOBALSETTINGS )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * ptr = QWebEngineSettings::globalSettings (  );
  _qt5xhb_createReturnClass ( ptr, "QWEBENGINESETTINGS" );
#endif
}

/*
QString fontFamily(FontFamily which) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_FONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retc( (const char *) obj->fontFamily (  (QWebEngineSettings::FontFamily) par1 ).toLatin1().data() );
  }
#endif
}

/*
void setFontFamily(FontFamily which, const QString &family)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETFONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setFontFamily (  (QWebEngineSettings::FontFamily) par1, PQSTRING(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void resetFontFamily(FontFamily which)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETFONTFAMILY )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetFontFamily (  (QWebEngineSettings::FontFamily) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
int fontSize(FontSize type) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_FONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retni( obj->fontSize (  (QWebEngineSettings::FontSize) par1 ) );
  }
#endif
}

/*
void setFontSize(FontSize type, int size)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETFONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setFontSize (  (QWebEngineSettings::FontSize) par1, (int) hb_parni(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void resetFontSize(FontSize type)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETFONTSIZE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetFontSize (  (QWebEngineSettings::FontSize) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
void setAttribute(WebAttribute attr, bool on)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->setAttribute (  (QWebEngineSettings::WebAttribute) par1, (bool) hb_parl(2) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
bool testAttribute(WebAttribute attr) const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_TESTATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    hb_retl( obj->testAttribute (  (QWebEngineSettings::WebAttribute) par1 ) );
  }
#endif
}

/*
void resetAttribute(WebAttribute attr)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_RESETATTRIBUTE )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    int par1 = hb_parni(1);
    obj->resetAttribute (  (QWebEngineSettings::WebAttribute) par1 );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

/*
QString defaultTextEncoding() const
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_DEFAULTTEXTENCODING )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    hb_retc( (const char *) obj->defaultTextEncoding (  ).toLatin1().data() );
  }
#endif
}

/*
void setDefaultTextEncoding(const QString &encoding)
*/
HB_FUNC_STATIC( QWEBENGINESETTINGS_SETDEFAULTTEXTENCODING )
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0))
  QWebEngineSettings * obj = (QWebEngineSettings *) _qt5xhb_itemGetPtrStackSelfItem();
  if( obj )
  {
    obj->setDefaultTextEncoding ( PQSTRING(1) );
  }
  hb_itemReturn( hb_stackSelfItem() );
#endif
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROM )
{
  PHB_ITEM self = hb_stackSelfItem();
  if( hb_pcount() == 1 && ISOBJECT(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_objSendMsg( hb_param(1, HB_IT_OBJECT ), "POINTER", 0 ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  else if( hb_pcount() == 1 && ISPOINTER(1) )
  {
    PHB_ITEM ptr = hb_itemPutPtr( NULL, (void *) hb_itemGetPtr( hb_param(1, HB_IT_POINTER ) ) );
    hb_objSendMsg( self, "_pointer", 1, ptr );
    hb_itemRelease( ptr );
    PHB_ITEM des = hb_itemPutL( NULL, false );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  hb_itemReturn( self );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROMOBJECT )
{
  HB_FUNC_EXEC( QWEBENGINESETTINGS_NEWFROM );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_NEWFROMPOINTER )
{
  HB_FUNC_EXEC( QWEBENGINESETTINGS_NEWFROM );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_SELFDESTRUCTION )
{
  hb_retl( (bool) hb_itemGetL( hb_objSendMsg( hb_stackSelfItem(), "SELF_DESTRUCTION", 0 ) ) );
}

HB_FUNC_STATIC( QWEBENGINESETTINGS_SETSELFDESTRUCTION )
{
  PHB_ITEM self = hb_stackSelfItem();
  if( hb_pcount() == 1 && ISLOG(1) )
  {
    PHB_ITEM des = hb_itemPutL( NULL, hb_parl(1) );
    hb_objSendMsg( self, "_self_destruction", 1, des );
    hb_itemRelease( des );
  }
  hb_itemReturn( self );
}

#pragma ENDDUMP


testcase for a bug

testcase for a bug

data Dir :: *2 where
  Hor :: Dir
  Ver :: Dir

data Tree :: Dir ~> *1 where
  Unit :: Tree Ver
  Ni :: Tree Hor
  Fork :: Tree d ~> Tree Hor ~> Tree Hor
 deriving syntax (tr) List(Ni, Fork) Unit(Unit)

-- graft WHAT      WHERE     IN
graft :: Tree d ~> Tree e ~> Tree f ~> Tree f
{graft what ()tr ()tr} = what
{graft what []tr tr} = tr
{graft what [head'; tail']tr [head; tail]tr} = [{graft what head' head}; {graft what tail' tail}]tr

{- NOTE: we have an Omega bug here:

prompt> :norm {graft []tr ()tr ()tr}
Normalizes to:
  []tr

prompt> :kind []tr
[]tr :: Tree Hor  = []tr

prompt> :kind {graft []tr ()tr ()tr}
{graft []tr ()tr ()tr} :: Tree Ver  = {graft []tr ()tr ()tr}

... BUT: Hor /= Ver :-(
-}

error: pathspec 'tests/Graft.prg' did not match any file(s) known to git


KAnimatedButton: updates

KAnimatedButton: updates

- parameters checking
- formatting

Modified:
source/KWidgetsAddons/KAnimatedButton.prg


added memorial day colors for USA & Canada

error: pathspec 'programs/memorial_day.prg' did not match any file(s) known to git


2016 thanksgiving program from http://www.color-hex.com/color-palette/2171

error: pathspec 'programs/thanksgiving.prg' did not match any file(s) known to git


Added a directory in which files I am working on can be added.

----------------------------------------------
-- Natural Numbers

data Natural:: level n . *n where
   Zero :: Natural
   Succ :: Natural ~> Natural
 deriving Nat(n)

-- Singleton Natural Numbers

data Natural' :: level n . Natural_(1) ~> *n where
  Zero' :: Natural' Zero
  Succ' :: Natural' n ~> Natural' (Succ n)
    deriving Nat(m)

-------------------------------------------
-- Non-equality comparisons for Natural Numbers

data NatGT :: Natural ~> Natural ~> *0 where
  NatGTbase :: NatGT (Succ n) n
  NatGTstep :: NatGT n m -> NatGT (Succ n) m

data NatLT :: Natural ~> Natural ~> *0 where
  NatLTbase :: NatLT n (Succ n)
  NatLTstep :: NatLT n m -> NatLT n (Succ m)

data NatNEQ:: Natural ~> Natural ~> *0 where
  NeqGT :: NatGT n m -> NatNEQ n m
  NeqLT :: NatLT n m -> NatNEQ n m

-- Are two Naturals equal or not equal?

data NatTest:: Natural ~> Natural ~> *0 where
  NatDiff :: NatNEQ x y -> NatTest x y
  NatSame :: Equal x y -> NatTest x y

--------------------------------------------------------
-- Stages (depth or size of inductively defined data)

data Stage:: Natural ~> *1 where
  V:: Natural ~> Stage t
  N:: Stage t ~> Stage t
  Inf:: Stage t

data Stage':: Stage n ~> *0 where
  V:: Natural' n -> Stage' (V n)
  N :: Stage' s -> Stage' (N s)
  Inf :: Stage' Inf

----------------------------------------------------
-- Types and Indexes to types
-- (Types are singeltons) and Environments

data TypeIndex:: *1 where
  VarT :: Natural ~> TypeIndex
  NatT :: Stage n ~> TypeIndex
  ListT :: Stage n ~> TypeIndex ~> TypeIndex
  ArrT :: TypeIndex ~> TypeIndex ~> TypeIndex

data Typ :: TypeIndex ~> *0 where
  VarT :: Natural' n -> Typ (VarT n)
  NatT :: Stage' s -> Typ (NatT s)
  List :: Stage' s -> Typ t -> Typ (ListT s t)
  ArrT :: Typ t -> Typ u -> Typ (ArrT t u)

data Env:: *2 where
  Closed :: Env
  ConsEnv :: Natural ~> TypeIndex ~> Env ~> Env
 deriving Record(e)

------------------------------------------------
-- Semantic Equality Witness for Stages

data StageEQ :: Stage s ~> Stage s ~> *0 where
  StEq :: StageEQ s s
  StStep :: StageEQ s1 s2 -> StageEQ (N s1) (N s2)
  StTrans :: StageEQ s1 s2 -> StageEQ s2 s3 -> StageEQ s1 s3
  StSymm :: StageEQ s1 s2 -> StageEQ s2 s1
  StInf :: StageEQ s Inf -> StageEQ (N s) Inf

------------------------------------------------
-- Less Than or Equal Witness for Stages

data LeqSt:: Stage a ~> Stage b ~> *0 where
  Same :: LeqSt x x
  Reach :: LeqSt x y -> LeqSt x (N y)
  All :: LeqSt x Inf
  Both :: LeqSt x y -> LeqSt (N x) (N y)

-- Equal witness for TypeIndex

data LeqTy :: TypeIndex ~> TypeIndex ~> *0 where
  EqTy :: LeqTy t t
  LeqTy0 :: LeqSt i j -> LeqTy (NatT i) (NatT j)
  LeqTy1s :: LeqSt i j -> LeqTy (ListT i x) (ListT j x)
  LeqTy1t :: LeqTy a b -> LeqTy (ListT i a) (ListT i b)
  LeqTyArr :: LeqTy t' t -> LeqTy u u' -> LeqTy (ArrT t u) (ArrT t' u')

------------------------------------------------
-- Does a Stage Variable Occurr in a TypeIndex?

data AppearsPos :: Natural ~> TypeIndex ~> *0 where
  SPVar :: AppearsPos i (VarT x)
  SPArr :: AppearsNeg i t -> AppearsPos i u -> AppearsPos i (ArrT t u)
  SPNat :: AppearsPos i (NatT s)
  SPList :: AppearsPos i t -> AppearsPos i (ListT s t)

data AppearsNeg :: Natural ~> TypeIndex ~> *0 where
  SN1 :: AppearsNeg i (VarT x)
  SN2 :: AppearsPos i t -> AppearsNeg i u -> AppearsNeg i (ArrT t u)
  SNNat :: NoOcc i s -> AppearsNeg i (NatT s)
  SNList :: NoOcc i s -> AppearsNeg i t -> AppearsNeg i (ListT s t)

-- no occurrences of stage variable names in a type

data NoOcc :: Natural ~> Stage y ~> *0 where
  NoOccV :: NatNEQ i j -> NoOcc i (V j)
  NoOccN :: NoOcc i s -> NoOcc i (N s)
  NoOccInf :: NoOcc i Inf

--------------------------------------------------
-- Relations that stages and type indexes are related
-- by substitution of stage variables

data SubsSt:: Natural ~> Stage a ~> Stage b ~> Stage c ~> *0 where
  Sub0 :: NoOcc x a -> StageEQ a b -> SubsSt x y a b
  SubV :: SubsSt x y (V x) y
  SubN :: SubsSt x y a b -> SubsSt x y (N a) (N b)

data SubsTy :: Natural ~> Stage a ~> TypeIndex ~> TypeIndex ~> *0 where
  SubVar :: SubsTy n s (VarT x) (VarT x)
  SubTC0 :: SubsSt n s s1 s2 -> SubsTy n s (NatT s1) (NatT s2)
  SubTC1 :: SubsSt n s s1 s2
         -> SubsTy n s t1 t2 -> SubsTy n s (ListT s1 t1) (ListT s2 t2)
  SubArr :: SubsTy n s t1 t2 -> SubsTy n s u1 u2
         -> SubsTy n s (ArrT t1 u1) (ArrT t2 u2)

------------------------------------------------------------
-- Abstract syntax for patterns, case arms, and terms

data Pat:: Env ~> Env ~> TypeIndex ~> *0 where -- Inf problem? don't have coerce
  Wp :: Pat e e t
  Vp :: Natural' n -> Pat e (ConsEnv n t e) t
  Zp :: Pat e e (NatT (N x))
  Sp :: Pat e f (NatT x) -> Pat e f (NatT (N x))
  NilP :: Pat e e (ListT (N x) a)
  ConsP :: Pat e f a -> Pat f g (ListT x a) -> Pat e g (ListT (N x) a)

data Arms:: Env ~> TypeIndex ~> TypeIndex ~> *0  where
  NilArm :: Arms e x y
  ConsArm:: Pat e1 e2 x -> Exp e2 y -> Arms e1 x y -> Arms e1 x y
 deriving Record(a)

data Exp:: Env ~> TypeIndex ~> *0 where
  Ze :: Exp env (NatT (N s))
  Se :: Exp env (NatT s) -> Exp env (NatT (N s))
  NilE :: Exp env (ListT (N s) a)
  ConsE :: Exp env a -> Exp env (ListT s a) -> Exp env (ListT (N s) a)

  App :: Exp env (ArrT s t) -> Exp env s -> Exp env t

  Var :: Natural' s -> Exp {s=t; env}e t
  Sh :: Exp env t -> Exp {s=q;env}e t
  Fn :: Arms e s t -> Exp e (ArrT s t)

  Fix0 :: Exp {f=ArrT (tc (V i)) a; env}e (ArrT (tc (N (V i))) b)
       -> SubsTy i (N (V i)) a b -> SubsTy i s a c -> AppearsPos i a
       -> Exp env (ArrT (tc s) c)

  Fix1 :: Exp {f=ArrT (tc (V i) t) a; env}e (ArrT (tc (N (V i)) t) b)
       -> SubsTy i (N (V i)) a b -> SubsTy i s a c -> AppearsPos i a
       -> Exp env (ArrT (tc s t) c)

--  HasTy :: Exp env a -> Ty' b -> LeqTy a b -> Exp env b

  Coerce:: LeqTy a b -> Exp env a -> Exp env b

------------------------------------------------
-- Examples

v0 x = Var x
v1 x = Sh (v0 x)
v2 x = Sh (v1 x)
v3 x = Sh (v2 x)
v4 x = Sh (v3 x)

-- shorthands

ap = App

caseE e alts = Fn alts `ap` e

lamE x e = Fn {Vp x=e}a

eqInf0 :: SubsSt a b Inf Inf
eqInf0 = Sub0 NoOccInf StEq -- e.g., (Nat Inf) is equal to (Nat Inf)

-----------------------------------------------
-- Small Programs

-- copy = Fix (\ copy -> (\ Z -> Z | (S m) -> S (copy m)))
copy = Fix0 body2 (SubTC0 SubV) (SubTC0 SubV) SPNat
  where body2 = Fn { Zp         = Ze
                   , Sp (Vp 0m) = Se (v1 2m `ap` v0 0m)
                   }a
        copy = 0m
        n = 1m
        m = 2m

error: pathspec 'work/ExpsWithTerminationWitnesses.prg' did not match any file(s) known to git


Added a testfile for testing unreachabilty to the test suite

data Operation:: *1 where
  Print:: Operation

data Object:: *1 where
  TheOutput:: Object

data Action:: *1 where
  Act:: Nat ~> Operation ~> Object ~> Action

data Permission:: Action ~> *0 where
  WriteOutput:: Nat' s -> Permission (Act s Print TheOutput)
----------------------------------------
data Seq:: *1 ~> *1 where
  Snil:: Seq a
  Scons:: a ~> Seq a ~> Seq a
   deriving List(s)

app:: Seq a ~> Seq a ~> Seq a
{app (Scons x xs) ys} = Scons x {app xs ys}
{app Snil ys} = ys

----------------------------------

data Trace:: Seq Action ~> *0 where
  Lnil :: Trace Snil
  Lcons :: Permission x -> Trace xs -> Trace (Scons x xs)
 deriving List(l)

-- Test unreachabilty by non-staifiablilty of predicates
unrByPred :: Trace a -> Equal {app a b} Snil -> (Equal a Snil,Equal b Snil)
unrByPred (x@Lnil) (p@Eq) = (Eq,Eq)
unrByPred (x@(Lcons x xs)) (p@Eq) = unreachable

-- Shows unreachable can't be spoofed
##test "Really is reachable"
 hh:: Trace a -> Trace a -> Trace a
 hh Lnil Lnil = unreachable
 hh Lnil (Lcons x xs) = Lnil

-- Test unreachability of patterns alone
unrByPat:: Trace a -> Trace a -> Trace a
unrByPat Lnil Lnil = Lnil
unrByPat Lnil (Lcons x xs) = unreachable

-- Test works on case statements as well

unrByPatByCase:: Trace a -> Trace a -> Trace a
unrByPatByCase x y = case (x,y) of
  (Lnil,Lnil) -> Lnil
  (Lnil,Lcons x xs) -> unreachable

unrByPredCase :: Trace a -> Equal {app a b} Snil -> (Equal a Snil,Equal b Snil)
unrByPredCase x y = case (x,y) of
  (x@Lnil,p@Eq) -> (Eq,Eq)
  (x@(Lcons x xs),p@Eq) -> unreachable

error: pathspec 'tests/unreachableTests.prg' did not match any file(s) known to git


New test added

New test added

error: pathspec 'src/test/resources/prg/mad-program.prg' did not match any file(s) known to git


added new simple orange color

added new simple orange color

error: pathspec 'programs/halloween_simple.prg' did not match any file(s) known to git


start towards uncharted territory

start towards uncharted territory

-- parametric HOAS (PHOAS) representation of terms
-- advocated by Chipala and B. Oliveira
--

data Ptm a = Var a
           | Lam (a -> Ptm a)
           | App (Ptm a) (Ptm a)

data Tm = Tm (forall a . Ptm a)

-- illegal
--
##test "not parametric"
 ill = Tm (Lam (\a -> a + 2))

-- this is parametric
--
leg = Tm (Lam (\a -> App (Var a) (Var a)))

error: pathspec 'tests/typed-phoas.prg' did not match any file(s) known to git


add definition from memory (for now this is just a placeholder)

-- ref to paper? Nicolas Pouillard

-- originally
--
type Succ a = a `Trunce` ()

data Trunce :: * ~> * ~> * where
  Old :: a -> Trunce a b
  New :: b -> Trunce a b

error: pathspec 'tests/NamesForFree.prg' did not match any file(s) known to git


adding the work file

adding the work file

copy = `copy

test = HideLabel copy

HideLabel y = newLabel "x"

{-
f x = case sameLabel y `a of
        R (t@Eq) -> t
        L _ -> error "BAD"
  where (HideLabel y) = newLabel x
  -}

error: pathspec 'src/work.prg' did not match any file(s) known to git


ajuste no despesarest

ajuste no despesarest

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/alvarocneto/prestconthack.git/'


ポータルを追加 指定したPRGリソースの先頭に、指定した関数の定義コードを自動追加するGUIアプリケーション

' PROJECT SMILE++
' Smile++ Portal 2017.1

option strict

acls
prgEdit 1

error: pathspec 'portal.prg' did not match any file(s) known to git


New test case

New test case

error: pathspec 'src/test/resources/prg/mondkalender.prg' did not match any file(s) known to git


Add test with default video mode

Add test with default video mode

error: pathspec 'tests/spec/samples/execution/default-video-mode.prg' did not match any file(s) known to git


atualizada rotina ZA1

atualizada rotina ZA1


parser tests go here

parser tests go here

import "../src/LangPrelude.prg" (parseM)

monad parseM

verify (Just 67) = "ok"

t1 = verify $ runParser p "42 25"
       where p = do a <- parseInt
                    b <- parseInt
                    return (a + b)

error: pathspec 'tests/Parser.prg' did not match any file(s) known to git


cTic := Time()
While .T.
    If VerifyOnServ(nTimeOut) != nil .or. ElapTime2Sec(ElapTime(cTic, Time())) <= nTimeOut
       Exit
    EndIf
EndDo

//https://pt.stackoverflow.com/q/352127/101

error: pathspec 'xBase/ADVPLElapseTime.prg' did not match any file(s) known to git


demonstrate a type-safe transition system

-- some infrastructure

kind Invariant = Pair a b deriving Pair(ip)

-- invariants
--
kind Timer = Running | Stopped
kind HandShake = NotFlying | Flying
kind Signature = A | B | C

-- our possible states
--
data State :: Timer ~> HandShake ~> Signature ~> * where
  StateA :: State Stopped NotFlying A
  StateA' :: State Running Flying A
  StateB :: State Stopped NotFlying B
  StateB' :: State Running Flying B
  StateC :: State Stopped NotFlying C
  StateC' :: State Running Flying C

-- coherency protocol
--
data Message :: Signature ~> * where
  TriggerToA :: String -> Message C
  TriggerToB :: Message A
  TriggerToC :: Bool -> Message B
  AckToA :: Message C
  AckToB :: Message A
  AckToC :: Message B

-- referring to signatures
--
data Sig :: Signature ~> * where
  A :: Sig A
  B :: Sig B
  C :: Sig C

-- elementary transitions
--
data Transition :: Invariant ~> Invariant ~> * where
  -- message primitives
  Send :: Sig s' -> Transition (t, NotFlying, s)ip (t, Flying, s)ip
  Received :: Sig s -> Transition (t, h, s)ip (t, h, s')ip
  -- timer primitives
  StartTimer :: Int -> Transition (Stopped, f, s)ip (Running, f, s)ip
  StopTimer :: Transition (Running, f, s)ip (Stopped, f, s)ip
  Expired :: Transition (Running, f, s)ip (Stopped, f, s)ip
  -- landing
  Land :: statelike t h s -> Transition (t, h, s)ip (t, h, s)ip
  -- building longer transition arrows
  Compose :: Transition (t, f, s)ip (t', f', s')ip -> Transition (t', f', s')ip (t'', f'', s'')ip
          -> Transition (t, f, s)ip (t'', f'', s'')ip

t1 = (Send B) `Compose` (StartTimer 4) `Compose` (Land StateA')

error: pathspec 'tests/Lockstep.prg' did not match any file(s) known to git


Correção na integração

Correção na integração


Function MiddleTrim(cText)
    Local cClean := ""
    Local cLast := " "
    Local nLen := Len(cText)
    Local i
    Local cChar
    For i := 1 To nLen
        cChar := Substr(cText, i, 1)
        If cChar != " "
            cClean += cChar
        ElseIf cLast != " "
            cClean += " "
        EndIf
        cLast := cChar
    Next
    If Substr(cClean, Len(cClean), 1) == " "
        cClean := Substr(cClean, 1, Len(cClean) - 1)
    EndIf
Return cClean

//https://pt.stackoverflow.com/q/242618/101

error: pathspec 'xBase/ADVPLNiddleTrim.prg' did not match any file(s) known to git


a cunning set implementation

a cunning set implementation

/bin/sh: 1: Syntax error: Unterminated quoted string


Added tests

Added tests

/**
 * Teste do analisador de expressões.
 * @author Marcelo Camargo
 */
Function ExprTest
  Debug( { { { |X| X * X }, "Lorem ipsum dolor sit amet consectetur", nil }, ;
           .T., .F., 1.39, { 12 }, Person:Create( "Bar", 10 ) } )
  Return

error: pathspec 'ExprTest.prg' did not match any file(s) known to git


added new example ado.prg

added new example ado.prg

/*

  Qt5xHb Project - Example Program

  Copyright (C) 2012-2017 Marcos Antonio Gambeta

  E-mail:
  marcosgambeta AT outlook DOT com
  marcosgambeta AT gmail DOT com

  Website:
  https://github.com/marcosgambeta/Qt5xHb

  Users Groups:
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb    [ENGLISH]
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb-br [PORTUGUESE]

*/

#include "qt5xhb.ch"

// constantes do ADO utilizadas neste exemplo
#define adOpenKeyset     1
#define adLockOptimistic 3
#define adBookmarkFirst  1
#define adInteger        3
#define adVarWChar       202

// Ateno:
// Este exemplo  compatvel com o Harbour, requerendo ajustes para funcionar com o xHarbour.
// Requer a biblioteca hbwin na compilao:
// hbmk2 ado ..\qt5xhb.hbc hbwin.hbc

PROCEDURE Main ()

   LOCAL oApp
   LOCAL oWindow
   LOCAL oModel
   LOCAL oView
   LOCAL oConnection
   LOCAL oRecordset

   CriarBancoDeDados()

   oConnection := win_OleCreateObject("ADODB.Connection")
   oConnection:Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+QDir():currentPath()+"\teste.mdb")
   oRecordset := win_OleCreateObject("ADODB.Recordset")
   oRecordset:Open("SELECT * FROM cadastro",oConnection,adOpenKeyset,adLockOptimistic)

   oApp := QApplication():new()

   oWindow := QWidget():new():setWindowTitle("Exemplo de uso do ADO com Qt"):resize(800,600)

   // cria e configura o modelo
   oModel := AdoTableModel():new()
   oModel:setRowCountCB({||oRecordset:recordCount}) // total de linhas
   oModel:setColumnCountCB({||oRecordset:Fields:count()}) // total de colunas
   oModel:setDisplayRoleCB({|nRow,nCol|oRecordset:move(nRow,adBookmarkFirst),oRecordset:Fields(nCol):value}) // contedo da clula
   oModel:setHorizontalHeaderDisplayRoleCB({|nCol|oRecordset:Fields(nCol):name}) // ttulos das colunas (usa o nome do campo)

   // cria o visualizador e associa ao modelo
   oView := QTableView():new(oWindow):move(10,10):resize(800-20,600-20):setModel(oModel)

   oWindow:show()

   oApp:exec()

   oRecordset := NIL

   oConnection := NIL

   oModel:delete()

   oWindow:delete()

   oApp:delete()

RETURN

/*
  A funo CriarBancoDeDados cria um banco de dados do Access, na pasta
  corrente. Neste banco,  criada uma tabela chamada 'cadastro', com trs
  campos: 'codigo', 'nome' e 'valor'. Nesta tabela so inseridos 1000
  registros.
*/

STATIC FUNCTION CriarBancoDeDados ()

   LOCAL oCatalog
   LOCAL oTable
   LOCAL oConnection
   LOCAL oRecordset
   LOCAL n

   // comente esta linha para o arquivo no ser recriado
   // cada vez que o exemplo for executado
   ferase("teste.mdb")

   IF !file(QDir():currentPath()+"\teste.mdb")
      oCatalog := win_OleCreateObject("ADOX.Catalog")
      // cria o mdb
      oCatalog:Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+QDir():currentPath()+"\teste.mdb")
      oCatalog:ActiveConnection := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+QDir():currentPath()+"\teste.mdb"
      // cria a tabela
      oTable := win_OleCreateObject("ADOX.Table")
      oTable:Name := "cadastro"
      oTable:Columns:Append("codigo",adInteger)
      oTable:Columns:Append("nome",adVarWChar,40)
      oTable:Columns:Append("valor",adInteger)
      oCatalog:Tables:Append(oTable)
      oTable := NIL
      oCatalog := NIL
      // adiciona 1000 registros na tabela
      oConnection := win_OleCreateObject("ADODB.Connection")
      oConnection:Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+QDir():currentPath()+"\teste.mdb")
      oRecordset := win_OleCreateObject("ADODB.Recordset")
      oRecordset:Open("SELECT * FROM cadastro",oConnection,adOpenKeyset,adLockOptimistic)
      FOR n := 1 TO 1000
         oRecordset:AddNew()
         oRecordset:Fields(0):Value := n
         oRecordset:Fields(1):Value := "Nome do cliente "+alltrim(str(n))
         oRecordset:Fields(2):Value := n*10
         oRecordset:Update()
      NEXT n
      oRecordset := NIL
      oConnection := NIL
   ENDIF

RETURN NIL

#include "hbclass.ch"

// A classe AdoTableModel deriva da classe HAbstractTableModel,
// sendo que no adiciona nenhum recurso extra. O desenvolvedor
// poder expandir a classe, conforme suas necessidades.

CLASS AdoTableModel INHERIT HAbstractTableModel
END CLASS

error: pathspec 'examples/ado.prg' did not match any file(s) known to git


MakeDir("caminho desejado")

//https://pt.stackoverflow.com/q/170744/101

error: pathspec 'xBase/MakeDir.prg' did not match any file(s) known to git


KWidgetsAddons: added KAcceleratorManager

Added:
codegen/KWidgetsAddons/KAcceleratorManager.prg

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/marcosgambeta/KDE5xHb.git/'


Added Clipper

Added Clipper

error: pathspec 'clipper.prg' did not match any file(s) known to git


trees where nodes can be labelled and labels may be trees themselves

data Dir :: *2 ~> *2 where
  Hor :: name ~> Dir name
  Ver :: name ~> Dir name -- tree of names!

data Tree :: Dir named ~> *1 where
  Unit :: Tree (Ver unit)
  Ni :: Tree (Hor name)
  Fork :: Tree (Hor name) ~> Tree (d {-name-}) ~> Tree (Hor name)
 deriving syntax (tr) LeftList(Ni, Fork) Unit(Unit)

error: pathspec 'tests/MetaTree.prg' did not match any file(s) known to git


missing file

missing file

L*x?5O]:h8!*;ujj_ b>?_!#m X_@,u)eL.5ImRZ!+.\"Ž$hmگ
L>ij$4Ͱ5?6PJKuN
}}eF*J95FPN3O	BD.`ܠ[p'rJ`c8ɫeԬ~ 6	I8,85
&q*n-8)@_JX:8jʬ	XU7(L	7ʦY&)X++^ս,ĢZCT LaN-
:$<DJ"QK@QXDڢ$\t%(DNxbrސS=K?m6HD[
U
Kq0]IIn)	j/諊yTTR*_mɨi2W_(Rkʎz~=`&)z`T,
I1֢JWRZqnbӝc}`𘨿ʒu}/x\"]8^,Twxkt+KsQKh@AZ$V
"MMBVϪL#!aAdզ8I:NT9Kc"GLQgw:
RdH;p7 /60M	(L[
8:HgDFqtorPWCX8 HK<()
#+&L>
_a:ƨ K$>E XP*qa"5SMY.!
W yZ^`\cbAZ`H3D4&0DtDhEQFK 2C*c`W6X*IR4m*U
W>%DLQd5MӔKc(W>j%)Q0`؛)β
`xK[h7PDCi[C%
XL_mI蓘)JԤ0⪒%H.I4wFv
H G
jh*&`_ƯuQ7- 9Jآao'B*$GHo#VƸIt 1yyHeh8LZ0 _X(n)7*+q,lX@-ߝ6t`8Wx'@ߡ W5Ӹ:(#
)	'_ 5!65P̜K *ѐ&M,K%*-(X@ pLl@LٌZyr흙w+'нv(:ĝ`s
:j*	 c1F؍Ѣʮ`ش9v<2@Lj˘H/)#kQ	27Т h@ƅOɑvWg}u~V
&ea³>,XbBA@e+ fñbEDC,&%l_]Ƌ,XHGbFLٗzWAEʷ.,KXJIb	̸ye,X̱bNML,
_p0Yő,QXPObylˇ|>,XbTSRLJ
>
5ҺWJ]+tėĖĕWVĽ.Ȯ_&i}O~U`O	yq/&ՠ	)+<LIER;TAD.CGFF⎐.L;`PL1Bݼs@RrN*<	mWNTs4d	}"9#81R`
o|L)5le
	+1LAi
?Bv,!.P7 o!a.1C 	b
 !
c9<H0123456789>mZyE{blrou3
~/~2x%@oWZdIwoDZc-ows xd~`|ކ8ID=}	>faOwdsE3D P}]/(b!~ |5xw;bo.NݗM;d 	ѿT]!˫yxZ^6Zby4oy$1xvPi:Bjx
NCZVa5 +aP#ob4 x`O0y{d?Bx?"ED
c2P쫇 hcwb}8?6n0xby-xo°yXwl|ebCl,`B=?i 4`~u?wIFl<~ajl~عGiJg(x1GVX>tX@R
b04
$@
X
fĈfL欠H,;ui\e0"`L0QF5Qz|
.hM'Փim&4ڬ%>L;31Uk
L3u6xLs:VR,nX"ĖЕuZYTDX%d+{0YؐX"5[BR{4BMFl	xK6ya	Y55Iy!&5ZT 6`3gm3&Qu2bv1Ue53!8G0@ϣPr5NeTG|e4@TBx?0:
#f&"Հt6_)	R&vT!R(I)PicL04@-\8jJ`7V]\Yijkt:ru98tuNptC!uӐtuE!tӐ!uNBP9uN03NX3N3N3N:tӥ(t C9Q(0gRPXT@U9C8Vrb(Wrb(Yr ZuA!wӐuHwt)v:rOw9avVwNvC]!wӐvd]S	k!wӰ҃pҫp҇N:tӥ(#g(Kg(sg TXUʫVÔb9WCb9YC#3XZ(Kg[Ps\rwtx:rw9ywNyC!yNRxC!yӐxytx:r$y;:tӥ8'x3OpwçJ88g WÔb98C8'gxO᜸3wp\8*+y9zcyNzC!yӐzyt.]SNCBօ9{rz9KV.u%9lגXHNsuYT1ӁR1ӝi΁tQ9c1ӝDJ5r8'2QӽDk)zVvl-bQXIsGT1PYJz<*-ZҁQRy[nz-{ct]U&:74P^	|c`_-AZ2Nj߆>b1G]r,Xb,?_BW>L>yX`Y "=<(@L&>Sk˛AX"Hl{0U0T%"1	ܢC'0Q`H.KI
VYnJAZI]$LxfjKk
	,P^SC;kpxCMW' U
&	<v&)pϯ9@/xg6ذ=KCh۰m6a,rs9 vf`vsIiĘC?<4	^fd`	qThRc+1T~l
KCF>Ϟ<y32dɺH$i0I	'߆̀98|>sGc	I$hged@`ph
_&mU
4}?ix؃<3vaj8(G:`0B2*|@#߃
Pjޙ/@Ȳ7L }ڎqX`07fϘhHӂju[4Ř>
F@:7M[Ҷ'Pq_C2΃2/_ZdFg,@)
`X<8;s0#15ACFL?Ysfeϕ<=>b@E_>?QITp6s+Δ+΢(8c2rҒ~JqD7s9(?h
sV
&TbjHj9߀u@ځ$*8?cPu@\:D7Egq`;Aa̶oq?Gld
zuɰ`8p*
Ͷ8jσ&q<&+;́$̬qq }[X5x?ˇP@!<NʡɨQ]P@|?`'9}[0 Lc.	=\˨
>|h"s1C	dڃA;'7Kpm*
2
sn9?l	Ç(dm>z	FܮG$I!?8p{@3!P
h(ـ_4xD	p
?g_@%PLwШ>|G!āmPDvl$Qe
Bd3m7@>W( 772hݴ2NOɐ940k<x׫sp#ɯ@3OzrAї+˕NZH{u2{fb&wp8 S3vK4&{,I?,}io8;S`=V1qmD5AQ+Y3|v?cV2 80,:k(A8P @yux[9a[AɬӫCDA<xлWW.A관ɇ8v`P*CN)YKA{*,J`΂ޜn%
MNllƧ&1+YLNaa}'*NQcf1cIkauačkh*QVϑXN 0j9@W%E$dF50AKTWC5""0P6SkmAK8

n0{b!@`Lf'*؄U
p`6bCMhsH@ 43F6Dkݧ		΀՚618>Λ{6c@1S#hmar[yd04J[xl K6 -c|$` oc`ˏo({ee0JPZ[@(3Illp8^.Ep4~y(FQمxm	p=8-R{-=Ȁw_Q-^vLi`o=m9wDM
h7omyry~KK(hNУ`#f4
1π0|CHxIC\PN6rp
5 vcl$С"I30y А|Lzd D+Z	1Faй<zxD5sDZ8eS
Р|VoPoĎ`
G
X0
@$6G0 నn K &P&WDpO%`%0[p~6<	7Ě;xc#Mq0<3Q GO&KrT#nLFLаN<`N
$ P!R'=)2L@HpMVIPEdQ0s7JLJm.*C2&НVMW\ғs=kD#&$pA[Bt+]
[$6((P4rJQ%fr`ԍi}X-z\ә$]p[	2rǣ*ɀoú޷ؐwa"9AǢޞGՌn<geərt"
sj_ȗHLv{Rd"4L(nȶ"s4ՇEVI3I0TC&.0n ҹ_)Ho^qԢZds}
2LZ8<
߇?y[⧕l)L@o?\!rf3{NmH2@f	YJXDX8ޛ߇-$\&ȥI9IÝ%*i` obQ0\"yptbL+	8C.>9V!]rH@?N KQcMV	˵%BRB~yNai?H˕[Kz:EeBLpy7"q[}f29Mf,TIsj&p؞h@0u3LɾJQsp|mq?n<769TB5=,v3t3KV6Г_qnW5r/>yͼJ0
sUL\q}Vܝu0mľrY_:(e]%UF
$')5+ri	utҖ#ML-qU$])k.Y4tLLq+?m&ɫ憬m*SJ,q&oFr
%i9 ސ?݊x6R4DN1bI&EoW4\B7C
a.rAګWFL8̂8ZDsT	q8#ÎSpJm'@ s\
3~cPA0Nk߈2cA"`/FQ߄aJ6G5K$eQL܀F\vjpڸp64ap4@6~9,Hrw\0X3U Cp@5	A@`7pp@ք? }3fLOأ8wRk
9L4H+@4<Fa8<X:b$,cB>v oJ281%[Q )EFhYfళ-|.T4eqH*`J4XHyG/rBFPH0`\&
t\h
ǡWב߿ы3Ɍ^.()7@B34*o^ K4ff&F;
	M`0b:lECfB
3,ʪ4f3?. Kg?fypF̵:8[$ 8qkUkB&JfYTFTa0~@`,B$	|^@AfaD @@"LJvv"fҝc(=ĦP(Yw4D6vy[]x;19Ïrs}|+9`e^pؼx}n_NL'W8ߜc<
;}頝(ʐ:>ҹh)}oխr*>ϔF4$*tO'!)_`EHv	j]h;Bvw0	i鿝L([#'ۦz)̲"n}Mnymq	YhLy#y:'W08z0) /nS[lF8՟yۿ;(=x^2ztO`ZRۼ"SEY}%L{{k[udfev*OX	lVZo޽@:DՐͳEPFJսGsuYw܉yn!LCniԙ-MQ}PjT}L>	A%8jr*rTLײG)}oeL&E
Ai[ݳ52"_{)Vt"A(:b%CL+quH}n
-0
&QȥLIY>eVwt8\wwŮ]e!4bzF3L	393Y{~}[8Nv_\bU0[@g	#e/\)XELNk+>u`J`}Xu䳇VcTe3	@]]`GJbkNT0*#)9#۝hG!=){(#{J΍C#3úQp-"SAz>jȄ;J28}5S(L=&VSMPYj=YNԽ2+Z:cdZQ'}Լ0iSFMLa|!W0LΧ,_i-g
)p*U ԯ-,")G=0kɀj'/i	^iHL[{.չ/S9L0>X)m/&1U5+5ͭ'@G*b[`_s2\dDZdDĹ]W{З+n9ī\^rBx Lp@xXo0 .th֣+	::/JZ3/˶xX}7 H1eԬ߿ȍl~J!hx%A!D
	+b"Z5(u%*JaQ̾^@lP"TF`b@7k
=:@Q3/^v8e&Ff,Hw3rTo0  D!"d
$
R EP2z/
 '!*+.1#$2?>5(),/0"%3j<4-'!&
4(siL=ē햦;Bc&؁1v
dS
_R9ݿOXCQ?ɿ<`RѱV	qX􂈍Z/쳁5|,:v±yvWPg`[jj$=
*+A:u-䁫6u2FZ:g}mub9`cu@us*{G='9l74𹞢VXem!yor9YqAD0-mD0a͛<Jh$(w$ž8:7n@IAXd\1-8+<:CRgt]8ipdYub"l'@7c2nt3Yub"ܿ.ā2	ghqQp]kVۍ-_:d5Ƌbjڌ;7bׯaicԌ}7~ ;hC4w޲2_g|ݍދLIb2YbEy`
a@9ZTi9a	JqescT]z5Ae%6nnhLi	bc2Ĺg6أ3_4>Iҍi
20_1/c$%TaQl Tnl׾7qdsf{	Rf\1EXT05Ս*a5:nNA9[b)=@[A(]MM1=a-&t	B.AwKڑf	:_-6s2m=VFaX0;6}Ul%wu_u
_:_Q;Wi&*_	Z-K=h>CB9_7'`\rx{
Hf>
`@lj,6*>#N>xwɇd-֍Ǐ
7cAZKd	ku[HOR7(rZ+ H @YTU!4s`x}##NR]sc^?E,qHq4uuc5^Jxj81Ո#:s8͍\j-iH|F	}W?
9iM$`JH+<@[ k9J]|jt)@\eA8#PrMsb"N[.5*lo[߶S a?={Wpzx
m3
)$qC,	4e@.f=0N>	~Ih`ǰh[˪\B3;?0Hh1(_hh;\ҩV^sRTx6732C8t<-*Ĝ4
9Jzr<v^>LHr5ɨ6sP0
m2\IKl	.q?OIyK`0 Ol3	+qcd}˰M?KmI_P2TJ&?F¯):X%"F|2tE{'5ӃpQ]T60,N2
V	C
|+{8V%ӠĴ/L'`$OjBlLy&[:'N}Cb .Jm0jL9[4 `^.RaEM8S
at3f9L
*vW^
Sep}_ܸC>0@wi#	Dj'IQLP)=;(mCL~HBeo-A|ph+w
qxɐŽc"b8<<D5ڰ0((ݑØa} `Uo8?$vu
^3v}! &R2t\?ռ0L"x0}F=# x%Md<zȘoЉAnP\=w7VѤ~~`ii>;L"ɏ
v'Sw<)uȔŹT
}KJU]:# _<iFu im!j&e1P`jj'3}ü]" 0Z(bΣO}Jg|v
 _w?^T^i/~0>!AB	½yL)~&Si;Ë/xv}@~KЖn 2`ܟ)t1	WN#=XLWc
p
d#Kcf@03Mh_ B
?J_NgEb
v	cs_x	ԍ)C
i>'ml#GVKnVX.FG!"t
9ȱFvy#w xL)0f,UaX[צ]4at]/9<hPL" !G
XbXbuy4!X*5}7@bDJNwI"/+jie]PAѼӄ}i7Ϙ
%F8 W!L!qZ	f]z11r1y)hz0htduUȼfrWsYHJ h:+	=:#LsPE2Q$`}|4LOHjTh)V`01!

#@AU9P`abcdTVWRSXQPfc
"% !$>O%8y
 6@$;$18<&:&?&'8!a<	6,&j;Y5<I,:̿?``1(=kZi>3lC05U0:R.D9VFF\LdtN2̫
Z 5. 7.71?Wܠ;
8p18/xwp,^=r
U3P+9LU84Ӹ3vBvy@hh=!'%#c+&tdo/v"!⳿`I1=pqN%$h")3ZV#Oj10/BôkF/=$0ĺ	:Cr61.0㘡{8"pb<<uԳ=t5F:t?7sb*LxUJLIbEt@Ihr~h>s5CkE;f~is4rljG:;=4}H?}Bd4qwq+p%EG $7
Ae*@l%!4 sʪ@hpΆ@:,ȉ[c ʱ0)31D
c=
DO3|ұ11Az1DbB@'[ iPJPKKH"o`110}&*(`	Ax"KN!PNޫ,wBa"!#8j0b4Lcz)>RY`9B#*18?FMT[bD ;ꈽ:~/G_N(i0 }4*"!_j+DfL@YWA,Ha*$
Lv*ƞD7CC(@696$TU:MOW;*LSFIADCOVER$ +,U3L?FvhCԈL5Ѐҗ^΍_8cT&5^u8N`EZM(	n-iiʍp`8u+P_rsԷvO0Jm " 52y5$tTmD$;lDY40)xTNXWZ`MUkee5!J?{;,)L4O\+.3U,qH~=4ߢ21f ƨL{H56v2wQK	]НߨŷAIAl`u LB|K.e}װm?KWD5쩃GG{?F)Cd^x4"L>~ JLsp?
Z0,_Ʋ
b7UM-,la1h %?L+]SVW½}`dI7I}.J'͕0M`;V8o
aui
-`L>Ulvf^5ICS}_KSC0@ji{	NԃXS5IL'mɴ,)~(mN6LM90
L(v~pҥhxabmл69OM8˨R30e`+Pr#~)?I
R!Q+v	8rJ$!{y )?9mL30pJ=#[ܷȘ*zː=7%)Z~'a3i]LO
v#U+[w?F))KR[ZW776WRTcV	 id5|U<s
J_ȹ{`])T,`'&
aRb.Q}Ja߲kSP G#'^ʹx_7T1!	t$
	_*Лd
|xTG )ǤԀ3n !F	s)%='	v/#=cL)
w2Z̧kV𶹪ZK@0zzMdɵB
vJKNLQ
`waNcaÎ
i	$-8KOWX_^5G.j*ju]I`-bZΜW"M[X۠ Ms/vUy+w UL)0kj,m"n O
4s8C-XmGbOXcnrx|,Xb˂A1ywHZ']ՃHUhULia7
J8 eq^Rf1!s,zllrlyjFq͍hBϓ#Aڙ+r*s]J h	t`Z+L`HYYh)_`
'! !"#f,/0%)147lV!(^4-.&7*258J+
$'+369?%A~}K3S@&9KU56t7k#bs9w`u緩l:F6zߊA<dblX.cTq7G5Ý%F<>ßz\ab"\F`Pt<.]N9qv-aɵHC-($C.Rͪax?r&w~;t-~9ZLH;_I?i+gx÷|4>̠UUs
|7f>&6V@*Qw$D|c]_	%. 32v2a/qӬ.ii!w^'ct3p~HDh:20ֆ-B~GWѦ"Bn	8'ஒm#
ޠVQ
rw
6}	꼿3nZ/brv]ٻ:ocݶV56+8}7y;D-tǈ\$Zq	z3Й	{sBt8p]1d/kJpX65+zsAX
61p@P1`pbQ̰f3e[~un Nr̺c1π_1lDDг>+X:	;h,XA|ż?.r59<AC~-D`WP/bۭkhTȽVrOV.2ŵZC=躡 BHI	!3qx`3o0*wv)ͧP%p&ƭBrcz+)
(Ws0{Yɦut9P]w3bQK7`Df/~|1UTJ5	S&s9qs)ᘑK ><3	l:A譙$roqis٩ɑȏr93rHUTs+j^fM혍?fiK=?ٳ6
`r>;&%Ndq.]0M&KCsf"Xv{fl/UwrƼƺ?֌B:f~@wvg@ATip ݂@o@hg.Dlg.}QZҘl!TVcH8i-$ a'	'39i'>s1QG%9〄l[< ($
a.<q	O@Y$"0KZcY6#`I`lu#9'8sGmA6d#=fPZ"lTRȟ
hnB!plAڈУRot\ t	*JA3@[#: {$ÿmh=!
ap
aЍ&-ۭ%%@]04,%Qv{nWtM.OP[
%`|_n 9hW0R
&?()*+(i&o7y3ku%w1^rHf4coj->S2

 h	 @!H"#A$%$&'(j$@1B @A5QYdD(',ؽb6/j~Sb ?7M	TU{:HACoELPORMI @vW(H+L%``6RF
m<K9	{tw-ߺ{YV"Ģ `hzyE!<==B#.cOf0t7EeYKҟ(SdoOl}$BuITN)Nz`iMQi?Bz5]LbdLO	JHV3wXU,0B44 jLHf5}?6kv\/.훝=Q{^dIȭ`9 xwJD&?KSgnyLd>t	S.. |C
A9f+@)_r?7SiUGs-	~e/RRL/?!}="^੬9D}P\u}ޯ 6Cre
6
saht5LISiۛc}l<0eɽtWkm4L+ͩ#z>p|qT*^*[{Zg{ӛz\{+U/P
m*q
V{.AJ$!N -旤V}Z^3iR=#8J۲o;:]oJ43ە|XrI^2(g̿N$_ޣQnHC
aA3w|I./H_w)^}
AH4Q@Qg
K=H0)M~ܿAHM
yϹ]r3ї#=`ߌ'梍
i̽-#G#(HPSlx)zH8@'گ5"tד(}Zz3kޗMz
o Sd	@==zQ^i%,=
g)q0)xꀦj/R_k`h!MD&(8ˆ93AFt4N"
v
0+-}
L)12:=BDGX#)	(r%,C./0 '*$567;>?CEH@~}^@iz:H<p*@"Q=ar`v-6$_N<L9r9E~*u4t 3>{LA?s~6};@*ehj..rX0-^-,1rHK8^ 8TIQP8%F%a`H`q8V37xѲ	ʤ2>2-=XqeiC-IX9,:8=AGpfQ.&`!d]{%)<8\rX̜%~{	MB@4 (5c*7;Np0$Rju)y4ƀm\FusfW-(Kv](=2Em+F52Zs5ql{wT5'N2mr~ɴmHKFjbc8qH"36sf:
C,"~@$Ρ}~'^hHSlqFR	CYéG1TjNV3)
#2=K!O_¡-5(7Q9]2*2D54^p?hqC2f 1RgJs~ִaZd@dF*%`kB(rJ})N-B.lht&hkk2$.p0yfE-)+.P2vfڜ`)fmĄ:wrZ%76+~i?3hplenI6 k$ƗôSbtCڰppRϸ}Fdr$4aɮgu QGuZ'8S
LO.	ʏӘ@~Q?D!?@Y4!i\)&*`	R	F	cOAm,)Q{l
oNq?jf!$1_7Vs5RMl#Bals&F`/6Fa|
*:O^ 'FCA(ABp
 R"	"G
3"?@𭍦 Sȟ/N>hlO8bDH}CTRI:YJM^ANkTCU"hD p-4C%}_Smb1?^ͩHwهb%	d[R5`ߕc,$_DI	sEV
i,O HoDJv&9!$(}~
ȕ$q'VUZ`1)N,Ǽ/`pM=?j)pLOX+ ,-RR35,&"s}yh=4Hr5ͨ۠6a>}ZT?/cfqˋIzg_vwi-5dn_6OE7:iAQ	M>k1mӬ8S</brYV+WA}-X7fvOyLÝV>,y*3戾u;m4x2avύ}v}2N&ϛl[}U
Y-תym}gT@Ա}vNZM05r}Fvm'}?+#oN\smv}TiM6yd_aF'}Um+kNtLm!UeV\8$7֙9~֞zM03}(>+]ZiȘV֞/aJ䑨o"bs㮝~҅Zz;UkMi-i4wHZlֻr,##}i^W}?@ dyB
)֚@Աʔide5\.(XGa<KLIZyt\֚Z>#=(Kmϵ5Cyw6îgjkN̍`uI|5nGA߼OzU1C<Ս_'@Y-U"mb2EԚ- Zd{s
:J^nعO,JX@[b_ԋ,kxXb4	aˇ
ZOKZei)E~
oK*>d=MxW7!UӠ,O
`0
%"&),/2
?6<AB #'*-03:79=@C!	$(G+.1457/8;>DEFGH-	vqed"Vciǥ"X~8<-^+s& ͫ+wD~$JqyS 縔}zV3͋#n'Qa"Ǯx?p.r#>|)wxFf-˞w`&7qpu=c%"G~)ds{JP2:$%q&@/5GshvB76$eDp%(	RLJcaN6Pzŝ,5A-,m/Fx5i#ra."pS
	Yro1JΘ^Z
lrc=dq7@#Os~5p & upefBQUp<SèR{Ty5	M,X)kMtҌ##aG|&|j3DvKq
ډ:qRm溽{h tn	FÃ:EinC<L.Yi(¶UZќ+fZuοZr nn X*Xt[#Ms:&87XhϷy:$T>Iup9ғ&Ҡp F@>	p+rqc&zk0˯cDhkJǐCDF?wp"Y!Bm#p$+L7QM.޷wUjĘ	r9gJE+H?1a1jȍ4gjb2`?<e֏ل#ZH>r6$'9prLpіLSӸ"B"86ոp75.u:i|f~)R4mH֡Pr6
Qprap,
p(ria4m
8|21R5E+li3;NIWbAԿĸ]AxkfYNvfr
d#_(-5&
r=db7~[9ظ5dQk+:{>=_Jt:CfۼJ.+]dAi&ÿϗhAyq<17(ǹ2I"$̳%D OVTQ1bŞp̢Ť1f,7pqiU3t}Tw@˽L]"0m3K22}^V,sKVةY@з-lXbԲeq-x&Qx
ഗDK8du=ա,J`[hSIJBa>1T<qA_pfS[bZhs%fMpxiCqu@,*hsar0ò.p4H"Y}0r(<-%PD-Hk[	xrI7fF$f^e&	J!Lh
NqVRYvpW-M؍=<w:rFߥۉ?j)JUdgEs$ynt7RDo@>IyB<(HNp͒]qrmcg)[v?POaW`s}j$EqmI$ɰ?u2)Zf~t+ڛcڮm`4"hqpj}}d̑Cn˰;UY?,F$pOe[΢ZqfrЪmwsUlM*48%=Q j -/ʀ;`AďZx4$?
s2teR5D,\p48f2D/E!sZ/;9ZCH[pY.j;E!T`e;d#'yզZFb
jZWpeNbB
6&3lmt;C)aBaXvu&,<kdfNt'a[VGoK2K]hY RU'	о5@-.A)1-@PJIwr[ŀ
;im/0_FYr/l)*A+B,)_'mVy[=8(|g]^q<x{+`i-,@dA"  !"#
$% &'h()6<DE=MUu-~s =S-WkIZA].7SWM1>(P@'oC%T:JfNAZkHDUYRkGAE_MIX. ,87ctuS\OԈ<*留	Qb5=8g`eHD +$	URy~\8"	PԽ~1Nd9
Yì_	)>?'5$SκtXNu)gNGkο`cJ
MyO?}e;%LOu\U"ڄ3%,;:<_4wF^ jLH&5mRy6|kE>.󝽌|[QIޥ`& 'J|m4H|?K?s2(d'3	Lz< |
ך͙
~6rwbWHssf-7D2 \˼L`vT"]&S5
DiLwU/]ZIz}[.Ӗ#v0`o3V8
9a6LS'ɘ퐷:^ƶ}_iq0{ڮmLp+͖#;IpSESV[즍b\qݜ8;WcMIĐ0ө+wO#ݗۏJ
y*]8Hz$U!o )?9݆LPW03&e=#KBK6/<}J)ӾꖹtVk5W3J=5+	&I`|H
aJbga~blxEw`Yz/zGOs5c,
!<H+i `nCb4sLkɴkuϩ={)KCO^
yu훹zV!͞`~1O];.@AEFGPHJ
OJ1ː{*@``3"ڧq>[Hk L_)0SbJ@[_,Xݱbx	l
	H]kH5hL$i7
CV8 q[UxY)!	ף"`2!M!#$G|
#&"
%#ju
	"' &7NO$/4Z+Rw
xF% $t	[A|~?~?9KÃEuTN1nCde;D;x;`$|7>-I1υ+A|C*D"_.a:?Xb~/Uwz_$f13a<bR:<b.!'8D[C.hKqM90A1gtYsd1˿
,I=w4/HiZ6D}TU3HJ1Xk՟j硱>B`z%W|0
NӼy!&|]:iv!̬y񥁰@v"RpӴmY!U38ڙcIF[&1p歞N%-ke2yx}֟a&&6[AǸ>T	rYw%lTp)#%v;,L*" pu M"H1%'taÙ=1<NH,:8&61&Ǭj/PNXGqR'=(&W#8-:v<:3-Lzrp4v.e.5D79ы?f	s6639[SwM5zq1$0z(v,g	*D.6w0v2HtkYŪYf9]s:
r5s~D} tnjL/1rn|t!+C	/Np}<c8ދ
obq¬:wk P=BcCcr[\5s.pٺ@
^˱J$q
̵
ufd6aV~.7sRq.p3DXv1䅠s5#w0&blwqkͮfkp09r<$?-pf,'muk3bq_`\@<D9
*T?0cda!9R}L}"-o0݈.dd`
&v6HQ$c'y{FA>8paQ0Es#*Y#Q3$ o6=L!
Gḽ];VR29	40A %Фxب~P@
+I/
N/p2Z
!lg"l	iG?!Dz#\M>z 4
B D3fb$D(35Qfd"@`adbDLo't-#_RDG.u7gi[ bj&+TWMI:L^dUNePbCO CeR2$hkk+^n!w5U685wǊ0?ھP`^G) 	w;E^
lo/	iiE[T9践0q
)@wl\\8Cw(PrseF^?r5*&Q[ Yt
px
mލ3|R$U"wIWsg9)wicNE@`MjjȅT?\W0G,L&rbq])9CϽ3~}9:'4
Irl !yLiHˑ5^6e~nKc	.ws?}[
[I`#> k	qc}J<}c??K't??1x8	WP#f 3g`p
?XD"0,__
-6%ٱ7\OF$Շc	 ˼L=`߅]x]SG$`7XIyT}f.J=N}40`68o
aof.8^Lp}_1C_~0@㑽bi-uKTILvm5)!(mzL}B͢:s-ph̞$9"Hɐ|p
K=;ByLY8rt!Fΐ0_+F#}
U$Oavj8gS*$!T ޹lt?>L=/
Δ0}ۨO=#4\$[}uȘAy7e36yKiMnVSr
p(w+)73yrgT}ڧ6.TRq =9#T[K
J'Dȹ(}f%7bkf`/y/bkIg[6"η{{(4~3^jMl!"	8BioɾV+iW=t]T.{Gչx{*:L	6)Ls
,	#=cDK@0슽M B
_6WjNL
x`"	cf
iPm$T!`=3Kۓ"Z
N vtе(wﭭ Ll)0qka{ki68t9_LJ"w
xb=3N,RXjE#'A,PXYzri1yH~]N[HehL>i7|
8 K;WN!;z4sXz؁;Y'Fvht6{r.퉚x(rs`H|J ['h)	y`5(Lb`Bm?S3he+28;>5?aW/(E/;]CB/
 &),036@NOPQXZ\G^abFnMD!
G@	"/#$%.!'*-1#47ASTUGVY[]_cGHJVtq!,X$4LfNDKh)FNa	kv,$\br?iO$
[tԤ%ñ*й|naE-ȵqc=	F=J1RG!`hqEtQExovMQz	1T05a6f]PrSO:?p-+~}2/hsK+Www|:.nŴ{w3f:	fdL+Č$RQ#OMap~eX>nUSTx2r$Z['ΕcUC[vb{>>.'"Er$[QeyDC6A60Ga_HNaxxP@>rϐ)B1Aa]<9	AMc0T:Z1px(A3f<TPU(qJZ'c wdTFp"w~3m361:kGIy!m$%&Ӣ$=&aѠrW¿mp:Y7plTy~JT*8nS3id#)`)T8n<e357]ÊWn>,F5JN2c.G:K҆4papD'83wO/eB1I7cI5ƉD=aaY:!ӻ
0ӽ
05
pfcPÔfӉC@]?
vÂ%=î
.E2
Pbҵh5br?ts܊VMf/1W_6Կ1
Iߪ??;VD@N|ܟ]V$Rv#lc6
KKjK
fv><BSP*A_6EfCGHMU
"hht
JHF*ʴhxO?Hu11`p$0Lb.L)*A~而5*0/l+m)./!#0fq| +rQt7(MECF85>jJ4!<#;#:#p9izd"Mcd3۔BtYuGbCXAmjf!&2@ïPG?2><%~
Vӛ%͑n.B\)5ds΃75ߎ,i:aHxu5fnucE0w]A]23s>(zexisJ[~6sm5d쮥fܨwr|u"r>Wp%culqR p$wԠ
: 'ЯLԁ߾MP;.m"b% c0vg6C`Q|vځ5ctIR퍚`@G[P1 5	6
-@l`EL" OD\4!i!Si&Ig' AJSZmY&!Az#+Pdv:dE( $	Am&Vt#jX5.i:Su)K'A(",KXt#Sg%3Nv9cx$N^o
ALW	)cU5",=ITs8X07>E D8!A
ap B!!"B#$%&B",DY#TD Ys)ұă?ySop7^x1CNHORAM6:YUNu-bITLE.H( eHeNi}^R>
xsKcp4)mXGh5rQK8b44v8j[&SК	"In@iJxM`RH|R 9OՀ^85)y@qpI81"Prx4XsD<n)lvM@) 3Ȱcp/x;
mD3f"$VY9ĆN+Im3`e
#_ȈY-!c?0zH>h1(Ey'*
G4SOs(6V«a
6q3_&Q<a*ۿ
JvXXq1LH˖5MO60sg0
7mt\K	Y.?ȟ%A/I"!`0 lf	qWcf,۴}?K_?gy7)9:bq<"Qt"V'4U?p{>e0,C		'uL(w
mBo	Ǣ6'r
GLn`E'N"qOVBl[y(&n3[2b!}CCS .rGϼF0VgsZ`8`(Te8<)
a:\g*L
7S^!}_Ov9Cz0@i;	Pe@RILPE;?)0V(mNLѤDHB(͂cT-Op<hoxbxhɐ>\zc#ьEsyǤ8uޣD50X(?Evx\x ND8a*$/u
v}!I nKt?r%:vLlE0}=#=SYCްdonVȘL,AP==7f5Z~?IiՎL+
v*w(t)D͒}LRQ,p+
X ͹;ƔO1
JB:uW,R `k]ZE V0bp(}Jo^kw|˟W^&_]p    '(P	aQH
Gp$%6i6ɩn鰝>5N+x(, u(OgZ+n %,4nݿY<)CܱS	1ՠN#=XLL_Jl
`PiЍelKM@0m3M B
ƳǗ+&lN|
7f13;w
i
'1<NSZbkqx#G^(fX2
d>"A۽9/эTvjkC"w Lg)0aa[.J]ts9L
L"
IXb
bXu,yP!*5-i@DJ,NYNwEI.B.b^]TOHhL2yiI7k
"8 r!qf*fzryk4chP]d Uμ2"^rVsvHdJ hQ	g3;:wB"Lsȇ=*)D`}4L?HTh)WV`PZP1RUG	*P2NSTBAC&!#<`" $Q#|lEG::>%!;')573K7	~(0)CN:B % ~@3KAƝ!JTxJ<ME@ ZC`HHF3II1,JN<dR$bYR+4EG0@`7#鲉MDua!!?e8Ot?Q5;Gf?vzFA.7M;N)q~M)LhH
K@ )a"1L!	(]PPQ0DA4X8FTCBd:5ZR=s̺DFj bLpRA?I>~$5/ ^I;,fp;覵
Dơ<DKpA֫)?~9 	cq.Ct~yr@:u-s~>I)M<+HPAi:5n0v~pAwr =eYʪ!BQ8$r֢8!6b1JYL`()-8rOLĀ )D0(8D:H3ju]k>z@%!ڠ>
$W2k7tg"!@O(a-/,H'L	bAD
j c'޻X&<j/
"J|_!Ba8E_y5` '.Rt{.V]dkryD@ 8E
"=՘I	D#6P%} SF-WIZARD.7SWM'1

@dCT]MI:PRFUGSCOVER2 )c8	a#Kh[XOԈ&^
tN9)KY^V_5S5z i8m6sф	m[[d!iBԜi`u*H\!N}02~0
)@~mKV漜H81PrE
s|wZO.'&="
+)Sp/x
m36S0$V w^XJ+E:L)cNI;}`b{R[?0?Hh1( XT:ȦLugu-z63CEK<*#4
N\SʣVLH56JnK\	ɻ.坹?`7UIތ-`0 ٠	q^.cJݷt}l?Kl4_?KΆ)C[=^i"M2xdy" l|~p'
je0,d/
6̇
T]Z.f	b! lZLM2YE\n\à(װX~HJS,0nL-*`Pw(8
aH	LV㐨l.u}c~}C0@{Di{	N	PDILsm\_)(mN7L2tB|:-΋ph5)$^+g6zɐO,ڪI^8V]4ޙZːI5{Z0({ {!Z /aMn43u
k}!>f z޸t_?мI=ɯLI9Pq0}:=#ąȮ\=߱Ș&*AyP=7A~~&imHL
vTyʭ1w)xfrY}-SkǝS~i t5W
J}c&ȹo-s``hyjs J_0>}br}J}˗k/d
^W_^4
A
ib^E , @'/8K^s
y,BtY,{'Q68YN	Тmgp:Ddu8&@"ȴqLh8Eh$'鏝^U鰝<M+xu2 ,ztJn{{HL-	)VlGq0	#=KLVN
S?_}TK@0Mk B
Pӑ6QNL
`wA;԰
i	$-8OV^gmt]Jխh_ꤐwkL䳻Ygvwf6"K\۠ ԗ'vMQ1w Lw)0
a%)ZڊOtR9LȽ"
mb⣫Ŵʋ,X
B+	,408&9//H]=ݦ~HhLiv7
˝8} oqyTC!$%szryIѭÍdNhgB#ݼ1^rs/J h	`ר1L&j`Hh)	`7,qUI-&:j,
^LK$'*B>2-4XEJMP
8pȲXI1
)1$(B+105FHKNQ!%,QL9<1.$jj,Z&)c,/::K;<b=>?@A,C|3D6GI_LOȕR"r VTX{U	S
`b+!Y6W)ac[ZZ*[\\]X^_d
 ~a5Ұ{zۥfkm;+!)<ƛьKɑ#L	:M)2̞g
ɔ8҄XH5pd~CӭG|p~-k!X'}-E+W')~)h[,
~-p84P|u1A
uk1rڞ7[@43$%䱡,A?	K#3@@u2[`0S33qJ?u/ |Q#58Mʳl[|}rlQ%vgcd[c凮yn2J3|*Ƅ
?m*7Ix!
z
;96m7ŎP9[$Cxp۸
d(xv7/5K!flgM>G+/xV%ӂTd{mO k	tX%B0M.q&@˄q.Xud1lxpO`&j|n0`0YpP_l&L?whpJjD|tBKxoq9+p##`$Pde	#.N735i
&q?::~sp,W'Ħp)C
|s"n ά0Փ3O:.!xeAR5s= JQ0vc"ͧ1]0JBbQ_f)wt5d7 S,]vh	s3c?'txr`$30)A]5G3net6tbZ퓛+
0uϔRG)X&urCsFts=Zi!qCA/KThJ7u1=;X[p;e:divDtu`mi3
EoXpy,tK\n"KcM,i͡#qڶ1M?~;
Du:l׺Mg^wsfVNpLg<u>i0'4y-@:9hۘBPp|ϙ1Ƙ?qqK:aphƪ7b̮l?o	yF> oZ]}p?[,37BH<t1:3-l=M4<\67s7i4
,x#P
r[LpHvC[.B18elwnJp37h	QBp LF~v!g@Xj
׳
prJG,tRš"wqp285&vߩ#budcNe
DC9`8IIt&p].rsaGp8]`%ӂOvY?3iジf@[@t݅vmv$7Br'	#Oh2;rs?Få[%de{C*+:'7) as,qElQ*6l3	k;^]Sw2.se:
iݢ5~^uEfSkO׷zcΫRb?iNTP:~VN5?!8}&UR$*Ϊs.?0҇qg<	1#6~Et-ZFFr7f->fmwn\8*m}· qU;\hoTD !Oto~XJz-
<vFibbӅ5oK 'v%@KKP*WOI`Lk9i	Ro $
S.f)@z[YdڻJ!qBSvvk%b
NJy#'lmdUP`1*]n3
I=&r4A6YeCTImBp|B%Cp.$[y`%yjX2	XFxkw	5V4v{t1[F,_5iNpG`.@/0@1GE,6@!Wl<Hxr_s$S T<_s$5e!T3~9:Vh	3=d.B@_@
 2! "(#@$H% &b'A()$*+(,A-.j,ĄjD@$"D2RL@FMBW[krctumi8
LM2ǵD΍`L>v]!0يZ.IWiJ.CPKW'
72*@~Hjh-
'R& ec*0sMtW=V󱚘'/L|`h00)/7Q]F
<N"PJ>9E-D#tw
zunбJL`~DRm4pM[''lA!	ԟ }ȺWuZ@Cȝ4e	LrU(fh#xаuU^\ʶz^_8`=Q6'UwZNniJ^Y>ji\M=JFee'U5+SRJhA&Lag @_96npʿS0FɍLk})~M dݥZrROMzMLsţ1ۂ}NJ鶼ejȘ߹}4ݏL]\[V=@#t. iCJum`P)CGǆ#&E	XtIԩW:ȱykIޒ=`8U0ݴ '9K_t-NqCtZ-|(R79ZO
ѣnhq<Fgy<)D(ͺxSqBOt3 #c NSGmI>C @.147:>AEINRW\bhnu|,KjDOsy
Ec9\3uDf.PE
$a
0h=[`BD1C1A #36	ԂGo
!(HB@L&0@a	aK.0I4A-bDI% ;R
P-+_2F2F!(։PBo*@jWD	P*o
94|;
!#%&(*,.02579
 ""$')+-/1368:/ 	YK=!qagQGU#Q7!󔍙364ACs2󆱄NĒ
3wOV-pe:c	zT`Fzg9$m
L:6"dK%4ŝ!P츄pWpQ}=lBY`d5߁!'NhlB"jQxAz)@'$hb1ˣ~dt|}ic!A13{xLCo
PƐ-\Y164<0sxŚ@rD@f)s$|ǐxPWW`W'bp(
@ze+T+RАn]@XaFRQ(t5-,緛7<|?G
3X	?]FP\Lg;;D`gM48y]C6X
]Ea(&󉝞hNFϪ5tȓ%L̟xFEJnnlhAA'$L9>򒨗z!8J4ٙ,,gVy4H챵77Tu.4Ay44rS_D˜**C&(5E۠4N,{]
?F']u%E	T@֠1LF6D@|/	Ykj"l6g.WiFJtІ.ZS
2KFs8M2ld͞: ÏIЇXَ&r/<<L%r0dW2ŇhP\DjD9B$zbE%L@f&af*Iv
9&][͔CťP'
0|pHĆLByS	ΖBP6VXKDuD*qN"z@Š,3Pӟ@	c]ISK%q95FxR|ot(OP($aF_@HNʬDfl*L/ABHg \oO򍌥>uD`+/KY<	=C[BKCKu
iq?j@n{7E+|>WF^Khg`
P$T1qHHxbi0ۏNa2ߦ?k=:dLF}zs}/@G>>-?Rf{8Z~#S0pGFv`g.ٍL]-ڠ7c40Z@8nth`gpbg`  B

!#%'*,/258;?CFKOTY^djpw~x8dK{0m1'-ǠLoҌũ	ܢ)_/TWWDX+~Q`H
KЍ9Xh@$@1b$'us1b
U$(:

error: pathspec 'src/chipdisk-exo.prg' did not match any file(s) known to git


Arrayモジュールを追加した

Arrayモジュールを追加した

' Array

def indexOf(array[], num)
	var i
	for i = 0 to len(array) - 1
		if array[i] == num then return i
	next
	return -1
end

def indexOf$(array$[], string$)
	var i
	for i = 0 to len(array$) - 1
		if array$[i] == string$ then return i
	next
	return -1
end

def implode$(array$[], glue$)
	var i
	var rv$
	for i = 0 to len(array$) - 1
		if i == 0 then
			rv$ = array$[i]
		else
			rv$ = rv$ + glue$ + array$[i]
		endif
	next
	return rv$
end

def arrayToStr$(array$[])
	var i
	var rv$
	for i = 0 to len(array$) - 1
		if i == 0 || array$[i] == "]" || (i > 0 && array$[i-1] == "[") then
			rv$ = rv$ + array$[i]
		else
			rv$ = rv$ + "," + array$[i]
		endif
	next
	return rv$
end

def arrDump array$[]
	? "size: " + str$(arrSize(array$))
	? "elements: " + arrayToStr$(array$)
end

def arrFlatten$(array$[])
	var i
	dim arr$[0]
	for i = 0 to len(array$) - 1
		if array$[i] != "[" && array$[i] != "]" then push arr$, array$[i]
	next
	return arr$
end

def arrSize(array$[])
	array$ = arrFlatten$(array$)
	return len(array$)
end

def arrJoin(array$[], glue$)
	var i
	var rv$
	for i = 0 to len(array$) - 1
		if array$[i] != "[" && array$[i] != "]" && rv$ == "" then
			rv$ = rv$ + array$[i]
		elseif array$[i] != "[" && array$[i] != "]" && rv$ != "" then
			rv$ = rv$ + glue$ + array$[i]
		endif
	next
	return rv$
end

def arrUniq$(array$[])
	var i
	var dimension = 1
	dim comparison$[0]
	for i = 0 to len(array$) - 1
		if array$[i] == "[" then
			inc dimension
			push comparison$, "["
		elseif array$[i] == "]" then
			dec dimension
			push comparison$, "]"
		elseif dimension == 1 && indexOf$(comparison$, array$[i]) == -1 then
			push comparison$, array$[i]
		elseif dimension > 1 then
			push comparison$, array$[i]
		endif
	next
	return comparison$
end

error: pathspec 'array.prg' did not match any file(s) known to git


added new example imageviewer.prg

added new example imageviewer.prg

/*

  Qt5xHb Project - Example Program

  Copyright (C) 2012-2017 Marcos Antonio Gambeta

  E-mail:
  marcosgambeta AT outlook DOT com
  marcosgambeta AT gmail DOT com

  Website:
  https://github.com/marcosgambeta/Qt5xHb

  Users Groups:
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb    [ENGLISH]
  https://groups.google.com/forum/?hl=pt-BR#!forum/qtxhb-br [PORTUGUESE]

*/

/*
  Baseado no exemplo "Image Viewer" do Qt Framework
*/

#include "qt5xhb.ch"
#include "hbclass.ch"

PROCEDURE Main ()

   LOCAL oApp
   LOCAL oImageViewer

   oApp := QApplication():new()

   oImageViewer := ImageViewer():new()

   oImageViewer:show()

   oApp:exec()

   oImageViewer:delete()

   oApp:delete()

RETURN

CLASS ImageViewer INHERIT QMainWindow

   DATA oImageLabel     // QLabel
   DATA oScrollArea     // QScrollArea
   DATA nScaleFactor    // double
   DATA oPrinter        // QPrinter
   DATA oOpenAct        // QAction
   DATA oPrintAct       // QAction
   DATA oExitAct        // QAction
   DATA oZoomInAct      // QAction
   DATA oZoomOutAct     // QAction
   DATA oNormalSizeAct  // QAction
   DATA oFitToWindowAct // QAction
   DATA oAboutAct       // QAction
   DATA oAboutQtAct     // QAction
   DATA oFileMenu       // QMenu
   DATA oViewMenu       // QMenu
   DATA oHelpMenu       // QMenu

   METHOD new ()
   METHOD delete ()
   METHOD open ()
   METHOD print ()
   METHOD zoomIn ()
   METHOD zoomOut ()
   METHOD normalSize ()
   METHOD fitToWindow ()
   METHOD about ()
   METHOD createActions ()
   METHOD createMenus ()
   METHOD updateActions ()
   METHOD scaleImage (nFactor)
   METHOD adjustScrollBar (oScrollBar, nFactor)

END CLASS

METHOD new () CLASS ImageViewer

   ::super:new()

   ::oImageLabel := QLabel():new()
   ::oImageLabel:setBackgroundRole(QPalette_Base)
   ::oImageLabel:setSizePolicy(QSizePolicy_Ignored, QSizePolicy_Ignored)
   ::oImageLabel:setScaledContents(.T.)

   ::oScrollArea := QScrollArea():new()
   ::oScrollArea:setBackgroundRole(QPalette_Dark)
   ::oScrollArea:setWidget(::oImageLabel)
   ::setCentralWidget(::oScrollArea)

   ::createActions()
   ::createMenus()

   ::setWindowTitle("Image Viewer")
   ::resize(500, 400)

   ::nScaleFactor := 0

RETURN SELF

METHOD delete () CLASS ImageViewer

   ::oOpenAct:onTriggered()
   ::oPrintAct:onTriggered()
   ::oExitAct:onTriggered()
   ::oZoomInAct:onTriggered()
   ::oZoomOutAct:onTriggered()
   ::oNormalSizeAct:onTriggered()
   ::oFitToWindowAct:OnTriggered()
   ::oAboutAct:onTriggered()
   ::oAboutQtAct:onTriggered()

   ::super:delete()

RETURN NIL

METHOD open () CLASS ImageViewer

   LOCAL cFileName
   LOCAL oImage

   cFileName := QFileDialog():getOpenFileName(SELF,"Open File",QDir():currentPath())

   IF !empty(cFileName)
      oImage := QImage():new(cFileName)
      IF oImage:isNull()
         QMessageBox():information(SELF,"Image Viewer","Cannot load "+cFileName+".")
         RETURN NIL
      ENDIF
      ::oImageLabel:setPixmap(QPixmap():fromImage(oImage))
      ::nScaleFactor := 1.0

      ::oPrintAct:setEnabled(.T.)
      ::oFitToWindowAct:setEnabled(.T.)
      ::updateActions()

      IF !::oFitToWindowAct:isChecked()
         ::oImageLabel:adjustSize()
      ENDIF
   ENDIF

RETURN NIL

METHOD print () CLASS ImageViewer

   LOCAL oDialog
   LOCAL oPainter
   LOCAL oRect
   LOCAL oSize

   IF ::oPrinter == NIL
      ::oPrinter := QPrinter():new()
   ENDIF

   oDialog := QPrintDialog():new(::oPrinter, SELF)

   IF oDialog:exec() <> 0
      oPainter := QPainter():new(::oPrinter)
      oRect := oPainter:viewport()
      oSize := ::oImageLabel:pixmap():size()
      oSize:scale(oRect:size(), Qt_KeepAspectRatio)
      oPainter:setViewport(oRect:x(), oRect:y(), oSize:width(), oSize:height())
      oPainter:setWindow(::oImageLabel:pixmap():rect())
      oPainter:drawPixmap(0, 0, ::oImageLabel:pixmap())
   ENDIF

   oDialog:delete()

RETURN NIL

METHOD zoomIn () CLASS ImageViewer

   ::scaleImage(1.25)

RETURN NIL

METHOD zoomOut () CLASS ImageViewer

   ::scaleImage(0.8)

RETURN NIL

METHOD normalSize () CLASS ImageViewer

   ::oImageLabel:adjustSize()
   ::nScaleFactor := 1.0

RETURN NIL

METHOD fitToWindow () CLASS ImageViewer

   LOCAL lFitToWindow

   lFitToWindow := ::oFitToWindowAct:isChecked()
   ::oScrollArea:setWidgetResizable(lFitToWindow)
   IF !lFitToWindow
      ::normalSize()
   ENDIF
   ::updateActions()

RETURN NIL

METHOD about () CLASS ImageViewer

   QMessageBox():about(SELF,"About Image Viewer",;
                "
The Image Viewer example shows how to combine QLabel "+;
                "and QScrollArea to display an image. QLabel is typically used "+;
                "for displaying a text, but it can also display an image. "+;
                "QScrollArea provides a scrolling view around another widget. "+;
                "If the child widget exceeds the size of the frame, QScrollArea "+;
                "automatically provides scroll bars.

The example "+;
                "demonstrates how QLabel's ability to scale its contents "+;
                "(QLabel::scaledContents), and QScrollArea's ability to "+;
                "automatically resize its contents "+;
                "(QScrollArea::widgetResizable), can be used to implement "+;
                "zooming and scaling features.

In addition the example "+;
                "shows how to use QPainter to print an image.
")

RETURN NIL

METHOD createActions () CLASS ImageViewer

   ::oOpenAct := QAction():new("&Open...", SELF)
   ::oOpenAct:setShortcut(QKeySequence():new("Ctrl+O"))
   ::oOpenAct:onTriggered({||::open()})

   ::oPrintAct := QAction():new("&Print...", SELF)
   ::oPrintAct:setShortcut(QKeySequence():new("Ctrl+P"))
   ::oPrintAct:setEnabled(.f.)
   ::oPrintAct:onTriggered({||::print()})

   ::oExitAct := QAction():new("E&xit", SELF)
   ::oExitAct:setShortcut(QKeySequence():new("Ctrl+Q"))
   ::oExitAct:onTriggered({||::close()})

   ::oZoomInAct := QAction():new("Zoom &In (25%)", SELF)
   ::oZoomInAct:setShortcut(QKeySequence():new("Ctrl++"))
   ::oZoomInAct:setEnabled(.f.)
   ::oZoomInAct:onTriggered({||::zoomIn()})

   ::oZoomOutAct := QAction():new("Zoom &Out (25%)", SELF)
   ::oZoomOutAct:setShortcut(QKeySequence():new("Ctrl+-"))
   ::oZoomOutAct:setEnabled(.f.)
   ::oZoomOutAct:onTriggered({||::zoomOut()})

   ::oNormalSizeAct := QAction():new("&Normal Size", SELF)
   ::oNormalSizeAct:setShortcut(QKeySequence():new("Ctrl+S"))
   ::oNormalSizeAct:setEnabled(.f.)
   ::oNormalSizeAct:onTriggered({||::normalSize()})

   ::oFitToWindowAct := QAction():new("&Fit to Window", SELF)
   ::oFitToWindowAct:setEnabled(.f.)
   ::oFitToWindowAct:setCheckable(.t.)
   ::oFitToWindowAct:setShortcut(QKeySequence():new("Ctrl+F"))
   ::oFitToWindowAct:OnTriggered({||::fitToWindow()})

   ::oAboutAct := QAction():new("&About", SELF)
   ::oAboutAct:onTriggered({||::about()})

   ::oAboutQtAct := QAction():new("About &Qt", SELF)
   ::oAboutQtAct:onTriggered({||QApplication():newFrom(QApplication():instance()):aboutQt()})

RETURN NIL

METHOD createMenus () CLASS ImageViewer

   ::oFileMenu := QMenu():new("&File", SELF)
   ::oFileMenu:addAction(::oOpenAct)
   ::oFileMenu:addAction(::oPrintAct)
   ::oFileMenu:addSeparator()
   ::oFileMenu:addAction(::oExitAct)

   ::oViewMenu := QMenu():new("&View", SELF)
   ::oViewMenu:addAction(::oZoomInAct)
   ::oViewMenu:addAction(::oZoomOutAct)
   ::oViewMenu:addAction(::oNormalSizeAct)
   ::oViewMenu:addSeparator()
   ::oViewMenu:addAction(::oFitToWindowAct)

   ::oHelpMenu := QMenu():new("&Help", SELF)
   ::oHelpMenu:addAction(::oAboutAct)
   ::oHelpMenu:addAction(::oAboutQtAct)

   ::menuBar():addMenu(::oFileMenu)
   ::menuBar():addMenu(::oViewMenu)
   ::menuBar():addMenu(::oHelpMenu)

RETURN NIL

METHOD updateActions () CLASS ImageViewer

   ::oZoomInAct:setEnabled(!::oFitToWindowAct:isChecked())
   ::oZoomOutAct:setEnabled(!::oFitToWindowAct:isChecked())
   ::oNormalSizeAct:setEnabled(!::oFitToWindowAct:isChecked())

RETURN NIL

METHOD scaleImage (nFactor) CLASS ImageViewer

   ::nScaleFactor := ::nScaleFactor * nFactor
   ::oImageLabel:resize(::nScaleFactor * ::oImageLabel:pixmap():size():width(),::nScaleFactor * ::oImageLabel:pixmap():size():height())

   ::adjustScrollBar(::oScrollArea:horizontalScrollBar(), nFactor)
   ::adjustScrollBar(::oScrollArea:verticalScrollBar(), nFactor)

   ::oZoomInAct:setEnabled(::nScaleFactor < 3.0)
   ::oZoomOutAct:setEnabled(::nScaleFactor > 0.333)

RETURN NIL

METHOD adjustScrollBar (oScrollBar, nFactor) CLASS ImageViewer

   oScrollBar:setValue(int(nFactor * oScrollBar:value() + ((nFactor - 1) * oScrollBar:pageStep()/2)))

RETURN NIL

error: pathspec 'examples/imageviewer.prg' did not match any file(s) known to git


KColorValueSelector: class updated

KColorValueSelector: class updated

- methods new1 and new2 removed
- formatting

Modified:
source/KDEUI/KColorValueSelectorClass.prg

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/marcosgambeta/KDE4xHb.git/'


first germ of SK -> lambda translation

first germ of SK -> lambda translation

data SK :: * ~> * where
  Var :: SK a
  KK :: SK (phy -> psy -> phy)
  SS :: SK ((phi -> psy -> nu) -> (phi -> psy) -> phi -> nu)
  App :: SK a -> SK b -> SK c
 deriving syntax (sk) LeftPair(App)

error: pathspec 'tests/SK.prg' did not match any file(s) known to git