2006-07-20 11:40 UTC+0100 Ryszard Glab <rglab//imid.med.pl>

* source/pp/ppcore.c
      * fixed bugs which I introduced

   * utils/hbpptest/pretest.prg
      * added more test cases

   + utils/hbpptest/pp_test.prg
      * new file to test preprocessor Preprocess both with Clipper
        and harbour and next use diff utility to compare outputs -
        ignore the number of white spaces (use diff -w -u ...)
This commit is contained in:
Ryszard Glab
2006-07-20 09:36:28 +00:00
parent 65d8bc1265
commit 385facd33c
4 changed files with 521 additions and 34 deletions

View File

@@ -8,6 +8,19 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
+ harbour/utils/hbpptest/.cvsignore
* harbour/utils/hbpptest/pp_test.prg
+ Added batch file to compare PP results between Harbour and
2006-07-20 11:40 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
* fixed bugs which I introduced
and harbour and next use diff utility to compare outputs -
* added more test cases
+ utils/hbpptest/pp_test.prg
* new file to test preprocessor Preprocess both with Clipper
and harbour and next use diff utility to compare outputs -
ignore the number of white spaces (use diff -w -u ...)

View File

@@ -1891,13 +1891,13 @@ static int WorkTranslate( char *ptri, char *ptro, COMMANDS * sttra, int *lens )
static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres, BOOL com_or_tra, BOOL com_or_xcom )
{
BOOL endTranslation = FALSE;
BOOL bReplaced = FALSE;
int ipos;
char *lastopti[MAX_OPTIONALS], *strtopti = NULL, *strtptri = NULL;
char *ptri = inputLine, *ptr, tmpname[MAX_NAME];
int isWordInside = 0;
char szMatch[2];
char *ptrmpatt = ptrmp;
char *cSkipped[MAX_OPTIONALS];
int iSkipped = 0;
/*
printf( "MP: >%s<\nIn: >%s<\n", ptrmp, ptri );
@@ -1936,10 +1936,13 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
if( ipos && TestOptional( strtopti, strtopti + ipos - 2 ) )
{
/* the keyword from input is found in the pattern */
ptr = strtopti + ipos - 2;
ptr = PrevSquare( ptr, strtopti, NULL );
ptr = PrevSquare( strtopti + ipos - 2, strtopti, NULL );
if( ptr )
ptrmp = ptr;
if( ptr != strtopti )
{
cSkipped[ iSkipped++ ] = strtopti;
}
}
}
@@ -1954,17 +1957,7 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
ptrmp++;
if( !CheckOptional( ptrmp, ptri, ptro, lenres, com_or_tra, com_or_xcom ) )
{
char *ptr = ptrmp;
SkipOptional( &ptrmp );
if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine && bReplaced )
{
/* Start scanning from the beginning
* end of pattern but still there is an input stream to parse
*
*/
ptrmp = ptrmpatt;
strtopti = NULL;
}
}
break;
@@ -2007,18 +2000,9 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
}
else
{
char *ptr = ptrmp;
if( !isWordInside )
strtopti = NULL;
ptrmp++;
if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine && bReplaced )
{
/* Start scanning from the beginning
* end of pattern but still there is an input stream to parse
*/
ptrmp = ptrmpatt;
strtopti = NULL;
}
}
s_numBrackets--;
}
@@ -2057,11 +2041,7 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
strtopti = NULL;
if( s_numBrackets == 1 && *( ptrmp + 2 ) == '2' )
isWordInside = 1; /* restricted match marker */
if( WorkMarkers( &ptrmp, &ptri, ptro, lenres, com_or_tra, com_or_xcom ) )
{
bReplaced = TRUE;
}
else
if( ! WorkMarkers( &ptrmp, &ptri, ptro, lenres, com_or_tra, com_or_xcom ) )
{
if( s_numBrackets )
{
@@ -2073,6 +2053,11 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
break;
case '\0':
if( iSkipped )
{
ptrmp = cSkipped[ --iSkipped ];
break;
}
if( com_or_tra )
return -1;
else
@@ -2092,7 +2077,7 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres,
{
SkipOptional( &ptrmp );
}
else
else
return -1;
}
}

View File

@@ -0,0 +1,471 @@
/*
* $Id$
*/
/* Test file to check the preprocessor.
* Usage:
* 1) Preprocess it using:
* harbour -p -n pp_test.prg
* 2) Rename generated pp_test.ppo (for example into pp_test.hpp)
* 3) Preprocess it with Clipper using:
* clipper -p -n pp_test.prg
* 4) Compare Clipper generated file pp_test.ppo with file generated
* with Harbour, ignoring number of white spaces, for example:
* diff -u -w pp_test.ppo pp_test.hpp > pp_test.diff
*
* Ignore most of errors reported during compilation.
*
*/
PROCEDURE MAIN()
#ifdef __HARBOUR__
#xtranslate CCC <v> => QOUT( <v>[2] [, <v>[<v>]\[3\]] )
CCC b
#endif
#xtranslate CCCC <v> => QOUT( <v><v>\[3\] )
CCCC c
#xtranslate AAA [A <a> [B <b>] ] => Qout([<a>][, <b>])
AAA
AAA A a
AAA A a B b
#define RED {255,0,0}
#ifdef __HARBOUR__
/* ---------------------------------------------------------------------*/
#xcommand SET COOLTIP TO <color> OF <form> => ;
SM( TTH (<"form">), 1, RGB(<color>[1], ;
<color>\[2\], ;
<color>[, <color>[ 3 ] ]), 0)
SET COOLTIP TO RED OF form1
#endif
#xcommand SET TOOLTIP TO <color> OF <form> => ;
SM( TTH (<"form">), 1, RGB(<color>[1], ;
<color>\[2\], ;
<color>\[ 3 \]), 0)
SET TOOLTIP TO RED OF form1
/* ---------------------------------------------------------------------*/
#command ZZZ [<v>] => QOUT( [ <v>\[1\] ] )
ZZZ a
ZZZ
ZZZ a[1]+2
/* ---------------------------------------------------------------------*/
#xtranslate _HMG_a => _HMG\[137\]
? _bro[ a( _HMG_a [i] ) ]
/* ---------------------------------------------------------------------*/
#ifdef __HARBOUR__
#define clas( x ) (x)
#xtranslate ( <!name!>{ [<p,...>] } => (<name>():New(<p>)
a :=clas( TesT{ 1,2,3} )
#endif
#define clas( x ) (x)
#xtranslate ( <name>{ [<p,...>] } => (<name>():New(<p>)
a :=clas( TEST{ 1,2,3} )
/* ---------------------------------------------------------------------*/
#define DATENEW 1
#define DATEOLD(x) x
#define datediff(x,y) ( DATEOLD(x) - DATENEW )
#command datediff1(<x>,<y>) => ( DATEOLD(<x>) - DATENEW )
? datediff( x, y )
/* ---------------------------------------------------------------------*/
#command _REGULAR_(<z>) => rm( <z> )
_REGULAR_(a)
_REGULAR_("a")
_REGULAR_('a')
_REGULAR_(["'a'"])
_REGULAR_(&a.1)
_REGULAR_(&a)
_REGULAR_(&a.)
_REGULAR_(&(a))
_REGULAR_(&a[1])
_REGULAR_(a[1])
_REGULAR_("['']")
//NORMAL
#command _NORMAL_M(<z>) => nm( <"z"> )
_NORMAL_M(a)
_NORMAL_M("a")
_NORMAL_M('a')
_NORMAL_M(["'a'"])
_NORMAL_M(&a.1)
_NORMAL_M(&a)
_NORMAL_M(&a.)
_NORMAL_M(&(a))
_NORMAL_M(&a[1])
_NORMAL_M(a[1])
_NORMAL_M("['']")
//SMART
#command _SMART_M(<z>) => sm( <(z)> )
_SMART_M(a)
_SMART_M("a")
_SMART_M('a')
_SMART_M(["'a'"])
_SMART_M(&a.1)
_SMART_M(&a)
_SMART_M(&a.)
_SMART_M(&(a))
_SMART_M(&a[1])
_SMART_M(a[1])
_SMART_M("['']")
//DUMB
#command _DUMB_M(<z>) => dm( #<z> )
_DUMB_M(a)
_DUMB_M("a")
_DUMB_M('a')
_DUMB_M(["'a'"])
_DUMB_M(&a.1)
_DUMB_M(&a)
_DUMB_M(&a.)
_DUMB_M(&(a))
_DUMB_M(&a[1])
_DUMB_M(a[1])
_DUMB_M("['']")
/* ---------------------------------------------------------------------*/
// REGULAR list
#command _REGULAR_L(<z,...>) => rl( <z> )
_REGULAR_L(a,"a",'a',["'a'"],"['a']",'["a"]',&a.1,&a,&a.,&a. ,&(a),&a[1],&a.[1],&a. [2],&a&a, &a.a, a, a)
// NORMAL list
#command _NORMAL_L(<z,...>) => nl( <"z"> )
_NORMAL_L(n,"n",'a',["'a'"],"['a']",'["a"]',&a.1,&a,&a.,&a. ,&(a),&a[1],&a.[1],&a. [2],&a&a, &.a, &a.a, a, a)
// SMART list
#command _SMART_L(<z,...>) => sl( <(z)> )
_SMART_L(a,"a",'a',["'a'"],"['a']",'["a"]',&a.1,&a,&a.,&a. ,&(a),&a[1],&a.[1],&a. [2],&a&a, &.a, &a.a, a, a)
// DUMB list
#command _DUMB_L(<z,...>) => dl( #<z> )
_DUMB_L(a,"a",'a',["'a'"],"['a']",'["a"]',&a.1,&a,&a.,&a. ,&(a),&a[1],&a.[1],&a. [2],&a&a, &.a, &a.a, a, a)
/* ---------------------------------------------------------------------*/
index on LEFT( f1 , 10 ) to _tst
/* ---------------------------------------------------------------------*/
#xcommand SET <var1> [, <varN>] WITH <val> => <var1>:=<val>[; <varN>:=<val>]
SET v1, v2, v3 WITH 0
/* ---------------------------------------------------------------------*/
#xcommand INSERT INTO <table> ( <uField1> [, <uFieldN> ] ) VALUES ( <uVal1>
[, <uValN> ] ) => ;
if <table>->( dbappend() ) ;;
replace <table>-><uField1> with <uVal1> ;;
[ replace <table>-><uFieldN> with <uValN> ; ] ;
<table>->( dbunlock() ) ;;
endif
insert into test ( FIRST, LAST, STREET ) values ( "first", "last", "street" )
#xcommand INSERT2 INTO <table> ( <uField1> [, <uFieldN> ] ) VALUES ( <uVal1>
[, <uValN> ] ) => ;
if <table>->( dbappend() ) ;;
<table>-><uField1> := <uVal1> ;;
[ <table>-><uFieldN> := <uValN> ; ] ;
<table>->( dbunlock() ) ;;
endif
insert2 into test ( FIRST, LAST, STREET ) ;
values ( "first", "last", "street" )
/* ---------------------------------------------------------------------*/
#define F1( n ) F2( n, N )
F1( 1 )
#define F3( nN, Nn ) F2( nN, Nn, NN, nn, N, n )
F3( 1, 2 )
/* ---------------------------------------------------------------------*/
#command MYCOMMAND [<mylist,...>] [MYCLAUSE <myval>] => ;
MyFunction( {<mylist>} [, <myval>] )
MYCOMMAND MYCLAUSE 321 "HELLO"
MYCOMMAND MYCLAUSE 321 "HELLO","all"
MYCOMMAND "HELLO","all" MYCLAUSE 321
#command MYCOMMAND2 [<mylist,...>] [MYCLAUSE <myval>] [ALL] => ;
MyFunction( {<mylist>} [, <myval>] )
MYCOMMAND2 MYCLAUSE 321 "HELLO"
MYCOMMAND2 MYCLAUSE 321 "HELLO" ALL
MYCOMMAND2 ALL MYCLAUSE 321 "HELLO"
MYCOMMAND2 MYCLAUSE 321 "HELLO" ALL
MYCOMMAND2 MYCLAUSE 321 ALL "HELLO"
/*
in := 'MYCOMMAND3 ALL MYCLAUSE 321 "HELLO","WORLD"'
in := 'MYCOMMAND3 MYCLAUSE 321 ALL "HELLO"'
in := 'MYCOMMAND3 MYCLAUSE 321 "HELLO" ALL'
in := 'MYCOMMAND3 MYCLAUSE 321 "HELLO"'
*/
#xcommand MYCOMMAND4 [<myList,...>] ;
[MYCLAUSE <myVal>] [MYOTHER <myOther>] => MyFunction4( {<myList>}, <myVal>, <myOther> )
/* ---------------------------------------------------------------------*/
/* Special restricted macro match marker (used in SET FILTER TO command */
SET FILTER TO &cVar.
SET FILTER TO &(cVar .AND. &cVar)
SET FILTER TO &cVar. .AND. cVar
/* ---------------------------------------------------------------------*/
#xtranslate XTRANS(<x>( => normal( <(x)> )
#xtranslate XTRANS(<x:&>( => macro( <(x)> )
XTRANS( cVar (
XTRANS( &cVar (
XTRANS( &cVar+1 (
XTRANS( &cVar. (
XTRANS( (&cVar.) (
XTRANS( &(cVar) (
XTRANS( &cVar[3] (
XTRANS( &cVar. [3] (
XTRANS( &(cVar [3],&cvar) (
XTRANS( (&cVar. [3],&cvar) (
XTRANS( &cVar.1+5 (
XTRANS( &cVar .AND. cVar (
XTRANS( &cVar. .AND. cVar (
/* ---------------------------------------------------------------------*/
#xtranslate MXCALL <x:&> => (<x>)
#xtranslate MYCALL <x:&> <y> => <x>( <y>, 'mycall' )
#xtranslate MZCALL <x> <y> => <x>( <y>, "mzcall" )
#command FOO <x:&> FOO <y:&> => <(x)>+<(y)>
#translate BAR <x:&> BAR <y:&> => <(x)>+<(y)>
MYCALL &cVar ++cVar
MZCALL &cVar ++cVar
MYCALL &cVar+1 &cVar
MZCALL &cVar+1 &cVar
MXCALL &cVar
MXCALL &cVar.
MXCALL &cVar.1
MXCALL &cVar + 1
MYCALL &cVar &cVar
MYCALL &cVar. &cVar.
MYCALL &cVar.1 &cVar.1
MYCALL &cVar ++cVar
MYCALL &cVar. --cVar
MYCALL &cVar.1 !cVar
MYCALL &cVar+1 &cVar
MYCALL &cVar.+1 &cVar.
MYCALL &cVar.1+1 &cVar.1
MYCALL &cVar +1 &cVar
MYCALL &cVar. +1 &cVar.
MYCALL &cVar.1 +1 &cVar.1
MYCALL &cVar +1
MYCALL &cVar. +1
MYCALL &cVar.1 +1
FOO &cVar FOO &var.
BAR &cVar BAR &var.
FOO &cVar FOO &var.+1
BAR &cVar BAR &var.+1
MXCALL &cVar()
MXCALL &cVar++
(MXCALL &cVar)++
MXCALL &cVar.()
MXCALL &cVar.++
(MXCALL &cVar.)++
MXCALL &cVar.1 ()
MXCALL &cVar.1 ++
(MXCALL &cVar.1) ++
/* ---------------------------------------------------------------------*/
#translate MTRANSLATE <x> => normal_t(<"x">)
#translate MTRANSLATE <x:&> => macro_t(<(x)>)
#command MCOMMAND <x> => normal_c(<"x">)
#command MCOMMAND <x:&> => macro_c(<(x)>)
MTRANSLATE &cVar
MTRANSLATE &cVar.
MTRANSLATE &(cVar)
MTRANSLATE & (cVar)
MTRANSLATE &cVar&cVar
MTRANSLATE &cVar+1
MTRANSLATE &cVar.+1
MTRANSLATE &cVar. .AND. .T.
MTRANSLATE &cVar++
MTRANSLATE &cVar.++
MTRANSLATE &cVar+=1
MTRANSLATE &cVar.-=2
MTRANSLATE &cVar*=1
MTRANSLATE &cVar/=2
MTRANSLATE &cVar%=1
MTRANSLATE &cVar^=2
MTRANSLATE &cVar:=1
MTRANSLATE &cVar. .AND. .T.
MTRANSLATE &cVar .AND. .T.
MTRANSLATE &(cVar) +1
MTRANSLATE & (cVar) +1
MTRANSLATE &cVar.&cVar.
MTRANSLATE &cVar.&cVar.&cVar&cVar
MTRANSLATE &cVar.&(cVar)
/* command */
MCOMMAND &cVar
MCOMMAND &cVar.
MCOMMAND &(cVar)
MCOMMAND & (cVar)
MCOMMAND &cVar&cVar
MCOMMAND &cVar+1
MCOMMAND &cVar.+1
MCOMMAND &cVar. .AND. .T.
MCOMMAND &cVar++
MCOMMAND &cVar.++
MCOMMAND &cVar+=1
MCOMMAND &cVar.-=2
MCOMMAND &cVar*=1
MCOMMAND &cVar/=2
MCOMMAND &cVar%=12
MCOMMAND &cVar^=2
MCOMMAND &cVar:=1
MCOMMAND &cVar. .AND. .T.
MCOMMAND &cVar .AND. .T.
MCOMMAND &(cVar) +1
MCOMMAND & (cVar) +1
MCOMMAND &cVar.&cVar.
MCOMMAND &cVar.&cVar.&cVar&cVar2
MCOMMAND &cVar.&(cVar)
/* ---------------------------------------------------------------------*/
/* repeated optional clauses */
#xcommand SET <var1> [, <varN>] WITH <val> => <var1>:=<val> [; <varN>:=<val>]
SET v1 WITH 0
SET v1, v2 WITH 0
SET v1, v2, v3 WITH 0
SET v1, v2, v3, v4 WITH 0
#command AVG <x1> [, <xn>] TO <v1> [, <vn>] =>;
AVERAGE( {||<v1>:=<v1>+<x1>} [, {||<vn>:=<vn>+<xn>} ] )
AVG f1 TO s1
AVG f1, f2 TO s1, s2
AVG f1, f2, f3 TO s1, s2, s3
/* ---------------------------------------------------------------------*/
COPY STRUCTURE EXTENDED TO teststru
/* ---------------------------------------------------------------------*/
#ifdef __HARBOUR__
#command @ <row>, <col> GET <var> ;
[PICTURE <pic>] ;
[VALID <valid>] ;
[WHEN <when>] ;
[CAPTION <caption>] ;
[MESSAGE <message>] ;
[SEND <msg>] ;
;
=> SetPos( <row>, <col> ) ;
; AAdd( GetList, ;
_GET_( <var>, <"var">, <pic>, <{valid}>, <{when}> ) ) ;
[; ATail(GetList):Caption := <caption>] ;
[; ATail(GetList):CapRow := ATail(Getlist):row ;
; ATail(GetList):CapCol := ATail(Getlist):col - ;
__CapLength(<caption>) - 1] ;
[; ATail(GetList):message := <message>] ;
[; ATail(GetList):<msg>] ;
; ATail(GetList):Display()
#endif
@ 0,1 GET a
@ 0,2 GET a PICTURE "X"
@ 0,3 GET a PICTURE "X" VALID .T.
@ 0,4 GET a PICTURE "X" VALID .T. WHEN .T.
@ 0,5 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget"
@ 0,6 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget" MESSAGE "mymess"
@ 0,7 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send()
/* ---------------------------------------------------------------------*/
@ 1,1 GET a RANGE 0,100
@ 1,2 GET a PICTURE "X" RANGE 0,100
/* NOTE: Clipper fails here */
@ 1,3 GET a PICTURE "X" VALID .T. RANGE 0,100
@ 1,4 GET a PICTURE "X" WHEN .T. RANGE 0,100
@ 1,5 GET a PICTURE "X" WHEN .T. CAPTION "myget" RANGE 0,100
@ 1,6 GET a PICTURE "X" WHEN .T. CAPTION "myget" MESSAGE "mymess" RANGE 0,100
@ 1,7 GET a PICTURE "X" WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send() RANGE 0,100
@ 2,1 GET a
@ 2,2 GET a RANGE 0,100 PICTURE "X"
@ 2,3 GET a PICTURE "X" RANGE 0,100
@ 2,4 GET a PICTURE "X" RANGE 0,100 WHEN .T.
@ 2,5 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget"
@ 2,6 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget" MESSAGE "mymess"
@ 2,7 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send()
/* ---------------------------------------------------------------------*/
#ifdef __HARBOUR__
#command @ <row>, <col> GET <var> ;
PUSHBUTTON ;
[VALID <valid>] ;
[WHEN <when>] ;
[CAPTION <caption>] ;
[MESSAGE <message>] ;
[COLOR <color>] ;
[FOCUS <fblock>] ;
[STATE <sblock>] ;
[STYLE <style>] ;
[SEND <msg>] ;
[GUISEND <guimsg>] ;
[SIZE X <sizex> Y <sizey>] ;
[CAPOFF X <capxoff> Y <capyoff>] ;
[BITMAP <bitmap>] ;
[BMPOFF X <bmpxoff> Y <bmpyoff>] ;
;
=> SetPos( <row>, <col> ) ;
; AAdd( GetList, ;
_GET_( <var>, <(var)>, NIL, <{valid}>, <{when}> ) ) ;
; ATail(GetList):Control := _PushButt_( <caption>, <message>, ;
<color>, <{fblock}>, <{sblock}>, <style>, ;
<sizex>, <sizey>, <capxoff>, <capyoff>, ;
<bitmap>, <bmpxoff>, <bmpyoff> ) ;
; ATail(GetList):reader := { | a, b, c, d | ;
GuiReader( a, b, c, d ) } ;
[; ATail(GetList):<msg>] ;
[; ATail(GetList):Control:<guimsg>] ;
; ATail(GetList):Control:Display()
#endif
@ 4,1 GET a PUSHBUTTON
@ 4,1 GET a PUSHBUTTON VALID valid()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap"
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes"
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send() GUISEND guisend()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send() GUISEND guisend() SIZE X 100 Y 100
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send() GUISEND guisend() SIZE X 100 Y 100 CAPOFF X 10 Y 10
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send() GUISEND guisend() SIZE X 100 Y 100 CAPOFF X 10 Y 10 BITMAP bitmap()
@ 4,1 GET a PUSHBUTTON VALID valid() WHEN when() CAPTION "cap" MESSAGE "mes" COLOR color() FOCUS focus() STATE state() STYLE style() SEND send() GUISEND guisend() SIZE X 100 Y 100 CAPOFF X 10 Y 10 BITMAP bitmap() BMPOFF X 2 Y 2
@ 4,1 GET a PUSHBUTTON COLOR "W/N"
@ 4,1 GET a PUSHBUTTON COLOR "W/N" SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes"
@ 4,1 GET a PUSHBUTTON SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes" COLOR "W/N"
@ 4,1 GET a PUSHBUTTON SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes" COLOR "W/N" CAPOFF X 10 Y 10 FOCUS focus() STATE state() STYLE style() SEND send() BITMAP bitmap() CAPTION "cap"
#command DEFINE CLIPBOARD <oClp> ;
[ FORMAT <format:TEXT,OEMTEXT,BITMAP,DIF> ] ;
[ OF <oWnd> ] ;
=> ;
<oClp> := TClipboard():New( [UPPER(<(format)>)], <oWnd> )
DEFINE CLIPBOARD oC OF oD FORMAT TEXT
#xcommand DECLARE WINDOW <w> ;
=>;
#xtranslate <w> . <p:Name,Title,f1,f2,f3,f4,f5,f6,f7,f8,f9> := <n> => SProp( <"w">, <"p"> , <n> )
#xcommand DEFINE WINDOW <w> [ON INIT <IProc>] =>;
DECLARE WINDOW <w> ; _DW( <"w">, <{IProc}> )
DEFINE WINDOW &oW
DEFINE WINDOW &oW ON INIT oW.Title:= "My title"
&oW.Title := "title"
&oW.f9 := 9
RETURN

View File

@@ -489,7 +489,12 @@ ENDTEXT
pre := 'MyFunction({"HELLO"} ,321 )'
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
TEXT TO VAR in
#command MYCOMMAND2 [<myList,...>]
[MYCLAUSE <myVal>] [MYOTHER <myOther>] => MyFunction( {<myList>}, <myVal>, <myOther> )
ENDTEXT
__PreProcess( in )
/* Special restricted macro match marker (used in SET FILTER TO command */
in := "SET FILTER TO &cVar."
pre := "if ( Empty(cVar) ) ; dbClearFilter() ; else ; dbSetFilter({||&cVar.},cVar) ; end"
@@ -1169,18 +1174,31 @@ ENDTEXT
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
in :='@ 4,1 GET a PUSHBUTTON COLOR "W/N" SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes"'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_(,"mes","W/N",,,,100,100,,,,2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_(,"mes","W/N",,,,100,100,,,,2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
in :='@ 4,1 GET a PUSHBUTTON SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes" COLOR "W/N"'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_(,"mes","W/N",,,,100,100,,,,2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_(,"mes","W/N",,,,100,100,,,,2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
in :='@ 4,1 GET a PUSHBUTTON SIZE X 100 Y 100 BMPOFF X 2 Y 2 VALID valid() GUISEND guisend() WHEN when() MESSAGE "mes" COLOR "W/N" CAPOFF X 10 Y 10 FOCUS focus() STATE state() STYLE style() SEND send() BITMAP bitmap() CAPTION "cap"'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_("cap","mes","W/N",{||focus()},{||state()},style(),100,100,10,10,bitmap(),2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):send() ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
pre := 'SetPos(4,1 ) ; AAdd(GetList,_GET_(a,"a",NIL,{||valid()},{||when()} ) ) ; ATail(GetList):Control := _PushButt_("cap","mes","W/N",{||focus()},{||state()},style(),100,100,10,10,bitmap(),2,2 ) ; ATail(GetList):reader := { | a,b,c,d | GuiReader(a,b,c,d ) } ; ATail(GetList):send() ; ATail(GetList):Control:guisend() ; ATail(GetList):Control:Display()'
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
TEXT TO VAR in
#command DEFINE CLIPBOARD <oClp>
[ FORMAT <format:TEXT,OEMTEXT,BITMAP,DIF> ]
[ OF <oWnd> ]
=>
<oClp> := TClipboard():New( [UPPER(<(format)>)], <oWnd> )
ENDTEXT
__PreProcess( in )
in:= "DEFINE CLIPBOARD oC OF oD FORMAT TEXT"
pre :='oC := TClipboard():New(UPPER("TEXT") ,oD )'
nRes += PreResult( pre, PreRun( in, pre ), @nCnt )
/* ---------------------------------------------------------------------*/
__PP_FREE()