* harbour/include/hbver.h
* changed version number and ChangeLog entry
* harbour/make_tgz.sh
! fixed creating PP in DJGPP builds
* harbour/contrib/dot/pp.prg
! minor fix in parameter checking
* harbour/contrib/libmisc/hb_f.c
! fixed bug in record numbering after reaching EOF position and
backward skipping
* harbour/include/hbrdddel.h
* harbour/source/rdd/delim1.c
+ implemented DELIM RDD. It should be fully Clipper compatible
in comma files parsing. If you will find any difference, please
inform me and I'll update it. Unlike in Clipper in [x]Harbour
these RDD can be used also in direct import operations with
APPEND FROM ... VIA "DELIM"
These RDD also support whole record transfering between RDDs
if they support the same record format and field representation
and can translate extended field types like "I", "B", "V3", "V4",
etc.
* harbour/source/rtl/dbdelim.prg
* replaced old code of __dbDelim() function with simple calls to
__dbCopy()/__dbApp() - it should fix most of the reported
incompatibilities in DELIM import/export operations and
increase their speed many times
* harbour/include/hbrddsdf.h
* harbour/source/rdd/sdf1.c
+ implemented SDF RDD. It should be fully Clipper compatible
in SDF files parsing. If you will find any difference, please
inform me and I'll update it. Unlike in Clipper in [x]Harbour
these RDD can be used also in direct import operations with
APPEND FROM ... VIA "SDF"
These RDD also support whole record transfering between RDDs
if they support the same record format and field representation
and can translate extended field types like "I", "B", "V3", "V4",
etc.
* harbour/source/rtl/dbsdf.prg
* replaced old code of __dbSDF() function with simple calls to
__dbCopy()/__dbApp() - it should fix most of the reported
incompatibilities in SDF import/export operations and
increase their speed many times
* harbour/source/rdd/dbcmd.c
+ added support for table structure inheriting in transfer RDDs.
+ added eleventh parameter with delimiter to __dbCopy()/__dbApp()
* harbour/source/rdd/dbf1.c
* force 10 bytes size for memo fields in DBF and SMT memos.
* some minor clean-up.
* harbour/source/rdd/workarea.c
* added some dummy DBI_* actions in base RDD level
9356 lines
399 KiB
Plaintext
9356 lines
399 KiB
Plaintext
/*
|
|
* xBaseScript Project source code:
|
|
* Pre-Processor / Dot prompt environment / Script Interpreter
|
|
*
|
|
* Copyright 2000-2001 Ron Pinkas <ronpinkas@ronpinkas.com>
|
|
* www - http://www.xBaseScript.com
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
|
* their web site at http://www.gnu.org/).
|
|
*/
|
|
|
|
#ifdef PP_QUIET
|
|
#COMMAND @ Row(), 0 SAY <nLine> =>
|
|
#endif
|
|
|
|
#DEFINE MAX_CICLES 256
|
|
#DEFINE PP_BUFFER_SIZE 8192 //16384
|
|
|
|
#ifdef __CLIP__
|
|
#ifdef __LINUX__
|
|
#define __PLATFORM__UNIX
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __PLATFORM__UNIX
|
|
#ifndef OS_PATH_DELIMITER
|
|
#define OS_PATH_DELIMITER '/'
|
|
#endif
|
|
#ifndef OS_PATH_LIST_SEPARATOR
|
|
#define OS_PATH_LIST_SEPARATOR ':'
|
|
#endif
|
|
#ifndef OS_PATH_DELIMITER_LIST
|
|
#define OS_PATH_DELIMITER_LIST "/"
|
|
#endif
|
|
#else
|
|
#ifndef OS_PATH_DELIMITER
|
|
#define OS_PATH_DELIMITER '\'
|
|
#endif
|
|
#ifndef OS_PATH_LIST_SEPARATOR
|
|
#define OS_PATH_LIST_SEPARATOR ';'
|
|
#endif
|
|
#ifndef OS_PATH_DELIMITER_LIST
|
|
#define OS_PATH_DELIMITER_LIST "\/:"
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __HARBOUR__
|
|
|
|
// Enable extended syntax.
|
|
#ifdef __XHARBOUR__
|
|
#define __FOR_EACH__
|
|
#define __WITH_
|
|
#define __STRING_INDEX__
|
|
|
|
EXTERN CreateObject
|
|
EXTERN GetActiveObject
|
|
#endif
|
|
|
|
#ifndef NO_BOOST
|
|
#define USE_C_BOOST
|
|
#endif
|
|
|
|
#INCLUDE "hbextern.ch"
|
|
#DEFINE CRLF HB_OsNewLine()
|
|
#ifdef FW
|
|
#INCLUDE "fwextern.ch"
|
|
#else
|
|
#ifdef MINIGUI
|
|
#define WIN
|
|
|
|
EXTERN PLAYBEEP
|
|
EXTERN PLAYASTERISK
|
|
EXTERN PLAYEXCLAMATION
|
|
EXTERN PLAYHAND
|
|
EXTERN PLAYQUESTION
|
|
EXTERN PLAYOK
|
|
EXTERN ACTIVATEFORM
|
|
EXTERN GETFONT
|
|
EXTERN GETFILE
|
|
EXTERN PUTFILE
|
|
EXTERN GETMENU
|
|
EXTERN GETSUBMENU
|
|
EXTERN CCHECKMENUITEM
|
|
EXTERN CUNCHECKMENUITEM
|
|
EXTERN GETMENUCHECKSTATE
|
|
EXTERN CENABLEMENUITEM
|
|
EXTERN CDISABLEMENUITEM
|
|
EXTERN GETMENUENABLEDSTATE
|
|
EXTERN INITTIMER
|
|
EXTERN KILLTIMER
|
|
EXTERN INITTOOLTIP
|
|
EXTERN SETTOOLTIP
|
|
EXTERN INITPANEL
|
|
EXTERN C_MSGRETRYCANCEL
|
|
EXTERN C_MSGOKCANCEL
|
|
EXTERN C_MSGYESNO
|
|
EXTERN INITPROGRESSBAR
|
|
EXTERN INITSLIDER
|
|
EXTERN REPAINTSTATUS
|
|
EXTERN INITDATEPICK
|
|
EXTERN SETDATEPICK
|
|
EXTERN GETDATEPICKYEAR
|
|
EXTERN GETDATEPICKMONTH
|
|
EXTERN GETDATEPICKDAY
|
|
EXTERN EXITPROCESS
|
|
EXTERN LISTVIEW_GETFIRSTITEM
|
|
EXTERN INITGUI
|
|
EXTERN INITTOPMOSTFORM
|
|
EXTERN TRACKPOPUPMENU
|
|
EXTERN INITSTATUS
|
|
EXTERN SETSTATUS
|
|
EXTERN INITFORM
|
|
EXTERN INITMODALWINDOW
|
|
EXTERN ACTIVATEFORMGENERIC
|
|
EXTERN ACTIVATEFORMNOWAIT
|
|
EXTERN CSHOWCONTROL
|
|
EXTERN MAXIMIZE
|
|
EXTERN MINIMIZE
|
|
EXTERN RESTORE
|
|
EXTERN CHIDECONTROL
|
|
EXTERN INITBUTTON
|
|
EXTERN INITIMAGEBUTTON
|
|
EXTERN INITLABEL
|
|
EXTERN INITCHECKBOX
|
|
EXTERN INITGROUPBOX
|
|
EXTERN INITRADIOGROUP
|
|
EXTERN INITRADIOBUTTON
|
|
EXTERN INITCOMBOBOX
|
|
EXTERN INITLISTBOX
|
|
EXTERN INITSPINNER
|
|
EXTERN INITTEXTBOX
|
|
EXTERN INITNUMERICTEXTBOX
|
|
EXTERN INITPASSWORDTEXTBOX
|
|
EXTERN INITEDITBOX
|
|
EXTERN INITREADONLYEDITBOX
|
|
EXTERN GETACTIVEWINDOW
|
|
EXTERN SETACTIVEWINDOW
|
|
EXTERN INITLISTVIEW
|
|
EXTERN MSGBOX
|
|
EXTERN POSTQUITMESSAGE
|
|
EXTERN INITLISTVIEWCOLUMNS
|
|
EXTERN ADDLISTVIEWITEMS
|
|
EXTERN INITTABCONTROL
|
|
EXTERN TABCTRL_SETCURSEL
|
|
EXTERN TABCTRL_GETCURSEL
|
|
EXTERN INITIMAGE
|
|
EXTERN HIWORD
|
|
EXTERN LOWORD
|
|
EXTERN DESTROYWINDOW
|
|
EXTERN MSGINFO
|
|
EXTERN MSGSTOP
|
|
EXTERN MSGEXCLAMATION
|
|
EXTERN INITMENU
|
|
EXTERN INITCONTEXTMENU
|
|
EXTERN ISWINDOWENABLED
|
|
EXTERN ENABLEWINDOW
|
|
EXTERN DISABLEWINDOW
|
|
EXTERN SETFOREGROUNDWINDOW
|
|
EXTERN GETFOREGROUNDWINDOW
|
|
EXTERN GETNEXTWINDOW
|
|
EXTERN GETPREVWINDOW
|
|
EXTERN CHECKDLGBUTTON
|
|
EXTERN UNCHECKDLGBUTTON
|
|
EXTERN COMBOADDSTRING
|
|
EXTERN COMBOSETCURSEL
|
|
EXTERN LISTBOXADDSTRING
|
|
EXTERN LISTBOXSETCURSEL
|
|
EXTERN SETDLGITEMTEXT
|
|
EXTERN SETWINDOWTEXT
|
|
EXTERN CENTER
|
|
EXTERN LISTVIEW_SETCURSEL
|
|
EXTERN C_SETFOCUS
|
|
EXTERN GETDLGITEMTEXT
|
|
EXTERN GETWINDOWTEXT
|
|
EXTERN ISDLGBUTTONCHECKED
|
|
EXTERN COMBOGETCURSEL
|
|
EXTERN LISTBOXGETCURSEL
|
|
EXTERN COMBOBOXDELETESTRING
|
|
EXTERN LISTBOXDELETESTRING
|
|
EXTERN LISTVIEWDELETESTRING
|
|
EXTERN LISTBOXRESET
|
|
EXTERN LISTVIEWRESET
|
|
EXTERN COMBOBOXRESET
|
|
EXTERN SENDMESSAGE
|
|
EXTERN C_GETFOLDER
|
|
EXTERN C_BROWSEFORFOLDER
|
|
EXTERN C_GETSPECIALFOLDER
|
|
#endif
|
|
|
|
#ifdef WIN
|
|
#COMMAND Alert( <x> ) => MessageBox( 0, CStr( <x> ), "PP for Windows", 0 )
|
|
EXTERN MessageBox
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#else
|
|
|
|
#DEFINE __CLIPPER__
|
|
|
|
#translate At( <find>, <where>, <from> ) => IIF( ( M->__AT__ := At( <find>, SubStr( <where>, <from> ) ) ) == 0, 0, <from> + M->__AT__ - 1 )
|
|
|
|
#ifndef CRLF
|
|
#DEFINE CRLF Chr(13) + Chr(10)
|
|
#endif
|
|
|
|
STATIC s_abBlocks := {}, nBlockId := 0
|
|
|
|
EXTERNAL BROWSE
|
|
|
|
EXTERNAL ARRAY,ASIZE,ATAIL,AINS,ADEL,AFILL,ASCAN,AEVAL,ACOPY,ACLONE,ADIR, ASORT
|
|
|
|
EXTERNAL ERRORLEVEL
|
|
|
|
EXTERNAL __QQPUB,__MCLEAR,__MRELEASE,__MXRELEASE,__MSAVE,__MRESTORE ;
|
|
|
|
EXTERNAL PROCNAME,PROCLINE,PROCFILE
|
|
|
|
EXTERNAL BIN2W,BIN2I,BIN2L,I2BIN,L2BIN
|
|
|
|
EXTERNAL OUTSTD,OUTERR,QQOUT,QOUT,DISPOUT,DISPOUTAT,__EJECT, ;
|
|
SETPRC,DISPBOX,DISPBEGIN,DISPEND,DISPCOUNT,ISCOLOR, ;
|
|
NOSNOW,DBGSHADOW,SAVESCREEN,RESTSCREEN,SETCURSOR,SETBLINK,SETMODE,__ACCEPT, ;
|
|
__ACCEPTSTR
|
|
|
|
EXTERNAL __COPYFILE
|
|
|
|
EXTERNAL DESCEND,DIRECTORY
|
|
|
|
EXTERNAL VERSION,GETENV,__RUN
|
|
|
|
EXTERNAL ERRORNEW,DOSERROR
|
|
|
|
EXTERNAL FERASE,FRENAME,FILE,FREADSTR,CURDIR,DISKSPACE
|
|
|
|
EXTERNAL __KEYBOARD,NEXTKEY,LASTKEY,FKLABEL,FKMAX
|
|
|
|
EXTERNAL ISPRINTER
|
|
|
|
EXTERNAL MOD
|
|
|
|
EXTERNAL MEMOREAD,MEMOWRIT,MEMOLINE,MLCOUNT,MLPOS,MEMOTRAN
|
|
|
|
EXTERNAL NETNAME
|
|
|
|
EXTERNAL __BOX,__BOXD,__BOXS
|
|
|
|
EXTERNAL AMPM,DAYS,ELAPTIME,LENNUM,SECS,TSTRING
|
|
|
|
EXTERNAL SETCANCEL,__SETCENTURY,DEFPATH,__DEFPATH
|
|
|
|
EXTERNAL SETCOLOR,COLORSELECT
|
|
|
|
EXTERNAL SOUNDEX
|
|
|
|
EXTERNAL ISALPHA,ISDIGIT,ISUPPER,ISLOWER,ALLTRIM,PADR,PAD,PADL,PADC, ;
|
|
STUFF,STRZERO
|
|
|
|
EXTERNAL TONE
|
|
|
|
EXTERNAL TRANSFORM
|
|
|
|
EXTERNAL __XHELP
|
|
|
|
EXTERNAL ACHOICE
|
|
|
|
EXTERNAL __NONOALERT
|
|
|
|
EXTERNAL TBROWSEDB,DBEDIT
|
|
|
|
EXTERNAL DEVOUTPICT
|
|
|
|
EXTERNAL __DIR
|
|
|
|
EXTERNAL DBSETRELATION,DBCLEARREL,MEMOEDIT,MLCTOPOS,MPOSTOLC,__DBAPP,__DBCOPY, ;
|
|
__DBDELIM,__DBJOIN,__DBLIST,__DBSDF,__DBSORT,__DBTOTAL,__DBUPDATE,__DBARRANGE,__DBFLIST, ;
|
|
__DBOPENSDF,__DBTRANS,__DBTRANSREC
|
|
|
|
EXTERNAL FIELDBLOCK,FIELDWBLOCK
|
|
|
|
EXTERNAL __INPUT
|
|
|
|
EXTERNAL MEMVARBLOCK
|
|
|
|
EXTERNAL __ATPROMPT,__MENUTO
|
|
|
|
EXTERNAL READKEY
|
|
|
|
EXTERNAL SETKEY
|
|
|
|
EXTERNAL SETTYPEAHEAD
|
|
|
|
EXTERNAL TBCOLUMNNEW,TBROWSENEW
|
|
|
|
EXTERNAL __TEXTSAVE,__TEXTRESTORE
|
|
|
|
EXTERNAL __GET,__GETA
|
|
|
|
EXTERNAL __LABELFORM, __REPORTFORM
|
|
|
|
EXTERNAL __TYPEFILE
|
|
|
|
EXTERNAL __WAIT
|
|
|
|
EXTERNAL __XSAVESCREEN,__XRESTSCREEN
|
|
|
|
/*
|
|
EXTERNAL RDDSYS,AFIELDS,DBEVAL,DBCLEARFILTER,DBCLOSEALL, ;
|
|
DBCOMMIT,__DBCONTINUE,DBCREATE,DBDELETE,DBFILTER,DBGOBOTTOM,DBGOTO, ;
|
|
DBGOTOP,__DBLOCATE,__DBSETLOCATE,__DBPACK,DBRECALL,DBRLOCK,DBRLOCKLIST,DBRUNLOCK,DBSEEK, ;
|
|
DBSELECTAREA,__DBSETFOUND,DBSKIP,DBSETFILTER,DBSTRUCT,DBTABLEEXT,DBUNLOCK,DBUNLOCKALL,DBUSEAREA, ;
|
|
__DBZAP,DELETED,EOF,FCOUNT,FIELDGET,FIELDNAME,FIELDPOS,FIELDPUT,FLOCK,FOUND,HEADER,INDEXORD, ;
|
|
LASTREC,LOCK,LUPDATE,NETERR,ORDBAGEXT,ORDBAGNAME,ORDCONDSET,ORDCREATE,ORDDESTROY,ORDFOR,ORDKEY, ;
|
|
ORDLISTADD,ORDLISTCLEAR,ORDLISTREBUILD,ORDNAME,ORDNUMBER,ORDSETFOCUS,RDDLIST,RDDNAME,RDDREGISTER, ;
|
|
RECCOUNT,RECNO,RECSIZE,RLOCK,SELECT,USED,RDDSETDEFAULT,RDDSETDEFAULT,DBSETDRIVER
|
|
*/
|
|
|
|
EXTERNAL __DBPACK,__DBZAP,DBCLOSEALL,DBGOBOTTOM,DBGOTO,DBGOTOP
|
|
|
|
EXTERNAL DBREINDEX,DBCREATEINDEX,DBCLEARINDEX,DBSETINDEX,DBSETORDER
|
|
|
|
EXTERNAL __DBCOPYSTRUCT,__DBCOPYXSTRUCT,__DBCREATE,__FLEDIT
|
|
|
|
EXTERNAL INDEXEXT,INDEXKEY
|
|
|
|
#endif
|
|
|
|
STATIC aDefRules := {}, aDefResults := {}
|
|
STATIC aTransRules := {}, aTransResults := {}
|
|
STATIC aCommRules := {}, aCommResults := {}
|
|
|
|
STATIC bDbgMatch := .F., bDbgExp := .F., bDbgPPO := .F., bLoadRules := .T., ;
|
|
bCount := .T., bCCH := .F., bCompile := .T., bStrict := .T.
|
|
|
|
STATIC nIfDef := 0, abIfDef := {}, nIf := 0, abIf := {}
|
|
|
|
STATIC hPP
|
|
|
|
STATIC s_asPaths := {}
|
|
|
|
STATIC s_bArrayPrefix := .F.
|
|
|
|
STATIC s_sFile := "", s_sIncludeFile
|
|
|
|
STATIC s_nRow, s_nCol
|
|
|
|
STATIC s_nProcId := 0, s_aProcedures := {}, s_xRet, s_nIfLevel := 0, ;
|
|
s_aProcStack := {}, s_nProcStack := 0
|
|
|
|
STATIC s_asPrivates := {}, s_asPublics := {}, s_asLocals := {}, ;
|
|
s_asStatics := {}, s_aParams := {}
|
|
|
|
STATIC s_sModule, s_aInitExit := { {}, {} }
|
|
|
|
STATIC s_nCompIf := 0, s_nCompLoop := 0, s_aIfJumps := {}, s_aLoopJumps := {}
|
|
STATIC s_acFlowType := {}, s_nFlowId := 0
|
|
|
|
#ifdef PP_RECURSIVE
|
|
STATIC s_bRecursive := .F.
|
|
#endif
|
|
|
|
STATIC s_lRunLoaded := .F., s_lDotLoaded := .F., s_lClsLoaded := .F., s_lFWLoaded := .F., s_lMiniGUILoaded := .F.
|
|
STATIC s_aSwitchDefs := {}
|
|
|
|
//--------------------------------------------------------------//
|
|
#ifdef __HARBOUR__
|
|
PROCEDURE _apMain( sSource, p1, p2, p3, p4, p5, p6, p7, p8, p9 )
|
|
#else
|
|
PROCEDURE Main( sSource, p1, p2, p3, p4, p5, p6, p7, p8, p9 )
|
|
#endif
|
|
|
|
LOCAL sIncludePath, nNext, sPath, sSwitch := ""
|
|
LOCAL nAt, sParams, sPPOExt, aParams := {}
|
|
LOCAL sDefine, sCH
|
|
|
|
IF p1 != NIL
|
|
sSwitch += p1
|
|
ENDIF
|
|
IF p2 != NIL
|
|
sSwitch += p2
|
|
ENDIF
|
|
IF p3 != NIL
|
|
sSwitch += p3
|
|
ENDIF
|
|
IF p4 != NIL
|
|
sSwitch += p4
|
|
ENDIF
|
|
IF p5 != NIL
|
|
sSwitch += p5
|
|
ENDIF
|
|
IF p6 != NIL
|
|
sSwitch += p6
|
|
ENDIF
|
|
IF p7 != NIL
|
|
sSwitch += p7
|
|
ENDIF
|
|
IF p8 != NIL
|
|
sSwitch += p8
|
|
ENDIF
|
|
IF p9 != NIL
|
|
sSwitch += p9
|
|
ENDIF
|
|
|
|
IF sSource != NIL .AND. ( Upper( sSource ) == "-H" .OR. Upper( sSource ) == "--HELP" )
|
|
sSwitch := " PP filename[.ext] [-CCH] [-D<id>] [-D:E] [-D:M] [-D:P] [-I<path>] [-P] [-R]" + CRLF
|
|
sSwitch += " [-FIX] [-U[ch-file]]" + CRLF + CRLF
|
|
|
|
sSwitch += [ -CCH = Generate a .cch file (compiled command header).] + CRLF
|
|
sSwitch += [ -D<id> = #define <id>.] + CRLF
|
|
sSwitch += [ -D:E = Show tracing information into the Expression Scanner.] + CRLF
|
|
sSwitch += [ -D:M = Show tracing information into the Match Engine.] + CRLF
|
|
sSwitch += [ -D:P = Show tracing information into the Output Generator.] + CRLF
|
|
sSwitch += [ -I<path> = #include file search path(s) ('] + OS_PATH_LIST_SEPARATOR + [' seperated).] + CRLF
|
|
sSwitch += [ -P = Generate .pp$ pre-processed output file.] + CRLF
|
|
sSwitch += [ -R = Run filename as a script.] + CRLF
|
|
sSwitch += [ -FIX = Do not clone Clipper PreProcessor bugs.] + CRLF
|
|
sSwitch += [ -U = Use command definitions set in <ch-file> (or none).] + CRLF
|
|
|
|
? sSwitch
|
|
?
|
|
QUIT
|
|
endif
|
|
|
|
#ifdef __PLATFORM__UNIX
|
|
if right( hb_argv( 0 ), 6 ) == "/pprun"
|
|
bCount := .F.
|
|
bCompile := .T.
|
|
sSwitch := ""
|
|
aParams := { p1, p2, p3, p4, p5, p6, p7, p8, p9 }
|
|
aSize( aParams, PCount() - 1 )
|
|
endif
|
|
#endif
|
|
|
|
#ifdef _DEFAULT_INC_DIR
|
|
sPath := _DEFAULT_INC_DIR
|
|
IF ! ( Right( sPath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sPath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
aAdd( s_asPaths, sPath )
|
|
#endif
|
|
|
|
sIncludePath := GetE( "INCLUDE" )
|
|
|
|
WHILE ( nNext := At( OS_PATH_LIST_SEPARATOR, sIncludePath ) ) > 0
|
|
sPath := Left( sIncludePath, nNext - 1 )
|
|
IF ! ( Right( sPath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sPath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
aAdd( s_asPaths, sPath )
|
|
sIncludePath := SubStr( sIncludePath, nNext + 1 )
|
|
ENDDO
|
|
IF ! ( sIncludePath == '' )
|
|
IF ! ( Right( sIncludePath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sIncludePath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
aAdd( s_asPaths, sIncludePath )
|
|
ENDIF
|
|
|
|
#ifdef __CLIP__
|
|
sIncludePath := StartPath()
|
|
nAt := AtR( '/', sIncludePath )
|
|
|
|
IF nAt <= 0
|
|
nAt := AtR( "\", sIncludePath )
|
|
ENDIF
|
|
//? nAt,sIncludePath
|
|
|
|
IF nAt != 0
|
|
sIncludePath := Left( sIncludePath, nAt - 1 )
|
|
|
|
IF ! ( Right( sIncludePath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sIncludePath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
|
|
aAdd( s_asPaths, sIncludePath )
|
|
ENDIF
|
|
|
|
IF Empty( GetEnv( "CLIPROOT" ) )
|
|
aAdd( s_asPaths, ClipRoot() + OS_PATH_DELIMITER + "include" + OS_PATH_DELIMITER )
|
|
ELSE
|
|
aAdd( s_asPaths, GetEnv( "CLIPROOT" ) + OS_PATH_DELIMITER + "include" + OS_PATH_DELIMITER )
|
|
ENDIF
|
|
#endif
|
|
|
|
IF ! Empty( sSwitch )
|
|
sSwitch := Upper( sSwitch )
|
|
|
|
/* Generate compiled header. */
|
|
IF "-CCH" $ sSwitch
|
|
bCCH := .T.
|
|
bCompile := .F.
|
|
ENDIF
|
|
|
|
/* Debug tracing options. */
|
|
IF "-D:E" $ sSwitch
|
|
bDbgExp := .T.
|
|
sSwitch := StrTran( sSwitch, "-D:E", "" )
|
|
ENDIF
|
|
IF "-D:M" $ sSwitch
|
|
bDbgMatch := .T.
|
|
sSwitch := StrTran( sSwitch, "-D:M", "" )
|
|
ENDIF
|
|
IF "-D:P" $ sSwitch
|
|
bDbgPPO := .T.
|
|
sSwitch := StrTran( sSwitch, "-D:P", "" )
|
|
ENDIF
|
|
|
|
/* Process command line defines. */
|
|
WHILE ( nAt := At( "-D", sSwitch ) ) > 0
|
|
nNext := At( "-", SubStr( sSwitch, nAt + 2 ) )
|
|
IF nNext == 0
|
|
nNext := 256
|
|
ENDIF
|
|
|
|
sDefine := SubStr( sSwitch, nAt + 2, nNext - 1 )
|
|
sSwitch := Left( sSwitch, nAt - 1 ) + SubStr( sSwitch, nAt + 1 + nNext )
|
|
//CompileDefine( sDefine )
|
|
aAdd( s_aSwitchDefs, sDefine )
|
|
ENDDO
|
|
|
|
/* Process command line include paths. */
|
|
IF ( nAt := At( "-I", sSwitch ) ) > 0
|
|
nNext := At( "-", SubStr( sSwitch, nAt + 2 ) )
|
|
IF nNext == 0
|
|
nNext := 256
|
|
ENDIF
|
|
sIncludePath := SubStr( sSwitch, nAt + 2, nNext - 1 )
|
|
|
|
WHILE ( nNext := At( OS_PATH_LIST_SEPARATOR, sIncludePath ) ) > 0
|
|
sPath := Left( sIncludePath, nNext - 1 )
|
|
IF ! ( Right( sPath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sPath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
aAdd( s_asPaths, sPath )
|
|
sIncludePath := SubStr( sIncludePath, nNext + 1 )
|
|
ENDDO
|
|
IF ! ( sIncludePath == '' )
|
|
IF ! ( Right( sIncludePath, 1 ) $ OS_PATH_DELIMITER_LIST )
|
|
sIncludePath += OS_PATH_DELIMITER
|
|
ENDIF
|
|
aAdd( s_asPaths, sIncludePath )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* Generate .pp$ pre-processed output file. */
|
|
IF "-P" $ sSwitch
|
|
sPPOExt := ".pp$"
|
|
bCompile := .F.
|
|
ENDIF
|
|
|
|
/* Run file as a script. */
|
|
IF "-R" $ sSwitch
|
|
bCompile := .T.
|
|
ENDIF
|
|
|
|
/* Clone Clipper PreProcessor bugs. */
|
|
IF "-FIX" $ sSwitch
|
|
bStrict := .F.
|
|
ENDIF
|
|
|
|
/* Use alternate command defintions file, or none. */
|
|
WHILE ( nAt := At( "-U", sSwitch ) ) > 0
|
|
nNext := At( "-", SubStr( sSwitch, nAt + 2 ) )
|
|
IF nNext == 0
|
|
nNext := 256
|
|
ENDIF
|
|
|
|
sCH := SubStr( sSwitch, nAt + 2, nNext - 1 )
|
|
sSwitch := Left( sSwitch, nAt - 1 ) + SubStr( sSwitch, nAt + 1 + nNext )
|
|
|
|
IF( ! sCH == "" )
|
|
? [Loading standard definitions from: '] + sCH + "'"
|
|
?
|
|
|
|
CompileDefine( "__PP__" )
|
|
#ifdef __HARBOUR__
|
|
CompileDefine( "__HARBOUR__" )
|
|
#endif
|
|
|
|
PP_PreProFile( sCH, NIL, .F., .T. ) // Process ONLY #Directives!
|
|
|
|
/* Reset.*/
|
|
hPP := NIL
|
|
ENDIF
|
|
|
|
/* Don't load standard defintions. */
|
|
bLoadRules := .F.
|
|
ENDDO
|
|
|
|
/* End of command line arguments processing. */
|
|
ENDIF
|
|
|
|
IF bLoadRules
|
|
InitRules()
|
|
InitResults()
|
|
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [#DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [#TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [#DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
|
|
CompileDefine( "__PP__" )
|
|
#ifdef __HARBOUR__
|
|
CompileDefine( "__HARBOUR__" )
|
|
#endif
|
|
ELSE
|
|
IF sCH == NIL
|
|
Alert( [Not using standard rules.] )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Command line defines.
|
|
#ifdef __XHARBOUR__
|
|
FOR EACH sDefine IN s_aSwitchDefs
|
|
CompileDefine( sDefine )
|
|
NEXT
|
|
#else
|
|
FOR nAt := 1 TO Len( s_aSwitchDefs )
|
|
CompileDefine( s_aSwitchDefs[ nAt ] )
|
|
NEXT
|
|
#endif
|
|
|
|
IF sSource == NIL
|
|
s_nRow := 2
|
|
s_nCol := 0
|
|
|
|
RP_Dot()
|
|
ELSE
|
|
s_nRow := Row()
|
|
s_nCol := Col()
|
|
|
|
IF bCompile
|
|
// Populate possible Command-line Parameters
|
|
IF ( nAt := At( " ", sSource ) ) > 0
|
|
sParams := LTrim( SubStr( sSource, nAt + 1 ) )
|
|
sSource := Left( sSource, nAt - 1 )
|
|
|
|
WHILE ( nAt := At( " ", sParams ) ) > 0
|
|
aAdd( aParams, Left( sParams, nAt - 1 ) )
|
|
sParams := LTrim( SubStr( sParams, nAt + 1 ) )
|
|
ENDDO
|
|
IF ! sParams == ""
|
|
aAdd( aParams, sParams )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
PP_Run( sSource, aParams, sPPOExt )
|
|
ELSE
|
|
PP_PreProFile( sSource, sPPOExt )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DevPos( s_nRow, s_nCol )
|
|
|
|
RETURN
|
|
|
|
//------------------------------- *** RP DOT and Interpreter Functions *** -------------------------------//
|
|
|
|
FUNCTION PP_ExecMethod( sProcName, p1, p2, p3, p4, p5, p6, p7, p8, p9 )
|
|
|
|
LOCAL i, sProc, nProc, nParams
|
|
|
|
sProcName := Upper( sProcName )
|
|
|
|
sProc := s_sModule + sProcName
|
|
nProc := aScan( s_aProcedures, {|aProc| aProc[1] == sProc } )
|
|
IF nProc == 0
|
|
sProc := sProcName
|
|
nProc := aScan( s_aProcedures, {|aProc| aProc[1] == sProc } )
|
|
ENDIF
|
|
|
|
IF nProc > 0
|
|
s_xRet := NIL
|
|
|
|
nParams := PCount()
|
|
s_aParams := {}
|
|
#ifdef __CLIP__
|
|
FOR i := 2 TO nParams
|
|
aAdd( s_aParams, Param( i ) )
|
|
NEXT
|
|
#else
|
|
DO CASE
|
|
CASE nParams == 0
|
|
CASE nParams == 1
|
|
aAdd( s_aParams, p1 )
|
|
CASE nParams == 2
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
CASE nParams == 3
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
CASE nParams == 4
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
CASE nParams == 5
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
aAdd( s_aParams, p5 )
|
|
CASE nParams == 6
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
aAdd( s_aParams, p5 )
|
|
aAdd( s_aParams, p6 )
|
|
CASE nParams == 7
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
aAdd( s_aParams, p5 )
|
|
aAdd( s_aParams, p6 )
|
|
aAdd( s_aParams, p7 )
|
|
CASE nParams == 8
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
aAdd( s_aParams, p5 )
|
|
aAdd( s_aParams, p6 )
|
|
aAdd( s_aParams, p7 )
|
|
aAdd( s_aParams, p8 )
|
|
CASE nParams == 9
|
|
aAdd( s_aParams, p1 )
|
|
aAdd( s_aParams, p2 )
|
|
aAdd( s_aParams, p3 )
|
|
aAdd( s_aParams, p4 )
|
|
aAdd( s_aParams, p5 )
|
|
aAdd( s_aParams, p6 )
|
|
aAdd( s_aParams, p7 )
|
|
aAdd( s_aParams, p8 )
|
|
aAdd( s_aParams, p9 )
|
|
ENDCASE
|
|
#endif
|
|
|
|
PP_ExecProcedure( s_aProcedures[nProc] )
|
|
ELSE
|
|
Alert( [Missing Method: ] + sProcName )
|
|
ENDIF
|
|
|
|
RETURN s_xRet
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_ExecProcedure( aProc, sProcName )
|
|
|
|
LOCAL nBlock, nBlocks := Len( aProc[2] ), xErr
|
|
LOCAL nVar, nVars
|
|
|
|
IF s_nProcStack > 0
|
|
/* Saving Privates of upper level. */
|
|
nVars := Len( s_asPrivates )
|
|
aAdd( s_aProcStack[s_nProcStack], Array( nVars, 2 ) )
|
|
FOR nVar := 1 TO nVars
|
|
s_aProcStack[s_nProcStack][3][nVar][1] := s_asPrivates[nVar]
|
|
#ifdef __HARBOUR__
|
|
s_aProcStack[s_nProcStack][3][nVar][2] := __MVGET( s_asPrivates[nVar] )
|
|
#else
|
|
s_aProcStack[s_nProcStack][3][nVar][2] := &( s_asPrivates[nVar] )
|
|
#endif
|
|
//Alert( [Saved upper Private: ] + s_asPrivates[nVar] + [ in ] + s_aProcStack[s_nProcStack][1] )
|
|
NEXT
|
|
aSize( s_asPrivates, 0 )
|
|
|
|
/* Saving and Releasing Locals of upper level. */
|
|
nVars := Len( s_asLocals )
|
|
aAdd( s_aProcStack[s_nProcStack], Array( nVars, 2 ) )
|
|
FOR nVar := 1 TO nVars
|
|
s_aProcStack[s_nProcStack][4][nVar][1] := s_asLocals[nVar]
|
|
s_aProcStack[s_nProcStack][4][nVar][2] := &( s_asLocals[nVar] )
|
|
__MXRelease( s_asLocals[nVar] )
|
|
//Alert( [Released upper local: ] + s_asLocals[nVar] + [ in ] + s_aProcStack[s_nProcStack][1] )
|
|
NEXT
|
|
aSize( s_asLocals, 0 )
|
|
ENDIF
|
|
|
|
aAdd( s_aProcStack, { aProc[1], 0 } )
|
|
s_nProcStack++
|
|
|
|
FOR nBlock := 1 TO nBlocks
|
|
IF aProc[2][nBlock][2] == NIL
|
|
IF aProc[2][nBlock][1] != 0 // Uncondtional Jump.
|
|
nBlock := aProc[2][nBlock][1]
|
|
ENDIF
|
|
ELSE
|
|
s_aProcStack[ Len( s_aProcStack ) ][2] := aProc[2][nBlock][3] // Line No.
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
//TraceLog( "Line: " + Str( aProc[2][nBlock][3], 3 ) )
|
|
|
|
IF aProc[2][nBlock][1] == 0
|
|
//? aProc[2][nBlock][3]
|
|
Eval( aProc[2][nBlock][2] )
|
|
ELSE
|
|
IF ! Eval( aProc[2][nBlock][2] ) // Jump if FALSE.
|
|
nBlock := aProc[2][nBlock][1]
|
|
//TraceLog( "Jump: " + Str( aProc[2][nBlock][3], 3 ) )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RECOVER USING xErr
|
|
IF ValType( xErr ) == 'L'
|
|
//TraceLog( "Return" )
|
|
// Return from this procedure requested by PP_SetReturn()
|
|
EXIT
|
|
ENDIF
|
|
END SEQUENCE
|
|
ENDIF
|
|
NEXT
|
|
|
|
/* Releasing Privates created by the Procedure */
|
|
nVars := Len( s_asPrivates )
|
|
FOR nVar := 1 TO nVars
|
|
__MXRelease( s_asPrivates[nVar] )
|
|
//Alert( [Released private: ] + s_asPrivates[nVar] + [ in ] + s_aProcStack[s_nProcStack][1] )
|
|
NEXT
|
|
aSize( s_asPrivates, 0 )
|
|
|
|
/* Releasing Locals created by the Procedure */
|
|
nVars := Len( s_asLocals )
|
|
FOR nVar := 1 TO nVars
|
|
__MXRelease( s_asLocals[nVar] )
|
|
//Alert( [Released local: ] + s_asLocals[nVar] + [ in ] + s_aProcStack[s_nProcStack][1] )
|
|
NEXT
|
|
aSize( s_asLocals, 0 )
|
|
|
|
s_nProcStack--
|
|
aSize( s_aProcStack, s_nProcStack )
|
|
|
|
IF s_nProcStack > 0
|
|
/* Restoring Privates of parrent. */
|
|
nVars := Len( s_aProcStack[s_nProcStack][3] )
|
|
FOR nVar := 1 TO nVars
|
|
aAdd( s_asPrivates, s_aProcStack[s_nProcStack][3][nVar][1] )
|
|
#ifdef __HARBOUR__
|
|
__QQPub( s_aProcStack[s_nProcStack][3][nVar][1] )
|
|
__MVPUT( s_aProcStack[s_nProcStack][3][nVar][1], s_aProcStack[s_nProcStack][3][nVar][2] )
|
|
#else
|
|
__QQPub( s_aProcStack[s_nProcStack][3][nVar][1] )
|
|
&( s_aProcStack[s_nProcStack][3][nVar][1] ) := s_aProcStack[s_nProcStack][3][nVar][2]
|
|
#endif
|
|
NEXT
|
|
|
|
/* Restoring Locals of parrent. */
|
|
nVars := Len( s_aProcStack[s_nProcStack][4] )
|
|
FOR nVar := 1 TO nVars
|
|
aAdd( s_asLocals, s_aProcStack[s_nProcStack][4][nVar][1] )
|
|
#ifdef __HARBOUR__
|
|
__QQPub( s_aProcStack[s_nProcStack][4][nVar][1] )
|
|
__MVPUT( s_aProcStack[s_nProcStack][4][nVar][1], s_aProcStack[s_nProcStack][4][nVar][2] )
|
|
#else
|
|
__QQPub( s_aProcStack[s_nProcStack][4][nVar][1] )
|
|
&( s_aProcStack[s_nProcStack][4][nVar][1] ) := s_aProcStack[s_nProcStack][4][nVar][2]
|
|
#endif
|
|
NEXT
|
|
|
|
aSize( s_aProcStack[s_nProcStack], 2 )
|
|
ENDIF
|
|
|
|
RETURN s_xRet
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE RP_Dot()
|
|
|
|
LOCAL GetList := {}, sLine := Space(256)
|
|
LOCAL nDefines, nCommands, nTranslates
|
|
|
|
LOCAL aCpyDefRules, aCpyDefResults
|
|
LOCAL aCpyCommRules, aCpyCommResults
|
|
LOCAL aCpyTranRules, aCpyTranResults
|
|
|
|
LOCAL aKBCommands := Array( 16 ), nKBCommand := 1, nTemp, bKey5, bKey24
|
|
|
|
#ifdef FW
|
|
Alert( [DOT mode (no filename parameter) is Not ready for GUI yet.] + [;;Please try Interpreter mode, using the -R switch...] )
|
|
RETURN
|
|
#endif
|
|
|
|
bCount := .F.
|
|
|
|
IF File( "ro_dot.ch" )
|
|
PP_PreProFile( "rp_dot.ch" )
|
|
ELSE
|
|
PP_LoadDot()
|
|
ENDIF
|
|
|
|
#ifdef WIN
|
|
PP_PreProLine( '#COMMAND Alert( <x> ) => MessageBox( 0, CStr( <x> ), "TInterpreter for Windows", 0 )' )
|
|
#endif
|
|
|
|
aCpyDefRules := aClone( aDefRules )
|
|
aCpyDefResults := aClone( aDefResults )
|
|
|
|
aCpyCommRules := aClone( aCommRules )
|
|
aCpyCommResults := aClone( aCommResults )
|
|
|
|
aCpyTranRules := aClone( aTransRules )
|
|
aCpyTranResults := aClone( aTransResults )
|
|
|
|
ErrorBlock( {|oErr| RP_Dot_Err( oErr ) } )
|
|
|
|
CLEAR SCREEN
|
|
SET SCOREBOARD OFF
|
|
|
|
@ 0,0 SAY "PP: "
|
|
@ 0,4 SAY Space( 76 ) COLOR "N/R"
|
|
@ 1,0 SAY PadR( "RDD: " + Space( 6 ) + " | Area: " + Space( 2 ) + " | Dbf: " + Space( 10 ) + ;
|
|
" | Index: " + Space( 8 ) + " | # " + Space( 7 ) + "/" + Space( 7 ), MaxCol() + 1 ) ;
|
|
COLOR "N/BG"
|
|
|
|
DevPos( 02, 00 )
|
|
|
|
aFill( aKBCommands, sLine )
|
|
|
|
DO WHILE .T.
|
|
sLine := aKBCommands[ nKBCommand ]
|
|
|
|
@ MaxRow(), 00 SAY '.'
|
|
@ MaxRow(), 01 GET sLine PICTURE '@KS79'
|
|
SET CURSOR ON
|
|
|
|
bKey5 := SetKey( 5, { || IIF( nKBCommand > 1, sLine := aKBCommands[ --nKBCommand ], ) } )
|
|
bKey24 := SetKey( 24, { || IIF( nKBCommand < 16, sLine := aKBCommands[ ++nKBCommand ], ) } )
|
|
|
|
READ
|
|
|
|
SetKey( 5, bKey5 )
|
|
SetKey( 24, bKey24 )
|
|
|
|
IF ! sLine == aKBCommands[ nKBCommand ]
|
|
IF ( nTemp := aScan( aKBCommands, sLine ) ) == 0
|
|
aKBCommands[ nKBCommand ] := sLine
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF LastKey() == 27
|
|
aKBCommands[ nKBCommand ] := Space( 256 )
|
|
LOOP
|
|
ELSEIF LastKey() == 13 .OR. LastKey() == 24 .OR. LastKey() == 9
|
|
nKBCommand++
|
|
IF nKBCommand > 16
|
|
aDel( aKBCommands, 1 )
|
|
aKBCommands[16] := Space( 256 )
|
|
nKBCommand := 16
|
|
ENDIF
|
|
ELSEIF LastKey() == 5 .OR. LastKey() == 271
|
|
nKBCommand--
|
|
ENDIF
|
|
|
|
sLine := StrTran( sLine, Chr(9), " " )
|
|
|
|
ExecuteLine( PP_PreProLine( RTrim( sLine ), 1, '' ) )
|
|
|
|
//TraceLog( Len( aDefRules ), Len( aCommRules ), Len( aTransRules ) )
|
|
|
|
IF s_nRow >= MaxRow() - 1
|
|
Scroll( 2, 0, MaxRow() - 1, MaxCol(), 1 )
|
|
s_nRow := MaxRow() - 2
|
|
ENDIF
|
|
|
|
IF s_lRunLoaded
|
|
aDefRules := aClone( aCpyDefRules )
|
|
aDefResults := aClone( aCpyDefResults )
|
|
|
|
aCommRules := aClone( aCpyCommRules )
|
|
aCommResults := aClone( aCpyCommResults )
|
|
|
|
aTransRules := aClone( aCpyTranRules )
|
|
aTransResults := aClone( aCpyTranResults )
|
|
|
|
s_lRunLoaded := .F.
|
|
s_lClsLoaded := .F.
|
|
s_lFWLoaded := .F.
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
CLEAR SCREEN
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC PROCEDURE ExecuteLine( sPPed )
|
|
|
|
LOCAL nNext, sBlock, sTemp
|
|
LOCAL sTemp2, nLen, sLeft, sSymbol, nNextAssign
|
|
|
|
ExtractLeadingWS( @sPPed )
|
|
DropTrailingWS( @sPPed )
|
|
sTemp := sPPed
|
|
|
|
@ 0,0 SAY "PP: "
|
|
@ 0,4 SAY Pad( sPPed, 76 ) COLOR "N/R"
|
|
DevPos( s_nRow, s_nCol )
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
WHILE ( nNext := nAtSkipStr( ';', sTemp ) ) > 0
|
|
sBlock := Left( sTemp, nNext - 1 )
|
|
ExtractLeadingWS( @sBlock )
|
|
DropTrailingWS( @sBlock )
|
|
|
|
sTemp2 := sBlock
|
|
WHILE ( nNextAssign := At( ":=", sTemp2 ) ) > 0
|
|
sLeft := Left( sTemp2, nNextAssign - 1 )
|
|
sTemp2 := SubStr( sTemp2, nNextAssign + 2 )
|
|
|
|
DropTrailingWS( @sLeft )
|
|
nLen := Len( sLeft )
|
|
WHILE nLen > 0
|
|
IF SubStr( sLeft, nLen, 1 ) $ " (,=><*+-\^&@["
|
|
EXIT
|
|
ENDIF
|
|
nLen--
|
|
ENDDO
|
|
IF nLen == 0
|
|
sSymbol := sLeft
|
|
ELSE
|
|
sSymbol := SubStr( sLeft, nLen + 1 )
|
|
ENDIF
|
|
IF ( Type( sSymbol ) = 'U' )
|
|
PUBLIC &sSymbol
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF sBlock = "__"
|
|
sSymbol := Upper( SubStr( sBlock, 3, 12 ) ) // Len( "SetOtherwise" )
|
|
ELSE
|
|
sSymbol := ""
|
|
ENDIF
|
|
IF nIf == 0 .OR. ;
|
|
sSymbol = "SETIF" .OR. sSymbol = "SETELSE" .OR. sSymbol = "SETELSEIF" .OR. sSymbol = "SETEND" .OR. ;
|
|
sSymbol = "SETDOCASE" .OR. sSymbol = "SETCASE" .OR. sSymbol = "SETOTHERWISE" .OR. sSymbol = "SETENDCASE" .OR. ;
|
|
abIf[ nIf ]
|
|
|
|
@ 0,0 SAY "PP: "
|
|
@ 0,4 SAY Pad( sBlock, 76 ) COLOR "N/R"
|
|
DevPos( s_nRow, s_nCol )
|
|
|
|
sBlock := "{|| " + sBlock + " }"
|
|
#ifdef __CLIPPER__
|
|
/* Clipper Macro Compiler can't compile nested blocks! */
|
|
CompileNestedBlocks( sBlock, @sBlock )
|
|
#endif
|
|
|
|
Eval( &sBlock )
|
|
|
|
s_nRow := Row()
|
|
s_nCol := Col()
|
|
|
|
#ifdef __CLIPPER__
|
|
nBlockID := 0
|
|
aSize( s_abBlocks, 0 )
|
|
#endif
|
|
ENDIF
|
|
|
|
sTemp := RTrim( SubStr( sTemp, nNext + 1 ) )
|
|
ExtractLeadingWS( @sTemp )
|
|
ENDDO
|
|
|
|
sBlock := sTemp
|
|
DropTrailingWS( @sBlock )
|
|
|
|
IF ! ( sBlock == '' )
|
|
sTemp2 := sBlock
|
|
WHILE ( nNextAssign := At( ":=", sTemp2 ) ) > 0
|
|
sLeft := Left( sTemp2, nNextAssign - 1 )
|
|
sTemp2 := SubStr( sTemp2, nNextAssign + 2 )
|
|
|
|
DropTrailingWS( @sLeft )
|
|
nLen := Len( sLeft )
|
|
WHILE nLen > 0
|
|
IF SubStr( sLeft, nLen, 1 ) $ " (,=><*+-\^&@["
|
|
EXIT
|
|
ENDIF
|
|
nLen--
|
|
ENDDO
|
|
IF nLen == 0
|
|
sSymbol := sLeft
|
|
ELSE
|
|
sSymbol := SubStr( sLeft, nLen + 1 )
|
|
ENDIF
|
|
IF ( Type( sSymbol ) = 'U' )
|
|
PUBLIC &sSymbol
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF sBlock = "__"
|
|
sSymbol := Upper( SubStr( sBlock, 3, 12 ) ) // Len( "SetOtherwise" )
|
|
ELSE
|
|
sSymbol := ""
|
|
ENDIF
|
|
IF nIf == 0 .OR. ;
|
|
sSymbol = "SETIF" .OR. sSymbol = "SETELSE" .OR. sSymbol = "SETELSEIF" .OR. sSymbol = "SETEND" .OR. ;
|
|
sSymbol = "SETDOCASE" .OR. sSymbol = "SETCASE" .OR. sSymbol = "SETOTHERWISE" .OR. sSymbol = "SETENDCASE" .OR. ;
|
|
abIf[ nIf ]
|
|
|
|
@ 0,0 SAY "PP: "
|
|
@ 0,4 SAY Pad( sBlock, 76 ) COLOR "N/R"
|
|
DevPos( s_nRow, s_nCol )
|
|
|
|
sBlock := "{|| " + sBlock + " }"
|
|
#ifdef __CLIPPER__
|
|
/* Clipper Macro Compiler can't compile nested blocks! */
|
|
CompileNestedBlocks( sBlock, @sBlock )
|
|
//TraceLog( sBlock )
|
|
#endif
|
|
|
|
Eval( &sBlock )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
s_nRow := Row()
|
|
s_nCol := Col()
|
|
|
|
@ 0,0 SAY "PP: "
|
|
@ 0,4 SAY Pad( sPPed, 76 ) COLOR "N/R"
|
|
|
|
IF Empty( Alias() )
|
|
@ 1,0 SAY PadR( "RDD: " + Space( 6 ) + " | Area: " + Space( 2 ) + " | Dbf: " + Space( 10 ) + ;
|
|
" | Index: " + Space( 8 ) + " | # " + Space( 7 ) + "/" + Space( 7 ), MaxCol() + 1 ) ;
|
|
COLOR "N/BG"
|
|
ELSE
|
|
//@ 1,0 CLEAR TO 1, MaxCol()
|
|
@ 1,0 SAY PadR( "RDD: " + RddName() + " | Area: " + Str( Select(), 2 ) + " | Dbf: " + PadR( Alias(), 10 ) + ;
|
|
" | Index: " + PadR( OrdName( IndexOrd() ), 8 ) + " | # " + Str( RecNo(), 7 ) + ;
|
|
"/" + Str( RecCount(), 7 ), MaxCol() + 1 );
|
|
COLOR "N/BG"
|
|
ENDIF
|
|
END SEQUENCE
|
|
|
|
#ifdef __CLIPPER__
|
|
nBlockID := 0
|
|
aSize( s_abBlocks, 0 )
|
|
#endif
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_CompileLine( sPPed, nLine, aProcedures, aInitExit, nProcId )
|
|
|
|
LOCAL nNext, sBlock, sTemp
|
|
LOCAL sSymbol
|
|
LOCAL nAt, nPos, cChr
|
|
LOCAL nJumps, nJump
|
|
LOCAL sCounter, sStart, sEnd, sStep
|
|
LOCAL Dummy
|
|
|
|
ExtractLeadingWS( @sPPed )
|
|
DropTrailingWS( @sPPed )
|
|
|
|
//TraceLog( sPPed, nLine )
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
IF sPPed = "_HB_CLASS"
|
|
BREAK
|
|
ENDIF
|
|
|
|
sTemp := sPPed
|
|
WHILE ( nNext := nAtSkipStr( ';', sTemp ) ) > 0
|
|
sBlock := Left( sTemp, nNext - 1 )
|
|
|
|
sTemp := RTrim( SubStr( sTemp, nNext + 1 ) )
|
|
ExtractLeadingWS( @sTemp )
|
|
|
|
ExtractLeadingWS( @sBlock )
|
|
DropTrailingWS( @sBlock )
|
|
|
|
IF ! Empty( sBlock )
|
|
IF sBlock = "#line"
|
|
LOOP
|
|
ENDIF
|
|
|
|
#ifdef __CLIPPER__
|
|
/* Clipper Macro Compiler can't compile nested blocks! */
|
|
CompileNestedBlocks( sBlock, @sBlock )
|
|
#endif
|
|
|
|
IF ( nProcId == 0 .AND. sBlock = "PP_Statics" )
|
|
Dummy := &( sBlock )
|
|
LOOP
|
|
ENDIF
|
|
|
|
IF sBlock = "PP_PROC"
|
|
sSymbol := Upper( LTrim( SubStr( sBlock, At( ' ', sBlock ) ) ) )
|
|
aSize( aProcedures, ++nProcId )
|
|
|
|
IF sBlock = "PP_PROC_PRG"
|
|
sSymbol := s_sModule + sSymbol
|
|
ELSEIF sBlock = "PP_PROC_INIT"
|
|
aAdd( aInitExit[1], nProcId )
|
|
ELSEIF sBlock = "PP_PROC_EXIT"
|
|
aAdd( aInitExit[2], nProcId )
|
|
ENDIF
|
|
|
|
//TraceLog( sSymbol , nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ELSE
|
|
IF sBlock = "PP__"
|
|
IF sBlock = "PP__FOR"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "F"
|
|
|
|
sBlock := SubStr( sBlock, 9 )
|
|
sCounter := Left( sBlock, ( nAt := AT( ":=", sBlock ) ) - 1 )
|
|
sBlock := SubStr( sBlock, nAt + 2 )
|
|
sStart := Left( sBlock, ( nAt := At( "~TO~", sBlock ) ) - 1 )
|
|
sBlock := SubStr( sBlock, nAt + 4 )
|
|
sEnd := Left( sBlock, ( nAt := At( "~STEP~", sBlock ) ) - 1 )
|
|
sStep := SubStr( sBlock, nAt + 6 )
|
|
IF sStep == ""
|
|
sStep := "1"
|
|
ENDIF
|
|
|
|
// No procedure declaration.
|
|
IF nProcId == 0
|
|
sSymbol := "Implied_Main"
|
|
aSize( aProcedures, ++nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ENDIF
|
|
|
|
aAdd( aProcedures[ nProcId ][2], { 0, &( "{||" + sCounter + ":=" + sStart + "}" ), nLine } ) // Loop back
|
|
|
|
sBlock := sCounter + "<=" + sEnd
|
|
|
|
s_nCompLoop++
|
|
aSize( s_aLoopJumps, s_nCompLoop )
|
|
s_aLoopJumps[ s_nCompLoop ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "F", &( "{||" + sCounter + ":=" + sCounter + "+" + sStep + "}" ) } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__NEXT"
|
|
|
|
IF s_nCompLoop == 0 .OR. s_aLoopJumps[ s_nCompLoop ][3] != "F"
|
|
Alert( [NEXT does not match FOR] )
|
|
ELSE
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ELSEIF sBlock = "PP__WHILE"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "W"
|
|
|
|
sBlock := SubStr( sBlock, 11 )
|
|
s_nCompLoop++
|
|
aSize( s_aLoopJumps, s_nCompLoop )
|
|
s_aLoopJumps[ s_nCompLoop ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "W" } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__LOOP"
|
|
|
|
IF s_nCompLoop == 0
|
|
Alert( [LOOP with no loop in sight!] )
|
|
ELSE
|
|
IF s_aLoopJumps[ s_nCompLoop ][3] == "F"
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
ENDIF
|
|
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ELSEIF sBlock = "PP__EXIT"
|
|
|
|
sBlock := ""
|
|
IF s_nCompLoop == 0
|
|
Alert( [EXIT with no loop in sight!] )
|
|
ELSE
|
|
aAdd( s_aLoopJumps[ s_nCompLoop ][2], Len( aProcedures[ nProcId ][2] ) + 1 ) // Address of line to later place unconditional Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDDO"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompLoop == 0
|
|
Alert( [ENDDO does not match WHILE] )
|
|
ELSE
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ELSEIF sBlock = "PP__DOCASE"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "C"
|
|
|
|
sBlock := ""//SubStr( sBlock, 12 )
|
|
s_nCompIf++
|
|
aSize( s_aIfJumps, s_nCompIf )
|
|
s_aIfJumps[ s_nCompIf ] := { 0, {}, "C", .F. } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__CASE"
|
|
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "C" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
sBlock := ""
|
|
Alert( [CASE does not match DO CASE] )
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } ) // Place holder for unconditional Jump to END.
|
|
aAdd( s_aIfJumps[ s_nCompIf ][2], Len( aProcedures[ nProcId ][2] ) ) // Address of line to later place unconditional Jump instruction into.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
ENDIF
|
|
|
|
sBlock := SubStr( sBlock, 10 )
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place conditional Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__OTHERWISE"
|
|
|
|
sBlock := ""
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "C" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [OTHERWISE does not match DO CASE] )
|
|
ELSE
|
|
s_aIfJumps[ s_nCompIf ][4] := .T.
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Patching the previous conditional Jump Instruction
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDCASE"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompIf == 0
|
|
Alert( [ENDCASE with no DO CASE in sight!] )
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
ENDIF
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ELSEIF sBlock = "PP__IF"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "I"
|
|
|
|
sBlock := SubStr( sBlock, 8 )
|
|
s_nCompIf++
|
|
aSize( s_aIfJumps, s_nCompIf )
|
|
s_aIfJumps[ s_nCompIf ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "I", .F. } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__ELSEIF"
|
|
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "I" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [ELSEIF does not match IF] )
|
|
LOOP
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } ) // Place holder for unconditional Jump to END.
|
|
aAdd( s_aIfJumps[ s_nCompIf ][2], Len( aProcedures[ nProcId ][2] ) ) // Address of line to later place unconditional Jump instruction into.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
ENDIF
|
|
|
|
sBlock := SubStr( sBlock, 12 )
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ELSE"
|
|
|
|
sBlock := ""
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "I" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [ELSE does not match IF] )
|
|
LOOP
|
|
ELSE
|
|
s_aIfJumps[ s_nCompIf ][4] := .T.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Patching the prebvious conditional Jump Instruction
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDIF"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompIf == 0
|
|
Alert( [ENDIF does not match IF] )
|
|
ELSE
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ELSEIF sBlock = "PP__END"
|
|
|
|
IF s_nCompIf == 0 .AND. s_nCompLoop == 0
|
|
Alert( [END with no Flow-Control structure in sight!] )
|
|
ELSE
|
|
IF s_acFlowType[ s_nFlowId ] $ "FW"
|
|
IF s_acFlowType[ s_nFlowId ] $ "F"
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
ENDIF
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aLoopJumps, s_nCompLoop )
|
|
ELSE
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
LOOP
|
|
|
|
ENDIF
|
|
ELSE
|
|
nAt := At( '=', sBlock )
|
|
IF nAt > 1 .AND. SubStr( sBlock, nAt - 1, 1 ) != ':'
|
|
nAt--
|
|
FOR nPos := 1 TO nAt
|
|
cChr := SubStr( sBlock, nPos, 1 )
|
|
IF ! ( IsAlpha( cChr ) .OR. IsDigit( cChr ) .OR. cChr $ "[]:&._ " )
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
IF nPos > nAt
|
|
sBlock := Left( sBlock, nAt ) + ":" + SubStr( sBlock, nPos )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// No procedure declaration.
|
|
IF nProcId == 0
|
|
sSymbol := "Implied_Main"
|
|
aSize( aProcedures, ++nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ENDIF
|
|
|
|
IF sBlock == ""
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } )
|
|
ELSE
|
|
//? nLine, nProcId, sBlock
|
|
//TraceLog( sBlock )
|
|
aAdd( aProcedures[ nProcId ][2], { 0, &( "{||" + sBlock + "}" ), nLine } )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
sBlock := sTemp
|
|
DropTrailingWS( @sBlock )
|
|
|
|
IF sBlock = "#line"
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF ! ( sBlock == '' )
|
|
#ifdef __CLIPPER__
|
|
/* Clipper Macro Compiler can't compile nested blocks! */
|
|
CompileNestedBlocks( sBlock, @sBlock )
|
|
#endif
|
|
|
|
IF ( nProcId == 0 .AND. sBlock = "PP_Statics" )
|
|
Dummy := &( sBlock )
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF sBlock = "PP_PROC"
|
|
sSymbol := Upper( LTrim( SubStr( sBlock, At( ' ', sBlock ) ) ) )
|
|
aSize( aProcedures, ++nProcId )
|
|
|
|
IF sBlock = "PP_PROC_PRG"
|
|
sSymbol := s_sModule + sSymbol
|
|
ELSEIF sBlock = "PP_PROC_INIT"
|
|
aAdd( aInitExit[1], nProcId )
|
|
ELSEIF sBlock = "PP_PROC_EXIT"
|
|
aAdd( aInitExit[2], nProcId )
|
|
ENDIF
|
|
|
|
//TraceLog( sSymbol , nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ELSE
|
|
IF sBlock = "PP__"
|
|
IF sBlock = "PP__FOR"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "F"
|
|
|
|
sBlock := SubStr( sBlock, 9 )
|
|
sCounter := Left( sBlock, ( nAt := AT( ":=", sBlock ) ) - 1 )
|
|
sBlock := SubStr( sBlock, nAt + 2 )
|
|
sStart := Left( sBlock, ( nAt := At( "~TO~", sBlock ) ) - 1 )
|
|
sBlock := SubStr( sBlock, nAt + 4 )
|
|
sEnd := Left( sBlock, ( nAt := At( "~STEP~", sBlock ) ) - 1 )
|
|
sStep := SubStr( sBlock, nAt + 6 )
|
|
IF sStep == ""
|
|
sStep := "1"
|
|
ENDIF
|
|
|
|
// No procedure declaration.
|
|
IF nProcId == 0
|
|
sSymbol := "Implied_Main"
|
|
aSize( aProcedures, ++nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ENDIF
|
|
|
|
aAdd( aProcedures[ nProcId ][2], { 0, &( "{||" + sCounter + ":=" + sStart + "}" ), nLine } ) // Loop back
|
|
|
|
sBlock := sCounter + "<=" + sEnd
|
|
|
|
s_nCompLoop++
|
|
aSize( s_aLoopJumps, s_nCompLoop )
|
|
s_aLoopJumps[ s_nCompLoop ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "F", &( "{||" + sCounter + ":=" + sCounter + "+" + sStep + "}" ) } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__NEXT"
|
|
|
|
IF s_nCompLoop == 0 .OR. s_aLoopJumps[ s_nCompLoop ][3] != "F"
|
|
Alert( [NEXT does not match FOR] )
|
|
ELSE
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF sBlock = "PP__WHILE"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "W"
|
|
|
|
sBlock := SubStr( sBlock, 11 )
|
|
s_nCompLoop++
|
|
aSize( s_aLoopJumps, s_nCompLoop )
|
|
s_aLoopJumps[ s_nCompLoop ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "W" } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__LOOP"
|
|
|
|
IF s_nCompLoop == 0
|
|
Alert( [LOOP with no loop in sight!] )
|
|
ELSE
|
|
IF s_aLoopJumps[ s_nCompLoop ][3] == "F"
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
ENDIF
|
|
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF sBlock = "PP__EXIT"
|
|
|
|
sBlock := ""
|
|
IF s_nCompLoop == 0
|
|
Alert( [EXIT with no loop in sight!] )
|
|
ELSE
|
|
aAdd( s_aLoopJumps[ s_nCompLoop ][2], Len( aProcedures[ nProcId ][2] ) + 1 ) // Address of line to later place unconditional Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDDO"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompLoop == 0
|
|
Alert( [ENDDO does not match WHILE] )
|
|
ELSE
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF sBlock = "PP__DOCASE"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "C"
|
|
|
|
sBlock := ""//SubStr( sBlock, 12 )
|
|
s_nCompIf++
|
|
aSize( s_aIfJumps, s_nCompIf )
|
|
s_aIfJumps[ s_nCompIf ] := { 0, {}, "C", .F. } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__CASE"
|
|
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "C" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
sBlock := ""
|
|
Alert( [CASE does not match DO CASE] )
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } ) // Place holder for unconditional Jump to END.
|
|
aAdd( s_aIfJumps[ s_nCompIf ][2], Len( aProcedures[ nProcId ][2] ) ) // Address of line to later place unconditional Jump instruction into.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
ENDIF
|
|
|
|
sBlock := SubStr( sBlock, 10 )
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place conditional Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__OTHERWISE"
|
|
|
|
sBlock := ""
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "C" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [OTHERWISE does not match DO CASE] )
|
|
ELSE
|
|
s_aIfJumps[ s_nCompIf ][4] := .T.
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Patching the previous conditional Jump Instruction
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDCASE"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompIf == 0
|
|
Alert( [ENDCASE with no DO CASE in sight!] )
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
ENDIF
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF sBlock = "PP__IF"
|
|
s_nFlowId++
|
|
aSize( s_acFlowType, s_nFlowId )
|
|
s_acFlowType[ s_nFlowId ] := "I"
|
|
|
|
sBlock := SubStr( sBlock, 8 )
|
|
s_nCompIf++
|
|
aSize( s_aIfJumps, s_nCompIf )
|
|
s_aIfJumps[ s_nCompIf ] := { Len( aProcedures[ nProcId ][2] ) + 1, {}, "I", .F. } // Address of line to later place conditional Jump instruction into.
|
|
|
|
ELSEIF sBlock = "PP__ELSEIF"
|
|
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "I" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [ELSEIF does not match IF] )
|
|
BREAK
|
|
ELSE
|
|
IF s_aIfJumps[ s_nCompIf ][1] > 0
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } ) // Place holder for unconditional Jump to END.
|
|
aAdd( s_aIfJumps[ s_nCompIf ][2], Len( aProcedures[ nProcId ][2] ) ) // Address of line to later place unconditional Jump instruction into.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
ENDIF
|
|
|
|
sBlock := SubStr( sBlock, 12 )
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ELSE"
|
|
|
|
sBlock := ""
|
|
IF s_nCompIf == 0 .OR. s_aIfJumps[ s_nCompIf ][3] != "I" .OR. s_aIfJumps[ s_nCompIf ][4]
|
|
Alert( [ELSE does not match IF] )
|
|
BREAK
|
|
ELSE
|
|
s_aIfJumps[ s_nCompIf ][4] := .T.
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Patching the prebvious conditional Jump Instruction
|
|
s_aIfJumps[ s_nCompIf ][1] := Len( aProcedures[ nProcId ][2] ) + 1 // Address of line to later place Jump instruction into.
|
|
ENDIF
|
|
|
|
ELSEIF sBlock = "PP__ENDIF"
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
IF s_nCompIf == 0
|
|
Alert( [ENDIF does not match IF] )
|
|
ELSE
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF sBlock = "PP__END"
|
|
|
|
IF s_nCompIf == 0 .AND. s_nCompLoop == 0
|
|
Alert( [END with no Flow-Control structure in sight!] )
|
|
ELSE
|
|
IF s_acFlowType[ s_nFlowId ] $ "FW"
|
|
IF s_acFlowType[ s_nFlowId ] $ "F"
|
|
aAdd( aProcedures[ nProcId ][2], { 0, s_aLoopJumps[ s_nCompLoop ][4], nLine } ) // STEP
|
|
ENDIF
|
|
aAdd( aProcedures[ nProcId ][2], { s_aLoopJumps[ s_nCompLoop ][1] - 1, NIL, nLine } ) // Loop back
|
|
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aLoopJumps[s_nCompLoop][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aLoopJumps[s_nCompLoop][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompLoop--
|
|
//aSize( s_aLoopJumps, s_nCompLoop )
|
|
ELSE
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][1] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the previous conditional Jump Instruction
|
|
|
|
nJumps := Len( s_aIfJumps[s_nCompIf][2] )
|
|
FOR nJump := 1 TO nJumps
|
|
aProcedures[ nProcId ][2][ s_aIfJumps[s_nCompIf][2][nJump] ][1] := Len( aProcedures[ nProcId ][2] ) // Patching the unconditional Jump Instruction
|
|
NEXT
|
|
|
|
s_nCompIf--
|
|
//aSize( s_aIfJumps, s_nCompIf )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
s_nFlowId--
|
|
//aSize( s_acFlowType, s_nFlowId )
|
|
|
|
BREAK
|
|
|
|
ENDIF
|
|
ELSE
|
|
nAt := At( '=', sBlock )
|
|
IF nAt > 1 .AND. SubStr( sBlock, nAt - 1, 1 ) != ':'
|
|
nAt--
|
|
FOR nPos := 1 TO nAt
|
|
cChr := SubStr( sBlock, nPos, 1 )
|
|
IF ! ( IsAlpha( cChr ) .OR. IsDigit( cChr ) .OR. cChr $ "[]:&._ " )
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
IF nPos > nAt
|
|
sBlock := Left( sBlock, nAt ) + ":" + SubStr( sBlock, nPos )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// No procedure declaration.
|
|
IF nProcId == 0
|
|
sSymbol := "Implied_Main"
|
|
aSize( aProcedures, ++nProcId )
|
|
aProcedures[nProcId] := { sSymbol, {} }
|
|
ENDIF
|
|
|
|
IF sBlock == ""
|
|
aAdd( aProcedures[ nProcId ][2], { 0, NIL, nLine } )
|
|
ELSE
|
|
//? nLine, nProcId, sBlock
|
|
//TraceLog( nLine, nProcId, sBlock )
|
|
aAdd( aProcedures[ nProcId ][2], { 0, &( "{||" + sBlock + "}" ), nLine } )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
END SEQUENCE
|
|
|
|
RETURN aProcedures
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_ProcName( nLevel )
|
|
|
|
IF nLevel == NIL
|
|
nLevel := 0
|
|
ENDIF
|
|
|
|
IF nLevel >= 0 .AND. nLevel < s_nProcStack
|
|
RETURN s_aProcStack[ s_nProcStack - nLevel ][1]
|
|
ENDIF
|
|
|
|
RETURN ""
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_ProcLine( nLevel )
|
|
|
|
IF nLevel == NIL
|
|
nLevel := 0
|
|
ENDIF
|
|
|
|
IF nLevel >= 0 .AND. nLevel < s_nProcStack
|
|
RETURN s_aProcStack[ s_nProcStack - nLevel ][2]
|
|
ENDIF
|
|
|
|
RETURN 0
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_LocalParams( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), xInit, nParams
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nParams := Len( s_aParams ) ) > 0
|
|
xInit := s_aParams[1]
|
|
aDel( s_aParams, 1 )
|
|
aSize( s_aParams, nParams - 1 )
|
|
ELSE
|
|
xInit := NIL
|
|
ENDIF
|
|
|
|
IF Type( aVars[nVar] ) = 'U'
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := xInit
|
|
aAdd( s_asLocals, aVars[nVar] )
|
|
ELSE
|
|
Alert( PP_ProcName() + " (" + LTrim( Str( PP_ProcLine() ) ) + ")" + [ Declared Parameter redeclaration: ] + aVars[nVar] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Params( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), xInit, nParams
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nParams := Len( s_aParams ) ) > 0
|
|
xInit := s_aParams[1]
|
|
aDel( s_aParams, 1 )
|
|
aSize( s_aParams, nParams - 1 )
|
|
ELSE
|
|
xInit := NIL
|
|
ENDIF
|
|
|
|
IF Type( aVars[nVar] ) = 'U'
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := xInit
|
|
aAdd( s_asPrivates, aVars[nVar] )
|
|
ELSE
|
|
Alert( PP_ProcName() + " (" + LTrim( Str( PP_ProcLine() ) ) + ")" + [ Parameter redeclaration: ] + aVars[nVar] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Privates( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), nAt, cInit
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nAt := At( ":=", aVars[nVar] ) ) > 0
|
|
cInit := LTrim( SubStr( aVars[nVar], nAt + 2 ) )
|
|
aVars[nVar] := RTrim( Left( aVars[nVar], nAt - 1 ) )
|
|
ELSE
|
|
cInit := "NIL"
|
|
ENDIF
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF aScan( s_asPrivates, aVars[nVar], , , .T. ) == 0
|
|
#else
|
|
IF aScan( s_asPrivates, {|sPrivate| sPrivate == aVars[nVar] } ) == 0
|
|
#endif
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := &( cInit )
|
|
aAdd( s_asPrivates, aVars[nVar] )
|
|
ELSE
|
|
Alert( PP_ProcName() + " (" + LTrim( Str( PP_ProcLine() ) ) + ")" + [ Private redeclaration: ] + aVars[nVar] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Locals( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), nAt, cInit
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nAt := At( ":=", aVars[nVar] ) ) > 0
|
|
cInit := LTrim( SubStr( aVars[nVar], nAt + 2 ) )
|
|
aVars[nVar] := RTrim( Left( aVars[nVar], nAt - 1 ) )
|
|
ELSE
|
|
cInit := "NIL"
|
|
ENDIF
|
|
|
|
IF Type( aVars[nVar] ) = 'U'
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := &( cInit )
|
|
aAdd( s_asLocals, aVars[nVar] )
|
|
ELSE
|
|
Alert( [Local redeclaration: ] + aVars[nVar] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Publics( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), nAt, cInit
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nAt := At( ":=", aVars[nVar] ) ) > 0
|
|
cInit := LTrim( SubStr( aVars[nVar], nAt + 2 ) )
|
|
aVars[nVar] := RTrim( Left( aVars[nVar], nAt - 1 ) )
|
|
ELSE
|
|
cInit := ".F."
|
|
ENDIF
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF aScan( s_asPublics, aVars[nVar] ) == 0
|
|
#else
|
|
IF aScan( s_asPublics, {|sPublic| sPublic == aVars[nVar] } ) == 0
|
|
#endif
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := &( cInit )
|
|
aAdd( s_asPublics, aVars[nVar] )
|
|
ELSE
|
|
Alert( [Public redeclaration: ] + aVars[nVar] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Statics( aVars )
|
|
|
|
LOCAL nVar, nVars := Len( aVars ), nAt, cInit
|
|
|
|
FOR nVar := 1 TO nVars
|
|
IF ( nAt := At( ":=", aVars[nVar] ) ) > 0
|
|
cInit := LTrim( SubStr( aVars[nVar], nAt + 2 ) )
|
|
aVars[nVar] := RTrim( Left( aVars[nVar], nAt - 1 ) )
|
|
ELSE
|
|
cInit := "NIL"
|
|
ENDIF
|
|
|
|
IF ( Left( Type( aVars[nVar] ), 1 ) ) = 'U'
|
|
__QQPUB( aVars[nVar] )
|
|
&( aVars[nVar] ) := &( cInit )
|
|
aAdd( s_asStatics, aVars[nVar] )
|
|
ELSE
|
|
#ifdef __XHARBOUR__
|
|
IF aScan( aVars, aVars[nVar], 1, nVar - 1, .T. ) > 0
|
|
#else
|
|
IF aScan( aVars, {|sVar| sVar == aVars[nVar] }, 1, nVar - 1 ) > 0
|
|
#endif
|
|
Alert( [Type: ] + Type( aVars[nVar] ) + [ Static redeclaration: '] + aVars[nVar] )
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_Run( cFile, aParams, sPPOExt, bBlanks )
|
|
|
|
LOCAL nBaseProc := s_nProcId, sPresetModule := s_sModule, nProc
|
|
|
|
//PP_PreProFile( "rp_run.ch" )
|
|
IF bBlanks == NIL
|
|
bBlanks := .T.
|
|
ENDIF
|
|
|
|
IF ! s_lRunLoaded
|
|
s_lRunLoaded := .T.
|
|
|
|
InitRunRules()
|
|
InitRunResults()
|
|
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [Run #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [Run #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [Run #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//TraceLog( cFile, s_sModule, s_aProcedures, s_aInitExit, s_nProcId, aParams )
|
|
|
|
IF s_sModule == cFile
|
|
TraceLog( s_aProcedures, s_aInitExit, s_nProcId, aParams )
|
|
ELSE
|
|
s_nProcId := 0; s_aProcedures := {}; s_aInitExit := { {}, {} }
|
|
s_asPrivates := {}; s_asPublics := {}; s_asLocals := {}; s_asStatics := {}; s_aParams := {}
|
|
|
|
s_sModule := cFile
|
|
bCompile := .T.
|
|
PP_PreProFile( cFile, sPPOExt, bBlanks )
|
|
bCompile := .F.
|
|
ENDIF
|
|
|
|
PP_Exec( s_aProcedures, s_aInitExit, s_nProcId, aParams )
|
|
|
|
#ifdef __CLIPPER__
|
|
Memory(-1)
|
|
#else
|
|
HB_GCALL()
|
|
#endif
|
|
|
|
s_sModule := sPresetModule
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE PP_SetReturn( xRet )
|
|
|
|
s_xRet := xRet
|
|
|
|
//TraceLog( xRet )
|
|
|
|
BREAK .T.
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE RP_Dot_Err( oErr )
|
|
|
|
LOCAL Counter, xArg, sArgs := ";"
|
|
|
|
IF ValType( oErr:Args ) == 'A' .AND. Len( oErr:Args ) > 0
|
|
sArgs := ";Arguments: "
|
|
|
|
FOR Counter := 1 TO Len( oErr:Args )
|
|
xArg := oErr:Args[Counter]
|
|
|
|
DO CASE
|
|
CASE xArg == NIL
|
|
sArgs += "NIL; "
|
|
|
|
CASE ValType( xArg ) == 'A'
|
|
sArgs += "{}; "
|
|
|
|
CASE ValType( xArg ) == 'B'
|
|
sArgs += "{|| }; "
|
|
|
|
CASE ValType( xArg ) == 'C'
|
|
sArgs += '"' + xArg + '"; '
|
|
|
|
CASE ValType( xArg ) == 'D'
|
|
sArgs += dtoc( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'L'
|
|
sArgs += IIF( xArg, ".T.; ", ".F.; " )
|
|
|
|
CASE ValType( xArg ) == 'N'
|
|
sArgs += Str( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'O'
|
|
sArgs += "{o}"
|
|
|
|
OTHERWISE
|
|
sArgs += '[' + ValType( xArg ) + "]; "
|
|
ENDCASE
|
|
NEXT
|
|
ENDIF
|
|
|
|
TraceLog( [Sorry, could not execute: ] + oErr:Description + sArgs + " " + ProcName(2) + '[' + Str( ProcLine(2) ) + ']')
|
|
Alert( [Sorry, could not execute: ] + oErr:Description + sArgs + " " + ProcName(2) + '[' + Str( ProcLine(2) ) + ']')
|
|
|
|
BREAK
|
|
|
|
//RETURN // Unreacable code
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE RP_PPText_Err( oErr, sLine, nLine )
|
|
|
|
LOCAL Counter, xArg, sArgs := ";"
|
|
|
|
IF ValType( oErr:Args ) == 'A' .AND. Len( oErr:Args ) > 0
|
|
sArgs := ";Arguments: "
|
|
|
|
FOR Counter := 1 TO Len( oErr:Args )
|
|
xArg := oErr:Args[Counter]
|
|
|
|
DO CASE
|
|
CASE xArg == NIL
|
|
sArgs += "NIL; "
|
|
|
|
CASE ValType( xArg ) == 'A'
|
|
sArgs += "{}; "
|
|
|
|
CASE ValType( xArg ) == 'B'
|
|
sArgs += "{|| }; "
|
|
|
|
CASE ValType( xArg ) == 'C'
|
|
sArgs += '"' + xArg + '"; '
|
|
|
|
CASE ValType( xArg ) == 'D'
|
|
sArgs += dtoc( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'L'
|
|
sArgs += IIF( xArg, ".T.; ", ".F.; " )
|
|
|
|
CASE ValType( xArg ) == 'N'
|
|
sArgs += Str( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'O'
|
|
sArgs += "{o}"
|
|
|
|
OTHERWISE
|
|
sArgs += '[' + ValType( xArg ) + "]; "
|
|
ENDCASE
|
|
NEXT
|
|
ENDIF
|
|
|
|
TraceLog( [Line: ] + Str( nLine, 4 ) + [ could not compile: ] + "'" + sLine + "';" + oErr:Description + sArgs + ProcName(2) + '[' + Str( ProcLine(2) ) + ']' )
|
|
Alert( [Line: ] + Str( nLine, 4 ) + [ could not compile: ] + "'" + sLine + "';" + oErr:Description + sArgs + ProcName(2) + '[' + Str( ProcLine(2) ) + ']' )
|
|
|
|
BREAK
|
|
|
|
//RETURN // Unreacable code
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
PROCEDURE RP_Comp_Err( oErr, sLine, nLine )
|
|
|
|
LOCAL Counter, xArg, sArgs := ";"
|
|
|
|
ErrorBlock( {|e| TraceLog( e:Description, e:SubSystem, e:SubCode, e:Args ), __Quit() } )
|
|
|
|
IF ValType( oErr:Args ) == 'A' .AND. Len( oErr:Args ) > 0
|
|
sArgs := ";Arguments: "
|
|
|
|
FOR Counter := 1 TO Len( oErr:Args )
|
|
xArg := oErr:Args[Counter]
|
|
|
|
DO CASE
|
|
CASE xArg == NIL
|
|
sArgs += "NIL; "
|
|
|
|
CASE ValType( xArg ) == 'A'
|
|
sArgs += "{}; "
|
|
|
|
CASE ValType( xArg ) == 'B'
|
|
sArgs += "{|| }; "
|
|
|
|
CASE ValType( xArg ) == 'C'
|
|
sArgs += '"' + xArg + '"; '
|
|
|
|
CASE ValType( xArg ) == 'D'
|
|
sArgs += dtoc( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'L'
|
|
sArgs += IIF( xArg, ".T.; ", ".F.; " )
|
|
|
|
CASE ValType( xArg ) == 'N'
|
|
sArgs += Str( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'O'
|
|
sArgs += "{o}"
|
|
|
|
OTHERWISE
|
|
sArgs += '[' + ValType( xArg ) + "]; "
|
|
ENDCASE
|
|
NEXT
|
|
ENDIF
|
|
|
|
TraceLog( [Line: ] + Str( nLine, 4 ) + [ could not compile:] + ";'" + sLine + "';" + oErr:Description + sArgs + ProcName(2) + '[' + Str( ProcLine(2) ) + ']')
|
|
Alert( [Line: ] + Str( nLine, 4 ) + [ could not compile:] + ";'" + sLine + "';" + oErr:Description + sArgs + ProcName(2) + '[' + Str( ProcLine(2) ) + ']')
|
|
|
|
BREAK
|
|
|
|
//RETURN // Unreacable code
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION RP_Run_Err( oErr, aProcedures, nLine )
|
|
|
|
LOCAL Counter, xArg, sArgs := ";", nProc, sProc
|
|
|
|
IF nLine == NIL
|
|
nLine := 0
|
|
ENDIF
|
|
|
|
IF ValType( oErr:Args ) == 'A' .AND. Len( oErr:Args ) > 0
|
|
sArgs := ";Arguments: "
|
|
|
|
FOR Counter := 1 TO Len( oErr:Args )
|
|
xArg := oErr:Args[Counter]
|
|
|
|
DO CASE
|
|
CASE xArg == NIL
|
|
sArgs += "NIL; "
|
|
|
|
CASE ValType( xArg ) == 'A'
|
|
sArgs += "{}; "
|
|
|
|
CASE ValType( xArg ) == 'B'
|
|
sArgs += "{|| }; "
|
|
|
|
CASE ValType( xArg ) == 'C'
|
|
sArgs += '"' + xArg + '"; '
|
|
|
|
CASE ValType( xArg ) == 'D'
|
|
sArgs += dtoc( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'L'
|
|
sArgs += IIF( xArg, ".T.; ", ".F.; " )
|
|
|
|
CASE ValType( xArg ) == 'N'
|
|
sArgs += Str( xArg ) + "; "
|
|
|
|
CASE ValType( xArg ) == 'O'
|
|
sArgs += "{o}; "
|
|
|
|
OTHERWISE
|
|
sArgs += '[' + ValType( xArg ) + "]; "
|
|
ENDCASE
|
|
NEXT
|
|
ENDIF
|
|
|
|
IF oErr:SubCode == 1001
|
|
IF s_sModule != NIL
|
|
sProc := s_sModule + oErr:Operation //ProcName( 2 + 2 )
|
|
nProc := aScan( aProcedures, {|aProc| aProc[1] == sProc } )
|
|
ELSE
|
|
nProc := 0
|
|
ENDIF
|
|
IF nProc == 0
|
|
sProc := oErr:Operation //ProcName( 2 + 2 )
|
|
nProc := aScan( aProcedures, {|aProc| aProc[1] == sProc } )
|
|
ENDIF
|
|
|
|
IF nProc > 0
|
|
s_xRet := NIL
|
|
IF ValType( oErr:Args ) == 'A'
|
|
s_aParams := oErr:Args
|
|
ELSE
|
|
s_aParams := {}
|
|
ENDIF
|
|
|
|
PP_ExecProcedure( aProcedures[nProc] )
|
|
|
|
IF oErr:CanSubstitute
|
|
RETURN ( s_xRet )
|
|
ELSEIF oErr:CanDefault
|
|
Alert( [Must Default: ] + "'" + oErr:Operation + "' '" + oErr:Description + ;
|
|
sArgs + ";" + ;
|
|
PP_ProcName() + '(' + LTrim( Str( PP_ProcLine() ) ) + ");" + ;
|
|
ProcName(2) + "(" + LTrim( Str( ProcLine(2) ) ) + ")" )
|
|
|
|
RETURN ( .F. )
|
|
ELSE
|
|
Alert( [No Recovery for: ] + "'" + oErr:Operation + "' " + oErr:Description + ;
|
|
sArgs + ;
|
|
PP_ProcName() + '(' + LTrim( Str( PP_ProcLine() ) ) + ");" + ;
|
|
ProcName(2) + "(" + LTrim( Str( ProcLine(2) ) ) + ")" )
|
|
|
|
oErr:Cargo := nProc
|
|
BREAK oErr
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
TraceLog( s_sModule, nLine, "Sorry, R/T Error: [" + oErr:SubSystem + "/" + LTrim( Str( oErr:SubCode ) ) + "] '" + oErr:Operation + "' '" + oErr:Description + "' " + sArgs + " " + PP_ProcName() + '(' + LTrim( Str( PP_ProcLine() ) ) + ") " + ProcName(2) + "(" + LTrim( Str( ProcLine(2) ) ) + ")" )
|
|
//TraceLog( s_sModule, nLine, oErr:Description, oErr:SubSystem, oErr:Operation, sArgs, PP_ProcName() )
|
|
Alert( [Line: ] + Str( nLine ) + [ R/T Error: ] + "[" + oErr:SubSystem + "/" + LTrim( Str( oErr:SubCode ) ) + "] '" + oErr:Operation + "';" + ;
|
|
oErr:Description + ;
|
|
sArgs + ;
|
|
PP_ProcName() + '(' + LTrim( Str( PP_ProcLine() ) ) + ");" + ;
|
|
ProcName(2) + "(" + LTrim( Str( ProcLine(2) ) ) + ")" )
|
|
//BREAK oErr
|
|
__Quit()
|
|
|
|
RETURN NIL // Unreacable code
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetIf( bExp )
|
|
|
|
IF nIf > 0 .AND. ! abIf[nIf]
|
|
bExp := .F.
|
|
ENDIF
|
|
|
|
nIf++
|
|
aSize( abIf, nIf )
|
|
abIf[nIf] := bExp
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetElseIf( bExp )
|
|
|
|
IF nIf > 1 .AND. ! abIf[nIf - 1]
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
abIf[nIf] := ! abIf[nIf]
|
|
|
|
IF abIf[nIf]
|
|
abIf[nIf] := bExp
|
|
ENDIF
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetElse()
|
|
|
|
IF nIf > 1 .AND. ! abIf[nIf - 1]
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
abIf[nIf] := ! abIf[nIf]
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetEnd()
|
|
|
|
IF nIf > 0
|
|
nIf--
|
|
ELSE
|
|
Alert( [END with no IF in sight!] )
|
|
ENDIF
|
|
|
|
RETURN nIf
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetDoCase()
|
|
|
|
nIf++
|
|
aSize( abIf, nIf )
|
|
abIf[nIf] := .F.
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetCase( bExp )
|
|
|
|
IF nIf > 1 .AND. ! abIf[nIf - 1]
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
abIf[nIf] := ! abIf[nIf]
|
|
|
|
IF abIf[nIf]
|
|
abIf[nIf] := bExp
|
|
ENDIF
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetOtherwise()
|
|
|
|
IF nIf > 1 .AND. ! abIf[nIf - 1]
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
abIf[nIf] := ! abIf[nIf]
|
|
|
|
RETURN abIf[nIf]
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION __SetEndCase()
|
|
|
|
IF nIf > 0
|
|
nIf--
|
|
ELSE
|
|
Alert( [ENDCASE with no DO CASE in sight!] )
|
|
ENDIF
|
|
|
|
RETURN nIf
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifdef __CLIPPER__
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION CompileNestedBlocks( sTemp, sMain )
|
|
|
|
LOCAL asBlocks, nBlocks, Counter, aReplace
|
|
|
|
asBlocks := asBlocks(sTemp )
|
|
nBlocks := Len( asBlocks )
|
|
|
|
FOR Counter := 1 TO nBlocks
|
|
aReplace := CompileNestedBlocks( SubStr( asBlocks[Counter], 2 ), @sMain )
|
|
NEXT
|
|
|
|
IF ProcName(1) == ProcName(0) // .AND. nBlocks == 0
|
|
IF aReplace != NIL
|
|
sTemp := StrTran( sTemp, aReplace[1], aReplace[2] )
|
|
ELSE
|
|
aReplace := Array(2)
|
|
ENDIF
|
|
|
|
aReplace[1] := '{' + sTemp
|
|
aReplace[2] := "PP_Block(" + LTrim( Str( ++nBlockId, 3, 0 ) ) + ')'
|
|
aAdd( s_abBlocks, &( aReplace[1]) )
|
|
|
|
sMain := StrTran( sMain, aReplace[1], aReplace[2] )
|
|
|
|
RETURN aReplace
|
|
ENDIF
|
|
|
|
RETURN NIL
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION asBlocks( sBlock, asBlocks )
|
|
|
|
LOCAL nStart := 1, nEnd := Len( sBlock ), nPosition, sNested, nOpen, ;
|
|
lBlock := .F., cChar
|
|
|
|
IF asBlocks == NIL
|
|
asBlocks := {}
|
|
ENDIF
|
|
|
|
WHILE ( nStart := nAtSkipStr( '{', sBlock, nStart ) ) > 0
|
|
FOR nPosition := nStart + 1 TO nEnd
|
|
IF SubStr( sBlock, nPosition, 1 ) != ' '
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
IF SubStr( sBlock, nPosition, 1 ) != '|'
|
|
nStart++
|
|
LOOP
|
|
ENDIF
|
|
|
|
nPosition++
|
|
nOpen := 1
|
|
|
|
DO WHILE nOpen > 0 .AND. nPosition <= nEnd
|
|
cChar := SubStr( sBlock, nPosition, 1 )
|
|
|
|
IF cChar == '"'
|
|
DO WHILE nPosition <= nEnd
|
|
nPosition++
|
|
IF SubStr( sBlock, nPosition, 1 ) == '"'
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ELSEIF cChar == "'"
|
|
DO WHILE nPosition <= nEnd
|
|
nPosition++
|
|
IF SubStr( sBlock, nPosition, 1 ) == "'"
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ELSEIF cChar == '{'
|
|
nOpen++
|
|
ELSEIF cChar == '}'
|
|
nOpen--
|
|
ENDIF
|
|
|
|
nPosition++
|
|
ENDDO
|
|
|
|
sNested := SubStr( sBlock, nStart, ( nPosition - nStart ) )
|
|
//TraceLog( asBlocks, sNested )
|
|
|
|
aAdd( asBlocks, sNested )
|
|
asBlocks( SubStr( sBlock, nPosition + 1 ), asBlocks )
|
|
|
|
nStart := nPosition
|
|
ENDDO
|
|
|
|
RETURN asBlocks
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_Block( nId )
|
|
|
|
RETURN s_abBlocks[nId]
|
|
|
|
//--------------------------------------------------------------//
|
|
#endif
|
|
|
|
//------------------------------- *** END - RP DOT Functions *** -------------------------------//
|
|
|
|
FUNCTION PP_PreProFile( sSource, sPPOExt, bBlanks, bDirectivesOnly )
|
|
|
|
LOCAL hSource, sBuffer, sLine, nPosition, sExt, cPrev
|
|
LOCAL nLen, nMaxPos, cChar := '', nClose, nBase, nNext, nLine := 0
|
|
LOCAL sRight, nPath := 0, nPaths := Len( s_asPaths ), nNewLine
|
|
LOCAL sPath := "", cError, sPrevFile := s_sFile
|
|
LOCAL sTmp, nLastPosition := 0
|
|
|
|
IF At( '.', sSource ) == 0
|
|
sSource += ".prg"
|
|
ENDIF
|
|
|
|
s_sFile := sSource
|
|
|
|
hSource := FOpen( sSource, 64 )
|
|
IF hSource == -1
|
|
nPath := 1
|
|
WHILE hSource == -1 .AND. nPath <= nPaths
|
|
hSource := FOpen( s_asPaths[nPath] + sSource, 64 )
|
|
nPath++
|
|
ENDDO
|
|
ENDIF
|
|
|
|
IF hSource == -1
|
|
Alert( [ERROR! opening: ]+ "[" + sSource + "]" + [ O/S Error: ] + Str( FError(), 2 ) )
|
|
s_sFile := sPrevFile
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
IF nPath > 1
|
|
sPath := s_asPaths[ nPath - 1 ]
|
|
ENDIF
|
|
|
|
IF hPP == NIL
|
|
IF bBlanks == NIL
|
|
bBlanks := .T.
|
|
ENDIF
|
|
|
|
IF sPPOExt == NIL
|
|
// *** Intentionally invalid handle - saves us from performing an IF on each of the FWrite( hPP, ... )
|
|
hPP := -1
|
|
ELSE
|
|
sExt := SubStr( sSource, RAt( '.', sSource ) )
|
|
IF ! ( sExt == '' )
|
|
hPP := FCreate( StrTran( sSource, sExt, sPPOExt ) )
|
|
ELSE
|
|
hPP := FCreate( sSource + sPPOExt )
|
|
ENDIF
|
|
IF hPP == -1
|
|
Alert( [ERROR! creating '.pp$' file, O/S Error: ] + Str( FError(), 2 ) )
|
|
s_sFile := sPrevFile
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
FWrite( hPP, '#line 1 "' + sPath + Upper( sSource ) + '"' + CRLF )
|
|
bBlanks := .F.
|
|
ENDIF
|
|
|
|
IF bDirectivesOnly == NIL
|
|
bDirectivesOnly := .F.
|
|
ENDIF
|
|
|
|
sBuffer := Space( PP_BUFFER_SIZE )
|
|
sLine := ''
|
|
|
|
IF bCompile
|
|
ErrorBlock( {|oErr| RP_Comp_Err( oErr, sLine, nLine ) } )
|
|
ENDIF
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
WHILE ( nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE ) ) > 2
|
|
nPosition := 1
|
|
nMaxPos := nLen - 1
|
|
|
|
WHILE nPosition < nMaxPos
|
|
|
|
cPrev := cChar
|
|
cChar := SubStr( sBuffer, nPosition, 1 )
|
|
|
|
DO CASE
|
|
CASE ( cChar == '/' .AND. SubStr( sBuffer, nPosition + 1, 1 ) == '*' )
|
|
nPosition++
|
|
|
|
WHILE .T.
|
|
nClose := At( "*/", sBuffer, nPosition + 1 )
|
|
|
|
IF nClose == 0
|
|
nNext := nPosition + 2
|
|
WHILE ( nNext := At( Chr(10), sBuffer, nNext ) ) > 0
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
|
|
nNext++
|
|
ENDDO
|
|
|
|
//FSeek( hSource, -1, 1 )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
IF nLen < 2
|
|
Alert( [ERROR! Unterminated '/**/' ] + "[" + Str( ProcLine() ) + "]" )
|
|
ENDIF
|
|
nMaxPos := nLen - 1
|
|
TraceLog( "***" )
|
|
nPosition := 0
|
|
LOOP
|
|
ELSE
|
|
nNext := nPosition + 1
|
|
nClose -= nPosition
|
|
|
|
WHILE ( nNext := At( Chr(10), sBuffer, nNext ) ) > 0 .AND. ( nNext - nPosition ) <= nClose + 1
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
nNext++
|
|
ENDDO
|
|
|
|
nPosition += ( nClose + 1 )
|
|
cChar := ''
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
CASE ( cChar == '/' .AND. SubStr( sBuffer, nPosition + 1, 1 ) == '/' )
|
|
nPosition++
|
|
WHILE .T.
|
|
nClose := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nClose == 0
|
|
//FSeek( hSource, -1, 1 )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
IF nLen < 2
|
|
BREAK "//"
|
|
ENDIF
|
|
nMaxPos := nLen - 1
|
|
TraceLog( "***" )
|
|
nPosition := 0
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
nLine++
|
|
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
|
|
DropTrailingWS( @sLine, @sRight )
|
|
|
|
IF Right( sLine, 1 ) == ';'
|
|
nLen := Len( sLine )
|
|
sLine := DropTrailingWS( Left( sLine, nLen - 1 ), @sRight )
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
|
|
/* Right after the NL */
|
|
nPosition += ( nClose + 1 )
|
|
|
|
/* Skip leading spaces in continued next line. */
|
|
WHILE SubStr( sBuffer, nPosition, 1 ) $ ' ' + Chr(9)
|
|
nPosition++
|
|
ENDDO
|
|
nPosition--
|
|
//sLine += sRight
|
|
cChar := ' '
|
|
EXIT
|
|
ELSE
|
|
IF LTrim( sLine ) == ''
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
ELSE
|
|
IF bDirectivesOnly == .F. .OR. Left( sLine, 1 ) == '#'
|
|
sLine := PP_PreProLine( sLine, nLine, sPath + sSource )
|
|
IF bBlanks .OR. ! ( sLine == '' )
|
|
FWrite( hPP, sLine + CRLF )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nPosition += ( nClose )
|
|
sLine := ''
|
|
cChar := ''
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
|
|
CASE ( cChar == '&' .AND. SubStr( sBuffer, nPosition + 1, 1 ) == '&' )
|
|
nPosition++
|
|
WHILE .T.
|
|
nClose := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nClose == 0
|
|
//FSeek( hSource, -1, 1 )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
IF nLen < 2
|
|
BREAK "&&"
|
|
ENDIF
|
|
nMaxPos := nLen - 1
|
|
TraceLog( "***" )
|
|
nPosition := 0
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF LTrim( sLine ) == ''
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
ELSE
|
|
IF bDirectivesOnly == .F. .OR. Left( sLine, 1 ) == '#'
|
|
sLine := PP_PreProLine( sLine, nLine, sPath + sSource )
|
|
IF bBlanks .OR. ! ( sLine == '' )
|
|
FWrite( hPP, sLine + CRLF )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
nPosition += ( nClose )
|
|
sLine := ''
|
|
cChar := ''
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
CASE ( cChar == '*' )
|
|
IF LTrim( sLine ) == ''
|
|
WHILE .T.
|
|
nClose := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nClose == 0
|
|
//FSeek( hSource, -1, 1 )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
IF nLen < 2
|
|
BREAK "*"
|
|
ENDIF
|
|
nMaxPos := nLen - 1
|
|
nPosition := 1
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
nPosition += ( nClose )
|
|
sLine := ''
|
|
cChar := ''
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
#ifdef __PLATFORM__UNIX
|
|
CASE ( nLine == 0 .AND. nPosition == 1 .AND. cChar == '#' .AND. SubStr( sBuffer, nPosition + 1, 1 ) == '!' )
|
|
WHILE .T.
|
|
nClose := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nClose == 0
|
|
//FSeek( hSource, -1, 1 )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
IF nLen < 2
|
|
BREAK "*"
|
|
ENDIF
|
|
nMaxPos := nLen - 1
|
|
nPosition := 1
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
nPosition += ( nClose )
|
|
sLine := ''
|
|
cChar := ''
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
#endif
|
|
|
|
CASE ( cChar == '"' )
|
|
WHILE .T.
|
|
nClose := At( '"', sBuffer, nPosition + 1 )
|
|
nNewLine := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nNewLine > 0 .AND. ( nClose == 0 .OR. nClose > nNewLine )
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF nClose == 0
|
|
sTmp := SubStr( sBuffer, nPosition )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
sBuffer := sTmp + sBuffer
|
|
nMaxPos := nLen - 1
|
|
nPosition := 1
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
sLine += SubStr( sBuffer, nPosition, nClose )
|
|
nPosition += ( nClose )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
CASE ( cChar == "'" )
|
|
WHILE .T.
|
|
nClose := At( "'", sBuffer, nPosition + 1 )
|
|
nNewLine := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nNewLine > 0 .AND. ( nClose == 0 .OR. nClose > nNewLine )
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF nClose == 0
|
|
sTmp := SubStr( sBuffer, nPosition )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
sBuffer := sTmp + sBuffer
|
|
nMaxPos := nLen - 1
|
|
nPosition := 1
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
sLine += SubStr( sBuffer, nPosition, nClose )
|
|
nPosition += ( nClose )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
CASE ( cChar == '[' )
|
|
IF LTrim( sLine ) = "#" .OR. ( IsAlpha( cPrev ) .OR. IsDigit( cPrev ) .OR. cPrev $ "])}._" )
|
|
sLine += cChar
|
|
nPosition++
|
|
LOOP
|
|
ENDIF
|
|
|
|
WHILE .T.
|
|
nClose := At( ']', sBuffer, nPosition + 1 )
|
|
nNewLine := At( Chr(10), sBuffer, nPosition + 1 )
|
|
|
|
IF nNewLine > 0 .AND. ( nClose == 0 .OR. nClose > nNewLine )
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF nClose == 0
|
|
sTmp := SubStr( sBuffer, nPosition )
|
|
nLen := FRead( hSource, @sBuffer, PP_BUFFER_SIZE )
|
|
sBuffer := sTmp + sBuffer
|
|
nMaxPos := nLen - 1
|
|
nPosition := 1
|
|
LOOP
|
|
ELSE
|
|
nClose -= nPosition
|
|
sLine += SubStr( sBuffer, nPosition, nClose )
|
|
nPosition += ( nClose )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF nClose > 0 .AND. nClose < nNewLine
|
|
cChar := ']'
|
|
ENDIF
|
|
|
|
CASE cChar == Chr(9)
|
|
sLine += " "
|
|
cChar := ''
|
|
|
|
CASE cChar == Chr(10)
|
|
DropTrailingWS( @sLine, @sRight )
|
|
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
|
|
IF Right( sLine, 1 ) == ';'
|
|
nLen := Len( sLine )
|
|
sLine := DropTrailingWS( Left( sLine, nLen - 1 ), @sRight )
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
|
|
/* Skip leading spaces in continued next line. */
|
|
nPosition++
|
|
WHILE SubStr( sBuffer, nPosition, 1 ) $ ' ' + Chr(9)
|
|
nPosition++
|
|
ENDDO
|
|
nPosition--
|
|
//sLine += sRight
|
|
cChar := ' '
|
|
ELSE
|
|
IF LTrim( sLine ) == ''
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
ELSE
|
|
//sLine += sRight
|
|
IF bDirectivesOnly == .F. .OR. Left( sLine, 1 ) == '#'
|
|
sLine := PP_PreProLine( sLine, nLine, sPath + sSource )
|
|
IF bBlanks .OR. ! ( sLine == '' )
|
|
FWrite( hPP, sLine + CRLF )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
sLine := ''
|
|
cChar := ''
|
|
ENDIF
|
|
|
|
CASE cChar == Chr(13)
|
|
nPosition++
|
|
LOOP
|
|
|
|
CASE cChar == Chr(26)
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF LTrim( sLine ) == ''
|
|
IF bBlanks
|
|
FWrite( hPP, CRLF )
|
|
ENDIF
|
|
ELSE
|
|
IF bDirectivesOnly == .F. .OR. Left( sLine, 1 ) == '#'
|
|
sLine := PP_PreProLine( sLine, nLine, sPath + sSource )
|
|
IF bBlanks .OR. ! ( sLine == '' )
|
|
FWrite( hPP, sLine + CRLF )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
sLine := ''
|
|
cChar := ''
|
|
ENDCASE
|
|
|
|
sLine += cChar
|
|
nPosition++
|
|
|
|
ENDDO
|
|
|
|
FSeek( hSource, -2 + ( nPosition - nMaxPos ), 1 )
|
|
|
|
ENDDO
|
|
|
|
RECOVER USING cError
|
|
IF ValType( cError ) == 'C'
|
|
TraceLog( "No EOL after: ", cError )
|
|
//Alert( [No EOL after: ] + cError )
|
|
ENDIF
|
|
nPosition := nMaxPos + 2
|
|
sLine := ""
|
|
END SEQUENCE
|
|
|
|
//? '"' + SubStr( Left( sBuffer, nLen ), nPosition ) + '"', nLen, nPosition
|
|
|
|
//? "Closing: " + sSource
|
|
|
|
FClose( hSource )
|
|
|
|
//? sSource, nPosition, nMaxPos, nLen, SubStr( sLine, nPosition, 40 )
|
|
//WAIT
|
|
|
|
sLine += SubStr( sBuffer, nPosition, Max( 0, ( nMaxPos + 2 ) - nPosition ) )
|
|
sLine := StrTran( sLine, Chr(09), " " )
|
|
DropTrailingWS( @sLine )
|
|
sLine := StrTran( sLine, Chr(10), '' )
|
|
sLine := StrTran( sLine, Chr(13), '' )
|
|
sLine := StrTran( sLine, Chr(26), '' )
|
|
|
|
/*
|
|
? '=>"' + sLine + '"<=', Asc( Right( sLine, 1 ) ), Asc( Left( sLine, 1 ) )
|
|
FOR Counter := 1 TO Len( RTrim( Ltrim( sLine ) ) )
|
|
? Asc( SubStr( sLine, Counter, 1 ) )
|
|
NEXT
|
|
WAIT
|
|
*/
|
|
|
|
//? "Finished: " + sSource
|
|
|
|
nLine++
|
|
IF bCount
|
|
@ Row(), 0 SAY nLine
|
|
ENDIF
|
|
IF LTrim( sLine ) == ''
|
|
IF bBlanks
|
|
FWrite( hPP, sLine )
|
|
ENDIF
|
|
ELSE
|
|
IF bDirectivesOnly == .F. .OR. Left( sLine, 1 ) == '#'
|
|
sLine := PP_PreProLine( sLine, nLine, sPath + sSource )
|
|
IF bBlanks .OR. ! ( sLine == '' )
|
|
FWrite( hPP, sLine + CRLF )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ProcName(1) == "MAIN"
|
|
FClose( hPP )
|
|
|
|
IF bCCH
|
|
CompileToCCH( sSource )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//? "Done: " + sSource
|
|
//WAIT
|
|
|
|
s_sFile := sPrevFile
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_PreProLine( sLine, nLine, sSource )
|
|
|
|
LOCAL nPendingLines := 0, aPendingLines := {}
|
|
|
|
LOCAL sDirective, bX, sToken, nRule
|
|
LOCAL nNewLineAt, nLines, Counter
|
|
LOCAL sLeft, sPassed, asOutLines := {}, sOut := '', cChar
|
|
LOCAL nLen, nCycles := 0, aDefined := {}, aTranslated := {}, aCommanded := {}
|
|
LOCAL nPosition
|
|
//LOCAL nIdAt, sRight
|
|
LOCAL sError
|
|
LOCAL sBackupLine
|
|
LOCAL sSkipped
|
|
LOCAL bArrayPrefix
|
|
|
|
//TraceLog( sLine )
|
|
|
|
IF Left( LTrim( sLine ), 1 ) != '#'
|
|
nPosition := 0
|
|
WHILE ( nNewLineAt := nAtSkipStr( ';', sLine ) ) > 0
|
|
nPendingLines++
|
|
aSize( aPendingLines, nPendingLines )
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := Left( sLine, nNewLineAt - 1 )
|
|
|
|
//? "Pending #", nPendingLines, Left( sLine, nNewLineAt - 1 ), aPendingLines[nPendingLines]
|
|
sLine := LTrim( SubStr( sLine, nNewLineAt + 1 ) )
|
|
ENDDO
|
|
|
|
IF nPosition > 0
|
|
IF ! Empty( sLine )
|
|
nPendingLines++
|
|
aSize( aPendingLines, nPendingLines )
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := sLine
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, sLine, aPendingLines[nPendingLines]
|
|
sLine := aPendingLines[1]
|
|
aDel( aPendingLines, 1 )
|
|
nPendingLines--
|
|
ENDIF
|
|
ENDIF
|
|
|
|
WHILE .T.
|
|
//? "Processing: '" + sLine + "'"
|
|
//? nPendingLines, nIfDef, IIF( nIfDef > 0, abIfDef[nIfDef] , )
|
|
//WAIT
|
|
|
|
IF nCycles < MAX_CICLES
|
|
nCycles++
|
|
ELSE
|
|
TraceLog( "Circularity!", sLine )
|
|
Alert( [ERROR! Circularity detected ]+"[" + sSource + "(" + LTrim( Str( nLine ) ) + ")]" )
|
|
? sLine
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF sLine == NIL
|
|
sLine := ''
|
|
sLeft := ''
|
|
ELSE
|
|
sLeft := ExtractLeadingWS( @sLine )
|
|
ENDIF
|
|
|
|
IF sLine == ''
|
|
IF nPendingLines > 0
|
|
sLine := aPendingLines[1]
|
|
aDel( aPendingLines, 1 )
|
|
nPendingLines--
|
|
|
|
LOOP
|
|
ENDIF
|
|
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF s_sIncludeFile != NIL
|
|
IF ! Empty( sSource )
|
|
aAdd( asOutLines, "#line " + LTrim( Str( nLine ) ) + ' "' + Upper( sSource ) + '"' )
|
|
ENDIF
|
|
s_sIncludeFile := NIL
|
|
ENDIF
|
|
|
|
//? "Processing: '" + sLine +"'"
|
|
//WAIT
|
|
|
|
IF Left( sLine, 1 ) == '#'
|
|
|
|
sLine := LTrim( SubStr( sLine, 2 ) )
|
|
sDirective := RTrim( Upper( _pp_NextToken( @sLine ) ) )
|
|
|
|
IF ( nLen := Len( sDirective ) ) < 4
|
|
Alert( [ERROR! Unknown directive: ] + "'" + sDirective + "' " + sSource )
|
|
sLine := ''
|
|
LOOP
|
|
ENDIF
|
|
|
|
IF sDirective == Left( "IFDEF", nLen ) .AND. nIfDef > 0 .AND. ! abIfDef[ nIfDef ]
|
|
|
|
nIfDef++
|
|
aSize( abIfDef, nIfDef )
|
|
abIfDef[ nIfDef ] := .F.
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "IFNDEF", nLen ) .AND. nIfDef > 0 .AND. ! abIfDef[ nIfDef ]
|
|
|
|
nIfDef++
|
|
aSize( abIfDef, nIfDef )
|
|
abIfDef[ nIfDef ] := .F.
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == "ELSE" .AND. nIfDef > 1 .AND. ! abIfDef[ nIfDef - 1 ]
|
|
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == "ELSE"
|
|
|
|
abIfDef[ nIfDef ] := ! abIfDef[ nIfDef ]
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "ENDIF", nLen )
|
|
|
|
IF nIfDef > 0
|
|
nIfDef--
|
|
ELSE
|
|
Alert( [ERROR! #endif with no #ifdef in sight] )
|
|
ENDIF
|
|
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ENDIF
|
|
|
|
IF nIfDef > 0 .AND. ! abIfDef[nIfDef]
|
|
//? "Ignored: " + sLine
|
|
sLine := ''
|
|
LOOP
|
|
ENDIF
|
|
|
|
ExtractLeadingWS( @sLine )
|
|
|
|
IF sDirective == Left( "DEFINE", nLen )
|
|
|
|
CompileDefine( sLine )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "ERROR", nLen )
|
|
|
|
Alert( "#error " + sLine )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "UNDEF", nLen )
|
|
|
|
RemoveDefine( sLine )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "IFDEF", nLen )
|
|
|
|
SetIfDef( sLine, .T. )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "IFNDEF", nLen )
|
|
|
|
SetIfDef( sLine, .F. )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( "INCLUDE", nLen )
|
|
|
|
ExtractLeadingWS( @sLine )
|
|
DropTrailingWS( @sLine )
|
|
|
|
// Strip the ""
|
|
sLine := SubStr( sLine, 2, Len( sLine ) - 2 )
|
|
|
|
IF Upper( sLine ) == "HBCLASS.CH"
|
|
IF ! s_lClsLoaded
|
|
s_lClsLoaded := .T.
|
|
InitClsRules()
|
|
InitClsResults()
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [Class #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#ifdef FW
|
|
ELSEIF Upper( sLine ) == "FIVEWIN.CH"
|
|
IF ! s_lFWLoaded
|
|
s_lFWLoaded := .T.
|
|
IF ! s_lClsLoaded
|
|
s_lClsLoaded := .T.
|
|
InitClsRules()
|
|
InitClsResults()
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [Class #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
InitFWRules()
|
|
InitFWResults()
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [FW #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [FW #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [FW #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
#endif
|
|
|
|
#ifdef MINIGUI
|
|
ELSEIF Upper( sLine ) == "MINIGUI.CH"
|
|
IF ! s_lMiniGUILoaded
|
|
s_lMiniGUILoaded := .T.
|
|
IF ! s_lClsLoaded
|
|
s_lClsLoaded := .T.
|
|
InitClsRules()
|
|
InitClsResults()
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [Class #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [Class #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
InitMiniGUIRules()
|
|
InitMiniGUIResults()
|
|
IF Len( aDefRules ) != Len( aDefResults )
|
|
Alert( [MiniGUI #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aTransRules ) != Len( aTransResults )
|
|
Alert( [MiniGUI #TRANSLATE Rules size mismatch] )
|
|
ENDIF
|
|
IF Len( aCommRules ) != Len( aCommResults )
|
|
Alert( [MiniGUI #DEFINE Rules size mismatch] )
|
|
ENDIF
|
|
ENDIF
|
|
#endif
|
|
|
|
ELSE
|
|
PP_PreProFile( sLine ) // Intentionally not using s_sIncludeFile
|
|
|
|
/* Recursion safety - don't use the Static might be modified. */
|
|
s_sIncludeFile := sLine
|
|
ENDIF
|
|
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSE
|
|
|
|
IF Left( sDirective, 1 ) == 'X'
|
|
bX := .T.
|
|
sDirective := SubStr( sDirective, 2 )
|
|
nLen--
|
|
ELSE
|
|
bX := .F.
|
|
ENDIF
|
|
|
|
IF sDirective == Left( 'TRANSLATE', nLen )
|
|
|
|
CompileRule( sLine, aTransRules, aTransResults, bX, .T. )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSEIF sDirective == Left( 'COMMAND', nLen )
|
|
|
|
CompileRule( sLine, aCommRules, aCommResults, bX, .T. )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ELSE
|
|
|
|
Alert( [ERROR! Unknown directive: ] + "'" + sDirective + "' " + sSource )
|
|
sLine := ''
|
|
LOOP
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
#ifdef PP_RECURSIVE
|
|
s_bRecursive := .T.
|
|
#endif
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
IF nIfDef > 0 .AND. ! abIfDef[nIfDef]
|
|
//? "Ignored: " + sLine
|
|
sLine := ''
|
|
BREAK
|
|
ENDIF
|
|
|
|
//TraceLog( sLine )
|
|
|
|
sBackupLine := sLine
|
|
sPassed := ""
|
|
DO WHILE ( sToken := _pp_NextIdentifier( @sLine, @sSkipped ) ) != NIL
|
|
//? "Token = '" + sToken + "'"
|
|
//WAIT
|
|
|
|
sPassed += sSkipped
|
|
|
|
// Save incase MatchRule fails.
|
|
#ifdef USE_C_BOOST
|
|
bArrayPrefix := _pp_GetArrayPrefix()
|
|
#else
|
|
bArrayPrefix := s_bArrayPrefix
|
|
#endif
|
|
|
|
IF ( nRule := MatchRule( sToken, @sLine, aDefRules, aDefResults, .F., .F. ) ) > 0
|
|
//? "DEFINED: " + sLine
|
|
//WAIT
|
|
|
|
aAdd( aDefined, nRule )
|
|
|
|
nPosition := 0
|
|
WHILE ( nNewLineAt := nAtSkipStr( ';', sLine ) ) > 0
|
|
nPendingLines++
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := Left( sLine, nNewLineAt - 1 )
|
|
|
|
IF Left( sLine, 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, aPendingLines[ nPosition ] )
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, Left( sLine, nNewLineAt - 1 ), aPendingLines[nPendingLines]
|
|
sLine := LTrim( SubStr( sLine, nNewLineAt + 1 ) )
|
|
ENDDO
|
|
|
|
IF nPosition == 0
|
|
IF Left( sLine, 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, sLine )
|
|
ENDIF
|
|
|
|
sLine := sLeft + sPassed + sLine
|
|
ELSE
|
|
IF ! Empty( sLine )
|
|
nPendingLines++
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := sLine
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, sLine, aPendingLines[nPendingLines]
|
|
sLine := sLeft + sPassed + aPendingLines[1]
|
|
aDel( aPendingLines, 1 )
|
|
nPendingLines--
|
|
ENDIF
|
|
|
|
// Re-Reprocess the line ...
|
|
BREAK
|
|
ELSE
|
|
// Restore since MatchRule() faild.
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( bArrayPrefix )
|
|
#else
|
|
s_bArrayPrefix := bArrayPrefix
|
|
#endif
|
|
ENDIF
|
|
|
|
sPassed += sToken
|
|
ENDDO
|
|
|
|
// Now process Translates...
|
|
//? "After Defines:", sLine
|
|
|
|
sLine := sBackupLine
|
|
|
|
sPassed := ""
|
|
DO WHILE ( sToken := _pp_NextToken( @sLine ) ) != NIL
|
|
//? "Token = '" + sToken + "'"
|
|
//WAIT
|
|
|
|
// Save incase MatchRule fails.
|
|
#ifdef USE_C_BOOST
|
|
bArrayPrefix := _pp_GetArrayPrefix()
|
|
#else
|
|
bArrayPrefix := s_bArrayPrefix
|
|
#endif
|
|
|
|
IF ( nRule := MatchRule( sToken, @sLine, aTransRules, aTransResults, .F., .T. ) ) > 0
|
|
//? "TRANSLATED: " + sLine
|
|
//WAIT
|
|
|
|
IF sPassed == "" .AND. aScan( aTranslated, nRule ) > 0
|
|
BREAK( "Cyclic directive: #translate " + sToken )
|
|
ELSE
|
|
aAdd( aTranslated, nRule )
|
|
ENDIF
|
|
|
|
nPosition := 0
|
|
WHILE ( nNewLineAt := nAtSkipStr( ';', sLine ) ) > 0
|
|
nPendingLines++
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := Left( sLine, nNewLineAt - 1 )
|
|
|
|
IF Left( aPendingLines[ nPosition ], 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, aPendingLines[ nPosition ] )
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, Left( sLine, nNewLineAt - 1 ), aPendingLines[nPendingLines]
|
|
sLine := SubStr( sLine, nNewLineAt + 1 )
|
|
ENDDO
|
|
|
|
IF nPosition == 0
|
|
IF Left( sLine, 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, sLine )
|
|
ENDIF
|
|
|
|
sLine := sLeft + sPassed + sLine
|
|
ELSE
|
|
IF ! Empty( sLine )
|
|
nPendingLines++
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := sLine
|
|
ENDIF
|
|
//? "Pending #", nPendingLines, sLine, aPendingLines[nPendingLines]
|
|
sLine := sLeft + sPassed + aPendingLines[1]
|
|
aDel( aPendingLines, 1 )
|
|
nPendingLines--
|
|
ENDIF
|
|
|
|
BREAK
|
|
ELSE
|
|
// Restore since MatchRule() faild.
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( bArrayPrefix )
|
|
#else
|
|
s_bArrayPrefix := bArrayPrefix
|
|
#endif
|
|
ENDIF
|
|
|
|
sPassed += sToken
|
|
ENDDO
|
|
|
|
sLine := sPassed //sBackupLine
|
|
|
|
sToken := _pp_NextToken( @sLine )
|
|
|
|
IF sToken != NIL .AND. ( nRule := MatchRule( sToken, @sLine, aCommRules, aCommResults, .T., .T. ) ) > 0
|
|
//? "COMMANDED: " + sLine
|
|
//? '"' + sLeft +'"', '"' + sPassed + '"'
|
|
//WAIT
|
|
|
|
/*
|
|
IF aScan( aCommanded, nRule ) > 0
|
|
Alert( [Cyclic directive: #command ] + sToken )
|
|
BREAK
|
|
ELSE
|
|
aAdd( aCommanded, nRule )
|
|
ENDIF
|
|
*/
|
|
|
|
nPosition := 0
|
|
WHILE ( nNewLineAt := nAtSkipStr( ';', sLine ) ) > 0
|
|
nPendingLines++
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := Left( sLine, nNewLineAt - 1 )
|
|
|
|
IF Left( aPendingLines[ nPosition ], 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, aPendingLines[ nPosition ] )
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, Left( sLine, nNewLineAt - 1 ), aPendingLines[nPosition]
|
|
sLine := LTrim( SubStr( sLine, nNewLineAt + 1 ) )
|
|
ENDDO
|
|
|
|
IF nPosition == 0
|
|
IF Left( sLine, 1 ) == '#' .AND. ! bCompile
|
|
aAdd( asOutLines, sLine )
|
|
ENDIF
|
|
|
|
sLine := sLeft + sLine
|
|
ELSE
|
|
IF ! Empty( sLine )
|
|
nPendingLines++
|
|
|
|
IF nPendingLines > Len( aPendingLines )
|
|
aSize( aPendingLines, nPendingLines )
|
|
ENDIF
|
|
|
|
nPosition++
|
|
aIns( aPendingLines, nPosition )
|
|
aPendingLines[ nPosition ] := sLine
|
|
ENDIF
|
|
|
|
//? "Pending #", nPendingLines, sLine, aPendingLines[nPosition]
|
|
sLine := sLeft + aPendingLines[1]
|
|
aDel( aPendingLines, 1 )
|
|
nPendingLines--
|
|
ENDIF
|
|
|
|
BREAK
|
|
ENDIF
|
|
|
|
aAdd( asOutLines, sLeft + sPassed )
|
|
sLine := ""
|
|
|
|
RECOVER USING sError
|
|
|
|
IF sError != NIL
|
|
Alert( sError )
|
|
BREAK
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
END SEQUENCE
|
|
|
|
ENDDO
|
|
|
|
#ifdef PP_RECURSIVE
|
|
s_bRecursive := .F.
|
|
#endif
|
|
|
|
sOut := ""
|
|
nLines := Len( asOutLines )
|
|
|
|
//? nLines
|
|
//WAIT
|
|
|
|
FOR Counter := 1 TO nLines
|
|
//? Counter, asOutLines[Counter]
|
|
//WAIT
|
|
sOut += asOutLines[Counter]
|
|
IF Counter < nLines
|
|
sOut += ' ;'
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF ! Empty( sOut )
|
|
//? "Returning: " + sOut
|
|
//WAIT
|
|
//TraceLog( sOut )
|
|
ENDIF
|
|
|
|
IF bCompile
|
|
PP_CompileLine( sOut, nLine, s_aProcedures, s_aInitExit, @s_nProcId )
|
|
ENDIF
|
|
|
|
RETURN sOut
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION MatchRule( sKey, sLine, aRules, aResults, bStatement, bUpper )
|
|
|
|
LOCAL Counter, nRules, nRule, aMarkers, xMarker
|
|
LOCAL aMP, nOptional := 0, sAnchor, cType, aList, nMarkerId, nKeyLen
|
|
LOCAL sToken, sWorkLine, sNextAnchor, nMatch, nMatches
|
|
LOCAL sPad, asRevert := {}, bNext, sPreMatch, nLen
|
|
LOCAL sPrimaryStopper, sPreStoppers, sStopper, sMultiStopper, nStopper, nStoppers
|
|
LOCAL nSpaceAt, sStopLine, sNextStopper, nTemp
|
|
LOCAL bRepeatableMatched
|
|
LOCAL aaRevertMarkers := {}
|
|
LOCAL nBackup, nLevel, bTestDependant
|
|
|
|
nRules := Len( aRules )
|
|
|
|
IF nRules == 0 .OR. sKey == NIL .OR. sKey == ""
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
nRule := nRules + 1
|
|
sPad := ''
|
|
|
|
DropTrailingWS( @sKey, @sPad )
|
|
IF bUpper
|
|
sKey := Upper( sKey )
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
? "Matching Key: '" + sKey + "' Line: " + sLine
|
|
WAIT
|
|
ENDIF
|
|
|
|
nKeyLen := Max( Len( sKey ), 4 )
|
|
|
|
WHILE .T.
|
|
|
|
nRule--
|
|
|
|
FOR Counter := nRule TO 1 STEP -1
|
|
IF aRules[Counter][3]
|
|
IF aRules[ Counter ][1] == sKey
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
IF Left( aRules[ Counter ][1], nKeyLen ) == sKey
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF Counter == 0
|
|
IF bDbgMatch
|
|
? "No Prospects, returning: " + sLine
|
|
WAIT
|
|
ENDIF
|
|
|
|
RETURN 0
|
|
ELSE
|
|
nRule := Counter
|
|
ENDIF
|
|
|
|
sWorkLine := sLine
|
|
|
|
IF bDbgMatch
|
|
? "KEY: " + sKey + " Matching Rule: " + Str( nRule, 3 ) + " with: " + sWorkLine
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF aRules[nRule][2] == NIL
|
|
nMatches := 0
|
|
ELSE
|
|
nMatches := Len( aRules[nRule][2] )
|
|
ENDIF
|
|
|
|
IF nMatches == 0
|
|
IF bStatement .AND. ! Empty( sWorkLine )
|
|
IF bDbgMatch
|
|
? "***1 Unmatched remainder: >", sWorkLine, "<"
|
|
? "Statement failed"
|
|
WAIT
|
|
ENDIF
|
|
|
|
LOOP
|
|
ELSEIF bStatement
|
|
sWorkLine := ""
|
|
ENDIF
|
|
|
|
sLine := ( PPOut( aResults[nRule], aMarkers ) + sPad + sWorkLine )
|
|
IF bDbgMatch
|
|
? "TRANSLATED to:", sLine
|
|
WAIT
|
|
ENDIF
|
|
RETURN nRule
|
|
ENDIF
|
|
|
|
aMarkers := aResults[nRule][3]
|
|
IF aMarkers != NIL
|
|
aFill( aMarkers, NIL )
|
|
ENDIF
|
|
|
|
nMatch := 1
|
|
aMP := aRules[nRule][2][1]
|
|
nOptional := 0
|
|
bNext := .F.
|
|
|
|
DO WHILE .T. //! ( sWorkLine == '' )
|
|
|
|
aMP := aRules[nRule][2][nMatch]
|
|
|
|
nMarkerId := aMP[1]
|
|
sAnchor := aMP[3]
|
|
cType := aMP[4]
|
|
aList := aMP[5]
|
|
|
|
/* Might be needed - added 5-27-2001 when debugging oddity in FW CheckBox rule ???
|
|
IF aMP[2] == 0
|
|
nOptional := 0
|
|
aSize( asRevert, 0 )
|
|
ENDIF
|
|
*/
|
|
|
|
/* "Used" non repeatable! */
|
|
IF nMarkerID > 0 .AND. nMarkerID < 1000
|
|
IF aMarkers != NIL .AND. aMarkers[nMarkerID] != NIL
|
|
IF bDbgMatch
|
|
? "Used:", nMatch, nMarkerId, aMarkers[nMarkerId], nOptional, aMP[2]
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF nOptional <> 0 .AND. aMP[2] < 0
|
|
sWorkLine := asRevert[Abs(nOptional)]
|
|
aMarkers := aaRevertMarkers[Abs(nOptional)]
|
|
|
|
IF bDbgMatch
|
|
? "* Reverted: " + asRevert[Abs(nOptional)]
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF aMP[2] > 0 .AND. nMatch < nMatches
|
|
/* Skip all same level optionals to next group. */
|
|
nOptional := Abs( aMP[2] )
|
|
nMatch++
|
|
WHILE nMatch <= nMatches
|
|
aMP := aRules[nRule][2][nMatch]
|
|
IF ( aMP[2] >= 0 ) .AND. ( aMP[2] <= nOptional )
|
|
EXIT
|
|
ENDIF
|
|
nMatch++
|
|
ENDDO
|
|
IF bDbgMatch
|
|
? "Skipped to", nMatch, "of", nMatches, aMP[2], aMP[3], nOptional
|
|
ENDIF
|
|
IF nMatch <= nMatches
|
|
LOOP
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
IF nMatch < nMatches
|
|
nMatch++
|
|
LOOP
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSEIF nMarkerId >= 1000
|
|
nMarkerId -= 1000
|
|
ENDIF
|
|
|
|
/* Do we have to look for a stopper? */
|
|
IF cType != ':' .AND. sAnchor == NIL .AND. ValType( aList ) == 'A'
|
|
|
|
sPreStoppers := sWorkLine
|
|
sPrimaryStopper := _pp_NextToken( @sWorkLine )
|
|
|
|
IF sPrimaryStopper == NIL
|
|
|
|
//? "No primary", sPrimaryStopper
|
|
sWorkLine := sPreStoppers
|
|
|
|
ELSE
|
|
sPrimaryStopper := Upper( RTrim( sPrimaryStopper ) )
|
|
|
|
/* Is it a stopper (the anchor of another acceptable match) ? */
|
|
IF bDbgMatch
|
|
? "Stopper?: '" + sPrimaryStopper +"'"
|
|
ENDIF
|
|
|
|
nStoppers := Len( aList )
|
|
FOR nStopper := 1 TO nStoppers
|
|
|
|
sStopLine := sWorkLine
|
|
sToken := sPrimaryStopper
|
|
sStopper := aList[ nStopper ]
|
|
|
|
sMultiStopper := ''
|
|
WHILE ( nSpaceAt := At( ' ', sStopper ) ) > 0
|
|
sNextStopper := Left( sStopper, nSpaceAt - 1 )
|
|
|
|
IF aRules[nRule][3]
|
|
nLen := 64
|
|
ELSE
|
|
nLen := Max( 4, Len( sToken ) )
|
|
ENDIF
|
|
|
|
//? "Next Stopper: " + sNextStopper, sToken
|
|
IF Left( sNextStopper, nLen ) == sToken
|
|
sMultiStopper += sNextStopper
|
|
sStopper := SubStr( sStopper, nSpaceAt )
|
|
sMultiStopper += ExtractLeadingWS( @sStopper )
|
|
sToken := _pp_NextToken( @sStopLine )
|
|
sToken := Upper( RTrim( sToken ) )
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF aRules[nRule][3]
|
|
nLen := 64
|
|
ELSE
|
|
nLen := Max( 4, Len( sToken ) )
|
|
ENDIF
|
|
|
|
IF Left( sStopper, nLen ) == sToken
|
|
sMultiStopper += sStopper
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF nStopper <= nStoppers
|
|
|
|
IF bDbgMatch
|
|
? "Found stopper: " + sMultiStopper
|
|
ENDIF
|
|
|
|
sWorkLine := sStopLine
|
|
|
|
/* Current level */
|
|
nOptional := Abs( aMP[2] )
|
|
|
|
/* Commented out 07-21-2001 Seems unneeded. */
|
|
#ifdef WHY_REWIND
|
|
/* Rewind to beging of same level and then search for the stopper match */
|
|
WHILE nMatch > 1
|
|
nMatch--
|
|
IF Abs( aRules[nRule][2][nMatch][2] ) < nOPtional
|
|
nMatch++
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
// Added June-1-2003 (yes I know it's a commented section.)
|
|
IF nMatch == 1 .AND. aRules[nRule][2][nMatch][2] == 0
|
|
nMatch++
|
|
ENDIF
|
|
#endif
|
|
|
|
/* Now search for the stopper. */
|
|
WHILE nMatch < nMatches
|
|
nMatch++
|
|
aMP := aRules[nRule][2][nMatch]
|
|
|
|
IF aMP[3] == NIL .AND. aMP[4] == ':'
|
|
#ifdef __XHARBOUR__
|
|
IF aScan( aMP[5], sMultiStopper, , , .T. ) > 0
|
|
#else
|
|
IF aScan( aMP[5], {|sWord| sWord == sMultiStopper } ) > 0
|
|
#endif
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
IF aMP[2] >= 0 .AND. aMP[2] <= nOptional .AND. aMP[3] == sMultiStopper
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
|
|
nOptional := 0
|
|
LOOP
|
|
|
|
ELSE
|
|
|
|
sWorkLine := sPreStoppers
|
|
sMultiStopper := NIL
|
|
|
|
IF bDbgMatch
|
|
? sToken, "Not a stopper."
|
|
? "Reverted: ", sWorkLine
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
WAIT
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
sNextAnchor := NIL
|
|
nTemp := 1
|
|
WHILE nMatch + nTemp <= nMatches
|
|
IF aRules[Counter][2][nMatch + nTemp][2] <= 0 // Non NEW Optional ONLY!
|
|
sNextAnchor := aRules[Counter][2][nMatch + nTemp][3]
|
|
EXIT
|
|
ENDIF
|
|
nTemp++
|
|
ENDDO
|
|
|
|
IF bDbgMatch
|
|
IF sAnchor == NIL
|
|
? nMatch, 'of', nMatches, "NO Anchore!", nMarkerId, nOptional, aMP[2], sMultiStopper, sNextAnchor
|
|
ELSE
|
|
? nMatch, 'of', nMatches, "Searching for Anchore: '" + sAnchor + "'", nMarkerId, nOptional, aMP[2], sMultiStopper, sNextAnchor
|
|
ENDIF
|
|
WAIT
|
|
ENDIF
|
|
|
|
sToken := NIL
|
|
xMarker := NIL
|
|
sPreMatch := sWorkLine
|
|
|
|
IF ( sAnchor == NIL .OR. sMultiStopper != NIL .OR. ;
|
|
( ( ( sToken := _pp_NextToken( @sWorkLine ) ) != NIL .AND. ( DropTrailingWS( @sToken, @sPad ), nLen := Max( 4, Len( sToken ) ), Upper( sToken ) == Left( sAnchor, nLen ) ) ) ) ) ;
|
|
.AND. ( nMarkerId == 0 .OR. ( sAnchor == NIL .AND. sMultiStopper != NIL ) .OR. ( ( xMarker := NextExp( @sWorkLine, cType, aList, sNextAnchor, aRules[nRule][3] ) ) != NIL ) )
|
|
|
|
IF sMultiStopper != NIL
|
|
IF sAnchor == NIL
|
|
xMarker := sMultiStopper
|
|
ELSE
|
|
sToken := sMultiStopper
|
|
ENDIF
|
|
IF bDbgMatch
|
|
? "Using MultiStopper: " + sMultiStopper
|
|
ENDIF
|
|
sMultiStopper := NIL
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
? "sKey =", sKey, "Anchor =", sAnchor, "nMarkerId =", nMarkerId, "sToken =", sToken, "xMarker =", xMarker, "<="
|
|
ENDIF
|
|
|
|
IF ValType( xMarker ) == 'C'
|
|
DropTrailingWS( @xMarker )
|
|
ENDIF
|
|
|
|
IF aMP[2] > 0 .AND. nOptional < 0
|
|
|
|
nOptional := aMP[2]
|
|
|
|
/* Save. */
|
|
aSize( asRevert, nOptional )
|
|
asRevert[nOptional] := sPreMatch
|
|
aSize( aaRevertMarkers, nOptional )
|
|
aaRevertMarkers[nOptional] := aClone( aMarkers )
|
|
|
|
IF bDbgMatch
|
|
? "*** Saved: " + asRevert[nOptional]
|
|
WAIT
|
|
ENDIF
|
|
|
|
ELSEIF aMP[2] > 0 .AND. nOptional >= 0 .AND. aMP[2] >= nOptional
|
|
|
|
nOptional := aMP[2]
|
|
|
|
/* Save. */
|
|
aSize( asRevert, nOptional )
|
|
asRevert[nOptional] := sPreMatch
|
|
aSize( aaRevertMarkers, nOptional )
|
|
aaRevertMarkers[nOptional] := aClone( aMarkers )
|
|
|
|
IF bDbgMatch
|
|
? "*** Saved: " + asRevert[nOptional]
|
|
WAIT
|
|
ENDIF
|
|
|
|
// Group started with nested optional, this is the 1st element in current level.
|
|
ELSEIF aMP[2] < 0 .AND. Len( asRevert ) >= - aMP[2] .AND. asRevert[ - aMP[2] ] == NIL
|
|
|
|
nOptional := - aMP[2]
|
|
|
|
/* Save. */
|
|
//aSize( asRevert, nOptional )
|
|
asRevert[nOptional] := sPreMatch
|
|
//aSize( aaRevertMarkers, nOptional )
|
|
aaRevertMarkers[nOptional] := aClone( aMarkers )
|
|
|
|
IF bDbgMatch
|
|
? "*** Saved: " + asRevert[nOptional]
|
|
WAIT
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF nMarkerId > 0
|
|
/* Repeatable. */
|
|
IF aMP[1] > 1000
|
|
IF aMarkers[nMarkerId] == NIL
|
|
aMarkers[nMarkerId] := {}
|
|
ENDIF
|
|
aAdd( aMarkers[nMarkerId], xMarker )
|
|
|
|
IF bDbgMatch
|
|
? nMarkerId, "Repetable added: ", xMarker, Len( aMarkers[nMarkerId] )
|
|
ENDIF
|
|
ELSE
|
|
IF ValType( aMarkers ) != 'A' .OR. nMarkerId > Len( aMarkers )
|
|
TraceLog( "Oops", nRule, sKey, nMarkerId, ValType( aMarkers ), IIF( ValType( aMarkers ) == 'A', Len( aMarkers ) , "No array" ) )
|
|
Alert( [Unexpected case ] + "[" + Str( Procline() ) + "]" )
|
|
ELSE
|
|
aMarkers[nMarkerId] := xMarker
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// *** This complete IF section added 2002-May-11, the bug this solved might be fixed otherwise ***
|
|
// EOL - Rule will match if rest is OPTIONAL.
|
|
IF Empty( sWorkLine )
|
|
IF bDbgMatch
|
|
? "End of Input."
|
|
ENDIF
|
|
|
|
// Remainder may be optional.
|
|
nBackup := nMatch
|
|
bTestDependant := .T.
|
|
nTemp := Abs( aMP[2] )
|
|
WHILE ++nMatch <= nMatches
|
|
nLevel := aRules[nRule][2][nMatch][2]
|
|
|
|
// Non Optional.
|
|
IF nLevel == 0
|
|
EXIT
|
|
ELSEIF nLevel > 0 .AND. nLevel <= nTemp
|
|
// Head of New Adjucent or Outer group - Adjust stop condition...
|
|
nTemp := nLevel
|
|
bTestDependant := .F.
|
|
LOOP
|
|
ELSEIF nLevel < 0 .AND. ( ( ( - nLevel ) < nTemp ) .OR. ( bTestDependant .AND. ( ( - nLevel ) == nTemp ) ) )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF bDbgMatch
|
|
? "Skipped optionals to:", nMatch, "of:", nMatches
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF nMatch > nMatches
|
|
sLine := ( PPOut( aResults[nRule], aMarkers ) + sPad + sWorkLine )
|
|
IF bDbgMatch
|
|
? "Skipped optionals and TRANSLATED to:", sLine
|
|
WAIT
|
|
ENDIF
|
|
RETURN nRule
|
|
ELSE
|
|
// Must consider this match a failure because End of input but NOT end of rule - REVERT if OPTIONAL.
|
|
IF aMP[2] <> 0
|
|
nMatch := nBackup
|
|
|
|
/* Skip all same level optionals to next group. */
|
|
nTemp := Abs( aMP[2] )
|
|
WHILE nMatch < nMatches
|
|
nMatch++
|
|
aMP := aRules[nRule][2][nMatch]
|
|
IF ( aMP[2] < 0 ) .AND. ( Abs( aMP[2] ) < nTemp )
|
|
EXIT
|
|
ENDIF
|
|
IF ( aMP[2] >= 0 ) .AND. ( aMP[2] <= nTemp )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF bDbgMatch
|
|
? "Skipped same level to:", nMatch
|
|
ENDIF
|
|
|
|
// Because will LOOP
|
|
//nMatch--
|
|
|
|
/* Revert. */
|
|
IF nOptional <> 0 /*.AND. aMP[2] < 0*/ .AND. asRevert[Abs(nOptional)] != NIL
|
|
sWorkLine := asRevert[Abs(nOptional)]
|
|
aMarkers := aaRevertMarkers[Abs(nOptional)]
|
|
|
|
IF bDbgMatch
|
|
? "* Reverted: " + asRevert[Abs(nOptional)]
|
|
WAIT
|
|
ENDIF
|
|
ELSE
|
|
sWorkLine := sPreMatch
|
|
IF bDbgMatch
|
|
? "*** Reclaimed token/marker: " + sWorkLine
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
LOOP
|
|
ELSE
|
|
IF bDbgMatch
|
|
? "*** Match Failed - Not Revertable and Not End of Rule, but End of Input ***"
|
|
WAIT
|
|
ENDIF
|
|
|
|
bNext := .T.
|
|
EXIT
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF aMP[2] <> 0
|
|
IF bDbgMatch
|
|
? "Optional"
|
|
ENDIF
|
|
|
|
/* We reached the end of current optional group - Rewind, to 1st optional at same level. */
|
|
IF nMatch == nMatches .OR. ( aRules[nRule][2][nMatch + 1][2] >= 0 .AND. aRules[nRule][2][nMatch + 1][2] <= Abs( aMP[2] ) ) .OR. ;
|
|
( aRules[nRule][2][nMatch + 1][2] < 0 .AND. abs( aRules[nRule][2][nMatch + 1][2] ) < Abs( aMP[2] ) )
|
|
|
|
/* Current level */
|
|
nOptional := Abs( aMP[2] )
|
|
|
|
IF Len( asRevert ) >= nOptional
|
|
asRevert[ nOptional ] := NIL
|
|
ENDIF
|
|
|
|
IF nMatch > 1
|
|
// Now rewind.
|
|
WHILE nMatch > 1
|
|
nMatch--
|
|
IF Abs( aRules[nRule][2][nMatch][2] ) < nOPtional
|
|
nMatch++
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
// Added June-1-2003
|
|
IF nMatch == 1 .AND. aRules[nRule][2][nMatch][2] == 0
|
|
nMatch++
|
|
ENDIF
|
|
|
|
nOptional := 0
|
|
|
|
IF bDbgMatch
|
|
? "Rewinded to:", nMatch
|
|
ENDIF
|
|
|
|
LOOP
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF nMatch == nMatches
|
|
IF bStatement .AND. ! Empty( sWorkLine )
|
|
bNext := .T.
|
|
|
|
IF bDbgMatch
|
|
? "Key: >", sKey, "< ***2 Unmatched remainder: >", sWorkLine, "<"
|
|
? "Statement failed, try next rule...'"
|
|
WAIT
|
|
ENDIF
|
|
|
|
sWorkLine := ""
|
|
EXIT
|
|
ELSEIF bStatement
|
|
sWorkLine := ""
|
|
ENDIF
|
|
|
|
sLine := ( PPOut( aResults[nRule], aMarkers ) + sPad + sWorkLine )
|
|
IF bDbgMatch
|
|
? "TRANSLATED to:", sLine
|
|
WAIT
|
|
ENDIF
|
|
RETURN nRule
|
|
ELSE
|
|
IF bDbgMatch
|
|
? "Accepted:", sToken, xMarker
|
|
ENDIF
|
|
|
|
nMatch++
|
|
LOOP
|
|
ENDIF
|
|
|
|
ELSE /* Match failed. */
|
|
|
|
IF bDbgMatch
|
|
? "NO MATCH:", nMatch, "of", nMatches, sAnchor, sToken, nMarkerId, xMarker, nOptional, aMP[2]
|
|
ENDIF
|
|
|
|
// Optional
|
|
IF aMP[2] <> 0
|
|
/* Revert. */
|
|
IF nOptional <> 0 .AND. aMP[2] < 0 .AND. asRevert[Abs(nOptional)] != NIL
|
|
sWorkLine := asRevert[Abs(nOptional)]
|
|
aMarkers := aaRevertMarkers[Abs(nOptional)]
|
|
|
|
IF bDbgMatch
|
|
? "* Reverted: " + asRevert[Abs(nOptional)]
|
|
WAIT
|
|
ENDIF
|
|
ELSE
|
|
sWorkLine := sPreMatch
|
|
IF bDbgMatch
|
|
? "*** Reclaimed token/marker: " + sWorkLine
|
|
WAIT
|
|
ENDIF
|
|
|
|
/* Commented out 07-21-2001 - Seems wrong !
|
|
IF aMP[1] > 1000 .AND. xMarker != NIL
|
|
IF bDbgMatch
|
|
? "Removed repeatble: " + aTail( aMarkers[ aMP[1] - 1000 ] )
|
|
WAIT
|
|
ENDIF
|
|
aSize( aMarkers[ aMP[1] - 1000 ], Len( aMarkers[ aMP[1] - 1000 ] ) - 1 )
|
|
ENDIF
|
|
*/
|
|
ENDIF
|
|
|
|
// TODO: rethink this! Should only match if failure becuase we ran out of input and OPTIONAL. ???
|
|
|
|
/* Optional (last) didn't match - Rule can still match. */
|
|
IF nMatch == nMatches
|
|
IF bStatement .AND. ! Empty( sWorkLine )
|
|
/* Top of nested optional. */
|
|
IF aMP[2] > 1
|
|
/* Upper level optional should be accepted - rewind to top of parent group. */
|
|
nOptional--
|
|
WHILE nMatch > 1
|
|
nMatch--
|
|
IF Abs( aRules[nRule][2][nMatch][2] ) < nOPtional
|
|
nMatch++
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
// Added June-1-2003
|
|
IF nMatch == 1 .AND. aRules[nRule][2][nMatch][2] == 0
|
|
nMatch++
|
|
ENDIF
|
|
|
|
nOptional := 0
|
|
|
|
IF bDbgMatch
|
|
? "1 - Nested last optional, Rewinded to:", nMatch
|
|
ENDIF
|
|
|
|
LOOP
|
|
ENDIF
|
|
|
|
bNext := .T.
|
|
|
|
IF bDbgMatch
|
|
? "***3 Unmatched remainder: >", sWorkLine, "<"
|
|
? "Statement failed, try next rule..."
|
|
WAIT
|
|
ENDIF
|
|
|
|
EXIT
|
|
ELSEIF bStatement
|
|
sWorkLine := ""
|
|
ENDIF
|
|
|
|
sLine := ( PPOut( aResults[nRule], aMarkers ) + sWorkLine )
|
|
IF bDbgMatch
|
|
? "TRANSLATED to:", sLine
|
|
WAIT
|
|
ENDIF
|
|
RETURN nRule
|
|
ELSE
|
|
/* Top of Nested optional, maybe last in its parrent group. */
|
|
IF aMP[2] > 1
|
|
/* Skip dependents and nested optionals, if any. */
|
|
nTemp := aMP[2]
|
|
nMatch++
|
|
WHILE ( nMatch <= nMatches ) .AND. ( Abs( aRules[nRule][2][nMatch][2] ) >= nTemp )
|
|
nMatch++
|
|
ENDDO
|
|
|
|
// End of rule or reached end of parrent group.
|
|
IF nMatch > nMatches .OR. aRules[nRule][2][nMatch][2] >= 0 .OR. nTemp + aRules[nRule][2][nMatch][2] > 1
|
|
/* Upper level optional should be accepted - rewind to top of parent group. */
|
|
nOptional--
|
|
WHILE nMatch > 1
|
|
nMatch--
|
|
IF Abs( aRules[nRule][2][nMatch][2] ) < nOPtional
|
|
nMatch++
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
// Added June-1-2003
|
|
IF nMatch == 1 .AND. aRules[nRule][2][nMatch][2] == 0
|
|
nMatch++
|
|
ENDIF
|
|
|
|
nOptional := 0
|
|
|
|
IF bDbgMatch
|
|
? "2 - Nested last optional, Rewinded to:", nMatch
|
|
ENDIF
|
|
|
|
LOOP
|
|
ELSEIF aRules[nRule][2][nMatch][2] < 0
|
|
// More optionals of the upper level - try to continue matching.
|
|
IF bDbgMatch
|
|
? "Resuming optionals of upper group at match:", nMatch
|
|
ENDIF
|
|
|
|
LOOP
|
|
ELSE
|
|
// Will proceed below (skip to next group) ...
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
/* Skip all same level optionals to next group. */
|
|
nOptional := Abs( aMP[2] )
|
|
bRepeatableMatched := aMP[1] > 1000 .AND. aMarkers[ aMP[1] - 1000 ] != NIL //.AND. Len( aMarkers[ aMP[1] - 1000 ] ) > 0
|
|
WHILE nMatch < nMatches
|
|
nMatch++
|
|
aMP := aRules[nRule][2][nMatch]
|
|
IF ( aMP[2] < 0 ) .AND. ( Abs( aMP[2] ) < nOptional )
|
|
EXIT
|
|
ENDIF
|
|
IF ( aMP[2] >= 0 ) .AND. ( aMP[2] <= nOptional )
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
// We should NOT consider this a failure, continue matching...
|
|
IF bRepeatableMatched
|
|
IF bDbgMatch
|
|
? "Repeatable previously Matched - Skipped to", nMatch, "of", nMatches, aMP[2], aMP[3], nOptional
|
|
ENDIF
|
|
|
|
nOptional := aMP[2]
|
|
LOOP
|
|
ELSE
|
|
IF bDbgMatch
|
|
? "Partial not allowed - Skipped to", nMatch, "of", nMatches, aMP[2], aMP[3], nOptional
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nMatch == nMatches
|
|
|
|
IF ( aMP[2] >= 0 ) .AND. ( aMP[2] <= Abs( nOptional ) )
|
|
/* Ok. */
|
|
ELSEIF ( aMP[2] < 0 ) .AND. ( Abs( aMP[2] ) < Abs( nOptional ) ) // Added 07-21-2001 ???
|
|
/* Ok. */
|
|
ELSE
|
|
IF bDbgMatch
|
|
? "Reached End of Rule"
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
? "Skipped to", nMatch, "of", nMatches, aMP[2], aMP[3], nOptional
|
|
ENDIF
|
|
|
|
nOptional := aMP[2]
|
|
LOOP
|
|
ENDIF
|
|
ELSE
|
|
IF bDbgMatch
|
|
? "Match failed, try next rule..."
|
|
WAIT
|
|
ENDIF
|
|
|
|
bNext := .T.
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
IF bNext
|
|
IF bDbgMatch
|
|
? "NEXT Rule requested."
|
|
ENDIF
|
|
|
|
LOOP
|
|
ELSE
|
|
IF bStatement .AND. ! Empty( sWorkLine )
|
|
IF bDbgMatch
|
|
? "***4 Unmatched remainder: >", sWorkLine, "<"
|
|
? "Statement failed, try next rule..."
|
|
WAIT
|
|
ENDIF
|
|
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
? "EOL."
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF nMatch < nMatches
|
|
|
|
IF bDbgMatch
|
|
? nMatch, "of:", nMatches, "Checking if Rule remainder is optional."
|
|
ENDIF
|
|
|
|
/* Current and remainder of MP NOT optional. */
|
|
IF aMP[2] == 0
|
|
IF bDbgMatch
|
|
? "NON Optional failed, Statement failed, try next rule..."
|
|
WAIT
|
|
ENDIF
|
|
LOOP
|
|
ELSE
|
|
// Failed match is OPTIONAL.
|
|
|
|
// defed out 2001-08-15 appear un-needed beacuse optional would have been ignored in favor of stopper.
|
|
#ifdef NOT_NEEDED
|
|
|
|
IF nOptional <> 0 .AND. aMP[2] < 0
|
|
sWorkLine := asRevert[Abs(nOptional)]
|
|
aMarkers := aaRevertMarkers[Abs(nOptional)]
|
|
|
|
IF bDbgMatch
|
|
? "*** Reverted: " + asRevert[nOptional]
|
|
ENDIF
|
|
ELSE
|
|
sWorkLine := sPreMatch
|
|
|
|
IF bDbgMatch
|
|
? "*** Reclaimed token/marker: " + sWorkLine
|
|
ENDIF
|
|
|
|
/* Commented out 07-21-2001 - Seems wrong !
|
|
IF aMP[1] > 1000 .AND. xMarker != NIL
|
|
IF bDbgMatch
|
|
? "Removed repeatble: " + aTail( aMarkers[ aMP[1] - 1000 ] )
|
|
WAIT
|
|
ENDIF
|
|
aSize( aMarkers[ aMP[1] - 1000 ], Len( aMarkers[ aMP[1] - 1000 ] ) - 1 )
|
|
ENDIF
|
|
*/
|
|
ENDIF
|
|
|
|
#endif
|
|
|
|
IF bDbgMatch
|
|
WAIT
|
|
ENDIF
|
|
|
|
//nOptional := aMP[2] // Commented 2001-08-15
|
|
WHILE nMatch < nMatches
|
|
nMatch++
|
|
aMP := aRules[nRule][2][nMatch]
|
|
IF ( aMP[2] == 0 )
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF bDbgMatch
|
|
? "Skipped:", nMatch, aMP[2], aMP[3]
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF ( aMP[2] == 0 )
|
|
IF bDbgMatch
|
|
? "Statement failed, try next rule..."
|
|
WAIT
|
|
ENDIF
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sLine := ( PPOut( aResults[nRule], aMarkers ) )
|
|
IF bDbgMatch
|
|
? "TRANSLATED to:", sLine
|
|
WAIT
|
|
ENDIF
|
|
RETURN nRule
|
|
|
|
ENDDO
|
|
|
|
Alert( [ERROR! Logic failure] )
|
|
|
|
RETURN 0
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifndef USE_C_BOOST
|
|
|
|
STATIC FUNCTION _pp_NextToken( sLine, lDontRecord )
|
|
|
|
LOCAL sReturn, Counter, nLen, nClose
|
|
LOCAL s1, s2, s3
|
|
LOCAL sDigits
|
|
LOCAL sToken
|
|
|
|
//TraceLog( sLine, lDontRecord )
|
|
|
|
IF Empty( sLine )
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
// *** To be removed after final testing !!!
|
|
IF Left( sLine, 1 ) == ' '
|
|
TraceLog( "!!!Left Pad: " + sLine )
|
|
Alert( [!!!Left Pad: ] + sLine )
|
|
sLine := LTrim( sLine )
|
|
ENDIF
|
|
|
|
nLen := Len( sLine )
|
|
s1 := Left( sLine, 1 )
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
IF nLen >= 2
|
|
|
|
s2 := Left( sLine, 2 )
|
|
|
|
IF s2 $ "++\--\->\:=\==\!=\<>\>=\<=\+=\-=\*=\^=\**\/=\%="
|
|
|
|
sReturn := s2
|
|
|
|
BREAK
|
|
|
|
ELSEIF s2 == "[["
|
|
|
|
nClose := AT( ']]', sLine )
|
|
IF nClose == 0
|
|
//Alert( "ERROR! [_pp_NextToken()] Unterminated '[[' at: " + sLine + "[" + Str( ProcLine() ) + "]" )
|
|
sReturn := "[" // Clipper does NOT consider '[[' a single token
|
|
ELSE
|
|
sReturn := Left( sLine, nClose + 2 )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IsAlpha( s1 ) .OR. s1 == '_'
|
|
|
|
sReturn := s1
|
|
FOR Counter := 2 TO nLen
|
|
s1 := SubStr( sLine, Counter, 1 )
|
|
IF ! ( IsAlpha( s1 ) .OR. IsDigit( s1 ) .OR. s1 == "_" )
|
|
EXIT
|
|
ENDIF
|
|
sReturn += s1
|
|
NEXT
|
|
|
|
BREAK
|
|
|
|
ELSEIF IsDigit( s1 )
|
|
|
|
sReturn := s1
|
|
FOR Counter := 2 TO nLen
|
|
s1 := SubStr( sLine, Counter, 1 )
|
|
IF ! ( IsDigit( s1 ) )
|
|
EXIT
|
|
ENDIF
|
|
sReturn += s1
|
|
NEXT
|
|
|
|
// Consume the point (and subsequent digits) only if digits follow...
|
|
IF s1 == '.'
|
|
sDigits := ""
|
|
DO WHILE IsDigit( ( s1 := SubStr( sLine, ++Counter, 1 ) ) )
|
|
sDigits += s1
|
|
ENDDO
|
|
|
|
IF ! ( sDigits == "" )
|
|
sReturn += ( '.' + sDigits )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Either way we are done.
|
|
BREAK
|
|
|
|
ELSEIF s1 == '.'
|
|
|
|
sDigits := ""
|
|
FOR Counter := 2 TO nLen
|
|
s1 := SubStr( sLine, Counter, 1 )
|
|
IF ! ( IsDigit( s1 ) )
|
|
EXIT
|
|
ENDIF
|
|
|
|
sDigits+= s1
|
|
NEXT
|
|
|
|
// Must have accumulated decimal digits.
|
|
IF ! ( sDigits == "" )
|
|
sReturn := '.' + sDigits
|
|
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF nLen >= 5 .AND. SubStr( sLine, 5, 1 ) == '.'
|
|
|
|
s3 := Upper( SubStr( sLine, 2, 3 ) )
|
|
IF s3 == 'AND'
|
|
|
|
sReturn := ".AND."
|
|
|
|
BREAK
|
|
|
|
ELSEIF s3 == 'NOT'
|
|
|
|
sReturn := "!"
|
|
/* Skip the unaccounted letters ( .NOT. <-> ! ) */
|
|
sLine := SubStr( sLine, 5 )
|
|
|
|
BREAK
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF nLen >= 4 .AND. SubStr( sLine, 4, 1 ) == '.' .AND. Upper( SubStr( sLine, 2, 2 ) ) == 'OR'
|
|
|
|
sReturn := ".OR."
|
|
|
|
BREAK
|
|
|
|
ENDIF
|
|
|
|
IF nLen >= 3 .AND. SubStr( sLine, 3, 1 ) == '.' .AND. Upper( SubStr( sLine, 2, 1 ) ) $ "TF"
|
|
|
|
sReturn := Upper( Left( sLine, 3 ) )
|
|
|
|
BREAK
|
|
|
|
ENDIF
|
|
|
|
sReturn := '.'
|
|
|
|
BREAK
|
|
|
|
ELSEIF s1 == '"'
|
|
|
|
nClose := AT( '"', sLine, 2 )
|
|
IF nClose == 0
|
|
//Alert( 'ERROR! [_pp_NextToken()] Unterminated ["] at: ' + sLine )
|
|
sReturn := '"'
|
|
ELSE
|
|
sReturn := Left( sLine, nClose )
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF s1 == "'"
|
|
|
|
nClose := AT( "'", sLine, 2 )
|
|
IF nClose == 0
|
|
//Alert( "ERROR! [_pp_NextToken()] Unterminated ['] at: " + sLine )
|
|
sReturn := "'"
|
|
ELSE
|
|
sReturn := SubStr( sLine, 2, nClose - 2 )
|
|
IF ! ( '"' $ sReturn )
|
|
sReturn := '"' + sReturn + '"'
|
|
ELSE
|
|
sReturn := "'" + sReturn + "'"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF s1 == '['
|
|
|
|
IF s_bArrayPrefix
|
|
sReturn := '['
|
|
ELSE
|
|
nClose := AT( ']', sLine )
|
|
IF nClose == 0
|
|
//Alert( "ERROR! [_pp_NextToken()] Unterminated '[' at: " + sLine + "[" + Str( ProcLine() ) + "]" )
|
|
sReturn := '['
|
|
ELSE
|
|
sReturn := SubStr( sLine, 2, nClose - 2 )
|
|
IF ! ( '"' $ sReturn )
|
|
sReturn := '"' + sReturn + '"'
|
|
ELSEIF ! ( "'" $ sReturn )
|
|
sReturn := "'" + sReturn + "'"
|
|
ELSE
|
|
sReturn := '[' + sReturn + ']'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ELSEIF s1 == "\"
|
|
|
|
sReturn := s2
|
|
|
|
BREAK
|
|
|
|
ELSEIF s1 $ "+-*/:=^!&()[]{}@,|<>#%?$"
|
|
|
|
sReturn := s1
|
|
|
|
BREAK
|
|
|
|
ELSE
|
|
|
|
TraceLog( "Unexpected case: " + sLine )
|
|
Alert( [Unexpected case: ] + sLine )
|
|
sReturn := sLine
|
|
|
|
ENDIF
|
|
|
|
END SEQUENCE
|
|
|
|
sLine := SubStr( sLine, Len( sReturn ) + 1 )
|
|
|
|
IF lDontRecord == .F.
|
|
IF Left( sReturn, 1 ) == '.' .AND. Len( sReturn ) > 1 .AND. Right( sReturn, 1 ) == '.'
|
|
s_bArrayPrefix := .F.
|
|
ELSE
|
|
s1 := Right( sReturn, 1 )
|
|
|
|
IF Upper( s1 ) == 'R'
|
|
sToken := Upper( sReturn )
|
|
IF sToken == "RETU" .OR. sToken == "RETUR" .OR. sToken == "RETURN"
|
|
s_bArrayPrefix := .F.
|
|
ELSE
|
|
s_bArrayPrefix := .T.
|
|
ENDIF
|
|
ELSE
|
|
s_bArrayPrefix := ( IsAlpha( s1 ) .OR. IsDigit( s1 ) .OR. s1 $ "])}._" )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sReturn += ExtractLeadingWS( @sLine )
|
|
|
|
#ifdef PP_RECURSIVE
|
|
|
|
IF s_bRecursive
|
|
s1 := Left( sReturn, 1 )
|
|
IF ( IsAlpha( s1 ) .OR. s1 == '_' ) .AND. MatchRule( sReturn, @sLine, aDefRules, aDefResults, .F., .F. ) > 0
|
|
RETURN _pp_NextToken( @sLine, .T. )
|
|
ENDIF
|
|
|
|
IF MatchRule( sReturn, @sLine, aTransRules, aTransResults, .F., .T. ) > 0
|
|
//? '>', sLine, '<'
|
|
RETURN _pp_NextToken( @sLine, .T. )
|
|
ENDIF
|
|
|
|
//? sReturn, "not defined/translated."
|
|
//WAIT
|
|
ENDIF
|
|
|
|
#endif
|
|
|
|
//TraceLog( "TOKEN = >" + sReturn + "<", sLine, s_bArrayPrefix )
|
|
|
|
RETURN sReturn
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION NextExp( sLine, cType, aWords, sNextAnchor, bX )
|
|
|
|
LOCAL sExp, sTemp, Counter, sPad, sToken, sList
|
|
LOCAL sNextLine, sNextToken, sLastToken, sJustToken, sJustNext, cLastChar
|
|
LOCAL s1, s2, s4, s5, sNext1, sNext2, sNext4, sNext5, nLen, nNextLen
|
|
LOCAL sWorkLine, sPrimaryStopper, nStoppers, nStopper, sStopLine, sStopper
|
|
LOCAL sMultiStopper, nSpaceAt, sNextStopper, cChar
|
|
LOCAL aExp
|
|
|
|
IF Empty( sLine )
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
//TraceLog( "*** Start", cType, sLine, sNextAnchor, bX )
|
|
|
|
DO CASE
|
|
CASE cType == '<'
|
|
/* No prep needed */
|
|
|
|
CASE cType == 'A'
|
|
aExp := {}
|
|
|
|
CASE cType == ','
|
|
sList := ""
|
|
|
|
CASE cType == ':'
|
|
sWorkLine := sLine
|
|
sPrimaryStopper := _pp_NextToken( @sWorkLine )
|
|
|
|
IF sPrimaryStopper == NIL
|
|
//? "No primary", sPrimaryStopper
|
|
RETURN NIL
|
|
ELSE
|
|
sPrimaryStopper := Upper( RTrim( sPrimaryStopper ) )
|
|
|
|
/* Is it a stopper (the anchor of another acceptable match) ? */
|
|
IF bDbgExp
|
|
? "Stopper?: '" + sPrimaryStopper +"'"
|
|
ENDIF
|
|
|
|
nStoppers := Len( aWords )
|
|
FOR nStopper := 1 TO nStoppers
|
|
|
|
sStopLine := sWorkLine
|
|
sToken := sPrimaryStopper
|
|
sStopper := aWords[ nStopper ]
|
|
|
|
sMultiStopper := ""
|
|
WHILE ( nSpaceAt := At( ' ', sStopper ) ) > 0
|
|
sNextStopper := Left( sStopper, nSpaceAt - 1 )
|
|
|
|
IF bX
|
|
nLen := 64
|
|
ELSE
|
|
nLen := Max( 4, Len( sToken ) )
|
|
ENDIF
|
|
|
|
//? "Next Stopper: " + sNextStopper, sToken
|
|
IF Left( sNextStopper, nLen ) == sToken
|
|
sMultiStopper += sNextStopper
|
|
sStopper := SubStr( sStopper, nSpaceAt )
|
|
sMultiStopper += ExtractLeadingWS( @sStopper )
|
|
sToken := _pp_NextToken( @sStopLine )
|
|
sToken := Upper( RTrim( sToken ) )
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF bX
|
|
nLen := 64
|
|
ELSE
|
|
nLen := Max( 4, Len( sToken ) )
|
|
ENDIF
|
|
|
|
IF Left( sStopper, nLen ) == sToken
|
|
sMultiStopper += sStopper
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF nStopper <= nStoppers
|
|
sLine := sStopLine
|
|
//TraceLog( sMultiStopper, sStopLine )
|
|
RETURN sMultiStopper
|
|
ELSE
|
|
sLine := sWorkLine
|
|
RETURN NIL
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE cType == '*'
|
|
sExp := sLine
|
|
sLine := ""
|
|
//? "EXP <*>: " + sExp
|
|
RETURN sExp
|
|
|
|
CASE cType == '('
|
|
s1 := Left( sLine, 1 )
|
|
IF ! ( s1 $ "(['" + '"' )
|
|
nSpaceAt := At( ' ', sLine )
|
|
|
|
IF nSpaceAt = 0
|
|
sExp := sLine
|
|
sLine := ""
|
|
ELSE
|
|
sExp := Left( sLine, nSpaceAt - 1 )
|
|
sLine := SubStr( sLine, nSpaceAt )
|
|
sExp += ExtractLeadingWS( @sLine )
|
|
ENDIF
|
|
|
|
//? "EXP <(>: " + sExp
|
|
RETURN sExp
|
|
ENDIF
|
|
|
|
CASE cType == '!'
|
|
IF IsAlpha( cChar := Left( sLine, 1 ) ) .OR. cChar == '_'
|
|
RETURN _pp_NextToken( @sLine )
|
|
ELSE
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
CASE cType == NIL
|
|
RETURN "-"
|
|
ENDCASE
|
|
|
|
sExp := ""
|
|
DO WHILE .T.
|
|
sToken := _pp_NextToken( @sLine )
|
|
|
|
IF sToken == NIL
|
|
EXIT
|
|
ENDIF
|
|
|
|
//TraceLog( sToken )
|
|
|
|
sJustToken := RTrim( sToken )
|
|
IF sNextAnchor != NIL .AND. sJustToken == sNextAnchor
|
|
// Clipper give preference to ',' in list expression.
|
|
IF ! ( sNextAnchor $ ',' .AND. cType $ ",A" )
|
|
//TraceLog( "Anchor: '" + sNextAnchor + "' found!" )
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nLen := Len( sJustToken )
|
|
s1 := Left( sJustToken, 1 )
|
|
s2 := s4 := s5 := ""
|
|
IF nLen == 2
|
|
s2 := sJustToken
|
|
ELSEIF nLen == 4
|
|
s4 := Upper( sJustToken )
|
|
ELSEIF nLen == 5
|
|
s5 := Upper( sJustToken )
|
|
ENDIF
|
|
|
|
IF Empty( sLine )
|
|
sNextToken := ""
|
|
sJustNext := ""
|
|
sNext1 := ""
|
|
ELSE
|
|
sNextLine := sLine
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken == NIL
|
|
sNextToken := ""
|
|
sJustNext := ""
|
|
sNext1 := ""
|
|
ELSE
|
|
sJustNext := RTrim( sNextToken )
|
|
sNext1 := Left( sJustNext, 1 )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// ------------------
|
|
// 1st. Level.
|
|
// ------------------
|
|
|
|
IF bDbgExp
|
|
? "1st. Level - Token: '" + sToken + "' Next: '" + sNextToken + "'"
|
|
WAIT
|
|
ENDIF
|
|
|
|
//TraceLog( "Token: '" + sToken + "' Len: " + Str( nLen ) + " Next: '" + sNextToken + "'" )
|
|
|
|
IF nLen == 1
|
|
|
|
IF s1 $ "-+!:@|" // *** Very ODD Clipper consider '|' a continuation token !!!
|
|
sExp += sToken
|
|
LOOP
|
|
ELSEIF s1 == "&"
|
|
sExp += sToken
|
|
IF sNext1 == '('
|
|
LOOP
|
|
ELSE
|
|
IF IsAlpha( sNext1 ) .OR. sNext1 == '_'
|
|
sExp += sNextToken
|
|
sLastToken := sJustNext
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken != NIL .AND. Left( sNextToken, 1 ) == '.'
|
|
// Get the macro terminator.
|
|
sExp += sNextToken
|
|
sLastToken := "."
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
IF sNextToken == '.' //(Last Token) No space after Macro terminator, so get the suffix.
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken != NIL
|
|
sNext1 := Left( sNextToken, 1 )
|
|
IF IsAlpha( sNext1 ) .OR. IsDigit( sNext1 ) .OR. sNext1 == '_'
|
|
// Get the macro sufix.
|
|
sExp += sNextToken
|
|
sLastToken := RTrim( sNextToken )
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
Alert( [ERROR! Invalid '&' at: ] + sExp + sNextToken )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sLastToken := RTrim( sLastToken )
|
|
// Continue 2nd level checks below.
|
|
ELSEIF s1 == '('
|
|
sExp += sToken
|
|
IF Left( sNext1, 1 ) == ')'
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
ELSE
|
|
//TraceLog( "Content from: " + sLine )
|
|
sTemp := NextExp( @sLine, ',', NIL, NIL ) // Content - Ignoring sNextAnchor !!!
|
|
IF sTemp == NIL
|
|
TraceLog( "ERROR!(1) No content at: '" + sLine + "' After: " + sExp, sLine )
|
|
Alert( [ERROR!(1) No content at: ] + "'" + sLine + "'"+[ After: ] + sExp )
|
|
EXIT
|
|
ELSE
|
|
sExp += sTemp
|
|
//TraceLog( "Content: '" + sTemp + "'", sExp, sLine )
|
|
ENDIF
|
|
|
|
sToken := _pp_NextToken( @sLine ) // Close
|
|
IF sToken == NIL
|
|
TraceLog( "ERROR!(2) Unbalanced '(' at: " + sExp, sLine )
|
|
Alert( [ERROR!(2) Unbalanced '(' at: ] + sExp )
|
|
EXIT
|
|
ELSEIF Left( sToken, 1 ) == ')'
|
|
sExp += sToken
|
|
ELSE
|
|
sLine := sToken + sLine
|
|
TraceLog( "ERROR!(3) Unbalanced '(' Found: '" + sToken + "' at: " + sExp, sLine )
|
|
Alert( [ERROR!(3) Unbalanced '(' Found: ] + "'" + sToken + "'"+[ at: ] + sExp )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sLastToken := ")"
|
|
// Continue 2nd level checks below.
|
|
ELSEIF s1 == '{'
|
|
sExp += sToken
|
|
|
|
#ifdef EXPLICIT_BLOCK
|
|
|
|
IF sNext1 == '|'
|
|
/* Literal block */
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken != NIL .AND. Left( sNextToken, 1 ) == '|'
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
ELSE
|
|
sTemp := NextExp( @sLine, ',', NIL, NIL ) // Content - Ignoring sNextAnchor !!!
|
|
IF sTemp == NIL
|
|
TraceLog( "ERROR! Unbalanced '{|...' at: " + sExp )
|
|
Alert( [ERROR! Unbalanced '{|...' at: ] + sExp )
|
|
EXIT
|
|
ELSE
|
|
sExp += sTemp
|
|
ENDIF
|
|
|
|
/* sLine was changed by NextExp()! */
|
|
sNextLine := sLine
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken != NIL .AND. Left( sNextToken, 1 ) == '|'
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
ELSE
|
|
TraceLog( "ERROR! Unbalanced '{|...|' at: " + sExp, sNextToken, sNextLine )
|
|
Alert( [ERROR! Unbalanced '{|...|' at: ] + sExp )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sTemp := NextExp( @sLine, ',', NIL, NIL ) // Content - Ignoring sNextAnchor !!!
|
|
IF sTemp == NIL
|
|
TraceLog( "ERROR! Empty '{||'" )
|
|
Alert( [ERROR! Empty '{||'] )
|
|
EXIT
|
|
ELSE
|
|
sExp += sTemp
|
|
ENDIF
|
|
|
|
sToken := _pp_NextToken( @sLine ) // Close
|
|
IF sToken == NIL
|
|
TraceLog( "ERROR! Unbalanced '{' at: " + sExp )
|
|
Alert( [ERROR! Unbalanced '{' at: ] + sExp )
|
|
EXIT
|
|
ELSEIF Left( sToken, 1 ) == '}'
|
|
sExp += sToken
|
|
ELSE
|
|
sLine := sToken + sLine
|
|
TraceLog( "ERROR! Unbalanced '{' at: " + sExp )
|
|
Alert( [ERROR! Unbalanced '{' at: ] + sExp )
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
|
|
#endif
|
|
|
|
/* Literal array */
|
|
IF sNext1 == '}'
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
ELSE
|
|
sTemp := NextExp( @sLine, ',', NIL, NIL ) // Content - Ignoring sNextAnchor !!!
|
|
IF sTemp == NIL
|
|
TraceLog( "ERROR! Unbalanced '{...'", sLine )
|
|
Alert( [ERROR! Unbalanced '{...'] )
|
|
EXIT
|
|
ELSE
|
|
sExp += sTemp
|
|
ENDIF
|
|
|
|
sToken := _pp_NextToken( @sLine ) // Close
|
|
IF sToken == NIL
|
|
TraceLog( "ERROR! Unbalanced '{' at: " + sExp )
|
|
Alert( [ERROR! Unbalanced '{' at: ] + sExp )
|
|
EXIT
|
|
ELSEIF Left( sToken, 1 ) == '}'
|
|
sExp += sToken
|
|
ELSE
|
|
sLine := sToken + sLine
|
|
TraceLog( "ERROR! Unbalanced '{' at: " + sExp )
|
|
Alert( [ERROR! Unbalanced '{' at: ] + sExp )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#ifdef EXPLICIT_BLOCK
|
|
ENDIF
|
|
#endif
|
|
|
|
sLastToken := "}"
|
|
// Continue 2nd level checks below.
|
|
ELSEIF s1 == "["
|
|
sExp += sToken
|
|
sTemp := NextExp( @sLine, ',', NIL, NIL ) // Content - Ignoring sNextAnchor !!!
|
|
IF sTemp == NIL
|
|
Alert( [ERROR! Unbalanced ] + "'['" + [ at: ] + sExp )
|
|
EXIT
|
|
ELSE
|
|
sExp += sTemp
|
|
ENDIF
|
|
|
|
sToken := _pp_NextToken( @sLine ) // Close
|
|
IF sToken == NIL
|
|
Alert( [ERROR! Unbalanced ] + "'['" + [ at: ] + sExp )
|
|
EXIT
|
|
ELSEIF Left( sToken, 1 ) == ']'
|
|
sExp += sToken
|
|
ELSE
|
|
sLine := sToken + sLine
|
|
Alert( [ERROR! Unbalanced ] + "'['" + [ at: ] + sExp )
|
|
EXIT
|
|
ENDIF
|
|
|
|
sLastToken := "]"
|
|
// Continue 2nd level checks below.
|
|
ELSEIF s1 $ ".*/=^><!$%#)}]?"
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
ELSEIF s1 == ","
|
|
IF cType == ","
|
|
sList += ( sExp + sToken )
|
|
sExp := ""
|
|
LOOP
|
|
ELSEIF cType == "A"
|
|
aAdd( aExp, sExp )
|
|
sExp := ""
|
|
LOOP
|
|
ELSE
|
|
//? "DONT CONTINUE: " + sLine
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
sExp += sToken
|
|
sLastToken := sJustToken
|
|
ENDIF
|
|
|
|
ELSEIF nLen == 2
|
|
|
|
IF s2 $ '++\--'
|
|
sExp += sToken
|
|
LOOP
|
|
ELSEIF s2 $ "->\:=\==\!=\<>\>=\<=\+=\-=\*=\^=\**\/=\%="
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
ELSE
|
|
sExp += sToken
|
|
sLastToken := sJustToken
|
|
ENDIF
|
|
|
|
ELSEIF nLen == 4
|
|
|
|
IF s4 == '.OR.'
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
ELSE
|
|
sExp += sToken
|
|
sLastToken := sJustToken
|
|
ENDIF
|
|
|
|
ELSEIF nLen == 5
|
|
|
|
IF s5 == '.AND.'
|
|
sLine := sToken + sLine
|
|
EXIT
|
|
/* .NOT. is being translated to ! at _pp_NextToken() !!!
|
|
ELSEIF s5 == ".NOT."
|
|
sExp += sToken
|
|
LOOP
|
|
*/
|
|
ELSE
|
|
sExp += sToken
|
|
sLastToken := sJustToken
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
sExp += sToken
|
|
sLastToken := sJustToken
|
|
|
|
ENDIF
|
|
|
|
// ------------------
|
|
// 2nd. Level.
|
|
// ------------------
|
|
|
|
//TraceLog( sExp, sLastToken, sLine, nLen, sToken, sNextToken )
|
|
|
|
IF sLastToken == NIL .OR. Right( sLastToken, 1 ) == ' '
|
|
TraceLog( sExp, sLastToken, sLine, nLen, sToken, sNextToken )
|
|
Alert( "??? " + sExp )
|
|
EXIT
|
|
ENDIF
|
|
|
|
nLen := Len( sLastToken )
|
|
cLastChar := Right( sLastToken, 1 )
|
|
|
|
IF Empty( sLine )
|
|
EXIT
|
|
ELSE
|
|
sNextLine := sLine
|
|
sNextToken := _pp_NextToken( @sNextLine, .T. )
|
|
IF sNextToken == NIL
|
|
sNextToken := ""
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sJustNext := RTrim( sNextToken )
|
|
nNextLen := Len( sJustNext )
|
|
sNext1 := Left( sJustNext, 1 )
|
|
sNext2 := sNext4 := sNext5 := ""
|
|
IF nNextLen == 2
|
|
sNext2 := sJustNext
|
|
ELSEIF nNextLen == 4
|
|
sNext4 := Upper( sJustNext )
|
|
ELSEIF nNextLen == 5
|
|
sNext5 := sJustNext
|
|
ENDIF
|
|
|
|
IF bDbgExp
|
|
? "2nd. Level - Token: '" + sToken + "' Next: '" + sNextToken + "'"
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF sNextAnchor != NIL .AND. sJustNext == sNextAnchor
|
|
// Clipper give preference to ',' in list expression.
|
|
IF ! ( sNextAnchor == ',' .AND. cType $ ",A" )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//TraceLog( sExp, sToken, sJustToken, nLen, sNextToken, sJustNext, nNextLen, sLastToken, cLastChar, sNextAnchor )
|
|
|
|
IF nNextLen == 1
|
|
|
|
IF sNext1 == '(' .AND. ( IsAlpha( cLastChar ) .OR. IsDigit( cLastChar ) .OR. cLastChar $ "_." )
|
|
LOOP
|
|
ELSEIF sNext1 == '[' // No need to check prefix because _pp_NextToken() already has the logic.
|
|
LOOP
|
|
ELSEIF sNext1 $ "+-*/:=^!><!$%#|" // *** Very ODD Clipper consider '|' a continuation token !!!
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
LOOP
|
|
ENDIF
|
|
|
|
ELSEIF nNextLen == 2
|
|
|
|
IF sNext2 $ "--\++"
|
|
IF IsAlpha( cLastChar ) .OR. IsDigit( cLastChar ) .OR. cLastChar $ "_.]"
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
ENDIF
|
|
ELSEIF sNext2 $ "->\:=\==\!=\<>\>=\<=\+=\-=\*=\/=\^=\**\%="
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .T. )
|
|
#else
|
|
s_bArrayPrefix := .T.
|
|
#endif
|
|
LOOP
|
|
ENDIF
|
|
|
|
ELSEIF nNextLen == 4
|
|
|
|
IF sNext4 == ".OR."
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
LOOP
|
|
ENDIF
|
|
|
|
ELSEIF nNextLen == 5
|
|
|
|
IF sNext5 == ".AND."
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
s_bArrayPrefix := .F.
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
LOOP
|
|
/* .NOT. is being translated to ! at NextToken() !!!
|
|
ELSEIF sNext5 == ".NOT."
|
|
sExp += sNextToken
|
|
sLine := sNextLine
|
|
s_bArrayPrefix := .F.
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif */
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// ------------------
|
|
// 3rd. Level.
|
|
// ------------------
|
|
|
|
IF sNext1 == ','
|
|
IF cType == ","
|
|
sList += ( sExp + sNextToken )
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
sExp := ""
|
|
ELSEIF cType == "A"
|
|
aAdd( aExp, sExp )
|
|
sLine := sNextLine
|
|
#ifdef USE_C_BOOST
|
|
_pp_setArrayPrefix( .F. )
|
|
#else
|
|
s_bArrayPrefix := .F.
|
|
#endif
|
|
sExp := ""
|
|
ELSE
|
|
//? "DONT CONTINUE: " + sLine
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
//? "DONT CONTINUE: " + sLine
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF cType == 'A'
|
|
IF sExp == ""
|
|
IF Len( aExp ) == 0
|
|
aExp := NIL
|
|
ENDIF
|
|
ELSE
|
|
aAdd( aExp, sExp )
|
|
ENDIF
|
|
|
|
IF bDbgExp
|
|
IF ! ( ProcName(1) == "NEXTEXP" )
|
|
? "List Exp: " + '{'
|
|
FOR Counter := 1 TO Len( aExp )
|
|
?? aExp[Counter]
|
|
IF Counter < Len( aExp )
|
|
?? ','
|
|
ENDIF
|
|
NEXT
|
|
?? '}'
|
|
ENDIF
|
|
ENDIF
|
|
ELSEIF cType == ','
|
|
IF sExp == ""
|
|
IF sList == ""
|
|
sExp := NIL
|
|
ELSE
|
|
sExp := sList
|
|
ENDIF
|
|
ELSE
|
|
sExp := ( sList + sExp )
|
|
ENDIF
|
|
|
|
IF bDbgExp
|
|
? "List =", sExp, " Next:", sLine
|
|
ENDIF
|
|
ELSE
|
|
IF sExp == ""
|
|
sExp := NIL
|
|
ENDIF
|
|
IF bDbgExp
|
|
? "Exp =", sExp, " Next:", sLine
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDbgExp
|
|
WAIT
|
|
ENDIF
|
|
|
|
//TraceLog( "*** Finish", cType, aExp, sExp, sLine, sNextAnchor )
|
|
|
|
RETURN IIF( cType == 'A', aExp, sExp )
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION PPOut( aResults, aMarkers )
|
|
|
|
LOCAL Counter, nResults, sResult := "", nMarker, nMatches, nMatch
|
|
LOCAL xValue, nRepeats := 0, nDependee, nGroupStart, sDumb, aBackUp := aClone( aMarkers )
|
|
LOCAL nMarkers, anMarkers, bBuildList
|
|
LOCAL nGroupIterator
|
|
|
|
IF aResults[1] == NIL
|
|
nResults := 0
|
|
ELSE
|
|
nResults := Len( aResults[1] )
|
|
ENDIF
|
|
|
|
FOR Counter := 1 TO nResults
|
|
|
|
IF bDbgPPO
|
|
? sResult
|
|
? Counter, "of:", nResults, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
/* Normal mode. */
|
|
IF nRepeats == 0
|
|
|
|
nDependee := aResults[1][Counter][1]
|
|
|
|
IF nDependee > 0
|
|
nGroupStart := Counter
|
|
|
|
nGroupIterator := Counter
|
|
nRepeats := 0
|
|
WHILE nGroupIterator <= nResults .AND. aResults[1][nGroupIterator][1] == nDependee
|
|
IF ValType( aResults[1][nGroupIterator][2] ) == 'N' .AND. ValType( aMarkers[ aResults[1][nGroupIterator][2] ] ) == 'A'
|
|
nRepeats := Max( nRepeats, Len( aMarkers[ aResults[1][nGroupIterator][2] ] ) )
|
|
ENDIF
|
|
nGroupIterator++
|
|
ENDDO
|
|
IF nRepeats > 0
|
|
anMarkers := {}
|
|
bBuildList := .T.
|
|
ENDIF
|
|
|
|
IF bDbgPPO
|
|
? Counter, nDependee, aMarkers, ValType( aMarkers ), nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
IF nRepeats > 0
|
|
IF ValType( aResults[1][Counter][2] ) == 'N'
|
|
IF bBuildList .AND. aScan( anMarkers, nDependee ) == 0
|
|
aAdd( anMarkers, nDependee )
|
|
ENDIF
|
|
|
|
// For group head nDependee and nMaker _must_ be identical.
|
|
IF ValType( aMarkers[ nDependee ] ) == 'A'
|
|
xValue := aMarkers[ nDependee ][1]
|
|
ELSE
|
|
xValue := aMarkers[ nDependee ]
|
|
ENDIF
|
|
ELSE
|
|
sResult += aResults[1][Counter][2]
|
|
LOOP
|
|
ENDIF
|
|
ELSE
|
|
IF bDbgPPO
|
|
? "Skipping other dependants"
|
|
WAIT
|
|
ENDIF
|
|
|
|
/* Skip all other dependants. */
|
|
Counter++
|
|
WHILE Counter < nResults .AND. aResults[1][Counter][1] == nDependee
|
|
Counter++
|
|
ENDDO
|
|
Counter-- // LOOP will increased.
|
|
LOOP
|
|
ENDIF
|
|
|
|
ELSE // IF nDependee > 0
|
|
|
|
IF ValType( aResults[1][Counter][2] ) == 'N'
|
|
xValue := aMarkers[ aResults[1][Counter][2] ]
|
|
ELSE
|
|
sResult += aResults[1][Counter][2]
|
|
LOOP
|
|
ENDIF
|
|
|
|
ENDIF // IF nDependee > 0
|
|
|
|
ELSE /* Repeat mode. */
|
|
|
|
/* Still in repeat group? */
|
|
IF aResults[1][Counter][1] == nDependee
|
|
|
|
IF ValType( aResults[1][Counter][2] ) == 'N'
|
|
//IF aMarkers[ aResults[1][Counter][2] ] != NIL
|
|
IF bBuildList .AND. aScan( anMarkers, aResults[1][Counter][2] ) == 0
|
|
aAdd( anMarkers, aResults[1][Counter][2] )
|
|
ENDIF
|
|
IF aMarkers[ aResults[1][Counter][2] ] == NIL .OR. Len( aMarkers[ aResults[1][Counter][2] ] ) == 0
|
|
xValue := NIL
|
|
ELSEIF ValType( aMarkers[ aResults[1][Counter][2] ] ) == 'A'
|
|
xValue := aMarkers[ aResults[1][Counter][2] ][1]
|
|
ELSE
|
|
xValue := aMarkers[ aResults[1][Counter][2] ]
|
|
ENDIF
|
|
//aDel( aMarkers[ aResults[1][Counter][2] ], 1 )
|
|
//aSize( aMarkers[ aResults[1][Counter][2] ], nRepeats - 1 )
|
|
//ELSE
|
|
// xValue := ""
|
|
//ENDIF
|
|
ELSE
|
|
sResult += aResults[1][Counter][2]
|
|
|
|
IF nRepeats > 1 .AND. Counter == nResults
|
|
nRepeats--
|
|
Counter := nGroupStart - 1
|
|
|
|
bBuildList := .F.
|
|
|
|
nMarkers := Len( anMarkers )
|
|
FOR nMarker := 1 TO nMarkers
|
|
// Clipper does not remove optional nested repeatable which only has single value if main repeatable has more values.
|
|
IF ValType( aMarkers[ anMarkers[nMarker] ] ) == 'A' .AND. ( Len( aBackup[ anMarkers[1] ] ) = 1 .OR. Len( aMarkers[ anMarkers[nMarker] ] ) > 1 )
|
|
IF bDbgPPO
|
|
? nMarker, "- Removing Repeatable", aMarkers[ anMarkers[nMarker] ][1]
|
|
WAIT
|
|
ENDIF
|
|
aDel( aMarkers[ anMarkers[nMarker] ], 1 )
|
|
aSize( aMarkers[ anMarkers[nMarker] ], nRepeats )
|
|
ELSE
|
|
IF bDbgPPO
|
|
? nMarker, Len( aBackup[ anMarkers[1] ] ), Len( aMarkers[ anMarkers[nMarker] ] ),"Removed Repeatable"
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF bDbgPPO
|
|
? "END - Looping: ", Counter, nMarker, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDbgPPO
|
|
? "Bottom: ", Counter, nMarker, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
LOOP
|
|
ENDIF
|
|
ELSE
|
|
nRepeats--
|
|
bBuildList := .F.
|
|
|
|
nMarkers := Len( anMarkers )
|
|
FOR nMarker := 1 TO nMarkers
|
|
// Clipper does not remove optional nested repeatable which only has single value if main repeatable has more values.
|
|
IF ValType( aMarkers[ anMarkers[nMarker] ] ) == 'A' .AND. Len( aMarkers[ anMarkers[nMarker] ] ) > 1
|
|
IF bDbgPPO
|
|
? nMarker, "+ Removing Repeatable", aMarkers[ anMarkers[nMarker] ][1]
|
|
WAIT
|
|
ENDIF
|
|
aDel( aMarkers[ anMarkers[nMarker] ], 1 )
|
|
aSize( aMarkers[ anMarkers[nMarker] ], nRepeats )
|
|
ELSE
|
|
IF bDbgPPO
|
|
? nMarker, "Removed Repeatable skipped"
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF nRepeats > 0
|
|
IF bDbgPPO
|
|
? "Looping to: ", nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
Counter := nGroupStart - 1 // LOOP will increase
|
|
LOOP
|
|
ELSE
|
|
IF bDbgPPO
|
|
? "Repeats Finished: "
|
|
WAIT
|
|
ENDIF
|
|
|
|
// Restore for possible re-use.
|
|
aMarkers := aClone( aBackup )
|
|
|
|
/* Recheck this item in "normal" mode. */
|
|
Counter--
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
nMarker := aResults[1][Counter][2]
|
|
|
|
IF bDbgPPO
|
|
? "Outputing:", Counter, nMarker, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
DO CASE
|
|
/* <-x-> Ommit. */
|
|
CASE aResults[2][Counter] == 0
|
|
|
|
/* <x> Regular */
|
|
CASE aResults[2][Counter] == 1
|
|
IF ValType( xValue ) == 'A'
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
sResult += xValue[nMatch]
|
|
IF nMatch < nMatches
|
|
sResult += ', '
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
IF xValue != NIL
|
|
sResult += xValue
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* #<x> Dumb Stringify */
|
|
CASE aResults[2][Counter] == 2
|
|
IF ValType( xValue ) == 'A'
|
|
sDumb := ""
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
sDumb += xValue[nMatch]
|
|
IF nMatch < nMatches
|
|
sDumb += ", "
|
|
ENDIF
|
|
NEXT
|
|
IF '"' $ sDumb .AND. "'" $ sDumb .AND. ']' $ sDumb .AND. Left( sDumb, 1 ) != '['
|
|
sResult += '[[' + sDumb + ']]'
|
|
ELSEIF '"' $ sDumb .AND. "'" $ sDumb
|
|
sResult += '[' + sDumb + "]"
|
|
ELSEIF '"' $ sDumb
|
|
sResult += "'" + sDumb + "'"
|
|
ELSE
|
|
sResult += '"' + sDumb + '"'
|
|
ENDIF
|
|
ELSE
|
|
IF xValue == NIL
|
|
sResult += '""'
|
|
ELSE
|
|
IF '"' $ xValue .AND. "'" $ xValue .AND. ']' $ xValue .AND. Left( xValue, 1 ) != '['
|
|
sResult += "[[" + xValue + "]]"
|
|
ELSEIF '"' $ xValue .AND. "'" $ xValue
|
|
sResult += '[' + xValue + "]"
|
|
ELSEIF '"' $ xValue
|
|
sResult += "'" + xValue + "'"
|
|
ELSE
|
|
sResult += '"' + xValue + '"'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <"x"> Normal Stringify */
|
|
CASE aResults[2][Counter] == 3
|
|
IF ValType( xValue ) == 'A'
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
IF Left( xValue[nMatch], 1 ) == '&'
|
|
IF Right( xValue[nMatch], 1 ) == '.'
|
|
sResult += SubStr( xValue[nMatch], 2, Len( xValue[nMatch] ) - 2 )
|
|
ELSE
|
|
sResult += SubStr( xValue[nMatch], 2 )
|
|
ENDIF
|
|
ELSEIF '"' $ xValue[nMatch] .AND. "'" $ xValue[nMatch] .AND. ']' $ xValue[nMatch] .AND. Left( xValue[nMatch], 1 ) != '['
|
|
sResult += "[[" + RTrim( xValue[nMatch] ) + "]]"
|
|
ELSEIF '"' $ xValue[nMatch] .AND. "'" $ xValue[nMatch]
|
|
sResult += '[' + RTrim( xValue[nMatch] ) + "]"
|
|
ELSEIF '"' $ xValue[nMatch]
|
|
sResult += "'" + RTrim( xValue[nMatch] ) + "'"
|
|
ELSE
|
|
sResult += '"' + RTrim( xValue[nMatch] ) + '"'
|
|
ENDIF
|
|
|
|
IF nMatch < nMatches
|
|
sResult += ', '
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
IF ! ( xValue == NIL )
|
|
IF Left( xValue, 1 ) == '&'
|
|
IF Right( xValue, 1 ) == '.'
|
|
sResult += SubStr( xValue, 2, Len( xValue ) - 2 )
|
|
ELSE
|
|
sResult += SubStr( xValue, 2 )
|
|
ENDIF
|
|
ELSEIF '"' $ xValue .AND. "'" $ xValue .AND. ']' $ xValue .AND. Left( xValue, 1 ) != '['
|
|
sResult += "[[" + xValue + "]]"
|
|
ELSEIF '"' $ xValue .AND. "'" $ xValue
|
|
sResult += '[' + xValue + ']'
|
|
ELSEIF '"' $ xValue
|
|
sResult += "'" + xValue + "'"
|
|
ELSE
|
|
sResult += '"' + xValue + '"'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <(x)> Smart Stringify */
|
|
CASE aResults[2][Counter] == 4
|
|
IF ValType( xValue ) == 'A'
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
IF Left( xValue[nMatch], 1 ) $ "('[" + '"'
|
|
sResult += xValue[nMatch]
|
|
ELSE
|
|
IF Left( xValue[nMatch], 1 ) == '&'
|
|
IF Right( xValue[nMatch], 1 ) == '.'
|
|
sResult += SubStr( xValue[nMatch], 2, Len( xValue[nMatch] ) - 2 )
|
|
ELSE
|
|
sResult += SubStr( xValue[nMatch], 2 )
|
|
ENDIF
|
|
ELSE
|
|
sResult += '"' + RTrim( xValue[nMatch] ) + '"'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nMatch < nMatches
|
|
sResult += ', '
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
IF xValue != NIL
|
|
IF Left( xValue, 1 ) $ "('[" + '"'
|
|
sResult += xValue
|
|
ELSE
|
|
IF Left( xValue, 1 ) == '&'
|
|
IF Right( xValue, 1 ) == '.'
|
|
sResult += SubStr( xValue, 2, Len( xValue ) - 2 )
|
|
ELSE
|
|
sResult += SubStr( xValue, 2 )
|
|
ENDIF
|
|
ELSE
|
|
sResult += '"' + RTrim( xValue ) + '"'
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <{x}> Blockify */
|
|
CASE aResults[2][Counter] == 5
|
|
IF ValType( xValue ) == 'A'
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
sResult += "{||" + xValue[nMatch] + '}'
|
|
IF nMatch < nMatches
|
|
sResult += ', '
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
IF xValue != NIL
|
|
sResult += "{||" + xValue + '}'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <.x.> Logify */
|
|
CASE aResults[2][Counter] == 6
|
|
IF ValType( xValue ) == 'A'
|
|
nMatches := Len( xValue )
|
|
FOR nMatch := 1 TO nMatches
|
|
sResult += ".T."
|
|
IF nMatch < nMatches
|
|
sResult += ', '
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
IF Empty( xValue )
|
|
sResult += ".F."
|
|
ELSE
|
|
sResult += ".T."
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDCASE
|
|
|
|
IF nRepeats > 1 .AND. Counter == nResults
|
|
nRepeats--
|
|
Counter := nGroupStart - 1
|
|
|
|
bBuildList := .F.
|
|
|
|
nMarkers := Len( anMarkers )
|
|
FOR nMarker := 1 TO nMarkers
|
|
// Clipper does not remove optional nested repeatable which only has single value if main repeatable has more values.
|
|
IF ValType( aMarkers[ anMarkers[nMarker] ] ) == 'A' .AND. ( Len( aBackup[ anMarkers[1] ] ) = 1 .OR. Len( aMarkers[ anMarkers[nMarker] ] ) > 1 )
|
|
aDel( aMarkers[ anMarkers[nMarker] ], 1 )
|
|
aSize( aMarkers[ anMarkers[nMarker] ], nRepeats )
|
|
IF bDbgPPO
|
|
? nMarker, "Removed Repeatable"
|
|
WAIT
|
|
ENDIF
|
|
ELSE
|
|
IF bDbgPPO
|
|
? nMarker, Len( aBackup[ anMarkers[1] ] ), Len( aMarkers[ anMarkers[nMarker] ] ),"Removed Repeatable"
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF bDbgPPO
|
|
? "END - Looping: ", Counter, nMarker, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDbgPPO
|
|
? "Bottom: ", Counter, nMarker, nGroupStart, nRepeats
|
|
WAIT
|
|
ENDIF
|
|
|
|
NEXT
|
|
|
|
IF bDbgPPO
|
|
? "*** OUT: " + sResult
|
|
WAIT
|
|
ENDIF
|
|
|
|
//TraceLog( sResult )
|
|
|
|
RETURN sResult
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
|
|
|
|
LOCAL nNext, sKey, sAnchor, nOptional := 0, cType, nId := 0, aRule, aMatch, aWords
|
|
LOCAL nOptionalAt, nMarkerAt, aMarkers := {}, Counter, nType, aResult := {}, sTemp, aModifiers, aValues
|
|
LOCAL aRP, nAt, sResult, nCloseAt, sMarker, nCloseOptionalAt, sPad, nResults, nMarker, nMP, nMatches, nOffset
|
|
LOCAL nWord, nWords, cChar
|
|
LOCAL nLen, s1, s2, s3
|
|
LOCAL sRuleCopy := sRule
|
|
LOCAL nLastOptional, nPending
|
|
LOCAL sDots
|
|
LOCAL nMarkerID
|
|
LOCAL nTempMP
|
|
LOCAL nTokenLen
|
|
|
|
/*
|
|
nMarkerID
|
|
nOPTIONAL
|
|
sAnchor
|
|
cTYPE
|
|
aLIST
|
|
aNext
|
|
*/
|
|
|
|
//? "=>" + sRule + "<="
|
|
|
|
//TraceLog( sRule )
|
|
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
sKey := _pp_NextToken( @sRule )
|
|
IF Left( sKey, 1 ) == '\'
|
|
sKey := SubStr( sKey, 2, 1 )
|
|
ENDIF
|
|
|
|
DropTrailingWS( @sKey )
|
|
|
|
IF bUpper
|
|
sKey := Upper( sKey )
|
|
ENDIF
|
|
|
|
//? "KEY: '" + sKey + "'"
|
|
|
|
aRule := { sKey, {}, bX }
|
|
|
|
#ifdef __XHARBOUR__
|
|
HB_AtX( "(^|[^\\])= *>", sRule, , @nNext, @nTokenLen )
|
|
#else
|
|
nNext := 0
|
|
DO WHILE ( nNext := At( "=>", sRule, nNext + 1 ) ) > 0
|
|
IF ! SubStr( sRule, nNext - 1, 1 ) == '\'
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
nTokenLen := 2
|
|
#endif
|
|
|
|
IF nNext == 0
|
|
Alert( [ERROR! Invalid translation format: ] + sRule )
|
|
RETURN .F.
|
|
ELSE
|
|
sResult := SubStr( sRule, nNext + nTokenLen )
|
|
ExtractLeadingWS( @sResult )
|
|
sRule := Left( sRule, nNext - 1 )
|
|
ENDIF
|
|
|
|
//TraceLog( sRule, sResult )
|
|
|
|
DO WHILE ! ( Left( sRule, 1 ) == '' )
|
|
//? "Scaning: " + sRule
|
|
|
|
nLen := Len( sRule )
|
|
|
|
s1 := Left( sRule, 1 )
|
|
IF nLen >= 2
|
|
s2 := Left( sRule, 2 )
|
|
ENDIF
|
|
IF nLen >= 3
|
|
s3 := Upper( Left( sRule, 3 ) )
|
|
ENDIF
|
|
|
|
BEGIN SEQUENCE
|
|
|
|
IF nLen >= 5
|
|
IF s1 == '.' .AND. Upper( SubStr( sRule, 2, 3 ) ) == 'AND' .AND. SubStr( sRule, 5, 1 ) == '.'
|
|
sTemp := ".AND."
|
|
BREAK
|
|
ELSEIF s1 = '.' .AND. Upper( SubStr( sRule, 2, 3 ) ) == 'NOT' .AND. SubStr( sRule, 5, 1 ) == '.'
|
|
sTemp := "!"
|
|
/* Skip the unaccounted letters ( .NOT. <-> ! ) */
|
|
sRule := SubStr( sRule, 4 )
|
|
BREAK
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nLen >= 4 .AND. s1 == '.' .AND. Upper( SubStr( sRule, 2, 2 ) ) == 'OR' .AND. SubStr( sRule, 4, 1 ) == '.'
|
|
sTemp := ".OR."
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF nLen >= 3 .AND. s3 $ ".T.\.F."
|
|
sTemp := s3
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF nLen >= 2
|
|
IF s2 $ "++\--\->\:=\==\!=\<>\>=\<=\+=\-=\*=\^=\**\/=\%="
|
|
sTemp := s2
|
|
BREAK
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nLen >= 1
|
|
IF s1 == '\'
|
|
sTemp := SubStr( sRule, 2, 1 )
|
|
sRule := SubStr( sRule, 2 )
|
|
BREAK
|
|
ELSEIF s1 == '_' .OR. IsAlpha( s1 )
|
|
sTemp := Upper( RTrim( _pp_NextToken( sRule ) ) ) // Not by refernce because of SubStr() below!!!
|
|
BREAK
|
|
ELSEIF s1 == '.' // Might pull decimal numbers...
|
|
sTemp := RTrim( _pp_NextToken( sRule ) ) // Not by refernce because of SubStr() below!!!
|
|
BREAK
|
|
ELSEIF IsDigit( s1 )
|
|
sTemp := RTrim( _pp_NextToken( sRule ) ) // Not by refernce because of SubStr() below!!!
|
|
BREAK
|
|
ELSEIF s1 == ']' .AND. nOptional == 0
|
|
sTemp := ']'
|
|
BREAK
|
|
ELSEIF s1 $ "+-*/:=^!&(){}@,|>#%?$"
|
|
sTemp := s1
|
|
BREAK
|
|
ENDIF
|
|
ENDIF
|
|
|
|
END SEQUENCE
|
|
|
|
//TraceLog( sTemp )
|
|
|
|
IF sTemp != NIL
|
|
IF ! ( sAnchor == NIL )
|
|
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
|
|
|
|
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sAnchor := sTemp // Next Anchor
|
|
sRule := SubStr( sRule, Len( sAnchor ) + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
sTemp := NIL // Resetting.
|
|
LOOP
|
|
ENDIF
|
|
|
|
IF s1 == '<'
|
|
//nId++
|
|
nId := Len( aMarkers ) + 1
|
|
|
|
/* Skip trailing spaces...*/
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
DO CASE
|
|
CASE SubStr( sRule, 1, 1 ) == '*'
|
|
cType := '*'
|
|
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
nNext := At( '*', sRule )
|
|
|
|
IF nNext > 1
|
|
sMarker := RTrim( Left( sRule, nNext - 1 ) )
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, nNext + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
IF Left( sRule, 1 ) == '>'
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<*' : '] + sRule + "'" )
|
|
ENDIF
|
|
|
|
aMatch := { nId, nOptional, sAnchor, cType, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<*' : '] + sRule + "'" )
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
CASE SubStr( sRule, 1, 1 ) == '('
|
|
cType := '('
|
|
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
nNext := At( ')', sRule )
|
|
IF nNext > 1
|
|
sMarker := RTrim( Left( sRule, nNext - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, nNext + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
IF Left( sRule, 1 ) == '>'
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<(' : '] + sRule + "'" )
|
|
ENDIF
|
|
|
|
aMatch := { nId, nOptional, sAnchor, cType, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<(' : '] + sRule + "'" )
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
CASE SubStr( sRule, 1, 1 ) == '!'
|
|
cType := '!'
|
|
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
nNext := At( '!', sRule )
|
|
IF nNext > 1
|
|
sMarker := RTrim( Left( sRule, nNext - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, nNext + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
IF Left( sRule, 1 ) == '>'
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<!' : '] + sRule + "'" )
|
|
ENDIF
|
|
|
|
aMatch := { nId, nOptional, sAnchor, cType, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: '<!' : '] + sRule + "'" )
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
OTHERWISE
|
|
cType := NIL // Reset - not known yet.
|
|
ENDCASE
|
|
|
|
nCloseAt := At( '>', sRule )
|
|
nNext := At( ',', sRule )
|
|
|
|
IF nNext > 1 .AND. nNext < nCloseAt
|
|
sDots := LTrim( SubStr( sRule, nNext + 1 ) )
|
|
IF Left( sDots, 1 ) == '.'
|
|
sDots := LTrim( SubStr( sDots, 2 ) )
|
|
IF Left( sDots, 1 ) == '.'
|
|
sDots := LTrim( SubStr( sDots, 2 ) )
|
|
IF Left( sDots, 1 ) == '.'
|
|
sDots := LTrim( SubStr( sDots, 2 ) )
|
|
IF Left( sDots, 1 ) != '>'
|
|
nNext := 0
|
|
ENDIF
|
|
ELSE
|
|
nNext := 0
|
|
ENDIF
|
|
ELSE
|
|
nNext := 0
|
|
ENDIF
|
|
ELSE
|
|
nNext := 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nNext > 1 .AND. nNext < nCloseAt
|
|
//? "Extended: '" + sRule + "'"
|
|
cType := 'A'
|
|
|
|
sMarker := RTrim( Left( sRule, nNext - 1 ) )
|
|
ExtractLeadingWS( @sMarker )
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
|
|
sRule := sDots
|
|
|
|
nNext := 0
|
|
nCloseAt := 1
|
|
ELSE
|
|
nNext := At( ':', sRule )
|
|
ENDIF
|
|
|
|
IF nNext > 0 .AND. nNext < nCloseAt
|
|
cType := ':'
|
|
|
|
//? "LIST"
|
|
sMarker := RTrim( Left( sRule, nNext - 1 ) )
|
|
ExtractLeadingWS( @sMarker )
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, nNext + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
aWords := {}
|
|
DO WHILE ! ( Left( sRule, 1 ) == '>' )
|
|
nNext := At( ',', sRule )
|
|
IF nNext > 0 .AND. nNext < At( '>', sRule )
|
|
//? "Added: " + Left( sRule, nNext - 1 )
|
|
aAdd( aWords, Upper( RTrim( Left( sRule, nNext - 1 ) ) ) )
|
|
sRule := SubStr( sRule, nNext + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
LOOP
|
|
ELSE
|
|
nCloseAt := At( '>', sRule )
|
|
IF nCloseAt > 0
|
|
//? "Last: " + Left( sRule, nCloseAt - 1 )
|
|
aAdd( aWords, Upper( RTrim( Left( sRule, nCloseAt - 1 ) ) ) )
|
|
EXIT
|
|
ELSE
|
|
Alert( [ERROR! Unblanced MP: ''<:' at: ] + sRule )
|
|
RETURN .F.
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
IF nCloseAt > 0
|
|
IF cType == NIL
|
|
cType := '<'
|
|
ENDIF
|
|
|
|
IF Len( aMarkers ) < nId
|
|
sMarker := RTrim( Left( sRule, nCloseAt - 1 ) )
|
|
ExtractLeadingWS( @sMarker )
|
|
|
|
#ifdef __XHARBOUR__
|
|
IF ( nMarkerID := aScan( aMarkers, sMarker, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nMarkerID := aScan( aMarkers, {|s| s == sMarker } ) ) > 0
|
|
#endif
|
|
nId := nMarkerID
|
|
ELSE
|
|
aAdd( aMarkers, sMarker )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, nCloseAt + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
aMatch := { nId, nOptional, sAnchor, cType, aWords }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
aWords := NIL // Reset.
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
ELSE
|
|
Alert( [ERROR! Unbalanced MP: '<' at: ] + sRule )
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
|
|
ELSEIF s1 == '['
|
|
|
|
IF ! ( sAnchor == NIL )
|
|
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
|
|
|
|
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
// No need to negate nOptional, because we start a new optional group below...
|
|
ENDIF
|
|
|
|
nOptional := Abs( nOptional )
|
|
nOptional++
|
|
//? "Optional:", nOptional
|
|
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
|
|
ELSEIF s1 == ']'
|
|
|
|
IF ! ( sAnchor == NIL )
|
|
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
|
|
|
|
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
// No need to negate nOptional, because we close optional group below...
|
|
ENDIF
|
|
|
|
IF nOptional > 0
|
|
nOptional--
|
|
nOptional := (-nOptional)
|
|
ELSE
|
|
nOptional++
|
|
ENDIF
|
|
|
|
sRule := SubStr( sRule, 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
sAnchor := NIL
|
|
LOOP
|
|
|
|
ELSE
|
|
|
|
// Some token sneaked in ...
|
|
TraceLog( "UnExpected Case: " + sRule + "[" + Str( ProcLine() ) + "]" )
|
|
Alert( [UnExpected Case: ] + sRule + "[" + Str( ProcLine() ) + "]" )
|
|
|
|
IF ! ( sAnchor == NIL )
|
|
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
|
|
|
|
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
/* Next dependant optional will be marked as trailing. */
|
|
IF nOptional > 0
|
|
nOptional := ( -nOptional )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sAnchor := _pp_NextToken( @sRule )
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF sAnchor != NIL
|
|
aMatch := { 0, 0, sAnchor, NIL, NIL }
|
|
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
|
|
aAdd( aRule[2], aMatch )
|
|
|
|
// No need to negate nOptional, because last token, and nOptional must equal 0 here!
|
|
ENDIF
|
|
|
|
IF nOptional <> 0
|
|
TraceLog( "ERROR Unclose Optional group, nOptional = " + Str( nOptional, 3 ), aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5] )
|
|
Alert( [ERROR! Unclosed Optional group, nOptional = ] + Str( nOptional, 3 ) + " [" + Str( ProcLine(0), 4 ) + "]" )
|
|
BREAK
|
|
ENDIF
|
|
|
|
aAdd( aRules, aRule )
|
|
|
|
/*
|
|
nMarkerID
|
|
nOPTIONAL
|
|
sAnchor
|
|
cTYPE
|
|
aLIST
|
|
*/
|
|
|
|
// *** Processing STOP Words below!
|
|
|
|
/*
|
|
? ''
|
|
FOR Counter := 1 TO nId
|
|
?? aMarkers[Counter]
|
|
IF Counter < nId
|
|
?? ' , '
|
|
ENDIF
|
|
NEXT
|
|
|
|
nMatches := Len( aRule[2] )
|
|
FOR Counter := 1 TO nMatches
|
|
? aRule[2][Counter][1], aRule[2][Counter][2], aRule[2][Counter][3], aRule[2][Counter][4], aRule[2][Counter][5]
|
|
NEXT
|
|
WAIT
|
|
*/
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
//? [RP: "] + sResult + '"'
|
|
|
|
//TraceLog( sResult )
|
|
|
|
nOptional := 0
|
|
aModifiers := {}
|
|
aValues := Array( nId )
|
|
nId := 0
|
|
sPad := ''
|
|
|
|
DO WHILE ! ( sResult == '' )
|
|
nOffset := 0
|
|
nOptionalAt := At( '[', sResult )
|
|
WHILE nOPtionalAt > 1 .AND. SubStr( sResult, nOptionalAt - 1, 1 ) == '\'
|
|
nOffset := nOptionalAt
|
|
nOptionalAt := At( '[', sResult, nOffset + 1 )
|
|
ENDDO
|
|
|
|
nOffset := 0
|
|
IF nOptionalAt == 0
|
|
nMarkerAt := At( '<', sResult )
|
|
WHILE nMarkerAt > 0
|
|
IF nMarkerAt > 1 .AND. SubStr( sResult, nMarkerAt - 1, 1 ) == '\'
|
|
nOffset := nMarkerAt
|
|
nMarkerAt := At( '<', sResult, nOffset + 1 )
|
|
//TraceLog( sResult, nOffset, nMarkerAt )
|
|
ELSEIF nMarkerAt > 0 .AND. SubStr( sResult, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
|
nOffset := nMarkerAt + 1
|
|
nMarkerAt := At( '<', sResult, nOffset + 1 )
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ELSE
|
|
nMarkerAt := At( '<', sResult )
|
|
WHILE nMarkerAt > 0
|
|
IF nMarkerAt > 1 .AND. nMarkerAt < nOptionalAt .AND. SubStr( sResult, nMarkerAt - 1, 1 ) == '\'
|
|
nOffset := nMarkerAt
|
|
nMarkerAt := At( '<', sResult, nOffset + 1 )
|
|
//TraceLog( sResult, nOffset, nMarkerAt )
|
|
ELSEIF nMarkerAt > 0 .AND. nMarkerAt < nOptionalAt .AND. SubStr( sResult, nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
|
|
nOffset := nMarkerAt + 1
|
|
nMarkerAt := At( '<', sResult, nOffset + 1 )
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF nMarkerAt > 0
|
|
IF nMarkerAt > nOptionalAt
|
|
nMarkerAt := 0
|
|
ELSE
|
|
nOptionalAt := 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nAt := IIF( nOptionalAt == 0, nMarkerAt, nOptionalAt )
|
|
|
|
IF nOptional == 0
|
|
nCloseOptionalAt := 0
|
|
ELSE
|
|
nOffset := 0
|
|
IF nAt == 0
|
|
nCloseOptionalAt := At( ']', sResult )
|
|
WHILE nCloseOptionalAt > 1 .AND. SubStr( sResult, nCloseOptionalAt - 1, 1 ) == '\'
|
|
nCloseOptionalAt := At( ']', sResult, nCloseOptionalAt + 1 )
|
|
ENDDO
|
|
ELSE
|
|
nCloseOptionalAt := At( ']', sResult )
|
|
WHILE nCloseOptionalAt > 1 .AND. nCloseOptionalAt <= nAt .AND. SubStr( sResult, nCloseOptionalAt - 1, 1 ) == '\'
|
|
nCloseOptionalAt := At( ']', sResult, nCloseOptionalAt + 1 )
|
|
ENDDO
|
|
|
|
IF nCloseOptionalAt > 0
|
|
IF nCloseOptionalAt > nAt
|
|
nCloseOptionalAt := 0
|
|
ELSE
|
|
nAt := 0
|
|
nOptionalAt := 0
|
|
nMarkerAt := 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//? "RP Scan:", nAt, nMarkerAt, nOptionalAt, nCloseOptionalAt, sResult
|
|
//WAIT
|
|
|
|
IF nCloseOptionalAt > 0
|
|
IF nCloseOptionalAt > 1
|
|
sTemp := Left( sResult, nCloseOptionalAt - 1 )
|
|
aRP := { nOptional, sPad + sTemp }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ENDIF
|
|
|
|
nOptional := 0 //--
|
|
sResult := SubStr( sResult, nCloseOptionalAt + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
LOOP
|
|
ENDIF
|
|
|
|
IF nOptionalAt > 0
|
|
|
|
IF nOptional <> 0
|
|
Alert( [ERROR! Nested repeatable RP.;] + sResult )
|
|
BREAK
|
|
ELSE
|
|
nOptional := -1
|
|
ENDIF
|
|
|
|
/* The text preceding this new repeatable group. */
|
|
IF nOptionalAt > 1
|
|
sTemp := Left( sResult, nOptionalAt - 1 )
|
|
aRP := { 0, sPad + sTemp }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ELSE
|
|
aRP := { 0, "" }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ENDIF
|
|
|
|
sResult := SubStr( sResult, nOptionalAt + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
LOOP
|
|
|
|
ELSEIF nMarkerAt > 0
|
|
|
|
/* Resetting. */
|
|
nType := 0
|
|
|
|
IF nMarkerAt == 1 .OR. ( nMarkerAt == 2 .AND. Left( sResult, 1 ) == '#' )
|
|
/* I consider this a Clipper bug - it produces .ppo without the padding if none suplied,
|
|
but treats it as if padding existed! - so at least we will generate the space. */
|
|
|
|
//IF /*Len( aResult ) > 0 .AND. ( ValType( aTail( aResult )[2] ) == 'N' .OR. aTail( aResult )[2] == "" ) .AND.*/ Len( sPad ) > 0
|
|
IF bStrict
|
|
aRP := { nOptional, " " }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ELSEIF Len( sPad ) > 0
|
|
aRP := { nOptional, sPad }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF nMarkerAt > 1
|
|
sTemp := RTrim( Left( sResult, nMarkerAt - 1 ) )
|
|
IF Right( sTemp, 1 ) == '#'
|
|
nType := 2
|
|
IF nMarkerAt > 2
|
|
sTemp := Left( sTemp, Len( sTemp ) - 1 )
|
|
aRP := { nOptional, sPad + DropExtraTrailingWS( sTemp ) }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ENDIF
|
|
ELSE
|
|
sTemp := Left( sResult, nMarkerAt - 1 )
|
|
aRP := { nOptional, sPad + DropExtraTrailingWS( sTemp ) }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
sResult := SubStr( sResult, nMarkerAt + 1 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
/* <-x-> Ommit */
|
|
IF SubStr( sResult, 1, 1 ) == '-'
|
|
|
|
sResult := SubStr( sResult, 2 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
nNext := At( ">", sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<-' : '] + sTemp + "'" )
|
|
ELSE
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
IF Right( sTemp, 1 ) == '-'
|
|
nType := 0
|
|
sTemp := RTrim( Left( sTemp, Len( sTemp ) - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '<-' : '] + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* #<x> Dumb */
|
|
ELSEIF nType == 2
|
|
|
|
nNext := At( '>', sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '#<' ] )
|
|
ELSE
|
|
/*nType := 2*/
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '#<' : ] + sTemp )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <"x"> Normal */
|
|
ELSEIF SubStr( sResult, 1, 1 ) == '"'
|
|
|
|
sResult := SubStr( sResult, 2 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
nNext := At( ">", sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<"' : '] + sTemp + "'" )
|
|
ELSE
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
IF Right( sTemp, 1 ) == '"'
|
|
nType := 3
|
|
sTemp := RTrim( Left( sTemp, Len( sTemp ) - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '<"' : '] + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <(x)> Smart */
|
|
ELSEIF SubStr( sResult, 1, 1 ) == '('
|
|
|
|
sResult := SubStr( sResult, 2 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
nNext := At( ">", sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<(' : '] + sTemp + "'" )
|
|
ELSE
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
IF Right( sTemp, 1 ) == ')'
|
|
nType := 4
|
|
sTemp := RTrim( Left( sTemp, Len( sTemp ) - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '<(' : '] + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <{x}> Blockify */
|
|
ELSEIF SubStr( sResult, 1, 1 ) == '{'
|
|
|
|
sResult := SubStr( sResult, 2 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
nNext := At( ">", sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<{' : '] + sTemp + "'" )
|
|
ELSE
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
IF Right( sTemp, 1 ) == '}'
|
|
nType := 5
|
|
sTemp := RTrim( Left( sTemp, Len( sTemp ) - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '<{' : '] + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* <.x.> Logify */
|
|
ELSEIF SubStr( sResult, 1, 1 ) == '.'
|
|
|
|
sResult := SubStr( sResult, 2 )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
nNext := At( ">", sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<.' : '] + sResult + "'" )
|
|
ELSE
|
|
sTemp := RTrim( Left( sResult, nNext - 1 ) )
|
|
IF Right( sTemp, 1 ) == '.'
|
|
nType := 6
|
|
sTemp := RTrim( Left( sTemp, Len( sTemp ) - 1 ) )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
Alert( [ERROR! Unrecognized RP: '<.' : '] + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
nNext := At( '>', sResult )
|
|
IF nNext == 0
|
|
Alert( [ERROR! Unbalanced RP: '<' : '] + sResult + "'" )
|
|
ELSE
|
|
/* <x> Regular */
|
|
nType := 1
|
|
sTemp := Left( sResult, nNext - 1 )
|
|
|
|
#ifdef __XHARBOUR__
|
|
nId := aScan( aMarkers, sTemp, , , .T. )
|
|
#else
|
|
nId := aScan( aMarkers, {|s| s == sTemp } )
|
|
#endif
|
|
|
|
sResult := SubStr( sResult, nNext + 1 )
|
|
ExtractLeadingWS( @sResult, @sPad )
|
|
IF nId == 0
|
|
aEval( aMarkers, {|sMarker| TraceLog( sResult, sTemp, sMarker ) } )
|
|
Alert( [ERROR! Unrecognized RP: '<']+" : '" + sTemp + "'" )
|
|
ELSE
|
|
aRP := { nOptional, nId }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, nType )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//? "RP #", nID, "Optional:", nOptional
|
|
|
|
IF nOptional < 0
|
|
nOptional := nID
|
|
aRP[1] := nOptional
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
aRP := { 0, sPad + sResult }
|
|
aAdd( aResult, aRP )
|
|
aAdd( aModifiers, -1 )
|
|
sResult := ''
|
|
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
IF nOptional <> 0
|
|
TraceLog( "ERROR! Internal logic failure, nOptional = " + Str( nOptional, 3 ) + " [" + Str( ProcLine(0), 4 ) + "]", aRP[1], aRP[2] )
|
|
Alert( [ERROR! Internal logic failure, nOptional = ] + Str( nOptional, 3 ) + " [" + Str( ProcLine(0), 4 ) + "]" )
|
|
BREAK
|
|
ENDIF
|
|
|
|
|
|
/* Processing Repeatable Flag of Match Markers. */
|
|
/* Note additional correction done in subsequent processing of STOP Words, below... */
|
|
nResults := Len( aResult )
|
|
FOR Counter := nResults TO 1 STEP -1
|
|
aRP := aResult[Counter]
|
|
|
|
/* Correcting the ID of the Marker this result depends upon. */
|
|
IF aRP[1] > 0
|
|
nOptional := aRP[1]
|
|
nMarker := aRP[2]
|
|
|
|
//? "Repeatable: ", nMarker, "Root: ", nOptional
|
|
|
|
IF ValType( nMarker ) == 'N'
|
|
nTempMP := 0
|
|
WHILE ( nTempMP := aScan( aRule[2], {|aMP| aMP[1] == nMarker .OR. aMP[1] - 1000 == nMarker }, nTempMP + 1 ) ) > 0
|
|
nMP := nTempMP
|
|
WHILE aRule[2][nMP][2] < 0
|
|
IF aRule[2][nMP][1] >= 0
|
|
|
|
/* Mark as Repeatable. */
|
|
IF aRule[2][nMP][1] < 1000
|
|
aRule[2][nMP][1] += ( 1000 )
|
|
//? "Flagged:", nMP, "As:", aRule[2][nMP][1]
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nMP--
|
|
ENDDO
|
|
IF aRule[2][nMP][2] == 0
|
|
TraceLog( "Warning - Result #" + Str( Counter ) + " marked REPEATABLE but root #" + Str( nMarker ) + " is not OPTIONAL!", sRuleCopy )
|
|
//aRule[2][nMP][2] := 1
|
|
ELSEIF aRule[2][nMP][1] < 1000
|
|
aRule[2][nMP][1] += ( 1000 )
|
|
//? "Flagged:", nMP, "As:", aRule[2][nMP][1]
|
|
ENDIF
|
|
ENDDO
|
|
//WAIT
|
|
ENDIF
|
|
ELSEIF aRP[1] < 0
|
|
aRP[1] := nOptional
|
|
ENDIF
|
|
|
|
IF ValType( aRP[2] ) == 'C'
|
|
aRP[2] := StrTran( aRP[2], '\\', '~' )
|
|
aRP[2] := StrTran( aRP[2], '\', '' )
|
|
aRP[2] := StrTran( aRP[2], '~', '\' )
|
|
//? "RP #", Counter, aRP[1], '"' + aRP[2] + '"'
|
|
ELSE
|
|
//? "RP #", Counter, aRP[1], aRP[2]
|
|
ENDIF
|
|
NEXT
|
|
|
|
//WAIT
|
|
|
|
// Processing STOP words for NON Anchored optionals.
|
|
nLastOptional := 0
|
|
nPending := 0
|
|
nMatches := Len( aRule[2] )
|
|
|
|
FOR Counter := 1 TO nMatches
|
|
aMatch := aRule[2][Counter]
|
|
|
|
/* If optional, which is *not* used as a result, Clipper makes it repeatable. */
|
|
IF aMatch[1] < 1000 .AND. aMatch[1] > 0 .AND. aMatch[2] > 0
|
|
IF aScan( aResult, { |aRP| ValType( aRP[2] ) == 'N' .AND. aRP[2] == aMatch[1] } ) == 0
|
|
TraceLog( "Warning - Marker #" + Str( aMatch[1] ) + " not utilized in Result Rule", sRuleCopy )
|
|
aMatch[1] += 1000
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* Optional group start (marker), no anchor, and not a restricted pattern - have to build stop words list! */
|
|
IF aMatch[1] > 0 .AND. aMatch[2] > 0 .AND. aMatch[3] == NIL .AND. aMatch[4] != ':'
|
|
|
|
aWords := {}
|
|
nOptional := aMatch[2]
|
|
nLastOptional := nOptional
|
|
|
|
/*
|
|
nMP := Counter - 1
|
|
WHILE nMP > 0
|
|
aMatch := aRule[2][nMP]
|
|
IF aMatch[2] >= 0 .AND. aMatch[2] < nOptional
|
|
EXIT
|
|
ENDIF
|
|
IF aMatch[2] > 0 .AND. aMatch[2] == nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
nMP--
|
|
ENDDO
|
|
*/
|
|
|
|
nMP := Counter + 1
|
|
WHILE nMP <= nMatches
|
|
aMatch := aRule[2][nMP]
|
|
IF aMatch[2] >= 0 .AND. aMatch[2] < nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
IF aMatch[2] > 0 .AND. aMatch[2] == nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
nMP++
|
|
ENDDO
|
|
|
|
IF Len( aWords ) > 0
|
|
aRule[2][Counter][5] := aWords
|
|
ENDIF
|
|
|
|
ELSEIF aMatch[2] > 0 .AND. aMatch[2] - nLastOptional == 2 // Head of new group missing because nested optional is first element.
|
|
nPending := - ( aMatch[2] - 1 )
|
|
|
|
ELSEIF nPending != 0 .AND. aMatch[1] > 0 .AND. aMatch[2] == nPending .AND. aMatch[3] == NIL .AND. aMatch[4] != ':'
|
|
nPending := 0
|
|
aWords := {}
|
|
nOptional := -aMatch[2]
|
|
nLastOptional := nOptional
|
|
|
|
nMP := Counter - 1
|
|
WHILE nMP > 0
|
|
aMatch := aRule[2][nMP]
|
|
IF aMatch[2] >= 0 .AND. aMatch[2] < nOptional
|
|
EXIT
|
|
ENDIF
|
|
IF aMatch[2] > 0 .AND. aMatch[2] == nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
nMP--
|
|
ENDDO
|
|
|
|
nMP := Counter + 1
|
|
WHILE nMP <= nMatches
|
|
aMatch := aRule[2][nMP]
|
|
IF aMatch[2] >= 0 .AND. aMatch[2] < nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
IF aMatch[2] > 0 .AND. aMatch[2] == nOptional
|
|
IF aMatch[3] != NIL
|
|
aAdd( aWords, Upper( aMatch[3] ) )
|
|
ELSEIF aMatch[4] == ':'
|
|
nWords := Len( aMatch[5] )
|
|
FOR nWord := 1 TO nWords
|
|
aAdd( aWords, aMatch[5][nWord] )
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
nMP++
|
|
ENDDO
|
|
|
|
IF Len( aWords ) > 0
|
|
aRule[2][Counter][5] := aWords
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF aMatch[3] != NIL
|
|
aMatch[3] := StrTran( aMatch[3], '\', '' )
|
|
ENDIF
|
|
|
|
//? aRule[1], aRule[2][Counter][1], aRule[2][Counter][2], aRule[2][Counter][3], aRule[2][Counter][4], aRule[2][Counter][5]
|
|
NEXT
|
|
//WAIT
|
|
|
|
aAdd( aResults, { aResult, aModifiers, aValues } )
|
|
|
|
//TraceLog( "Finished" )
|
|
|
|
RETURN NIL
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION RemoveDefine( sDefine )
|
|
|
|
LOCAL nId, nLen
|
|
|
|
sDefine := AllTrim( sDefine )
|
|
|
|
IF ( nId := aScan( aDefRules, {|aDefine| aDefine[1] == sDefine } ) ) > 0
|
|
aDel( aDefRules, nId )
|
|
aSize( aDefRules, ( nLen := Len( aDefRules ) - 1 ) )
|
|
aDel( aDefResults, nId )
|
|
aSize( aDefResults, nLen )
|
|
ENDIF
|
|
|
|
RETURN nId
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION CompileDefine( sRule )
|
|
|
|
LOCAL sKey, sResult, aRule, nCloseAt, nId, sMarker, nCommaAt, aMP
|
|
LOCAL sToken, aRPs, sAnchor, aMarkers := {}, aResult, sPad, sText := ""
|
|
|
|
ExtractLeadingWS( @sRule )
|
|
|
|
sKey := _pp_NextToken( @sRule )
|
|
|
|
// TraceLog( sKey, sRule )
|
|
// ? "KEY: '" + sKey + "'"
|
|
// ? "Rest: '" + sRule + "'"
|
|
|
|
DropTrailingWS( @sKey, @sPad )
|
|
|
|
IF ( nId := aScan( aDefRules, {|aDefine| aDefine[1] == sKey } ) ) > 0
|
|
Alert( [Redefinition of ] + "'" + sKey + "'" + [ in file: ] + s_sFile )
|
|
aRule := aDefRules[nId]
|
|
//aRule[1] := sKey
|
|
aRule[2] := {}
|
|
aResult := aDefResults[nId]
|
|
aResult[1] := {} // aMPs
|
|
aResult[2] := {} // aModifiers
|
|
aResult[3] := {} // Markers place holders
|
|
ELSE
|
|
aRule := { sKey, {}, .T. }
|
|
aAdd( aDefRules, aRule )
|
|
aResult := { {}, {}, {} } //1=MPs, 2=Modifiers 3=Marker place holders
|
|
aAdd( aDefResults, aResult )
|
|
ENDIF
|
|
|
|
IF sPad == "" .AND. Left( sRule, 1 ) == '(' .AND. ( nCloseAt := At( ')', sRule ) ) > 0
|
|
|
|
/*Pseudo Function. */
|
|
sResult := SubStr( sRule, nCloseAt + 1 )
|
|
sRule := SubStr( sRule, 2, nCloseAt - 2 )
|
|
ExtractLeadingWS( @sRule )
|
|
DropTrailingWS( @sRule )
|
|
ExtractLeadingWS( @sResult )
|
|
|
|
/* No paramaets */
|
|
IF sRule == ''
|
|
|
|
//? "Added: '" + aRule[1] + "'"
|
|
//WAIT
|
|
aAdd( aRule[2], { 0, 0 , '(', NIL, NIL } )
|
|
aAdd( aRule[2], { 0, 0 , ')', NIL, NIL } )
|
|
|
|
IF sResult == ''
|
|
aResult[1] := NIL
|
|
aResult[2] := NIL
|
|
aResult[3] := NIL
|
|
ELSE
|
|
aResult[1] := { { 0, sResult } }
|
|
ENDIF
|
|
ELSE
|
|
|
|
//? "***'" + sRule + "'"
|
|
//WAIT
|
|
nId := 1
|
|
sAnchor := '('
|
|
|
|
WHILE ( nCommaAt := At( ',', sRule ) ) > 0
|
|
sMarker := Left( sRule, nCommaAt - 1 )
|
|
sRule := SubStr( sRule, nCommaAt + 1 )
|
|
ExtractLeadingWS( @sRule )
|
|
DropTrailingWS( @sMarker )
|
|
|
|
//? nId, "Marker: '" + sMarker + "'"
|
|
//WAIT
|
|
aAdd( aMarkers, sMarker )
|
|
aMP := { nId, 0, sAnchor, '<', NIL }
|
|
aAdd( aRule[2], aMP )
|
|
|
|
sAnchor := ','
|
|
nId++
|
|
ENDDO
|
|
|
|
aAdd( aMarkers, sRule )
|
|
aMP := { nId, 0, sAnchor, '<', NIL }
|
|
aAdd( aRule[2], aMP )
|
|
|
|
aMP := { 0, 0, ')', NIL, NIL }
|
|
aAdd( aRule[2], aMP )
|
|
|
|
/*----------------------------------------- */
|
|
|
|
aRPs := {}
|
|
|
|
IF sResult == ''
|
|
|
|
aResult[1] := NIL
|
|
aResult[2] := NIL
|
|
aResult[3] := Array( Len( aMarkers ) )
|
|
|
|
ELSE
|
|
|
|
WHILE ( sToken := _pp_NextToken( @sResult ) ) != NIL
|
|
DropTrailingWS( @sToken, @sPad )
|
|
|
|
//? "Token: '" + sToken + "'"
|
|
#ifdef __XHARBOUR__
|
|
IF ( nId := aScan( aMarkers, sToken, , , .T. ) ) > 0
|
|
#else
|
|
IF ( nId := aScan( aMarkers, {|sMarker| sMarker == sToken } ) ) > 0
|
|
#endif
|
|
IF ! ( sText == "" )
|
|
aAdd( aRPs, { 0, sText } )
|
|
aAdd( aResult[2], -1 )
|
|
sText := sPad
|
|
ENDIF
|
|
|
|
aAdd( aRPs, { 0, nId } )
|
|
aAdd( aResult[2], 1 )
|
|
ELSE
|
|
sText += sToken + sPad
|
|
ENDIF
|
|
|
|
//? "ID:", nID
|
|
//WAIT
|
|
ENDDO
|
|
|
|
IF ! ( sText == "" )
|
|
aAdd( aRPs, { 0, sText } )
|
|
aAdd( aResult[2], -1 )
|
|
ENDIF
|
|
|
|
aResult[1] := aRPs
|
|
aSize( aResult[3], Len( aMarkers ) )
|
|
aFill( aResult[3], NIL )
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
/* Plain. */
|
|
|
|
sResult := sRule
|
|
|
|
IF sResult == ''
|
|
aResult[1] := NIL
|
|
aResult[2] := NIL
|
|
aResult[3] := NIL
|
|
ELSE
|
|
aResult[1] := { { 0, sResult } }
|
|
aResult[2] := { -1 }
|
|
aResult[3] := NIL
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//? "Defines: ", Len( aDefRules )
|
|
//? "Results: ", Len( aDefResults )
|
|
//WAIT
|
|
|
|
RETURN Len( aDefRules )
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifndef USE_C_BOOST
|
|
|
|
FUNCTION ExtractLeadingWS( sLine, sWS )
|
|
|
|
LOCAL Counter, cChar, nLen := Len( sLine )
|
|
|
|
//? "Removing Leading: '" + sLine + "'"
|
|
|
|
sWS := ''
|
|
FOR Counter := 1 TO nLen
|
|
cChar := SubStr( sLine, Counter, 1 )
|
|
IF cChar == ' ' //$ ( ' ' + Chr(9) ) // Tabs converted to spaces
|
|
sWS += cChar
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF Counter > 1
|
|
sLine := SubStr( sLine, Counter )
|
|
ENDIF
|
|
|
|
//? "Removed: '" + sWs + "' sLine: " + sLine
|
|
|
|
RETURN sWS
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifndef USE_C_BOOST
|
|
|
|
FUNCTION DropTrailingWS( sLine, sWS )
|
|
|
|
LOCAL nLenSource, nLen := Len( sLine ), cChar
|
|
|
|
nLenSource := nLen
|
|
|
|
//? "Before Drop: '" + sLine + "'"
|
|
|
|
/* Tabs are converted to spaces at PP_PreProFile() */
|
|
|
|
WHILE nLen > 0 .AND. ( cChar := SubStr( sLine, nLen, 1 ) ) == ' ' //$ ( ' ' + Chr(9) ) // Tabs converted to spaces
|
|
nLen--
|
|
ENDDO
|
|
|
|
sLine := Left( sLine, nLen )
|
|
sWS := Space( nLenSource - nLen )
|
|
|
|
//? "After Drop: '" + sLine + "'"
|
|
|
|
RETURN sLine
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifndef USE_C_BOOST
|
|
|
|
FUNCTION DropExtraTrailingWS( sLine )
|
|
|
|
LOCAL nLen := Len( sLine )
|
|
/* Tabs are converted to spaces at PP_PreProFile() */
|
|
|
|
//? "Before Extra: '" + sLine + "'"
|
|
|
|
WHILE nLen > 2 .AND. ( SubStr( sLine, nLen, 1 ) == ' ' /* $ ( ' ' + Chr(9) ) */ ) .AND. ;
|
|
( SubStr( sLine, nLen - 1, 1 ) == ' ' ) //$ ( ' ' + Chr(9) ) )
|
|
nLen--
|
|
ENDDO
|
|
|
|
sLine := Left( sLine, nLen )
|
|
|
|
RETURN sLine
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION SetIfDef( sDefine, bExist )
|
|
|
|
LOCAL nId
|
|
|
|
nIfDef++
|
|
aSize( abIfDef, nIfDef )
|
|
|
|
DropTrailingWS( @sDefine )
|
|
|
|
nId := aScan( aDefRules, {|aDefine| aDefine[1] == sDefine } )
|
|
IF bExist
|
|
abIfDef[nIfDef] := ( nId > 0 )
|
|
ELSE
|
|
abIfDef[nIfDef] := ( nId == 0 )
|
|
ENDIF
|
|
|
|
//? nIfDef, nId, sDefine, abIfDef[nIfDef]
|
|
|
|
RETURN nIfDef
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION CompileToCCH( sSource )
|
|
|
|
LOCAL hCCH, Counter, aRules, nRules, nRule, aRule, nMatches, nMatch, aMatch, nWords, nWord, aWords
|
|
LOCAL aResults, nResults, nResult, aResult, nRPs, nRP, aRP, nIDs, nID, nModifier
|
|
LOCAL sRulesArray, sResultsArray, sExt
|
|
|
|
sExt := SubStr( sSource, RAt( '.', sSource ) )
|
|
IF ! ( sExt == '' )
|
|
hCCH := FCreate( StrTran( sSource, sExt, ".cch" ) )
|
|
ELSE
|
|
hCCH := FCreate( sSource + ".cch" )
|
|
ENDIF
|
|
|
|
FWrite( hCCH, "FUNCTION InitRules()" + CRLF )
|
|
|
|
FOR Counter := 1 TO 3
|
|
IF Counter == 1
|
|
aRules := aDefRules
|
|
sRulesArray := "aDefRules"
|
|
FWrite( hCCH, CRLF + "/* Defines */" + CRLF + "aDefRules := {}" + CRLF )
|
|
ELSEIF Counter == 2
|
|
aRules := aTransRules
|
|
sRulesArray := "aTransRules"
|
|
FWrite( hCCH, CRLF + "/* Translates */" + CRLF + "aTransRules := {}" + CRLF )
|
|
ELSE
|
|
aRules := aCommRules
|
|
sRulesArray := "aCommRules"
|
|
FWrite( hCCH, CRLF + "/* Commands */" + CRLF + "aCommRules := {}" + CRLF )
|
|
ENDIF
|
|
|
|
nRules := Len( aRules )
|
|
|
|
FOR nRule := 1 TO nRules
|
|
aRule := aRules[nRule]
|
|
|
|
FWrite( hCCH, "aAdd( " + sRulesArray + ", { '" + aRule[1] + "' " )
|
|
|
|
IF aRule[2] == NIL
|
|
nMatches := 0
|
|
ELSE
|
|
nMatches := Len( aRule[2] )
|
|
ENDIF
|
|
|
|
IF nMatches == 0
|
|
FWrite( hCCH, ", " )
|
|
ELSE
|
|
FWrite( hCCH, ", { " )
|
|
FOR nMatch := 1 TO nMatches
|
|
aMatch := aRule[2][nMatch] //{ nId, nOptional, sAnchor, cType, aWords }
|
|
FWrite( hCCH, "{ " + Str( aMatch[1], 4) + ", " + Str(aMatch[2],3) + ", " + IF( aMatch[3] == NIL, "NIL", "'" + aMatch[3] + "'" ) + ", " + IF( aMatch[4] == NIL, "NIL", "'" + aMatch[4] + "'" ) + ", " )
|
|
IF aMatch[5] == NIL
|
|
FWrite( hCCH, "NIL" )
|
|
ELSE
|
|
aWords := aMatch[5]
|
|
nWords := Len( aWords )
|
|
FWrite( hCCH, "{ " )
|
|
FOR nWord := 1 TO nWords
|
|
FWrite( hCCH, "'" + aWords[nWord] + "'" )
|
|
IF nWord < nWords
|
|
FWrite( hCCH, ", " )
|
|
ENDIF
|
|
NEXT
|
|
FWrite( hCCH, " }" )
|
|
ENDIF
|
|
FWrite( hCCH, " }" )
|
|
|
|
IF nMatch < nMatches
|
|
FWrite( hCCH, ", " )
|
|
ENDIF
|
|
NEXT
|
|
|
|
FWrite( hCCH, " }" )
|
|
ENDIF
|
|
|
|
IF aRule[3]
|
|
FWrite( hCCH, " , .T." )
|
|
ELSE
|
|
FWrite( hCCH, " , .F." )
|
|
ENDIF
|
|
|
|
FWrite( hCCH, " } )" + CRLF )
|
|
NEXT
|
|
NEXT
|
|
|
|
FWrite( hCCH, CRLF + "RETURN .T." + CRLF )
|
|
|
|
FWrite( hCCH, CRLF + "FUNCTION InitResults()" + CRLF )
|
|
|
|
FOR Counter := 1 TO 3
|
|
|
|
IF Counter == 1
|
|
aResults := aDefResults
|
|
sResultsArray := "aDefResults"
|
|
FWrite( hCCH, CRLF + "/* Defines Results*/" + CRLF + "aDefResults := {}" + CRLF )
|
|
ELSEIF Counter == 2
|
|
aResults := aTransResults
|
|
sResultsArray := "aTransResults"
|
|
FWrite( hCCH, CRLF + "/* Translates Results*/" + CRLF + "aTransResults := {}" + CRLF )
|
|
ELSE
|
|
aResults := aCommResults
|
|
sResultsArray := "aCommResults"
|
|
FWrite( hCCH, CRLF + "/* Commands Results*/" + CRLF + "aCommResults := {}" + CRLF )
|
|
ENDIF
|
|
|
|
nResults := Len( aResults )
|
|
|
|
FOR nResult := 1 TO nResults
|
|
aResult := aResults[nResult]
|
|
|
|
FWrite( hCCH, "aAdd( " + sResultsArray + ", { " )
|
|
|
|
IF aResult[1] == NIL
|
|
nRPs := 0
|
|
ELSE
|
|
nRPs := Len( aResult[1] )
|
|
ENDIF
|
|
IF aResult[3] == NIL
|
|
nIDs := 0
|
|
ELSE
|
|
nIDs := Len( aResult[3] )
|
|
ENDIF
|
|
|
|
IF nRPs == 0
|
|
/*FWrite( hCCH, "NIL " )*/
|
|
ELSE
|
|
FWrite( hCCH, "{ " )
|
|
FOR nRP := 1 TO nRPs
|
|
aRP := aResult[1][nRP] //{ nLevel, xVal }
|
|
|
|
FWrite( hCCH, "{ " + Str( aRP[1], 3) + ", " )
|
|
IF ValType( aRP[2] ) == 'C'
|
|
FWrite( hCCH, "'" + aRP[2] + "' }" )
|
|
ELSE
|
|
FWrite( hCCH, Str( aRP[2], 3 ) + " }" )
|
|
ENDIF
|
|
|
|
IF nRP < nRPs
|
|
FWrite( hCCH, ", " )
|
|
ENDIF
|
|
NEXT
|
|
FWrite( hCCH, " }" )
|
|
ENDIF
|
|
|
|
IF nRPs == 0
|
|
FWrite( hCCH, ", " )
|
|
ELSE
|
|
FWrite( hCCH, ", { " )
|
|
FOR nModifier := 1 TO nRPs
|
|
FWrite( hCCH, Str( aResult[2][nModifier], 2 ) )
|
|
IF nModifier < nRPs
|
|
FWrite( hCCH, ", " )
|
|
ENDIF
|
|
NEXT
|
|
FWrite( hCCH, "} " )
|
|
ENDIF
|
|
|
|
IF nIDs == 0
|
|
FWrite( hCCH, ", " )
|
|
ELSE
|
|
FWrite( hCCH, ", { " )
|
|
FOR nID := 1 TO nIDs
|
|
FWrite( hCCH, "NIL" )
|
|
IF nID < nIDs
|
|
FWrite( hCCH, ", " )
|
|
ENDIF
|
|
NEXT
|
|
FWrite( hCCH, " } " )
|
|
ENDIF
|
|
FWrite( hCCH, " } )" + CRLF )
|
|
NEXT
|
|
|
|
NEXT
|
|
|
|
FWrite( hCCH, CRLF + "RETURN .T. " + CRLF )
|
|
|
|
FClose( hCCH )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitRules()
|
|
|
|
/* Defines */
|
|
aDefRules := {}
|
|
aAdd( aDefRules, { '_SET_EXACT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_FIXED' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DECIMALS' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DATEFORMAT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_EPOCH' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_PATH' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DEFAULT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_EXCLUSIVE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_SOFTSEEK' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_UNIQUE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DELETED' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_CANCEL' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DEBUG' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_TYPEAHEAD' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_COLOR' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_CURSOR' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_CONSOLE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_ALTERNATE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_ALTFILE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DEVICE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_EXTRA' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_EXTRAFILE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_PRINTER' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_PRINTFILE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_MARGIN' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_BELL' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_CONFIRM' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_ESCAPE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_INSERT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_EXIT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_INTENSITY' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_SCOREBOARD' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DELIMITERS' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_DELIMCHARS' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_WRAP' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_MESSAGE' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_MCENTER' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_SCROLLBREAK' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_COUNT' , , .T. } )
|
|
aAdd( aDefRules, { '_SET_CH' , , .T. } )
|
|
aAdd( aDefRules, { '_DFSET' , { { 1, 0, '(', '<', NIL }, { 2, 0, ',', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
|
|
/* Translates */
|
|
aTransRules := {}
|
|
|
|
/* Commands */
|
|
aCommRules := {}
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, 'WHILE', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'END' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'END' , { { 0, 0, 'SEQUENCE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ENDSEQUENCE' , , .F. } )
|
|
aAdd( aCommRules, { 'ENDDO' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ENDIF' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ENDCASE' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ENDFOR' , { { 1, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'NEXT' , { { 1, 0, NIL, '<', NIL }, { 2, 1, 'TO', '<', NIL }, { 3, 1, 'STEP', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '.', NIL, NIL }, { 0, 0, 'PRG', NIL, NIL }, { 1002, 1, 'WITH', 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CALL' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL }, { 1002, 1, 'WITH', 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STORE' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'TO', '<', NIL }, { 1003, 1, ',', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'ECHO', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'HEADING', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'MENU', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'STATUS', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'STEP', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'SAFETY', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'TALK', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PROCEDURE', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PROCEDURE', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'EXACT', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'EXACT', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'FIXED', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FIXED', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DECIMALS', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DECIMALS', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PATH', NIL, NIL }, { 1, 0, 'TO', '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PATH', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DEFAULT', NIL, NIL }, { 1, 0, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DEFAULT', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'CENTURY', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'CENTURY', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'EPOCH', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 0, 'FORMAT', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'AMERICAN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'ANSI', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'BRITISH', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'FRENCH', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'GERMAN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'ITALIAN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'JAPANESE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DATE', NIL, NIL }, { 0, 1, 'TO', NIL, NIL }, { 0, 0, 'USA', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'ALTERNATE', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ALTERNATE', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ALTERNATE', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ALTERNATE', NIL, NIL }, { 1, 0, 'TO', '(', NIL }, { 2, 1, NIL, ':', { 'ADDITIVE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'CONSOLE', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'CONSOLE', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'MARGIN', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'MARGIN', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'PRINTER', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PRINTER', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PRINTER', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'PRINTER', NIL, NIL }, { 1, 0, 'TO', '(', NIL }, { 2, 1, NIL, ':', { 'ADDITIVE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DEVICE', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 0, 0, 'SCREEN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DEVICE', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 0, 0, 'PRINTER', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'COLOR', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 1, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'COLOR', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'COLOUR', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'CURSOR', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'CURSOR', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '?' , { { 1, 1, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '?' , { { 1, 1, '?', 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'EJECT' , , .F. } )
|
|
aAdd( aCommRules, { 'TEXT' , , .F. } )
|
|
aAdd( aCommRules, { 'TEXT' , { { 0, 0, 'TO', NIL, NIL }, { 1, 0, 'FILE', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'TEXT' , { { 0, 0, 'TO', NIL, NIL }, { 0, 0, 'PRINTER', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLS' , , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , { { 0, 0, 'SCREEN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 0, 0, 'CLEAR', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 0, 0, 'CLEAR', NIL, NIL }, { 3, 0, 'TO', '<', NIL }, { 4, 0, ',', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, ',', '<', NIL }, { 4, 0, ',', '<', NIL }, { 5, 0, 'BOX', '<', NIL }, { 1006, 1, 'COLOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'TO', '<', NIL }, { 4, 0, ',', '<', NIL }, { 0, 1, 'DOUBLE', NIL, NIL }, { 1005, 1, 'COLOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'TO', '<', NIL }, { 4, 0, ',', '<', NIL }, { 1005, 1, 'COLOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'SAY', '<', NIL }, { 4, 1, 'PICTURE', '<', NIL }, { 1005, 1, 'COLOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'SAY', '<', NIL }, { 1004, 1, 'COLOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'BELL', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'BELL', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'CONFIRM', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'CONFIRM', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'ESCAPE', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ESCAPE', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'INTENSITY', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'INTENSITY', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'SCOREBOARD', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'SCOREBOARD', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'DELIMITERS', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DELIMITERS', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DELIMITERS', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DELIMITERS', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 0, 0, 'DEFAULT', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DELIMITERS', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FORMAT', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FORMAT', NIL, NIL }, { 1, 0, 'TO', '<', NIL }, { 2, 0, '.', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FORMAT', NIL, NIL }, { 1, 0, 'TO', ':', { '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FORMAT', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'GET', '<', NIL }, { 4, 1, 'PICTURE', '<', NIL }, { 5, 1, 'VALID', '<', NIL }, { 6, 1, 'WHEN', '<', NIL }, { 1007, 1, 'SEND', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'SAY', '<', NIL }, { 1004, 1, NIL, 'A', { 'GET' } }, { 5, 0, 'GET', '<', NIL }, { 1006, 1, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'GET', '<', NIL }, { 1004, 1, NIL, 'A', { 'RANGE' } }, { 5, 0, 'RANGE', '<', NIL }, { 6, 0, ',', '<', NIL }, { 1007, 1, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'GET', '<', NIL }, { 1004, 1, NIL, 'A', { 'COLOR' } }, { 5, 0, 'COLOR', '<', NIL }, { 1006, 1, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'READ' , { { 0, 0, 'SAVE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'READ' , , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , { { 0, 0, 'GETS', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1001, 1, NIL, 'A', { 'COLOUR' } }, { 0, 0, 'COLOUR', NIL, NIL }, { 1002, 1, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'WRAP', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'WRAP', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'MESSAGE', NIL, NIL }, { 1, 0, 'TO', '<', NIL }, { 2, 1, NIL, ':', { 'CENTER', 'CENTRE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'MESSAGE', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '@' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, 'PROMPT', '<', NIL }, { 4, 1, 'MESSAGE', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'MENU' , { { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 0, 0, 'SCREEN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RESTORE' , { { 0, 0, 'SCREEN', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 0, 0, 'SCREEN', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RESTORE' , { { 0, 0, 'SCREEN', NIL, NIL }, { 1, 0, 'FROM', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'WAIT' , { { 1, 1, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'WAIT' , { { 1, 1, NIL, '<', { 'TO' } }, { 2, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ACCEPT' , { { 1, 1, NIL, '<', { 'TO' } }, { 2, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'INPUT' , { { 1, 1, NIL, '<', { 'TO' } }, { 2, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'KEYBOARD' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , { { 0, 0, 'TYPEAHEAD', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'TYPEAHEAD', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'KEY', '<', NIL }, { 2, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'KEY', '<', NIL }, { 2, 0, 'TO', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 3, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'KEY', '<', NIL }, { 2, 0, 'TO', ':', { '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'KEY', '<', NIL }, { 0, 1, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'FUNCTION', '<', NIL }, { 0, 1, 'TO', NIL, NIL }, { 2, 1, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , { { 0, 0, 'MEMORY', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RELEASE' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RELEASE' , { { 0, 0, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RELEASE' , { { 0, 0, 'ALL', NIL, NIL }, { 1, 0, 'LIKE', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RELEASE' , { { 0, 0, 'ALL', NIL, NIL }, { 1, 0, 'EXCEPT', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RESTORE' , { { 1, 1, 'FROM', '(', NIL }, { 2, 1, NIL, ':', { 'ADDITIVE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 0, 0, 'ALL', NIL, NIL }, { 1, 0, 'LIKE', '<', NIL }, { 2, 0, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 1, 0, 'TO', '(', NIL }, { 0, 0, 'ALL', NIL, NIL }, { 2, 0, 'LIKE', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 0, 0, 'ALL', NIL, NIL }, { 1, 0, 'EXCEPT', '<', NIL }, { 2, 0, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 1, 0, 'TO', '(', NIL }, { 0, 0, 'ALL', NIL, NIL }, { 2, 0, 'EXCEPT', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SAVE' , { { 1, 1, 'TO', '(', NIL }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ERASE' , { { 1, 0, NIL, '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DELETE' , { { 1, 0, 'FILE', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RENAME' , { { 1, 0, NIL, '(', NIL }, { 2, 0, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 1, 0, 'FILE', '(', NIL }, { 2, 0, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DIR' , { { 1, 1, NIL, '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'TYPE' , { { 1, 1, NIL, '(', { 'TO PRINTER', 'TO' } }, { 2, 1, NIL, ':', { 'TO PRINTER' } }, { 1000, 1, 'TO', NIL, NIL }, { 1003, -1, 'FILE', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'TYPE' , { { 1, 0, NIL, '(', NIL }, { 2, 1, NIL, ':', { 'TO PRINTER' } } } , .F. } )
|
|
aAdd( aCommRules, { 'REQUEST' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CANCEL' , , .F. } )
|
|
aAdd( aCommRules, { 'QUIT' , , .F. } )
|
|
aAdd( aCommRules, { 'RUN' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RUN' , { { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { '!' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RUN' , { { 1, 0, '=', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RUN' , { { 1, 0, ':=', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'EXCLUSIVE', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'EXCLUSIVE', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'SOFTSEEK', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'SOFTSEEK', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'UNIQUE', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'UNIQUE', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 1, 0, 'DELETED', ':', { 'ON', 'OFF', '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'DELETED', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SELECT' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SELECT' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 2, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'USE' , , .F. } )
|
|
aAdd( aCommRules, { 'USE' , { { 1, 0, NIL, '(', NIL }, { 2, 1, 'VIA', '<', NIL }, { 3, 1, 'ALIAS', '<', NIL }, { 4, 1, NIL, ':', { 'NEW' } }, { 5, 1, NIL, ':', { 'EXCLUSIVE' } }, { 6, 1, NIL, ':', { 'SHARED' } }, { 7, 1, NIL, ':', { 'READONLY' } }, { 1008, 1, 'INDEX', '(', NIL }, { 1009, 2, ',', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'APPEND' , { { 0, 0, 'BLANK', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PACK' , , .F. } )
|
|
aAdd( aCommRules, { 'ZAP' , , .F. } )
|
|
aAdd( aCommRules, { 'UNLOCK' , , .F. } )
|
|
aAdd( aCommRules, { 'UNLOCK' , { { 0, 0, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COMMIT' , , .F. } )
|
|
aAdd( aCommRules, { 'GOTO' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'GO' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'GOTO' , { { 0, 0, 'TOP', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'GO' , { { 0, 0, 'TOP', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'GOTO' , { { 0, 0, 'BOTTOM', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'GO' , { { 0, 0, 'BOTTOM', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SKIP' , , .F. } )
|
|
aAdd( aCommRules, { 'SKIP' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SKIP' , { { 1, 0, 'ALIAS', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SKIP' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'ALIAS', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SEEK' , { { 1, 0, NIL, '<', NIL }, { 2, 1, NIL, ':', { 'SOFTSEEK' } } } , .F. } )
|
|
aAdd( aCommRules, { 'FIND' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FIND' , { { 1, 0, ':=', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FIND' , { { 1, 0, '=', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CONTINUE' , , .F. } )
|
|
aAdd( aCommRules, { 'LOCATE' , { { 1, 1, 'FOR', '<', NIL }, { 2, 1, 'WHILE', '<', NIL }, { 3, 1, 'NEXT', '<', NIL }, { 4, 1, 'RECORD', '<', NIL }, { 5, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'RELATION', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'RELATION', NIL, NIL }, { 1, 1, NIL, ':', { 'ADDITIVE' } }, { 2, 1, 'TO', '<', NIL }, { 3, -1, 'INTO', '(', NIL }, { 0, 2, ',', NIL, NIL }, { 1000, 3, 'TO', NIL, NIL }, { 1004, -2, NIL, '<', NIL }, { 1005, -2, 'INTO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FILTER', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FILTER', NIL, NIL }, { 1, 0, 'TO', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'FILTER', NIL, NIL }, { 1, 0, 'TO', ':', { '&' } } } , .F. } )
|
|
aAdd( aCommRules, { 'REPLACE' , { { 1, 1, NIL, '<', { 'FOR', 'WHILE', 'NEXT', 'RECORD', 'REST', 'ALL' } }, { 2, -1, 'WITH', '<', NIL }, { 1003, 2, ',', '<', NIL }, { 1004, -2, 'WITH', '<', NIL }, { 5, 1, 'FOR', '<', NIL }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 9, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'REPLACE' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'WITH', '<', NIL }, { 1003, 1, ',', '<', NIL }, { 1004, -1, 'WITH', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DELETE' , { { 1, 1, 'FOR', '<', NIL }, { 2, 1, 'WHILE', '<', NIL }, { 3, 1, 'NEXT', '<', NIL }, { 4, 1, 'RECORD', '<', NIL }, { 5, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RECALL' , { { 1, 1, 'FOR', '<', NIL }, { 2, 1, 'WHILE', '<', NIL }, { 3, 1, 'NEXT', '<', NIL }, { 4, 1, 'RECORD', '<', NIL }, { 5, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DELETE' , , .F. } )
|
|
aAdd( aCommRules, { 'RECALL' , , .F. } )
|
|
aAdd( aCommRules, { 'CREATE' , { { 1, 0, NIL, '(', NIL }, { 2, 1, 'FROM', '(', NIL }, { 3, 1, 'VIA', '<', NIL }, { 4, 1, 'ALIAS', '<', NIL }, { 5, 1, NIL, ':', { 'NEW' } } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 0, 1, 'STRUCTURE', NIL, NIL }, { 0, 1, 'EXTENDED', NIL, NIL }, { 1, 1, 'TO', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 0, 1, 'STRUCTURE', NIL, NIL }, { 1, 1, 'TO', '(', NIL }, { 2, 1, 'FIELDS', 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 1, 1, 'TO', '(', NIL }, { 0, 1, 'DELIMITED', NIL, NIL }, { 2, 2, 'WITH', '*', NIL }, { 3, 1, 'FIELDS', 'A', NIL }, { 4, 1, 'FOR', '<', NIL }, { 5, 1, 'WHILE', '<', NIL }, { 6, 1, 'NEXT', '<', NIL }, { 7, 1, 'RECORD', '<', NIL }, { 8, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 1, 1, 'TO', '(', NIL }, { 0, 1, 'SDF', NIL, NIL }, { 2, 1, 'FIELDS', 'A', NIL }, { 3, 1, 'FOR', '<', NIL }, { 4, 1, 'WHILE', '<', NIL }, { 5, 1, 'NEXT', '<', NIL }, { 6, 1, 'RECORD', '<', NIL }, { 7, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COPY' , { { 1, 1, 'TO', '(', NIL }, { 2, 1, 'FIELDS', 'A', NIL }, { 3, 1, 'FOR', '<', NIL }, { 4, 1, 'WHILE', '<', NIL }, { 5, 1, 'NEXT', '<', NIL }, { 6, 1, 'RECORD', '<', NIL }, { 7, 1, NIL, ':', { 'REST' } }, { 8, 1, 'VIA', '<', NIL }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'APPEND' , { { 1, 1, 'FROM', '(', NIL }, { 0, 1, 'DELIMITED', NIL, NIL }, { 2, 2, 'WITH', '*', NIL }, { 3, 1, 'FIELDS', 'A', NIL }, { 4, 1, 'FOR', '<', NIL }, { 5, 1, 'WHILE', '<', NIL }, { 6, 1, 'NEXT', '<', NIL }, { 7, 1, 'RECORD', '<', NIL }, { 8, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'APPEND' , { { 1, 1, 'FROM', '(', NIL }, { 0, 1, 'SDF', NIL, NIL }, { 2, 1, 'FIELDS', 'A', NIL }, { 3, 1, 'FOR', '<', NIL }, { 4, 1, 'WHILE', '<', NIL }, { 5, 1, 'NEXT', '<', NIL }, { 6, 1, 'RECORD', '<', NIL }, { 7, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'APPEND' , { { 1, 1, 'FROM', '(', NIL }, { 2, 1, 'FIELDS', 'A', NIL }, { 3, 1, 'FOR', '<', NIL }, { 4, 1, 'WHILE', '<', NIL }, { 5, 1, 'NEXT', '<', NIL }, { 6, 1, 'RECORD', '<', NIL }, { 7, 1, NIL, ':', { 'REST' } }, { 8, 1, 'VIA', '<', NIL }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SORT' , { { 1, 1, 'TO', '(', NIL }, { 2, 1, 'ON', 'A', NIL }, { 3, 1, 'FOR', '<', NIL }, { 4, 1, 'WHILE', '<', NIL }, { 5, 1, 'NEXT', '<', NIL }, { 6, 1, 'RECORD', '<', NIL }, { 7, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'TOTAL' , { { 1, 1, 'TO', '(', NIL }, { 2, 1, 'ON', '<', NIL }, { 3, 1, 'FIELDS', 'A', NIL }, { 4, 1, 'FOR', '<', NIL }, { 5, 1, 'WHILE', '<', NIL }, { 6, 1, 'NEXT', '<', NIL }, { 7, 1, 'RECORD', '<', NIL }, { 8, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'UPDATE' , { { 1, 1, 'FROM', '(', NIL }, { 2, 1, 'ON', '<', NIL }, { 3, 1, 'REPLACE', '<', NIL }, { 4, -1, 'WITH', '<', NIL }, { 1005, 2, ',', '<', NIL }, { 1006, -2, 'WITH', '<', NIL }, { 7, 1, NIL, ':', { 'RANDOM' } } } , .F. } )
|
|
aAdd( aCommRules, { 'JOIN' , { { 1, 1, 'WITH', '(', NIL }, { 2, 1, 'TO', '<', NIL }, { 3, 1, 'FIELDS', 'A', NIL }, { 4, 1, 'FOR', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'COUNT' , { { 1, 1, 'TO', '<', NIL }, { 2, 1, 'FOR', '<', NIL }, { 3, 1, 'WHILE', '<', NIL }, { 4, 1, 'NEXT', '<', NIL }, { 5, 1, 'RECORD', '<', NIL }, { 6, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SUM' , { { 1, 1, NIL, '<', { 'FOR', 'WHILE', 'NEXT', 'RECORD', 'REST', 'ALL' } }, { 1002, 2, ',', '<', NIL }, { 3, -1, 'TO', '<', NIL }, { 1004, 2, ',', '<', NIL }, { 5, 1, 'FOR', '<', NIL }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 9, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'AVERAGE' , { { 1, 1, NIL, '<', { 'FOR', 'WHILE', 'NEXT', 'RECORD', 'REST', 'ALL' } }, { 1002, 2, ',', '<', NIL }, { 3, -1, 'TO', '<', NIL }, { 1004, 2, ',', '<', NIL }, { 5, 1, 'FOR', '<', NIL }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 9, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'LIST' , { { 1, 1, NIL, 'A', { 'OFF', 'TO PRINTER', 'TO', 'FOR', 'WHILE', 'NEXT', 'RECORD', 'REST', 'ALL' } }, { 2, 1, NIL, ':', { 'OFF' } }, { 3, 1, NIL, ':', { 'TO PRINTER' } }, { 0, 1, 'TO', NIL, NIL }, { 4, -1, 'FILE', '(', NIL }, { 5, 1, 'FOR', '<', NIL }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 9, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DISPLAY' , { { 1, 1, NIL, 'A', { 'OFF', 'TO PRINTER', 'TO', 'FOR', 'WHILE', 'NEXT', 'RECORD', 'REST', 'ALL' } }, { 2, 1, NIL, ':', { 'OFF' } }, { 3, 1, NIL, ':', { 'TO PRINTER' } }, { 0, 1, 'TO', NIL, NIL }, { 4, -1, 'FILE', '(', NIL }, { 5, 1, 'FOR', '<', NIL }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 9, 1, NIL, ':', { 'REST' } }, { 10, 1, NIL, ':', { 'ALL' } } } , .F. } )
|
|
aAdd( aCommRules, { 'REPORT' , { { 1, 0, 'FORM', '<', NIL }, { 2, 1, 'HEADING', '<', NIL }, { 3, 1, NIL, ':', { 'PLAIN' } }, { 4, 1, NIL, ':', { 'NOEJECT' } }, { 5, 1, NIL, ':', { 'SUMMARY' } }, { 6, 1, NIL, ':', { 'NOCONSOLE' } }, { 7, 1, NIL, ':', { 'TO PRINTER' } }, { 0, 1, 'TO', NIL, NIL }, { 8, -1, 'FILE', '(', NIL }, { 9, 1, 'FOR', '<', NIL }, { 10, 1, 'WHILE', '<', NIL }, { 11, 1, 'NEXT', '<', NIL }, { 12, 1, 'RECORD', '<', NIL }, { 13, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'LABEL' , { { 1, 0, 'FORM', '<', NIL }, { 2, 1, NIL, ':', { 'SAMPLE' } }, { 3, 1, NIL, ':', { 'NOCONSOLE' } }, { 4, 1, NIL, ':', { 'TO PRINTER' } }, { 0, 1, 'TO', NIL, NIL }, { 5, -1, 'FILE', '(', NIL }, { 6, 1, 'FOR', '<', NIL }, { 7, 1, 'WHILE', '<', NIL }, { 8, 1, 'NEXT', '<', NIL }, { 9, 1, 'RECORD', '<', NIL }, { 10, 1, NIL, ':', { 'REST' } }, { 0, 1, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'DATABASES', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'ALTERNATE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'FORMAT', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'INDEXES', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'PROCEDURE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLOSE' , { { 0, 0, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , , .F. } )
|
|
aAdd( aCommRules, { 'CLEAR' , { { 0, 0, 'ALL', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'INDEX' , { { 1, 0, 'ON', '<', NIL }, { 2, 1, 'TAG', '(', NIL }, { 3, 0, 'TO', '(', NIL }, { 4, 1, 'FOR', '<', NIL }, { 1005, 1, NIL, ':', { 'ALL' } }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 1009, 1, NIL, ':', { 'REST' } }, { 10, 1, 'EVAL', '<', NIL }, { 11, 1, 'EVERY', '<', NIL }, { 1012, 1, NIL, ':', { 'UNIQUE' } }, { 13, 1, NIL, ':', { 'ASCENDING' } }, { 1014, 1, NIL, ':', { 'DESCENDING' } } } , .F. } )
|
|
aAdd( aCommRules, { 'INDEX' , { { 1, 0, 'ON', '<', NIL }, { 2, 0, 'TAG', '(', NIL }, { 3, 1, 'TO', '(', NIL }, { 4, 1, 'FOR', '<', NIL }, { 1005, 1, NIL, ':', { 'ALL' } }, { 6, 1, 'WHILE', '<', NIL }, { 7, 1, 'NEXT', '<', NIL }, { 8, 1, 'RECORD', '<', NIL }, { 1009, 1, NIL, ':', { 'REST' } }, { 10, 1, 'EVAL', '<', NIL }, { 11, 1, 'EVERY', '<', NIL }, { 1012, 1, NIL, ':', { 'UNIQUE' } }, { 13, 1, NIL, ':', { 'ASCENDING' } }, { 1014, 1, NIL, ':', { 'DESCENDING' } } } , .F. } )
|
|
aAdd( aCommRules, { 'INDEX' , { { 1, 0, 'ON', '<', NIL }, { 2, 0, 'TO', '(', NIL }, { 3, 1, NIL, ':', { 'UNIQUE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'DELETE' , { { 1, 0, 'TAG', '(', NIL }, { 2, 1, 'IN', '(', NIL }, { 1003, 1, ',', '(', NIL }, { 1004, 2, 'IN', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'REINDEX' , { { 1, 1, 'EVAL', '<', NIL }, { 2, 1, 'EVERY', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'REINDEX' , , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'INDEX', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 1001, 1, NIL, '(', { 'ADDITIVE' } }, { 1002, 2, ',', '(', NIL }, { 3, 1, NIL, ':', { 'ADDITIVE' } } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ORDER', NIL, NIL }, { 1, 0, 'TO', '<', NIL }, { 1002, 1, 'IN', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ORDER', NIL, NIL }, { 0, 0, 'TO', NIL, NIL }, { 1, 0, 'TAG', '(', NIL }, { 1002, 1, 'IN', '(', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'SET' , { { 0, 0, 'ORDER', NIL, NIL }, { 0, 0, 'TO', NIL, NIL } } , .F. } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitResults()
|
|
|
|
/* Defines Results*/
|
|
aDefResults := {}
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '5' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '6' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '7' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '8' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '9' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '10' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '11' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '12' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '13' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '14' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '15' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '16' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '17' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '18' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '19' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '20' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '21' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '22' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '23' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '24' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '25' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '26' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '27' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '28' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '29' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '30' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '31' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '32' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '33' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '34' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '35' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '36' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '37' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '38' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '38' } }, { -1} , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { { { 0, 'Set' }, { 0, '(' }, { 0, '_SET_DATEFORMAT' }, { 0, ',' }, { 0, 'if' }, { 0, '(' }, { 0, '__SetCentury' }, { 0, '(' }, { 0, ')' }, { 0, ',' }, { 0, 1 }, { 0, ',' }, { 0, 2 }, { 0, ')' }, { 0, ')' } }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1} , { NIL, NIL } } )
|
|
|
|
/* Translates Results*/
|
|
aTransResults := {}
|
|
|
|
/* Commands Results*/
|
|
aCommResults := {}
|
|
aAdd( aCommResults, { { { 0, 'while ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'end' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'end' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'end' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'enddo' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'endif' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'endcase' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'next' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'next' } }, { -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'do ' }, { 0, 1 }, { 0, '' }, { 2, ' WITH ' }, { 2, 2 } }, { -1, 1, -1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'call ' }, { 0, 1 }, { 0, '' }, { 2, ' WITH ' }, { 2, 2 } }, { -1, 1, -1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 2 }, { 0, ' := ' }, { 3, ' ' }, { 3, 3 }, { 3, ' := ' }, { 0, ' ' }, { 0, 1 } }, { -1, 1, -1, -1, 1, -1, -1, 1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , } )
|
|
aAdd( aCommResults, { { { 0, '_ProcReq_( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_EXACT, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_EXACT, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_FIXED, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_FIXED, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DECIMALS, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DECIMALS, 0 )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PATH, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PATH, "" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DEFAULT, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DEFAULT, "" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetCentury( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetCentury( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_EPOCH, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DATEFORMAT, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "mm/dd/yyyy", "mm/dd/yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "yyyy.mm.dd", "yy.mm.dd" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "dd/mm/yyyy", "dd/mm/yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "dd/mm/yyyy", "dd/mm/yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "dd.mm.yyyy", "dd.mm.yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "dd-mm-yyyy", "dd-mm-yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "yyyy/mm/dd", "yy/mm/dd" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_DFSET( "mm-dd-yyyy", "mm-dd-yy" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ALTERNATE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ALTERNATE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ALTFILE, "" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ALTFILE, ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_CONSOLE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_CONSOLE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_MARGIN, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_MARGIN, 0 )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PRINTER, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PRINTER, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PRINTFILE, "" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_PRINTFILE, ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DEVICE, "SCREEN" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DEVICE, "PRINTER" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'SetColor( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SetColor( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SET COLOR TO ' }, { 1, ' ' }, { 1, 1 } }, { -1, -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SetCursor( if(Upper(' }, { 0, 1 }, { 0, ') == "ON", 1, 0) )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SetCursor( if(' }, { 0, 1 }, { 0, ', 1, 0) )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'QOut( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'QQOut( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Eject()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'text QOut, QQOut' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__TextSave( ' }, { 0, 1 }, { 0, ' ) ; text QOut, __TextRestore' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__TextSave("PRINTER") ; text QOut, __TextRestore' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Scroll() ; SetPos(0,0)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'CLS' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Scroll( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ' ) ; SetPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Scroll( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ; SetPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Scroll( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ' ) ; SetPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DispBox( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, '' }, { 6, ', ' }, { 6, 6 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DispBox( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', 2 ' }, { 5, ', ' }, { 5, 5 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DispBox( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', 1 ' }, { 5, ', ' }, { 5, 5 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DevPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ; DevOutPict( ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, '' }, { 5, ', ' }, { 5, 5 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DevPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ; DevOut( ' }, { 0, 3 }, { 0, '' }, { 4, ', ' }, { 4, 4 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_BELL, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_BELL, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_CONFIRM, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_CONFIRM, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ESCAPE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_ESCAPE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_INTENSITY, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_INTENSITY, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_SCOREBOARD, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_SCOREBOARD, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELIMITERS, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELIMITERS, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELIMCHARS, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELIMCHARS, "::" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELIMCHARS, "::" )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '_ProcReq_( ' }, { 0, 1 }, { 0, ' + ".FMT" ) ; __SetFormat( {|| ' }, { 0, 1 }, { 0, '()} )' } }, { -1, 4, -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_ProcReq_( ' }, { 0, 1 }, { 0, ' + "." + ' }, { 0, 2 }, { 0, ' ) ; __SetFormat( {|| ' }, { 0, 1 }, { 0, '()} )' } }, { -1, 4, -1, 4, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'if ( Empty(' }, { 0, 1 }, { 0, ') ) ; SET FORMAT TO ; else ; __SetFormat( &("{||" + ' }, { 0, 1 }, { 0, ' + "()}") ) ; end' } }, { -1, 4, -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetFormat()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'SetPos( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ; AAdd( GetList, _GET_( ' }, { 0, 3 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ):display() ) ' }, { 7, '; ATail(GetList):' }, { 7, 7 } }, { -1, 1, -1, 1, -1, 1, -1, 3, -1, 1, -1, 5, -1, 5, -1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '@ ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' SAY ' }, { 0, 3 }, { 0, '' }, { 4, ' ' }, { 4, 4 }, { 0, ' ; @ Row(), Col()+1 GET ' }, { 0, 5 }, { 0, '' }, { 6, ' ' }, { 6, 6 } }, { -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '@ ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' GET ' }, { 0, 3 }, { 0, '' }, { 4, ' ' }, { 4, 4 }, { 0, ' VALID {|_1| RangeCheck(_1,, ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ')} ' }, { 7, ' ' }, { 7, 7 } }, { -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '@ ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' GET ' }, { 0, 3 }, { 0, '' }, { 4, ' ' }, { 4, 4 }, { 0, ' SEND colorDisp(' }, { 0, 5 }, { 0, ') ' }, { 6, ' ' }, { 6, 6 } }, { -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ReadModal(GetList)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'ReadModal(GetList) ; GetList := {}' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'ReadKill(.T.) ; GetList := {}' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '@ ' }, { 1, ' ' }, { 1, 1 }, { 0, ' COLOR ' }, { 2, ' ' }, { 2, 2 } }, { -1, -1, 1, -1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_WRAP, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_WRAP, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_MESSAGE, ' }, { 0, 1 }, { 0, ' ) ; Set( _SET_MCENTER, ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_MESSAGE, 0 ) ; Set( _SET_MCENTER, .f. )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__AtPrompt( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ' , ' }, { 0, 4 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, ' := __MenuTo( {|_1| if(PCount() == 0, ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ' := _1)}, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__XSaveScreen()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__XRestScreen()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, ' := SaveScreen( 0, 0, Maxrow(), Maxcol() )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'RestScreen( 0, 0, Maxrow(), Maxcol(), ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Wait( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 2 }, { 0, ' := __Wait( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 2 }, { 0, ' := __Accept( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'if ( !Empty(__Accept(' }, { 0, 1 }, { 0, ')) ) ; ' }, { 0, 2 }, { 0, ' := &( __AcceptStr() ) ; end' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Keyboard( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Keyboard()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_TYPEAHEAD, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SetKey( ' }, { 0, 1 }, { 0, ', {|p, l, v| ' }, { 0, 2 }, { 0, '(p, l, v)} )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SET KEY ' }, { 0, 1 }, { 0, ' TO ' }, { 0, 2 } }, { -1, 1, -1, 1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'if ( Empty(' }, { 0, 2 }, { 0, ') ) ; SetKey( ' }, { 0, 1 }, { 0, ', NIL ) ; else ; SetKey( ' }, { 0, 1 }, { 0, ', {|p, l, v| ' }, { 0, 2 }, { 0, '(p, l, v)} ) ; end' } }, { -1, 4, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'SetKey( ' }, { 0, 1 }, { 0, ', NIL )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetFunction( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MClear()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__MXRelease( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MRelease("*", .t.)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__MRelease( ' }, { 0, 1 }, { 0, ', .t. )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MRelease( ' }, { 0, 1 }, { 0, ', .f. )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MRestore( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MSave( ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', .t. )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MSave( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', .t. )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MSave( ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', .f. )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MSave( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', .f. )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__MSave( ' }, { 0, 1 }, { 0, ', "*", .t. )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'FErase( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'FErase( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'FRename( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__CopyFile( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Dir( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__TypeFile( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ' }, { 1, '; COPY FILE ' }, { 1, 1 }, { 1, ' TO ' }, { 1, 3 } }, { -1, 4, -1, 6, -1, -1, 4, -1, 4} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__TypeFile( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'EXTERNAL ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Quit()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__Quit()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__Run( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__Run( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'RUN ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '( run := ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '( run := ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_EXCLUSIVE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_EXCLUSIVE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_SOFTSEEK, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_SOFTSEEK, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_UNIQUE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_UNIQUE, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELETED, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'Set( _SET_DELETED, ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbSelectArea( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbSelectArea( ' }, { 0, 1 }, { 0, '(' }, { 0, 2 }, { 0, ') )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbCloseArea()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbUseArea( ' }, { 0, 4 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 0, 3 }, { 0, ', if(' }, { 0, 6 }, { 0, ' .or. ' }, { 0, 5 }, { 0, ', !' }, { 0, 5 }, { 0, ', NIL), ' }, { 0, 7 }, { 0, ' ) ' }, { 8, '; dbSetIndex( ' }, { 8, 8 }, { 8, ' )' }, { 0, '' }, { 9, '; dbSetIndex( ' }, { 9, 9 }, { 9, ' )' } }, { -1, 6, -1, 1, -1, 4, -1, 4, -1, 6, -1, 6, -1, 6, -1, 6, -1, -1, 4, -1, -1, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbAppend()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__dbPack()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__dbZap()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbUnlock()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbUnlockAll()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbCommitAll()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoto(' }, { 0, 1 }, { 0, ')' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoto(' }, { 0, 1 }, { 0, ')' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoTop()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoTop()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoBottom()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbGoBottom()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbSkip(1)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbSkip( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, ' -> ( dbSkip(1) )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 2 }, { 0, ' -> ( dbSkip(' }, { 0, 1 }, { 0, ') )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbSeek( ' }, { 0, 1 }, { 0, ', if( ' }, { 0, 2 }, { 0, ', .T., NIL ) )' } }, { -1, 1, -1, 6, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbSeek( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '( find := ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '( find := ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbContinue()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__dbLocate( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbClearRel()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'if ( !' }, { 0, 1 }, { 0, ' ) ; dbClearRel() ; end ; dbSetRelation( ' }, { 0, 3 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ' }, { 5, '; dbSetRelation( ' }, { 5, 5 }, { 5, ', ' }, { 5, 4 }, { 5, ', ' }, { 5, 4 }, { 5, ' )' } }, { -1, 6, -1, 4, -1, 5, -1, 3, -1, -1, 4, -1, 5, -1, 3, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbClearFilter(NIL)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbSetFilter( ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ' )' } }, { -1, 5, -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'if ( Empty(' }, { 0, 1 }, { 0, ') ) ; dbClearFilter() ; else ; dbSetFilter( ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ' ) ; end' } }, { -1, 4, -1, 5, -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DBEval( {|| _FIELD->' }, { 0, 1 }, { 0, ' := ' }, { 0, 2 }, { 0, '' }, { 3, ', _FIELD->' }, { 3, 3 }, { 3, ' := ' }, { 3, 4 }, { 0, '}, ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_FIELD->' }, { 0, 1 }, { 0, ' := ' }, { 0, 2 }, { 0, '' }, { 3, '; _FIELD->' }, { 3, 3 }, { 3, ' := ' }, { 3, 4 } }, { -1, 1, -1, 1, -1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DBEval( {|| dbDelete()}, ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DBEval( {|| dbRecall()}, ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbDelete()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbRecall()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__dbCreate( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 4 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 1, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbCopyXStruct( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbCopyStruct( ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' } )' } }, { -1, 4, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbDelim( .T., ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', { ' }, { 0, 3 }, { 0, ' }, ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbSDF( .T., ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbCopy( ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbDelim( .F., ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', { ' }, { 0, 3 }, { 0, ' }, ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbSDF( .F., ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbApp( ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbSort( ' }, { 0, 1 }, { 0, ', { ' }, { 0, 2 }, { 0, ' }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbTotal( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', { ' }, { 0, 3 }, { 0, ' }, ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' )' } }, { -1, 4, -1, 5, -1, 4, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbUpdate( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 7 }, { 0, ', {|| _FIELD->' }, { 0, 3 }, { 0, ' := ' }, { 0, 4 }, { 0, '' }, { 5, ', _FIELD->' }, { 5, 5 }, { 5, ' := ' }, { 5, 6 }, { 0, '} )' } }, { -1, 4, -1, 5, -1, 6, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbJoin( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ', { ' }, { 0, 3 }, { 0, ' }, ' }, { 0, 4 }, { 0, ' )' } }, { -1, 4, -1, 4, -1, 4, -1, 5, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, ' := 0 ; DBEval( {|| ' }, { 0, 1 }, { 0, ' := ' }, { 0, 1 }, { 0, ' + 1}, ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 3 }, { 0, ' := ' }, { 4, ' ' }, { 4, 4 }, { 4, ' := ' }, { 0, ' 0 ; DBEval( {|| ' }, { 0, 3 }, { 0, ' := ' }, { 0, 3 }, { 0, ' + ' }, { 0, 1 }, { 0, '' }, { 4, ', ' }, { 4, 4 }, { 4, ' := ' }, { 4, 4 }, { 4, ' + ' }, { 4, 2 }, { 0, '}, ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'M->__Avg := ' }, { 0, 3 }, { 0, ' := ' }, { 4, ' ' }, { 4, 4 }, { 4, ' := ' }, { 0, ' 0 ; DBEval( {|| M->__Avg := M->__Avg + 1, ' }, { 0, 3 }, { 0, ' := ' }, { 0, 3 }, { 0, ' + ' }, { 0, 1 }, { 0, '' }, { 4, ', ' }, { 4, 4 }, { 4, ' := ' }, { 4, 4 }, { 4, ' + ' }, { 4, 2 }, { 0, ' }, ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ' ) ; ' }, { 0, 3 }, { 0, ' := ' }, { 0, 3 }, { 0, ' / M->__Avg ' }, { 4, '; ' }, { 4, 4 }, { 4, ' := ' }, { 4, 4 }, { 4, ' / M->__Avg ' } }, { -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__dbList( ' }, { 0, 2 }, { 0, ', { ' }, { 0, 1 }, { 0, ' }, .t., ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ' )' } }, { -1, 6, -1, 5, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__DBList( ' }, { 0, 2 }, { 0, ', { ' }, { 0, 1 }, { 0, ' }, ' }, { 0, 10 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ' )' } }, { -1, 6, -1, 5, -1, 6, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__ReportForm( ' }, { 0, 1 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 9 }, { 0, ', ' }, { 0, 10 }, { 0, ', ' }, { 0, 11 }, { 0, ', ' }, { 0, 12 }, { 0, ', ' }, { 0, 13 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 4, -1, 6, -1, 4, -1, 6, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 6, -1, 1, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__LabelForm( ' }, { 0, 1 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ', ' }, { 0, 10 }, { 0, ', ' }, { 0, 2 }, { 0, ' )' } }, { -1, 4, -1, 6, -1, 4, -1, 6, -1, 5, -1, 5, -1, 1, -1, 1, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, '->( dbCloseArea() )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbCloseArea()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbCloseAll()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Set(_SET_ALTFILE, "")' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetFormat(NIL)' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'dbClearIndex()' } }, { -1} , } )
|
|
aAdd( aCommResults, { , , } )
|
|
aAdd( aCommResults, { { { 0, 'CLOSE DATABASES ; SELECT 1 ; CLOSE FORMAT' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'CLEAR SCREEN ; CLEAR GETS' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'CLOSE DATABASES ; CLOSE FORMAT ; CLEAR MEMORY ; CLEAR GETS ; SET ALTERNATE OFF ; SET ALTERNATE TO' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'ordCondSet( ' }, { 0, 4 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 5, ' ' }, { 5, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 10 }, { 0, ', ' }, { 0, 11 }, { 0, ', RECNO(), ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 9, ' ' }, { 9, 9 }, { 0, ', ' }, { 14, ' ' }, { 14, 14 }, { 0, ' ) ; ordCreate(' }, { 0, 3 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 12, ' ' }, { 12, 12 }, { 0, ' )' } }, { -1, 3, -1, 5, -1, -1, 6, -1, 5, -1, 5, -1, 1, -1, 1, -1, 1, -1, -1, 6, -1, -1, 6, -1, 4, -1, 4, -1, 3, -1, 5, -1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordCondSet( ' }, { 0, 4 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 5, ' ' }, { 5, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 10 }, { 0, ', ' }, { 0, 11 }, { 0, ', RECNO(), ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 9, ' ' }, { 9, 9 }, { 0, ', ' }, { 14, ' ' }, { 14, 14 }, { 0, ' ) ; ordCreate(' }, { 0, 3 }, { 0, ', ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 12, ' ' }, { 12, 12 }, { 0, ' )' } }, { -1, 3, -1, 5, -1, -1, 6, -1, 5, -1, 5, -1, 1, -1, 1, -1, 1, -1, -1, 6, -1, -1, 6, -1, 4, -1, 4, -1, 3, -1, 5, -1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'dbCreateIndex( ' }, { 0, 2 }, { 0, ', ' }, { 0, 1 }, { 0, ', ' }, { 0, 1 }, { 0, ', if( ' }, { 0, 3 }, { 0, ', .t., NIL ) )' } }, { -1, 4, -1, 3, -1, 5, -1, 6, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordDestroy( ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ' ) ' }, { 3, '; ordDestroy( ' }, { 3, 3 }, { 3, ', ' }, { 3, 4 }, { 3, ' ) ' } }, { -1, 4, -1, 4, -1, -1, 4, -1, 4, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordCondSet(,,,, ' }, { 0, 1 }, { 0, ', ' }, { 0, 2 }, { 0, ',,,,,,,) ; ordListRebuild()' } }, { -1, 5, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordListRebuild()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'if !' }, { 0, 3 }, { 0, ' ; ordListClear() ; end ' }, { 1, '; ordListAdd( ' }, { 1, 1 }, { 1, ' )' }, { 0, '' }, { 2, '; ordListAdd( ' }, { 2, 2 }, { 2, ' )' } }, { -1, 6, -1, -1, 4, -1, -1, -1, 4, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordSetFocus( ' }, { 0, 1 }, { 0, '' }, { 2, ', ' }, { 2, 2 }, { 0, ' )' } }, { -1, 1, -1, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordSetFocus( ' }, { 0, 1 }, { 0, '' }, { 2, ', ' }, { 2, 2 }, { 0, ' )' } }, { -1, 4, -1, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ordSetFocus(0)' } }, { -1} , } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitClsRules()
|
|
|
|
#ifdef __HARBOUR__
|
|
|
|
/* Defines */
|
|
aAdd( aDefRules, { 'HB_CLASS_CH_' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_SETUP_CH_' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_EXTENSION' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_C52_UNDOC' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_COMPAT_C53' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_COMPAT_XPP' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CH_' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_MSGLISTALL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_MSGLISTCLASS' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_MSGLISTPURE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_EXPORTED' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_PROTECTED' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_HIDDEN' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_CTOR' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_READONLY' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_SHARED' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_CLASS' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSTP_SUPER' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_METHOD' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_DATA' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_CLASSDATA' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_INLINE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_VIRTUAL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_SUPER' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_ONERROR' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MSG_CLSMTHD' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_DATA_SYMBOL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_DATA_VALUE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_DATA_TYPE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_DATA_SCOPE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_DATA_PERSISTENT' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSD_SYMBOL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSD_VALUE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSD_TYPE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSD_SCOPE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MTHD_SYMBOL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MTHD_PFUNCTION' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MTHD_SCOPE' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_MTHD_PERSISTENT' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSM_SYMBOL' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSM_PFUNCTION' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_OO_CLSM_SCOPE' , , .T. } )
|
|
aAdd( aDefRules, { '__HB_CLS_PAR' , , .T. } )
|
|
aAdd( aDefRules, { '__HB_CLS_NOINI' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_CLS_FWO' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_CLS_CSY' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_CLS_VO' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_CLS_TOP' , , .T. } )
|
|
aAdd( aDefRules, { 'HB_CLS_NO_OO_ERR' , , .T. } )
|
|
|
|
/* Translates */
|
|
aAdd( aTransRules, { '__ERR' , { { 0, 0, '(', NIL, NIL }, { 1001, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ')' , { { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'HBCLSCHOICE' , { { 1, 0, '(', '<', NIL }, { 2, 0, ',', '<', NIL }, { 3, 0, ',', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'CREATE' , { { 0, 0, 'CLASS', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'DECLMETH' , { { 1, 0, NIL, '<', NIL }, { 2, 0, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, 'CLASS', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, 'CLASS', NIL, NIL }, { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'EXPORTED' , { { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'EXPORT' , { { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'VISIBLE' , { { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'HIDDEN' , { { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'PROTECTED' , { { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'CLASS' , { { 0, 0, 'VAR', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'CLASS' , { { 0, 0, 'METHOD', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { '(' , { { 1, 0, NIL, '!', NIL }, { 0, 0, '{', NIL, NIL }, { 2, 1, NIL, 'A', { '}' } }, { 0, 0, '}', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { '=' , { { 1, 0, NIL, '!', NIL }, { 0, 0, '{', NIL, NIL }, { 2, 1, NIL, 'A', { '}' } }, { 0, 0, '}', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ',' , { { 1, 0, NIL, '!', NIL }, { 0, 0, '{', NIL, NIL }, { 2, 1, NIL, 'A', { '}' } }, { 0, 0, '}', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'END' , { { 0, 0, 'CLASS', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, 'SUPER', NIL, NIL }, { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL }, { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, 'SUPER', NIL, NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL }, { 0, 0, ':', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, 'SUPER', NIL, NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
|
|
/* Commands */
|
|
aAdd( aCommRules, { 'CLASS' , { { 1, 0, NIL, '<', NIL }, { 2, 1, 'METACLASS', '<', NIL }, { 1003, 1, NIL, ':', { 'FROM', 'INHERIT' } }, { 1004, -1, NIL, '<', NIL }, { 1005, 2, ',', '<', NIL }, { 6, 1, NIL, ':', { 'STATIC' } } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'TYPE', '<', NIL }, { 3, 1, 'ASSIGN', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IS', '<', NIL }, { 4, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'VAR' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'IS', '<', NIL }, { 3, 0, 'TO', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 0, 0, 'DEFERRED', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'EXPORT' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'EXPORT' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'TYPE', '<', NIL }, { 3, 1, 'ASSIGN', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'PROTECT' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'PROTECT' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'TYPE', '<', NIL }, { 3, 1, 'ASSIGN', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'HIDDE' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'HIDDE' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'TYPE', '<', NIL }, { 3, 1, 'ASSIGN', '<', NIL }, { 4, 1, NIL, ':', { 'READONLY', 'RO' } }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'CLASSVAR' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'TYPE', '<', NIL }, { 3, 1, 'ASSIGN', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'SHARED' } } } , .T. } )
|
|
aAdd( aCommRules, { 'CLASSVAR' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'SHARED' } } } , .T. } )
|
|
aAdd( aCommRules, { 'DATA' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'CLASSDATA' , { { 1, 0, NIL, 'A', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, 'INIT', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 7, 1, NIL, ':', { 'READONLY', 'RO' } }, { 8, 1, NIL, ':', { 'SHARED' } } } , .T. } )
|
|
aAdd( aCommRules, { 'CLASSMETHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 4, 1, NIL, ':', { 'PROTECTED' } }, { 5, 1, NIL, ':', { 'HIDDEN' } }, { 6, 1, NIL, ':', { 'SHARED' } } } , .T. } )
|
|
aAdd( aCommRules, { 'CONSTRUCTOR' , { { 1, 0, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 1003, 1, 'AS', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } }, { 0, 1, '_CLASS_DECLARATION_', NIL, NIL }, { 7, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 1004, 1, 'AS', '<', NIL }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } }, { 0, 1, '_CLASS_DECLARATION_', NIL, NIL }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'BLOCK', '<', NIL }, { 1004, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'EXTERN', '<', NIL }, { 1004, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'INLINE', 'A', NIL }, { 1004, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } }, { 8, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'INLINE', 'A', NIL }, { 1005, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 6, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 7, 1, NIL, ':', { 'PROTECTED' } }, { 8, 1, NIL, ':', { 'HIDDEN' } }, { 9, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 0, 0, 'INLINE', NIL, NIL }, { 1003, 1, 'LOCAL', '<', NIL }, { 0, -1, ',', NIL, NIL }, { 4, 0, NIL, 'A', NIL }, { 1005, 1, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 0, 0, 'INLINE', NIL, NIL }, { 1004, 1, 'LOCAL', '<', NIL }, { 0, -1, ',', NIL, NIL }, { 5, 0, NIL, 'A', NIL }, { 1006, 1, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 0, 0, 'VIRTUAL', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'OPERATOR', '<', NIL }, { 4, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 5, 1, NIL, ':', { 'PROTECTED' } }, { 6, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'OPERATOR', '<', NIL }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'METHOD', '<', NIL }, { 1004, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 5, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 6, 1, NIL, ':', { 'PROTECTED' } }, { 7, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'METHOD', '<', NIL }, { 1005, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 6, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 7, 1, NIL, ':', { 'PROTECTED' } }, { 8, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'METHOD', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1004, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1005, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 6, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 7, 1, NIL, ':', { 'PROTECTED' } }, { 8, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'METHOD', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1005, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1006, 1, NIL, ':', { 'CONSTRUCTOR' } }, { 7, 1, NIL, ':', { 'EXPORTED', 'VISIBLE' } }, { 8, 1, NIL, ':', { 'PROTECTED' } }, { 9, 1, NIL, ':', { 'HIDDEN' } } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IS', '<', NIL }, { 4, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IS', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1004, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 5, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'IS', '<', NIL }, { 5, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'IS', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 5, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 6, 0, 'IN', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'IS', '<', NIL }, { 1004, 1, NIL, 'A', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'TO', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'MESSAGE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'TO', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'DELEGATE' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 0, 'TO', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'DELEGATE' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 0, 'TO', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } }, { 0, 0, 'SETGET', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } }, { 0, 0, 'SETGET', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ACCESS' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 3, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'ACCESS' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 4, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'ACCESS' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 0, 0, 'INLINE', NIL, NIL }, { 1003, 1, 'LOCAL', '<', NIL }, { 0, -1, ',', NIL, NIL }, { 4, 0, NIL, 'A', NIL }, { 5, 1, NIL, ':', { 'PERSISTENT', 'PROPERTY' } } } , .T. } )
|
|
aAdd( aCommRules, { 'ACCESS' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL }, { 0, 0, 'DEFERRED', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ASSIGN' , { { 1, 0, NIL, '<', NIL }, { 1002, 1, 'AS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ASSIGN' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ASSIGN' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL }, { 1003, 1, 'AS', '<', NIL }, { 0, 0, 'INLINE', NIL, NIL }, { 1004, 1, 'LOCAL', '<', NIL }, { 0, -1, ',', NIL, NIL }, { 5, 0, NIL, 'A', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ON' , { { 1, 0, 'ERROR', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ERROR' , { { 1, 0, 'HANDLER', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ERROR' , { { 1, 0, 'HANDLER', '<', NIL }, { 0, 0, '(', NIL, NIL }, { 1002, 1, NIL, 'A', { ')' } }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ENDCLASS' , , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'CLASS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'CLASS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '_CLASS_IMPLEMENTATION_', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'CLASS', '<', NIL }, { 0, 0, '_CLASS_IMPLEMENTATION_', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'METHOD' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'DECLCLASS', '<', NIL }, { 0, 0, '_CLASS_IMPLEMENTATION_', NIL, NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'DECLARED' , { { 1, 0, 'METHOD', '<', NIL }, { 2, 0, NIL, '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ACCESS' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'CLASS', '<', NIL } } , .T. } )
|
|
aAdd( aCommRules, { 'ASSIGN' , { { 1, 0, NIL, '<', NIL }, { 2, 0, 'CLASS', '<', NIL } } , .T. } )
|
|
|
|
#endif
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitClsResults()
|
|
|
|
#ifdef __HARBOUR__
|
|
|
|
/* Defines Results*/
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { { { 0, '0' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '8' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '16' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '32' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '64' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '128' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '0' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '5' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '6' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '7' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '5' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '4' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '2' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '3' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '__CLS_PARAM' } }, { -1} , } )
|
|
aAdd( aDefResults, { { { 0, '.F.' } }, { -1} , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
aAdd( aDefResults, { , , } )
|
|
|
|
/* Translates Results*/
|
|
aAdd( aTransResults, { { { 0, '#error ' }, { 1, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, ')' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'iif( ' }, { 0, 1 }, { 0, ', HB_OO_CLSTP_EXPORTED , iif( ' }, { 0, 2 }, { 0, ', HB_OO_CLSTP_PROTECTED, iif( ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_HIDDEN, nScope) ) )' } }, { -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'CLASS' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 1 }, { 0, '_' }, { 0, 2 } }, { 1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aTransResults, { , , } )
|
|
aAdd( aTransResults, { { { 0, ':' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'nScope := HB_OO_CLSTP_EXPORTED' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'nScope := HB_OO_CLSTP_EXPORTED' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'nScope := HB_OO_CLSTP_EXPORTED' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'nScope := HB_OO_CLSTP_HIDDEN' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'nScope := HB_OO_CLSTP_PROTECTED' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'CLASSVAR' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'CLASSMETHOD' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, '( ' }, { 0, 1 }, { 0, '():New( ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, '= ' }, { 0, 1 }, { 0, '():New( ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, ', ' }, { 0, 1 }, { 0, '():New( ' }, { 0, 2 }, { 0, ' )' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'ENDCLASS' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, ':' }, { 0, 1 }, { 0, ':' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, ':Super:' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, ':Super' } }, { -1} , } )
|
|
|
|
/* Commands Results*/
|
|
aAdd( aCommResults, { { { 0, '_HB_CLASS ' }, { 0, 1 }, { 0, ' ; ' }, { 0, 6 }, { 0, ' function ' }, { 0, 1 }, { 0, '() ; static s_oClass ; local MetaClass,nScope := HB_OO_CLSTP_EXPORTED ; if s_oClass == NIL ; s_oClass := IIF(' }, { 0, 2 }, { 0, ', ' }, { 0, 2 }, { 0, ' ,HBClass():new( ' }, { 0, 1 }, { 0, ' , __HB_CLS_PAR ( ' }, { 4, 4 }, { 0, '' }, { 5, ' ,' }, { 5, 5 }, { 0, ' ) ) ) ; #undef _CLASS_NAME_ ; #define _CLASS_NAME_ ' }, { 0, 1 }, { 0, ' ; #undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_DECLARATION_ ; #xtranslate CLSMETH ' }, ;
|
|
{ 0, 1 }, { 0, ' <MethodName> => @' }, { 0, 1 }, { 0, '_<MethodName> ; #xtranslate DECLCLASS ' }, { 0, 1 }, { 0, ' => ; ' }, { 5, ' ; #translate Super( ' }, { 5, 5 }, { 5, ' ) : => ::' }, { 5, 5 }, { 5, ': ' }, { 0, '' }, { 4, ' ; #translate Super( ' }, { 4, 4 }, { 4, ' ) : => ::' }, { 4, 4 }, { 4, ': ' }, { 0, '' }, { 4, ' ; #translate Super() : => ::' }, { 4, 4 }, { 4, ': ' }, { 0, '' }, { 4, ' ; #translate Super : => ::' }, { 4, 4 }, { 4, ': ' }, { 0, '' }, { 4, ' ; #translate ::Super : => ::' }, { 4, 4 }, { 4, ': ' }, ;
|
|
{ 0, '' }, { 4, ' ; REQUEST ' }, { 4, 4 }, { 0, '' }, { 5, ' ,' }, { 5, 5 } }, { -1, 1, -1, 1, -1, 1, -1, 6, -1, 4, -1, 4, -1, 4, -1, -1, 4, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 8 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 8 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self, param| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' := param }, HB_OO_CLSTP_EXPORTED )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 3 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self, param| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 3 }, { 0, ' := param }, HB_OO_CLSTP_EXPORTED )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self, param| Self:' }, { 0, 3 }, { 0, ' := param }, HB_OO_CLSTP_EXPORTED )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 4, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 's_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 2 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self, param| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 2 }, { 0, ' := param }, HB_OO_CLSTP_EXPORTED )' } }, { -1, 4, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddVirtual( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_EXPORTED + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_EXPORTED + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_PROTECTED + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_PROTECTED + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_HIDDEN + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_HIDDEN + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 5 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiClsData(' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ) + iif( ' }, { 0, 8 }, { 0, ', HB_OO_CLSTP_SHARED, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiClsData(' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ) + iif( ' }, { 0, 8 }, { 0, ', HB_OO_CLSTP_SHARED, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI, ' }, { 0, 8 }, { 0, ' )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiClsData(' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ) + HB_OO_CLSTP_SHARED, {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddClsMthds( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' ) + iif( ' }, { 0, 6 }, { 0, ', HB_OO_CLSTP_SHARED, 0 ) )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, ' CONSTRUCTOR' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 2 }, { 2, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 3, ' AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 2 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 7 }, { 0, ' )' } }, { -1, 1, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 3 }, { 3, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 4, ' AS ' }, { 4, 4 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) + iif( ' }, { 0, 3 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 8 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 4, 4 }, { 4, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 8 }, { 0, ' )' } }, { -1, 1, -1, 0, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 4, 4 }, { 4, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, '; s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', @' }, { 0, 3 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 8 }, { 0, ' )' } }, { -1, 1, -1, 0, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 4, 4 }, { 4, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self | ' }, { 0, 3 }, { 0, ' }, HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 8 }, { 0, ' )' } }, { -1, 1, -1, 0, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 5, 5 }, { 5, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 3, ' AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, ' | ' }, { 0, 4 }, { 0, ' }, HBCLSCHOICE( ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' ) + iif( ' }, { 0, 5 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ), ' }, { 0, 9 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 0, -1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, ' BLOCK {|Self ' }, { 3, ' ,' }, { 3, 3 }, { 0, ' | ' }, { 0, 4 }, { 0, ' } ' }, { 5, 5 } }, { -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, '' }, { 3, ' AS ' }, { 3, 3 }, { 0, ' BLOCK {|Self ' }, { 2, ' ,' }, { 2, 2 }, { 0, '' }, { 4, ' ,' }, { 4, 4 }, { 0, ' | ' }, { 0, 5 }, { 0, ' } ' }, { 6, 6 } }, { -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddVirtual( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) ) ; s_oClass:AddInline( ' }, { 0, 3 }, { 0, ', {|Self [,<params>] | Self:' }, { 0, 1 }, { 0, '( [<params>] ) }, HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) )' } }, { -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 2, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) ) ; s_oClass:AddInline( ' }, { 0, 4 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, ' | Self:' }, { 0, 1 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) }, HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) )' } }, ;
|
|
{ -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 4, 4 }, { 4, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 3 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 3 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 3 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ' ) + iif( ' }, { 0, 4 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ) )' } }, { -1, 1, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 5, 5 }, { 5, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 3, ' AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 4 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 4 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 4 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' ) + iif( ' }, { 0, 5 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ) )' } }, { -1, 1, -1, 1, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 4, 4 }, { 0, ') ' }, { 5, 5 }, { 5, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 3 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 3 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 3 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 6 }, { 0, ', ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ' ) + iif( ' }, { 0, 5 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ) )' } }, { -1, 1, -1, 1, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 5, 5 }, { 0, ') ' }, { 2, 2 }, { 0, '' }, { 6, 6 }, { 6, ' AS CLASS _CLASS_NAME_' }, { 0, '' }, { 3, ' AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 4 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 4 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 4 }, { 0, '(), HBCLSCHOICE( ' }, { 0, 7 }, { 0, ', ' }, { 0, 8 }, { 0, ', ' }, { 0, 9 }, { 0, ' ) + iif( ' }, { 0, 6 }, { 0, ', HB_OO_CLSTP_CTOR, 0 ) )' } }, { -1, 1, -1, 1, -1, 0, -1, 0, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, '() } )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 1 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) } )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 3 }, { 0, '() } )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 4, ',' }, { 4, 4 }, { 0, '| Self:' }, { 0, 5 }, { 0, ':' }, { 0, 3 }, { 0, '( ' }, { 4, 4 }, { 0, ' ) } )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '| Self:' }, { 0, 5 }, { 0, ':' }, { 0, 4 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) } )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '| Self:' }, { 0, 6 }, { 0, ':' }, { 0, 4 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) } )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'MESSAGE ' }, { 0, 1 }, { 0, '' }, { 2, ' AS ' }, { 2, 2 }, { 0, ' METHOD ' }, { 0, 3 }, { 0, '' }, { 4, 4 } }, { -1, 1, -1, -1, 1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' } )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 1 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) } )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' } )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '| Self:' }, { 0, 4 }, { 0, ':' }, { 0, 1 }, { 0, '( ' }, { 2, 2 }, { 0, ' ) } )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; _HB_MEMBER _' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY , ' }, { 0, 3 }, { 0, ' ) ; s_oClass:AddMethod( "_" + ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '() )' } }, { -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; _HB_MEMBER _' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY, ' }, { 0, 4 }, { 0, ' ) ; s_oClass:AddMethod( "_" + ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '() )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 4, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY , ' }, { 0, 3 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY , ' }, { 0, 4 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self ' }, { 3, ',' }, { 3, 3 }, { 0, ' | ' }, { 0, 4 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY , ' }, { 0, 5 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, 1, -1, 6, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; s_oClass:AddVirtual( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1, -1, 1, -1, 4, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER _' }, { 0, 1 }, { 0, '() ' }, { 2, 'AS ' }, { 2, 2 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( "_" + ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ _' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED )' } }, { -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER _' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:AddMethod( "_" + ' }, { 0, 1 }, { 0, ', CLSMETH _CLASS_NAME_ _' }, { 0, 1 }, { 0, '(), HB_OO_CLSTP_EXPORTED )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 4, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER _' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, ') ' }, { 3, 'AS ' }, { 3, 3 }, { 0, '; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self ' }, { 2, ',' }, { 2, 2 }, { 0, '' }, { 4, ' ,' }, { 4, 4 }, { 0, ' | ' }, { 0, 5 }, { 0, ' }, HB_OO_CLSTP_EXPORTED )' } }, { -1, 1, -1, 1, -1, -1, 1, -1, 4, -1, -1, 1, -1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'ERROR HANDLER ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(); #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:SetOnError( CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '() )' } }, { -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '_HB_MEMBER ' }, { 0, 1 }, { 0, '(' }, { 2, 2 }, { 0, '); #xcommand METHOD ' }, { 0, 1 }, { 0, ' [([<anyParams,...>])] ' }, { 0, ' DECLCLASS _CLASS_NAME_' }, { 0, ' _CLASS_IMPLEMENTATION_ => DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 }, { 0, '([<anyParams>]); s_oClass:SetOnError( CLSMETH _CLASS_NAME_ ' }, { 0, 1 }, { 0, '() )' } }, { -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '; s_oClass:Create() ; endif ; return s_oClass:Instance() AS CLASS _CLASS_NAME_ ; #undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_IMPLEMENTATION_' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, ' _CLASS_MODE_' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, ' CLASS ' }, { 0, 2 }, { 0, ' _CLASS_MODE_' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'METHOD ' }, { 0, 1 }, { 0, ' CLASS ' }, { 0, 2 }, { 0, ' _CLASS_IMPLEMENTATION_' } }, { -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DECLARED METHOD _CLASS_NAME_ ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DECLARED METHOD ' }, { 0, 2 }, { 0, ' ' }, { 0, 1 } }, { -1, 1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, '#error Class ' }, { 0, 2 }, { 0, ' not declared for method: ' }, { 0, 1 }, { 0, ' ; function ' }, { 0, 1 }, { 0, ' ; local self := QSelf()' } }, { -1, 3, -1, 1, -1, 1, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'static function DECLMETH ' }, { 0, 1 }, { 0, ' ' }, { 0, 2 }, { 0, ' ; local Self AS CLASS ' }, { 0, 1 }, { 0, ' := QSelf() AS CLASS ' }, { 0, 1 } }, { -1, 1, -1, 1, -1, 1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'static function ' }, { 0, 2 }, { 0, '_' }, { 0, 1 }, { 0, ' ; local Self AS CLASS ' }, { 0, 2 }, { 0, ' := QSelf() AS CLASS ' }, { 0, 2 } }, { -1, 1, -1, 1, -1, 1, -1, 1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'static function ' }, { 0, 2 }, { 0, '__' }, { 0, 1 }, { 0, ' ; local Self AS CLASS ' }, { 0, 2 }, { 0, ' := QSelf() AS CLASS ' }, { 0, 2 } }, { -1, 1, -1, 1, -1, 1, -1, 1} , { NIL, NIL } } )
|
|
|
|
#endif
|
|
|
|
RETURN .T.
|
|
|
|
#ifndef __XHARBOUR__
|
|
//--------------------------------------------------------------//
|
|
INIT PROCEDURE PPInit
|
|
|
|
local FileHandle
|
|
|
|
FileHandle := FCreate('Trace.Log')
|
|
FClose(FileHandle)
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION TraceLog(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 )
|
|
|
|
LOCAL FileHandle, ProcName, Counter := 1, aEntries
|
|
|
|
aEntries := {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15}
|
|
|
|
FileHandle := FOpen( 'Trace.Log', 1 )
|
|
|
|
FSeek(FileHandle, 0, 2)
|
|
|
|
FWrite( FileHandle, '[' + ProcName(1) + '] (' + Str( Procline(1), 5 ) + ') Called from: ' + CRLF )
|
|
|
|
DO WHILE ! ( ( ProcName := ProcName( ++Counter ) ) == '' )
|
|
FWrite( FileHandle, space(30) + ProcName + '(' + Str( Procline( Counter), 5 ) + ')' + CRLF )
|
|
ENDDO
|
|
|
|
IF ! ( PP_ProcName(0) == "" )
|
|
FWrite( FileHandle, "Interpreter:" + CRLF )
|
|
Counter := -1
|
|
DO WHILE ! ( ( ProcName := PP_ProcName( ++Counter ) ) == "" )
|
|
FWrite( FileHandle, space(30) + ProcName + '(' + Str( PP_Procline( Counter), 5 ) + ')' + CRLF )
|
|
ENDDO
|
|
ENDIF
|
|
|
|
FOR Counter := 1 to PCount()
|
|
FWrite( FileHandle, '>>>' + CStr( aEntries[Counter] ) + '<<<' + CRLF )
|
|
NEXT
|
|
|
|
FWrite( FileHandle, CRLF )
|
|
|
|
FClose(FileHandle)
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION CStr( xExp )
|
|
|
|
LOCAL cType
|
|
|
|
IF xExp == NIL
|
|
RETURN 'NIL'
|
|
ENDIF
|
|
|
|
cType := ValType( xExp )
|
|
|
|
DO CASE
|
|
CASE cType = 'C'
|
|
RETURN xExp
|
|
|
|
CASE cType = 'D'
|
|
RETURN dToc( xExp )
|
|
|
|
CASE cType = 'L'
|
|
RETURN IIF( xExp, '.T.', '.F.' )
|
|
|
|
CASE cType = 'N'
|
|
RETURN Str( xExp )
|
|
|
|
CASE cType = 'M'
|
|
RETURN xExp
|
|
|
|
CASE cType = 'A'
|
|
RETURN "{ Array of " + LTrim( Str( Len( xExp ) ) ) + " Items }"
|
|
|
|
CASE cType = 'B'
|
|
RETURN '{|| Block }'
|
|
|
|
CASE cType = 'O'
|
|
RETURN "{ " + xExp:ClassName() + " Object }"
|
|
|
|
OTHERWISE
|
|
RETURN "Type: " + cType
|
|
ENDCASE
|
|
|
|
RETURN ""
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION PP_QSelf( o )
|
|
|
|
STATIC s_oSelf
|
|
LOCAL oPreset := s_oSelf
|
|
|
|
IF ValType( o ) == 'O'
|
|
s_oSelf := o
|
|
RETURN oPreset
|
|
ENDIF
|
|
|
|
RETURN s_oSelf
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
#ifndef USE_C_BOOST
|
|
|
|
STATIC FUNCTION _pp_NextIdentifier( sLine, sSkipped )
|
|
|
|
LOCAL nAt, nLen := Len( sLine ), cChar, cLastChar := '0', nStart, sIdentifier, sTmp
|
|
|
|
FOR nAt := 1 TO nLen
|
|
cChar := SubStr( sLine, nAt, 1 )
|
|
|
|
IF cChar $ ' ,([{|^*/+-=!#<>:&$'
|
|
IF nStart != NIL
|
|
EXIT
|
|
ENDIF
|
|
LOOP // No need to record cLastChar
|
|
ELSEIF cChar $ ')]}'
|
|
IF nStart != NIL
|
|
EXIT
|
|
ENDIF
|
|
ELSEIF cChar $ '"'+"'"
|
|
DO WHILE ( nAt < nLen ) .AND. SubStr( sLine, ++nAt, 1 ) != cChar
|
|
ENDDO
|
|
LOOP // No need to record cLastChar
|
|
ELSEIF cChar == '['
|
|
IF ! ( IsAlpha( cLastChar ) .OR. IsDigit( cLastChar ) .OR. cLastChar $ "])}_." )
|
|
DO WHILE ( nAt < nLen ) .AND. SubStr( sLine, ++nAt, 1 ) != ']'
|
|
ENDDO
|
|
ENDIF
|
|
cLastChar := ']'
|
|
LOOP // Recorded cLastChar
|
|
ELSEIF cChar == '.'
|
|
IF cLastChar == '_' .OR. IsAlpha( cLastChar )
|
|
EXIT
|
|
ENDIF
|
|
|
|
sTmp := Upper( SubStr( sLine, nAt + 1, 4 ) )
|
|
IF sTmp = "T."
|
|
nAt += 2
|
|
LOOP
|
|
ELSEIF sTmp = "F."
|
|
nAt += 2
|
|
LOOP
|
|
ELSEIF sTmp = "OR."
|
|
nAt += 3
|
|
LOOP
|
|
ELSEIF sTmp = "AND."
|
|
nAt += 4
|
|
LOOP
|
|
ELSEIF sTmp = "NOT."
|
|
nAt += 4
|
|
LOOP
|
|
ENDIF
|
|
ELSEIF nStart == NIL .AND. ( IsAlpha( cChar ) .OR. cChar == '_' )
|
|
nStart := nAt
|
|
ENDIF
|
|
|
|
cLastChar := cChar
|
|
NEXT
|
|
|
|
IF nStart != NIL
|
|
sIdentifier := SubStr( sLine, nStart, nAt - nStart )
|
|
sSkipped := Left( sLine, nStart - 1 )
|
|
sLine := SubStr( sLine, nAt )
|
|
ENDIF
|
|
|
|
//TraceLog( sIdentifier, sLine, sSkipped, cChar, cLastChar, nStart, nAt, nLen )
|
|
|
|
RETURN sIdentifier
|
|
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION nAtSkipStr( sFind, sLine, nStart )
|
|
|
|
LOCAL nAt, nLen := Len( sLine ), cChar, cLastChar := ' ', sTmp, nLenFind := Len( sFind )
|
|
|
|
IF nStart == NIL
|
|
nStart := 1
|
|
ENDIF
|
|
|
|
FOR nAt := nStart TO nLen
|
|
IF SubStr( sLine, nAt, nLenFind ) == sFind
|
|
RETURN nAt
|
|
ENDIF
|
|
|
|
cChar := SubStr( sLine, nAt, 1 )
|
|
|
|
IF cChar $ '"'+"'"
|
|
DO WHILE ( nAt < nLen ) .AND. SubStr( sLine, ++nAt, 1 ) != cChar
|
|
ENDDO
|
|
LOOP // No need to record cLastChar
|
|
ELSEIF cChar == '['
|
|
IF ! ( IsAlpha( cLastChar ) .OR. IsDigit( cLastChar ) .OR. cLastChar $ "])}_." )
|
|
DO WHILE ( nAt < nLen ) .AND. SubStr( sLine, ++nAt, 1 ) != ']'
|
|
ENDDO
|
|
ENDIF
|
|
cLastChar := ']'
|
|
LOOP // Recorded cLastChar
|
|
ENDIF
|
|
|
|
cLastChar := cChar
|
|
NEXT
|
|
|
|
RETURN 0
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
FUNCTION PP_ModuleName( sNewModule )
|
|
|
|
LOCAL sModule := s_sModule
|
|
|
|
IF PCount() > 0
|
|
s_sModule := sNewModule
|
|
ENDIF
|
|
|
|
RETURN sModule
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitRunRules()
|
|
|
|
/* Defines */
|
|
aAdd( aDefRules, { 'HB_CLS_NO_OO_ERR' , , .T. } )
|
|
|
|
/* Translates */
|
|
aAdd( aTransRules, { 'AS' , { { 1, 0, NIL, ':', { 'ANYTYPE', 'ARRAY', 'CHARACTER', 'CODEBLOCK', 'DATE', 'LOGICAL', 'NUMERIC', 'OBJECT', 'STRING', 'USUAL' } } } , .F. } )
|
|
aAdd( aTransRules, { 'AS' , { { 0, 0, 'ARRAY', NIL, NIL }, { 1, 0, 'OF', '<', NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'AS' , { { 1, 0, 'CLASS', '!', NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'AS' , { { 1, 0, 'CLASS', '!', NIL }, { 0, 0, ':=', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'QSELF' , { { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { 'ADDMETHOD' , { { 1, 0, '(', '<', NIL }, { 0, 0, ',', NIL, NIL }, { 2, 0, '@', '!', NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL }, { 3, 0, ',', '<', NIL }, { 4, 0, ',', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .T. } )
|
|
aAdd( aTransRules, { ':' , { { 0, 0, ':', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { '_GET_' , { { 1, 0, '(', '<', NIL }, { 2, 0, ',', '<', NIL }, { 0, 0, ',', NIL, NIL }, { 3, 1, NIL, '<', { ',' } }, { 0, 0, ',', NIL, NIL }, { 4, 1, NIL, '<', { ',' } }, { 0, 0, ',', NIL, NIL }, { 5, 1, NIL, '<', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { '__GET' , { { 1, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL }, { 0, 0, ':', NIL, NIL }, { 0, 0, 'DISPLAY', NIL, NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'PROCNAME' , { { 0, 0, '(', NIL, NIL }, { 1, 1, NIL, '<', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'PROCLINE' , { { 0, 0, '(', NIL, NIL }, { 1, 1, NIL, '<', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
|
|
/* Commands */
|
|
#ifdef WIN
|
|
aAdd( aCommRules, { 'ALERT' , { { 1, 0, '(', '<', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
#endif
|
|
|
|
aAdd( aCommRules, { '_HB_CLASS' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { '_HB_MEMBER' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'MEMVAR' , { { 1, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'EXTERNAL' , { { 1, 0, NIL, '!', NIL }, { 1002, 1, ',', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DECLARE' , { { 1, 0, NIL, '!', NIL }, { 2, 0, NIL, '<', NIL }, { 3, 0, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, NIL, '!', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, NIL, '!', NIL }, { 2, 0, 'WITH', '<', NIL }, { 1003, 1, ',', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'IF' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ELSEIF' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ELSE' , , .F. } )
|
|
aAdd( aCommRules, { 'ENDIF' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'END' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 0, 0, 'CASE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CASE' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'OTHERWISE' , , .F. } )
|
|
aAdd( aCommRules, { 'ENDCASE' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FOR' , { { 1, 0, NIL, '<', NIL }, { 2, 0, ':=', '<', NIL }, { 3, 0, 'TO', '<', NIL }, { 4, 1, 'STEP', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FOR' , { { 1, 0, NIL, '<', NIL }, { 2, 0, '=', '<', NIL }, { 3, 0, 'TO', '<', NIL }, { 4, 1, 'STEP', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'LOOP' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'EXIT' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'NEXT' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, 'WHILE', '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'WHILE' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ENDDO' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, NIL, '(', NIL }, { 0, 0, '.', NIL, NIL }, { 0, 0, 'PRG', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'INIT' , { { 1, 0, 'PROCEDURE', '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'EXIT' , { { 1, 0, 'PROCEDURE', '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STATIC' , { { 1, 0, 'PROCEDURE', '!', NIL }, { 2, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STATIC' , { { 1, 0, 'PROCEDURE', '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STATIC' , { { 1, 0, 'FUNCTION', '!', NIL }, { 2, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STATIC' , { { 1, 0, 'FUNCTION', '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PROCEDURE' , { { 1, 0, NIL, '!', NIL }, { 2, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PROCEDURE' , { { 1, 0, NIL, '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FUNCTION' , { { 1, 0, NIL, '!', NIL }, { 2, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'FUNCTION' , { { 1, 0, NIL, '!', NIL }, { 0, 1, '(', NIL, NIL }, { 0, -1, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'RETURN' , { { 1, 1, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PARAMETERS' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PRIVATE' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DECLARE' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'PUBLIC' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'LOCAL' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'STATIC' , { { 1, 0, NIL, 'A', NIL } } , .F. } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
|
|
STATIC FUNCTION InitRunResults()
|
|
|
|
/* Defines Results*/
|
|
aAdd( aDefResults, { { { 0, '1' } }, { -1} , { } } )
|
|
|
|
/* Translates Results*/
|
|
aAdd( aTransResults, { , , { NIL } } )
|
|
aAdd( aTransResults, { , , { NIL } } )
|
|
aAdd( aTransResults, { , , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, ':=' } }, { -1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'PP_Qself()' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, 'AddInLine( ' }, { 0, 1 }, { 0, ', {|Self,p1,p2,p3,p4,p5,p6,p7,p8,p9| PP_QSelf(Self), PP_ExecMethod( ' }, { 0, 2 }, { 0, ', p1,p2,p3,p4,p5,p6,p7,p8,p9 ) }, ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ' )' } }, { -1, 1, -1, 3, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'Self:' } }, { -1} , } )
|
|
aAdd( aTransResults, { { { 0, '__GET( MEMVARBLOCK(' }, { 0, 2 }, { 0, '), ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, '__GET(' }, { 0, 1 }, { 0, ')' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'PP_ProcName( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, 'PP_ProcLine( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
|
|
/* Commands Results*/
|
|
#ifdef WIN
|
|
aAdd( aCommResults, { { { 0, 'MessageBox( 0, CStr( ' }, { 0, 1 }, { 0, ' ), "xBaseScript for Windows", 0 )' } }, { -1, 1, -1} , { NIL } } )
|
|
#endif
|
|
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL } } )
|
|
aAdd( aCommResults, { , , { NIL, NIL } } )
|
|
aAdd( aCommResults, { , , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, '()' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, ' ' }, { 0, 1 }, { 0, '( ' }, { 0, 2 }, { 0, '' }, { 3, ', ' }, { 3, 3 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, -1, 1, -1} , { NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__IF ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__ELSEIF ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__ELSE' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'PP__ENDIF' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__END' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__DOCASE' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'PP__CASE ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__OTHERWISE' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'PP__ENDCASE' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__FOR ' }, { 0, 1 }, { 0, ':=' }, { 0, 2 }, { 0, '~TO~' }, { 0, 3 }, { 0, '~STEP~' }, { 0, 4 } }, { -1, 1, -1, 1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__FOR ' }, { 0, 1 }, { 0, ':=' }, { 0, 2 }, { 0, '~TO~' }, { 0, 3 }, { 0, '~STEP~' }, { 0, 4 } }, { -1, 1, -1, 1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__LOOP' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__EXIT' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__NEXT' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__WHILE ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__WHILE ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP__ENDDO' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Run( ' }, { 0, 1 }, { 0, ' + ".prg" )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_INIT ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_EXIT ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_PRG ' }, { 0, 1 }, { 0, ' ; PP_LocalParams( { ' }, { 0, 2 }, { 0, ' } )' } }, { -1, 1, -1, 3, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_PRG ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_PRG ' }, { 0, 1 }, { 0, ' ; PP_LocalParams( { ' }, { 0, 2 }, { 0, ' } )' } }, { -1, 1, -1, 3, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC_PRG ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC ' }, { 0, 1 }, { 0, ' ; PP_LocalParams( { ' }, { 0, 2 }, { 0, ' } )' } }, { -1, 1, -1, 3, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC ' }, { 0, 1 }, { 0, ' ; PP_LocalParams( { ' }, { 0, 2 }, { 0, ' } )' } }, { -1, 1, -1, 3, -1} , { NIL, NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_PROC ' }, { 0, 1 } }, { -1, 1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_SetReturn( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Params( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Privates( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Privates( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Publics( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Locals( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Statics( { ' }, { 0, 1 }, { 0, ' } )' } }, { -1, 3, -1} , { NIL } } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
STATIC FUNCTION InitDotRules()
|
|
|
|
/* Defines */
|
|
|
|
/* Translates */
|
|
aAdd( aTransRules, { '_GET_' , { { 1, 0, '(', '<', NIL }, { 2, 0, ',', '<', NIL }, { 0, 0, ',', NIL, NIL }, { 3, 1, NIL, '<', { ',' } }, { 0, 0, ',', NIL, NIL }, { 4, 1, NIL, '<', { ',' } }, { 0, 0, ',', NIL, NIL }, { 5, 1, NIL, '<', { ')' } }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { '__GET' , { { 1, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL }, { 0, 0, ':', NIL, NIL }, { 0, 0, 'DISPLAY', NIL, NIL }, { 0, 0, '(', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
aAdd( aTransRules, { 'AADD' , { { 0, 0, '(', NIL, NIL }, { 0, 0, 'GETLIST', NIL, NIL }, { 0, 0, ',', NIL, NIL }, { 0, 0, '__GET', NIL, NIL }, { 1, 0, '(', 'A', NIL }, { 0, 0, ')', NIL, NIL }, { 0, 0, ')', NIL, NIL } } , .F. } )
|
|
|
|
/* Commands */
|
|
aAdd( aCommRules, { 'CLS' , , .F. } )
|
|
aAdd( aCommRules, { 'BROWSE' , , .F. } )
|
|
aAdd( aCommRules, { 'EXIT' , , .F. } )
|
|
aAdd( aCommRules, { 'IF' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ELSEIF' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'ELSE' , , .F. } )
|
|
aAdd( aCommRules, { 'ENDIF' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'END' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 0, 0, 'CASE', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CASE' , { { 1, 0, NIL, '<', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'OTHERWISE' , , .F. } )
|
|
aAdd( aCommRules, { 'ENDCASE' , { { 1001, 1, NIL, '*', NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'DO' , { { 1, 0, NIL, '<', NIL }, { 0, 0, '.', NIL, NIL }, { 0, 0, 'PRG', NIL, NIL } } , .F. } )
|
|
aAdd( aCommRules, { 'CD' , { { 1, 0, NIL, '(', NIL } } , .F. } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
STATIC FUNCTION InitDotResults()
|
|
|
|
/* Defines Results*/
|
|
|
|
/* Translates Results*/
|
|
aAdd( aTransResults, { { { 0, '__GET( MEMVARBLOCK(' }, { 0, 2 }, { 0, '), ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ' )' } }, { -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} , { NIL, NIL, NIL, NIL, NIL } } )
|
|
aAdd( aTransResults, { { { 0, '__GET(' }, { 0, 1 }, { 0, ')' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aTransResults, { { { 0, '__oGet := __GET(' }, { 0, 1 }, { 0, ') ; aAdd( GetList, __oGet ) ; __oGet:Display()' } }, { -1, 1, -1} , { NIL } } )
|
|
|
|
/* Commands Results*/
|
|
aAdd( aCommResults, { { { 0, 'Scroll( 2, 0, MaxRow() - 1, MaxCol() ) ; SetPos( 2, 0 )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, 'Browse( 1, 0, MaxRow() - 1, MaxCol() )' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__QUIT()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetIf( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetElseIf( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetElse()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetEnd()' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetEnd()' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetDoCase()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetCase( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 1, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, '__SetOtherwise()' } }, { -1} , } )
|
|
aAdd( aCommResults, { { { 0, '__SetEndCase()' } }, { -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'PP_Run( ' }, { 0, 1 }, { 0, ' + ".prg" )' } }, { -1, 2, -1} , { NIL } } )
|
|
aAdd( aCommResults, { { { 0, 'DirChange( ' }, { 0, 1 }, { 0, ' )' } }, { -1, 4, -1} , { NIL } } )
|
|
|
|
RETURN .T.
|
|
|
|
//--------------------------------------------------------------//
|
|
PROCEDURE PP_RunInit( aProcedures, aInitExit, nLine )
|
|
|
|
IF ValType( aProcedures ) != 'A' .OR. ValType( aInitExit ) != 'A'
|
|
Alert( [Invalid parameters to: ] + ProcName() + [ must be Arrays!] )
|
|
ELSE
|
|
aSize( aProcedures, 0 )
|
|
|
|
aSize( aInitExit, 2 )
|
|
aInitExit[1] := {}
|
|
aInitExit[2] := {}
|
|
ENDIF
|
|
|
|
ErrorBlock( {|oErr| RP_Run_Err( oErr, aProcedures, nLine ) } )
|
|
|
|
InitRules()
|
|
InitResults()
|
|
|
|
InitRunRules()
|
|
InitRunResults()
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION PP_PreProText( sLines, asLines, bBlanks )
|
|
|
|
LOCAL nOpen, nClose, sTemp := "", nLine, nLines
|
|
|
|
//ErrorBlock( {|oErr| RP_PPText_Err( oErr, sLines, 0 ) } )
|
|
|
|
//TraceLog( sLines )
|
|
|
|
IF bBlanks == NIL
|
|
bBlanks := .T.
|
|
ENDIF
|
|
|
|
IF asLines == NIL
|
|
asLines := {}
|
|
ENDIF
|
|
|
|
sLines := StrTran( sLines, Chr(13), " " )
|
|
sLines := StrTran( sLines, Chr(9), " " )
|
|
|
|
WHILE ( nOpen := nAtSkipStr( "/*", sLines ) ) > 0
|
|
sTemp += Left( sLines, nOpen - 1 )
|
|
nClose := nAtSkipStr( "*/", sLines, nOpen + 2 )
|
|
WHILE ( nOpen := nAtSkipStr( Chr(10), sLines, nOpen + 1 ) ) > 0 .AND. nOpen < nClose
|
|
sTemp += Chr(10)
|
|
ENDDO
|
|
sLines := SubStr( sLines, nClose + 2 )
|
|
ENDDO
|
|
sLines := ( sTemp + sLines )
|
|
|
|
nOpen := 0
|
|
nClose := 0
|
|
|
|
//ErrorBlock( {|oErr| RP_PPText_Err( oErr, SubStr( sLines, nClose + 1, nOpen - ( nClose + 1 ) ), 0 ) } )
|
|
|
|
WHILE ( nOpen := At( Chr(10), sLines, nOpen + 1 ) ) > 0 .AND. nOpen > nClose
|
|
//TraceLog( sLines, Len( sLines ), nOpen, nClose )
|
|
aAdd( asLines, RTrim( LTrim( SubStr( sLines, nClose + 1, nOpen - ( nClose + 1 ) ) ) ) )
|
|
//TraceLog( Len( asLines ), aTail( asLines ) )
|
|
nClose := nOpen
|
|
ENDDO
|
|
IF Len( sLines ) > nClose
|
|
aAdd( asLines, RTrim( LTrim( SubStr( sLines, nClose + 1 ) ) ) )
|
|
//TraceLog( Len( asLines) , aTail( asLines ) )
|
|
ENDIF
|
|
|
|
//ErrorBlock( {|oErr| RP_PPText_Err( oErr, asLines[nLine], nLine ) } )
|
|
|
|
nLines := Len( asLines )
|
|
FOR nLine := 1 TO nLines
|
|
sTemp := asLines[nLine]
|
|
//TraceLog( sTemp )
|
|
|
|
DO WHILE Empty( sTemp ) .OR. Left( sTemp, 1 ) == '*'
|
|
//TraceLog( nLine, nLines, sTemp )
|
|
IF bBlanks
|
|
asLines[nLine] := NIL
|
|
nLine++
|
|
IF nLine > nLines
|
|
EXIT
|
|
ENDIF
|
|
sTemp := asLines[nLine]
|
|
ELSE
|
|
aDel( asLines, nLine )
|
|
nLines--
|
|
aSize( asLines, nLines )
|
|
IF nLine > nLines
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF nLine > nLines
|
|
EXIT
|
|
ENDIF
|
|
|
|
//TraceLog( nLine, nLines, sTemp )
|
|
|
|
nOpen := nAtSkipStr( "&&", sTemp )
|
|
IF nOpen > 0
|
|
IF nOpen == 1
|
|
IF bBlanks
|
|
asLines[nLine] := NIL
|
|
LOOP
|
|
ELSE
|
|
aDel( asLines, nLine )
|
|
nLine--
|
|
nLines--
|
|
aSize( asLines, nLines )
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
sTemp := Left( asLines[nLine], nOpen - 1 )
|
|
ELSE
|
|
sTemp := asLines[nLine]
|
|
ENDIF
|
|
|
|
nOpen := nAtSkipStr( "//", sTemp )
|
|
IF nOpen > 0
|
|
IF nOpen == 1
|
|
IF bBlanks
|
|
asLines[nLine] := NIL
|
|
//TraceLog( "LOOP" )
|
|
LOOP
|
|
ELSE
|
|
aDel( asLines, nLine )
|
|
nLine--
|
|
nLines--
|
|
aSize( asLines, nLines )
|
|
LOOP
|
|
ENDIF
|
|
ENDIF
|
|
sTemp := Left( sTemp, nOpen - 1 )
|
|
ENDIF
|
|
|
|
asLines[nLine] := sTemp
|
|
NEXT
|
|
|
|
sLines := ""
|
|
|
|
IF nLines == 0
|
|
RETURN ""
|
|
ENDIF
|
|
|
|
//TraceLog( nLines )
|
|
|
|
// Don't process the last line for [;].
|
|
nLines--
|
|
FOR nLine := 1 TO nLines
|
|
sTemp := asLines[nLine]
|
|
//TraceLog( sTemp )
|
|
IF sTemp == NIL
|
|
LOOP
|
|
ENDIF
|
|
|
|
DO WHILE Right( sTemp, 1 ) == ';'
|
|
IF bBlanks
|
|
#ifdef __STR_INDEX__
|
|
sTemp[-1] := ' '
|
|
#else
|
|
sTemp := Left( sTemp, Len( sTemp ) - 1 ) + ' '
|
|
#endif
|
|
asLines[nLine] := NIL
|
|
nLine++
|
|
IF asLines[nLine] == NIL
|
|
asLines[nLine] := sTemp
|
|
ELSE
|
|
asLines[nLine] := sTemp + asLines[nLine]
|
|
ENDIF
|
|
sTemp := asLines[nLine]
|
|
ELSE
|
|
aDel( asLines, nLine )
|
|
nLines--
|
|
aSize( asLines, nLines )
|
|
// nLine now points to the next line.
|
|
sTemp := Left( sTemp, Len( sTemp ) - 1 ) + ' ' + asLines[nLine]
|
|
ENDIF
|
|
ENDDO
|
|
|
|
sTemp := PP_PreProLine( sTemp )
|
|
|
|
sLines += sTemp
|
|
sLines += ";"
|
|
|
|
IF sTemp == ""
|
|
asLines[nLine] := NIL
|
|
ELSE
|
|
asLines[nLine] := sTemp
|
|
ENDIF
|
|
//TraceLog( nLine, sTemp )
|
|
NEXT
|
|
|
|
sTemp := asLines[nLine]
|
|
|
|
IF sTemp != NIL
|
|
sTemp := PP_PreProLine( sTemp )
|
|
sLines += sTemp
|
|
ENDIF
|
|
|
|
IF sTemp == ""
|
|
asLines[nLine] := NIL
|
|
ELSE
|
|
asLines[nLine] := sTemp
|
|
ENDIF
|
|
|
|
//TraceLog( nLine, sTemp, sLines )
|
|
|
|
RETURN sLines
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION PP_RunText( sLines, bPP, aParams )
|
|
|
|
LOCAL aProcedures := {}, aInitExit := { {}, {} }, nProcId := 0, ;
|
|
nLine, nLines, xRet, asLines := {}, nOpen, nClose, sLine
|
|
|
|
IF bPP == NIL
|
|
bPP := .T.
|
|
ENDIF
|
|
|
|
PP_RunInit( aProcedures, aInitExit, @nLine )
|
|
|
|
IF bPP
|
|
PP_PreProText( sLines, asLines )
|
|
ELSE
|
|
sLines := StrTran( sLines, Chr(13), "" )
|
|
sLines := StrTran( sLines, Chr(9), " " )
|
|
sLines := StrTran( sLines, ';', Chr(10) )
|
|
nOpen := 0
|
|
nClose := 0
|
|
WHILE ( nOpen := nAtSkipStr( Chr(10), sLines, nOpen + 1 ) ) > 0
|
|
aAdd( asLines, SubStr( sLines, nClose + 1, nOpen - ( nClose + 1 ) ) )
|
|
nClose := nOpen
|
|
ENDDO
|
|
IF Len( sLines ) > nClose
|
|
aAdd( asLines, SubStr( sLines, nClose + 1 ) )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ErrorBlock( {|oErr| RP_Comp_Err( oErr, asLines[nLine], nLine ) } )
|
|
|
|
nLines := Len( asLines )
|
|
FOR nLine := 1 TO nLines
|
|
sLine := asLines[nLine]
|
|
IF sLine != NIL
|
|
PP_CompileLine( sLine, nLine, aProcedures, aInitExit, @nProcId )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN PP_Exec( aProcedures, aInitExit, nProcId, aParams )
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION PP_RunArray( asLines, aParams )
|
|
|
|
LOCAL aProcedures := {}, aInitExit := { {}, {} }, nProcId := 0, ;
|
|
nLine, nLines, nOpen, nClose
|
|
|
|
PP_RunInit( aProcedures, aInitExit, @nLine )
|
|
|
|
ErrorBlock( {|oErr| RP_Comp_Err( oErr, asLines[nLine], nLine ) } )
|
|
|
|
nLines := Len( asLines )
|
|
FOR nLine := 1 TO nLines
|
|
IF asLines[nLine] != NIL
|
|
PP_CompileLine( asLines[nLine], nLine, aProcedures, aInitExit, @nProcId )
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN PP_Exec( aProcedures, aInitExit, nProcId, aParams )
|
|
|
|
//--------------------------------------------------------------//
|
|
FUNCTION PP_Exec( aProcedures, aInitExit, nProcId, aParams )
|
|
|
|
LOCAL nProc, nProcs, xRet
|
|
|
|
IF ValType( aParams ) == 'A'
|
|
s_aParams := aParams
|
|
ELSE
|
|
s_aParams := {}
|
|
ENDIF
|
|
|
|
ErrorBlock( {|oErr| RP_Run_Err( oErr, aProcedures, s_aProcStack[ Len( s_aProcStack ) ][2] ) } )
|
|
|
|
InitRules()
|
|
InitResults()
|
|
|
|
InitRunRules()
|
|
InitRunResults()
|
|
|
|
nProcs := Len( aInitExit[1] )
|
|
FOR nProc := 1 TO nProcs
|
|
PP_ExecProcedure( aProcedures[ aInitExit[1][nProc] ] )
|
|
NEXT
|
|
|
|
FOR nProc := 1 TO nProcId
|
|
IF aScan( aInitExit[1], nProc ) == 0 .AND. aScan( aInitExit[2], nProc ) == 0
|
|
xRet := PP_ExecProcedure( aProcedures[nProc] )
|
|
EXIT
|
|
ENDIF
|
|
NEXT
|
|
|
|
nProcs := Len( aInitExit[2] )
|
|
FOR nProc := 1 TO nProcs
|
|
PP_ExecProcedure( aProcedures[ aInitExit[2][nProc] ] )
|
|
NEXT
|
|
|
|
//TraceLog( xRet )
|
|
|
|
RETURN xRet
|
|
|
|
//--------------------------------------------------------------//
|
|
PROCEDURE PP_ResetRules()
|
|
|
|
aDefRules := {}; aDefResults := {}
|
|
aTransRules := {}; aTransResults := {}
|
|
aCommRules := {}; aCommResults := {}
|
|
|
|
s_lRunLoaded := .F.
|
|
s_lClsLoaded := .F.
|
|
s_lFWLoaded := .F.
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
PROCEDURE PP_InitStd()
|
|
|
|
InitRules()
|
|
InitResults()
|
|
|
|
s_lRunLoaded := .F.
|
|
s_lClsLoaded := .F.
|
|
s_lFWLoaded := .F.
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
PROCEDURE PP_LoadRun()
|
|
|
|
IF ! s_lRunLoaded
|
|
s_lRunLoaded := .T.
|
|
InitRunRules()
|
|
InitRunResults()
|
|
ENDIF
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
PROCEDURE PP_LoadDot()
|
|
|
|
IF ! s_lDotLoaded
|
|
s_lDotLoaded := .T.
|
|
InitDotRules()
|
|
InitDotResults()
|
|
ENDIF
|
|
|
|
RETURN
|
|
|
|
//--------------------------------------------------------------//
|
|
#ifdef __HARBOUR__
|
|
#include "pp_harb.ch"
|
|
#endif
|
|
|
|
//--------------------------------------------------------------//
|
|
/*
|
|
Function Alert( cMsg )
|
|
|
|
//? ProcName(1), ProcLine(1), cMsg
|
|
TraceLog( cMsg )
|
|
|
|
return NIL
|
|
*/
|