+ website
+ Added Harbour website (except art, docs and stat subdirs)
; TODO: configure automatic mechanism to extract site from
here and regularly updload to sf.net web area
; TODO: Clean HTML code, remove unused picture/files, avoid JS
Any takers?
; NOTE: Please make modifications to website code only in
SVN, then upload the content to web server manually.
IOW never update on web server directly.
189 lines
15 KiB
HTML
189 lines
15 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
|
|
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>tstmacro.prg</TITLE>
|
|
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
|
|
<META content="MSHTML 6.00.6000.16386" name=GENERATOR>
|
|
<STYLE type=text/css>
|
|
<!--
|
|
body { color: #000000; background-color: #FFFFFF; }
|
|
.any1-activedot { color: #800080; }
|
|
.any1-comment { color: #008080; }
|
|
.any1-constant { color: #800080; }
|
|
.any1-escapeampersand { color: #00FF00; font-weight: bold; }
|
|
.any1-function { color: #808000; }
|
|
.any1-identifier { color: #000000; }
|
|
.any1-number { color: #FF0000; }
|
|
.any1-preprocessor { }
|
|
.any1-reservedword { color: #800000; }
|
|
.any1-space { }
|
|
.any1-string { color: #0000FF; }
|
|
.any1-symbol { }
|
|
.any1-variable { color: #808000; }
|
|
-->
|
|
</STYLE>
|
|
</HEAD>
|
|
<BODY bgColor=#ffffff>
|
|
<PRE><CODE><SPAN style="FONT: 10pt Courier New"><SPAN class=any1-constant>#include</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"hbclass.ch"
|
|
|
|
</SPAN><SPAN class=any1-reservedword>MEMVAR</SPAN><SPAN class=any1-space> cStr, cStr_1, cVar_1, aVar, oVar, OtherVar, SomeVar, </SPAN><SPAN class=any1-reservedword>Private
|
|
MEMVAR</SPAN><SPAN class=any1-space> cMainPrivate, GlobalPrivate, BornInRunTimeVar, </SPAN><SPAN class=any1-reservedword>Public
|
|
|
|
Function</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>Main</SPAN><SPAN class=any1-symbol>( )
|
|
|
|
</SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> cStr := </SPAN><SPAN class=any1-string>'cVar'</SPAN><SPAN class=any1-symbol>, cStr_1 := </SPAN><SPAN class=any1-string>'cVar_1'</SPAN><SPAN class=any1-symbol>, aVar := { </SPAN><SPAN class=any1-string>'cVar_1'</SPAN><SPAN class=any1-space> }, oVar
|
|
|
|
</SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> cVar_1, cMainPrivate := </SPAN><SPAN class=any1-string>'cVar_1'</SPAN><SPAN class=any1-symbol>, GlobalPrivate := </SPAN><SPAN class=any1-string>'BornInRunTimeVar'
|
|
|
|
</SPAN><SPAN class=any1-space> &cStr_1 = </SPAN><SPAN class=any1-string>'Simple '
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
&( </SPAN><SPAN class=any1-string>'cVar'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-string>'_1'</SPAN><SPAN class=any1-space> ) := </SPAN><SPAN class=any1-string>'Macro'
|
|
</SPAN><SPAN class=any1-space> ?? M->cVar_1
|
|
|
|
M->&cStr_1 = </SPAN><SPAN class=any1-string>'Aliased'
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
MEMVAR->&( </SPAN><SPAN class=any1-string>'cVar'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-string>'_1'</SPAN><SPAN class=any1-space> ) := </SPAN><SPAN class=any1-string>' Macro'
|
|
</SPAN><SPAN class=any1-space> ?? M->cVar_1
|
|
|
|
cStr := </SPAN><SPAN class=any1-string>'cVar_'
|
|
</SPAN><SPAN class=any1-space> &cStr.</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> = </SPAN><SPAN class=any1-string>'Concatenated Macro (Numeric)'
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
cStr := </SPAN><SPAN class=any1-string>'cVar'
|
|
</SPAN><SPAN class=any1-space> &cStr._1 = </SPAN><SPAN class=any1-string>'Concatenated Macro (String)'
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
&( aVar[</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>] ) := </SPAN><SPAN class=any1-string>'Array Macro'
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
oVar := </SPAN><SPAN class=any1-variable>TValue</SPAN><SPAN class=any1-symbol>():</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>()
|
|
oVar:cVal := </SPAN><SPAN class=any1-string>'cVar_1'
|
|
</SPAN><SPAN class=any1-space> &( oVar:cVal ) := </SPAN><SPAN class=any1-string>'Class Macro'
|
|
</SPAN><SPAN class=any1-space> ? M->cVar_1
|
|
|
|
</SPAN><SPAN class=any1-variable>SubFun</SPAN><SPAN class=any1-symbol>()
|
|
|
|
? </SPAN><SPAN class=any1-string>'"cVar_1" = ['</SPAN><SPAN class=any1-space> + M->cVar_1 + </SPAN><SPAN class=any1-string>'] AFTER SubFun() PRIVATE'
|
|
|
|
</SPAN><SPAN class=any1-space> ? M->NewPublicVar
|
|
|
|
</SPAN><SPAN class=any1-variable>TEST_TYPE</SPAN><SPAN class=any1-symbol>()
|
|
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> NIL
|
|
|
|
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> TValue
|
|
|
|
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> oClass
|
|
|
|
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> oClass == NIL
|
|
oClass = </SPAN><SPAN class=any1-variable>HBClass</SPAN><SPAN class=any1-symbol>():</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"TValue"</SPAN><SPAN class=any1-space> )
|
|
|
|
oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cVal"</SPAN><SPAN class=any1-space> )
|
|
oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"New"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// New Method
|
|
|
|
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-function>Create</SPAN><SPAN class=any1-symbol>()
|
|
|
|
</SPAN><SPAN class=any1-reservedword>ENDIF
|
|
|
|
RETURN</SPAN><SPAN class=any1-symbol>( oClass:</SPAN><SPAN class=any1-variable>Instance</SPAN><SPAN class=any1-symbol>() )
|
|
|
|
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>()
|
|
|
|
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
|
|
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> Self
|
|
|
|
</SPAN><SPAN class=any1-reservedword>Function</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>SubFun</SPAN><SPAN class=any1-symbol>()
|
|
|
|
? </SPAN><SPAN class=any1-string>'"cVar_1" = ['</SPAN><SPAN class=any1-space> + M->cVar_1 + </SPAN><SPAN class=any1-string>'] BEFORE SubFun() PRIVATE'
|
|
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// Testing conflict with KEY WORDS
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> := </SPAN><SPAN class=any1-string>'I am a Var named PRIVATE '</SPAN><SPAN class=any1-symbol>, &cMainPrivate, SomeVar, OtherVar := </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, &GlobalPrivate := </SPAN><SPAN class=any1-string>'I was born in Run Time'
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PUBLIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PUBLIC</SPAN><SPAN class=any1-space> := </SPAN><SPAN class=any1-string>'NewPublicVar'
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PUBLIC</SPAN><SPAN class=any1-space> &</SPAN><SPAN class=any1-reservedword>PUBLIC
|
|
|
|
</SPAN><SPAN class=any1-space> ? M->NewPublicVar
|
|
|
|
M->NewPublicVar := </SPAN><SPAN class=any1-string>'Still Alive because I am PUBLIC'
|
|
|
|
</SPAN><SPAN class=any1-space> ? M-></SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-reservedword>PRIVATE
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-reservedword>PRIVATE</SPAN><SPAN class=any1-space> + M-></SPAN><SPAN class=any1-reservedword>PRIVATE
|
|
|
|
</SPAN><SPAN class=any1-space> ? BornInRunTimeVar
|
|
|
|
&cMainPrivate := </SPAN><SPAN class=any1-string>'In SubFun()'
|
|
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>'"cVar_1" = ['</SPAN><SPAN class=any1-space> + M->cVar_1 + </SPAN><SPAN class=any1-string>'] in SubFun() PRIVATE'
|
|
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> NIL
|
|
|
|
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PROCEDURE</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>TEST_TYPE</SPAN><SPAN class=any1-symbol>()
|
|
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> v1, v2, v1a, v2a
|
|
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> bErr:=</SPAN><SPAN class=any1-function>ERRORBLOCK</SPAN><SPAN class=any1-symbol>({|e|</SPAN><SPAN class=any1-function>BREAK</SPAN><SPAN class=any1-symbol>(e)}), oE
|
|
|
|
?
|
|
? </SPAN><SPAN class=any1-string>"=========== TYPE() function ================="
|
|
</SPAN><SPAN class=any1-space> v1 := </SPAN><SPAN class=any1-string>"UDF()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF()') - should be 'UI': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF_STATIC()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC()') - should be 'U': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
? </SPAN><SPAN class=any1-string>"Test for &"</SPAN><SPAN class=any1-symbol>+</SPAN><SPAN class=any1-string>"'UDF()' - should print 'udf': "</SPAN><SPAN class=any1-symbol>, &v1
|
|
? </SPAN><SPAN class=any1-string>"Test for &"</SPAN><SPAN class=any1-symbol>+</SPAN><SPAN class=any1-string>"'UDF_STATIC()' - should print 'ERROR: undefined function': "
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>BEGIN</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>SEQUENCE
|
|
</SPAN><SPAN class=any1-space> ?? &v2
|
|
RECOVER USING oE
|
|
? </SPAN><SPAN class=any1-string>"ERROR: "</SPAN><SPAN class=any1-symbol>+oE:Description
|
|
</SPAN><SPAN class=any1-reservedword>END</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>SEQUENCE
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>ERRORBLOCK</SPAN><SPAN class=any1-symbol>(bErr)
|
|
|
|
v1 := </SPAN><SPAN class=any1-string>"UDF"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF') - should be 'U': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF_STATIC"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC') - should be 'U': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
|
|
v1a := </SPAN><SPAN class=any1-string>"UDF:=1"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF:=1') - should be 'N': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1a)
|
|
v2a := </SPAN><SPAN class=any1-string>"UDF_STATIC:=1"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC:=1') - should be 'N': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2a)
|
|
|
|
? </SPAN><SPAN class=any1-string>"=== after the assignment ==="
|
|
</SPAN><SPAN class=any1-space> v1 := </SPAN><SPAN class=any1-string>"UDF"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF') - should be 'N': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF_STATIC"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC') - should be 'N': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
|
|
v1 := </SPAN><SPAN class=any1-string>"UDF()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF()') - should be 'UI': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF_STATIC()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC()') - should be 'U': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
|
|
|
|
? </SPAN><SPAN class=any1-string>"=== declared public variable ==="
|
|
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>PUBLIC</SPAN><SPAN class=any1-space> UDF2, UDF2_STATIC
|
|
v1 := </SPAN><SPAN class=any1-string>"UDF2()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF2()') - should be 'UI': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF2_STATIC()"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF2_STATIC()') - should be 'U': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
|
|
v1 := </SPAN><SPAN class=any1-string>"UDF2"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF') - should be 'L': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v1)
|
|
v2 := </SPAN><SPAN class=any1-string>"UDF2_STATIC"
|
|
</SPAN><SPAN class=any1-space> ? </SPAN><SPAN class=any1-string>"Test for TYPE('UDF_STATIC') - should be 'L': "</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>TYPE</SPAN><SPAN class=any1-symbol>(v2)
|
|
|
|
?
|
|
</SPAN><SPAN class=any1-reservedword>RETURN
|
|
|
|
STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>UDF_STATIC</SPAN><SPAN class=any1-symbol>()
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"udf_static"
|
|
|
|
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>UDF</SPAN><SPAN class=any1-symbol>()
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"udf"
|
|
|
|
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>UDF2_STATIC</SPAN><SPAN class=any1-symbol>()
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"udf2_static"
|
|
|
|
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>UDF2</SPAN><SPAN class=any1-symbol>()
|
|
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"udf2"
|
|
</SPAN></SPAN>
|
|
</CODE></PRE></BODY></HTML>
|