Wanted: One Specific Piece of Software
On 30-Dec-2001 Sellam Ismail wrote:
> On Sat, 29 Dec 2001 gwynp_at_artware.qc.ca wrote:
>
>> Which aren't what you want. But let me heartily recomend Clipper.
>> It compiles 99% of dBase programs and more. The 2 features I really
>> liked of Clipper where that it worked like a real compiler (ie,
>> compiled to .obj files, linked to .exe. Back in the day I used a 3rd
>> party incremental linker which saved much time during compiles) but
>
> Yes, I used an incremental linker as well ("Blinker" is what it was
> called if I'm not mistaken). It made a tremendous difference on a 286 :)
Blinker it was.
> Clipper did/does rock, but once I got into FoxPro I preferred it.
What did foxpro have that clipper didn't?
>> above all, XCOMMANDS! These allowed you to add new syntax to the
>> language, which would be mapped onto function calls. Think of it as a
>> sophisticated pre-processor. I've heard rumours of someone
>> implementing Fortran as Clipper xcommands.
>
> Never used or even heard of those but that sounds cool.
Eeep! Then you either switched to FoxPro too soon, or didn't drink fully
of Clipper.
Here are 2 examples or xcommands:
#xcommand DEFAULT <v1> TO <x1> [, <vn> TO <xn> ] ;
=> ;
IF <v1> == NIL ; <v1> := <x1> ; END ;
[; IF <vn> == NIL ; <vn> := <xn> ; END ]
This maps the command :
default foo to "hello"
To
IF foo == NIL ; foo := "hello" ; END
the <vn> an <xn> mean that
default foo to "hello", bar to "world", biffle to 10
turns into
IF foo == NIL ; foo := "hello" ; END
IF bar == NIL ; bar := "world" ; END
IF biffle == NIL ; biffle := 10 ; END
Here's a more complex example :
#command _at_ <row>, <col> GET PASSWORD <cWord> [PICTURE <cPic>] ;
[SEND <msg>] [COLOUR <clr>] [valid <fvalid>] ;
;
=> SetPos( <row>, <col> ) ;
; AAdd( GetList, ;
GetNew( <row>, <col>, ;
{|cNew| IF(pcount()==0, <cWord>, <cWord>:=cNew)}, ;
<"cWord">,<cPic>,<clr>) ;
):reader:={|o| Pass_read(o) } ;
[; ATail(GetList):<msg>] ;
[; ATail(GetList):postblock:=<{fvalid}>] ;
; Pass_disp(ATail(GetList))
This extends the _at_ ...GET so to add a password entry (ie, echo * instead
of what's typed). AAdd and ATail were array manip functions, GetList is a
global array of what's in the current _at_ ... GET page. GetNew is a
constructor in the crude OO that clipper 5.0 had. Pass_read and Pass_disp
where functions I supplied.
Perl (source-filters) and Forth (redefine basic words) allow similar
tomfoolery. I've always found language that allows one to change and
augment the basic syntax to be Extra Good.
-Philip
Received on Mon Dec 31 2001 - 03:06:04 GMT
This archive was generated by hypermail 2.3.0
: Fri Oct 10 2014 - 23:33:42 BST