diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 93544bd951..30a5cbfef3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,8 +1,22 @@ +19990608-20:00 Alexander Kresin + Implemented: #command, #xcommand, #translate, #xtranslate . + Some functions rewritten for a better functionality and readability. + Fixed some bugs. + Updated: + * source/hbpp/hbpp.c + * source/hbpp/harb.c + * source/hbpp/table.c + Removed: + - source/hbpp/a.prg + - source/hbpp/c.prg + - source/hbpp/example.ch + - source/hbpp/exam2.ch + Tue Jun 08 09:22:40 1999 Gonzalo A. Diethelm - * source/rtl/set.c (open_handle): - Misplaced parenthesis when callin open() caused S_IWRITE to never - be seen by open(). + * source/rtl/set.c (open_handle): + Misplaced parenthesis when callin open() caused S_IWRITE to never + be seen by open(). 19990608-13:25 CET Eddie Runia * source/vm/initsymb.c @@ -23,27 +37,27 @@ Tue Jun 08 09:22:40 1999 Gonzalo A. Diethelm Mon Jun 07 20:42:04 1999 Gonzalo A. Diethelm - * config/dir.cf: - * config/global.cf: - * config/install.cf: - Made a mistake in my previous commit. This one works. + * config/dir.cf: + * config/global.cf: + * config/install.cf: + Made a mistake in my previous commit. This one works. Mon Jun 07 20:20:32 1999 Gonzalo A. Diethelm - * config/bin.cf: - * config/c.cf: - * config/dir.cf: - * config/global.cf: - * config/install.cf: - * config/lib.cf: - * config/test.cf: - * config/win32/gcc.cf: - * config/win32/global.cf: - * config/win32/msvc.cf: - * config/win32/rules.cf: - Updated rules so they work under WinNT CMD.EXE without any Unix - utilities installed. - + * config/bin.cf: + * config/c.cf: + * config/dir.cf: + * config/global.cf: + * config/install.cf: + * config/lib.cf: + * config/test.cf: + * config/win32/gcc.cf: + * config/win32/global.cf: + * config/win32/msvc.cf: + * config/win32/rules.cf: + Updated rules so they work under WinNT CMD.EXE without any Unix + utilities installed. + 19990607-19:45 EDT David G. Holm * include/extend.h - Moved "#include " to include/types.h @@ -74,62 +88,62 @@ Mon Jun 07 20:20:32 1999 Gonzalo A. Diethelm Mon Jun 07 12:58:17 1999 Gonzalo A. Diethelm - * source/hbpp/Makefile: - * source/hbpp/harb.c: - * source/hbpp/harb.h: - * source/hbpp/hbpp.c: - * source/hbpp/table.c: - Added a GNU-make Makefile to this directory. - Solved portability problems under gcc. - Got rid of a few warnings and unused variables. + * source/hbpp/Makefile: + * source/hbpp/harb.c: + * source/hbpp/harb.h: + * source/hbpp/hbpp.c: + * source/hbpp/table.c: + Added a GNU-make Makefile to this directory. + Solved portability problems under gcc. + Got rid of a few warnings and unused variables. - * source/rtl/msgxxx.c: - This file includes the correct message file based on the value of - HB_LANGUAGE, whose default is UK. + * source/rtl/msgxxx.c: + This file includes the correct message file based on the value of + HB_LANGUAGE, whose default is UK. - * source/rtl/classes.c: - * source/rtl/console.c: - * source/rtl/dir.c: - * source/rtl/files.c: - * source/rtl/set.c: - Solved portability problems under gcc. - Got rid of a few warnings and unused variables. + * source/rtl/classes.c: + * source/rtl/console.c: + * source/rtl/dir.c: + * source/rtl/files.c: + * source/rtl/set.c: + Solved portability problems under gcc. + Got rid of a few warnings and unused variables. - * source/rtl/dir.c: - This file had definite bugs, see difference between r1.4 and r1.3 - for more details. - - * source/rtl/natmsg/msgdut.c: - * source/rtl/natmsg/msggal.c: - * source/rtl/natmsg/msgger.c: - * source/rtl/natmsg/msghu.c: - * source/rtl/natmsg/msgpor.c: - * source/rtl/natmsg/msgr1251.c: - * source/rtl/natmsg/msgru866.c: - * source/rtl/natmsg/msgspa.c: - * source/rtl/natmsg/msguk.c: - Added Id keywords. - - * config/bin.cf: - * config/global.cf: - * config/header.cf: - * config/lib.cf: - * config/prg.cf: - * config/test.cf: - * config/win32/rules.cf: - Use GRANDP to refer to ../../ and change environment variables to - start with a HB_. + * source/rtl/dir.c: + This file had definite bugs, see difference between r1.4 and r1.3 + for more details. - * config/win32/rules.cf: - Added a -I$(TOP) to the list of paths for included files in the - rule to compile a PRG file with Harbour. + * source/rtl/natmsg/msgdut.c: + * source/rtl/natmsg/msggal.c: + * source/rtl/natmsg/msgger.c: + * source/rtl/natmsg/msghu.c: + * source/rtl/natmsg/msgpor.c: + * source/rtl/natmsg/msgr1251.c: + * source/rtl/natmsg/msgru866.c: + * source/rtl/natmsg/msgspa.c: + * source/rtl/natmsg/msguk.c: + Added Id keywords. - * include/Makefile: - * source/Makefile: - * source/rtl/Makefile: - * source/tools/Makefile: - * tests/working/Makefile: - Updated the file list. + * config/bin.cf: + * config/global.cf: + * config/header.cf: + * config/lib.cf: + * config/prg.cf: + * config/test.cf: + * config/win32/rules.cf: + Use GRANDP to refer to ../../ and change environment variables to + start with a HB_. + + * config/win32/rules.cf: + Added a -I$(TOP) to the list of paths for included files in the + rule to compile a PRG file with Harbour. + + * include/Makefile: + * source/Makefile: + * source/rtl/Makefile: + * source/tools/Makefile: + * tests/working/Makefile: + Updated the file list. 19990607-15:15 CET Matthew Hamilton * tests/working/inifiles.prg diff --git a/harbour/source/hbpp/harb.c b/harbour/source/hbpp/harb.c index 3935286e15..bce2f781cb 100644 --- a/harbour/source/hbpp/harb.c +++ b/harbour/source/hbpp/harb.c @@ -2,16 +2,11 @@ * $Id$ */ -#if defined(__DJGPP__) -#ifndef __dj_include_stdio_h_ - #include -#endif -#endif - #if defined(__DJGPP__) || defined(__GNUC__) #include #include #else + #include #include #endif diff --git a/harbour/source/hbpp/hbpp.c b/harbour/source/hbpp/hbpp.c index fa1bd58ac6..bcbbe9fae2 100644 --- a/harbour/source/hbpp/hbpp.c +++ b/harbour/source/hbpp/hbpp.c @@ -1,8 +1,7 @@ /* * $Id$ */ - -/* Harbour Preprocessor , version 0.8 +/* Harbour Preprocessor , version 0.9 author - Alexander Kresin */ #if defined(__DJGPP__) || defined(__GNUC__) @@ -16,6 +15,7 @@ #include #include #include +#include #include #include "harb.h" @@ -29,10 +29,11 @@ typedef struct typedef struct { + int com_or_xcom; char *name; char *mpatt; char *value; -} COMMANDS; +} COMMANDS, TRANSLATES; int Hp_Parse( int, int ); int ParseDirective( char* ); @@ -40,19 +41,24 @@ int ParseDefine( char* ); DEFINES* AddDefine ( char* ); int ParseUndef( char* ); int ParseIfdef( char*, int); -int ParseCommand( char* ); +int ParseCommand( char*, int, int ); int ConvertPatterns ( char*, int, char*, int ); void AddCommand ( char * ); +void AddTranslate ( char * ); COMMANDS* getCommand ( int ); int ParseExpression( char*, char* ); -void WorkDefine ( char**, char**, DEFINES*); -int WorkCommand ( char*, char*, char**, int); -void CmdParse ( char *ptri, int aCmdStru[100][2] ); -int WorkMarkers( char**, char*, char*, int*, int aCmdStru[100][2], int*, int ); +int WorkDefine ( char**, char**, DEFINES *, int ); +void WorkPseudoF ( char**, char**, DEFINES*); +int WorkCommand ( char*, char*, char*, int); +int CommandStuff ( char *, char *, char *, int*, int ); +int WorkTranslate ( char*, char**, char*, int); +int WorkMarkers( char**, char**, char*, int*, int ); +int getExpReal ( char *, char **, int ); void SkipOptional( char**, char*, int*); DEFINES* DefSearch(char *); int ComSearch(char *,int); +int TraSearch(char *,int); void SearnRep( char*,char*,int,char*,int*); int ReplacePattern ( char, char*, int, char*, int ); int RdStr(int,char *,int,int,char*,int*,int*); @@ -62,9 +68,12 @@ int IsInStr ( char, char*); void Stuff (char*, char*, int, int, int); int strocpy (char*, char* ); int stroncpy (char*, char*, int); -int strocmp (char*, char**); +int strincpy (char*, char*); +int strincmp (char*, char**); int strolen ( char* ); +int strotrim ( char* ); char* strodup ( char * ); +int idDrag ( char *, char ** ); int NextWord ( char**, char*, int); int NextName ( char**, char*, char**); @@ -84,7 +93,8 @@ int NextName ( char**, char*, char**); #define STATE_ID_END 5 #define STATE_ID 6 #define STATE_EXPRES 7 -#define STATE_BRACKET 8 +#define STATE_EXPRES_ID 8 +#define STATE_BRACKET 9 #define IT_EXPR 1 #define IT_ID 2 @@ -109,9 +119,12 @@ extern int kolcomm; COMMANDS *aCommnew ; int kolcommands = 0, maxcommands = INITIAL_ACOM_SIZE; +TRANSLATES *aTranslates ; +int koltranslates = 0, maxtranslates = 50; + int main (int argc,char* argv[]) { -int handl_i,handl_o; +int handl_i,handl_o,i; char szFileName[ _POSIX_PATH_MAX ]; FILENAME *pFileName =NULL; @@ -121,28 +134,29 @@ FILENAME *pFileName =NULL; pFileName->extension =".prg"; MakeFilename( szFileName, pFileName ); - if ((handl_i = open(szFileName, O_RDONLY | O_TEXT)) == -1) + if ((handl_i = open(szFileName, O_TEXT)) == -1) { printf("Can't open %s",szFileName); return 1; } pFileName->extension =".ppo"; MakeFilename( szFileName, pFileName ); - if ((handl_o = open(szFileName, O_CREAT | O_WRONLY | O_TEXT)) == -1) + if ((handl_o = open(szFileName, O_CREAT | O_TRUNC | O_WRONLY | O_TEXT , S_IREAD | S_IWRITE)) == -1) { printf("Can't open %s",szFileName); return 1; } aCondCompile = (int*) _xgrab( sizeof(int) * 5 ); aDefnew = ( DEFINES * ) _xgrab( sizeof(DEFINES) * 50 ); aCommnew = ( COMMANDS * ) _xgrab( sizeof(COMMANDS) * INITIAL_ACOM_SIZE ); + aTranslates = ( TRANSLATES * ) _xgrab( sizeof(TRANSLATES) * 50 ); Hp_Parse(handl_i,handl_o); close(handl_i); close(handl_o); /* for (i=0;i kolcomm ) for ( i=(ncmd)? ncmd-kolcomm:kolcommands-1; i >= 0; i-- ) { - for ( j=0; *(aCommnew[i].name+j)==toupper(*(cmdname+j)) && - *(aCommnew[i].name+j)!='\0'; j++ ); - if ( *(aCommnew[i].name+j)==toupper(*(cmdname+j)) ) return kolcomm+i; + for ( j=0; (*(aCommnew[i].name+j)==toupper(*(cmdname+j))) && + (*(aCommnew[i].name+j)!='\0') && + ((aCommnew[i].com_or_xcom)? 1:(j<4)); j++ ); + if ( (*(aCommnew[i].name+j)==toupper(*(cmdname+j))) || + ( !aCommnew[i].com_or_xcom && j == 4 && *(aCommnew[i].name+j)!='\0') ) + return kolcomm+i; } for ( i=(ncmd && ncmd<=kolcomm)? ncmd:kolcomm-1; i >= 0; i-- ) { - for ( j=0; *(aCommands[i].name+j)==toupper(*(cmdname+j)) && - *(aCommands[i].name+j)!='\0'; j++ ); - if ( *(aCommands[i].name+j)==toupper(*(cmdname+j)) ) break; + for ( j=0; (*(aCommands[i].name+j)==toupper(*(cmdname+j))) && + (*(aCommands[i].name+j)!='\0') && + ((aCommands[i].com_or_xcom)? 1:(j<4)); j++ ); + if ( (*(aCommands[i].name+j)==toupper(*(cmdname+j))) || + ( !aCommands[i].com_or_xcom && j == 4 && *(aCommands[i].name+j)!='\0') ) + break; } return i; } -int ParseCommand( char* sLine) +int TraSearch(char *cmdname, int ncmd) +{ + int i,j; + + for ( i=(ncmd)? ncmd:koltranslates-1; i >= 0; i-- ) + { + for ( j=0; *(aTranslates[i].name+j)==toupper(*(cmdname+j)) && + *(aTranslates[i].name+j)!='\0' && + ((aTranslates[i].com_or_xcom)? 1:(j<4)); j++ ); + if ( *(aTranslates[i].name+j)==toupper(*(cmdname+j)) || + ( !aTranslates[i].com_or_xcom && j == 4 && *(aTranslates[i].name+j)!='\0') ) + break; + } + return i; +} + +int ParseCommand( char* sLine, int com_or_xcom, int com_or_tra ) { char cmdname[MAX_NAME]; char mpatt[STR_SIZE], rpatt[STR_SIZE]; @@ -438,16 +475,29 @@ int ParseCommand( char* sLine) if ( (ipos = hb_strAt( "=>", 2, sLine, strolen(sLine) )) > 0 ) mlen = stroncpy( mpatt, sLine, ipos-1 ); else return 4000; /* Quit, if '=>' absent */ + mlen = strotrim( mpatt ); sLine += ipos + 1; SKIPTABSPACES(sLine); rlen = strocpy( rpatt, sLine ); + rlen = strotrim( rpatt ); if ( (rez = ConvertPatterns ( mpatt, mlen, rpatt, rlen )) > 0 ) return rez; - AddCommand ( cmdname ); - aCommnew[kolcommands-1].mpatt = strodup ( mpatt ); - aCommnew[kolcommands-1].value = ( rlen > 0 )? strodup ( rpatt ) : NULL; + if ( com_or_tra ) + { + AddCommand ( cmdname ); + aCommnew[kolcommands-1].com_or_xcom = com_or_xcom; + aCommnew[kolcommands-1].mpatt = strodup ( mpatt ); + aCommnew[kolcommands-1].value = ( rlen > 0 )? strodup ( rpatt ) : NULL; + } + else + { + AddTranslate ( cmdname ); + aTranslates[koltranslates-1].com_or_xcom = com_or_xcom; + aTranslates[koltranslates-1].mpatt = strodup ( mpatt ); + aTranslates[koltranslates-1].value = ( rlen > 0 )? strodup ( rpatt ) : NULL; + } return 0; } @@ -531,6 +581,17 @@ void AddCommand ( char *cmdname ) kolcommands++; } +void AddTranslate ( char *cmdname ) +{ + if ( koltranslates == maxtranslates ) + { + maxtranslates += 50; + aTranslates = (TRANSLATES *)_xrealloc( aTranslates, sizeof( TRANSLATES ) * maxtranslates ); + } + aTranslates[koltranslates].name = strodup ( cmdname ); + koltranslates++; +} + COMMANDS* getCommand ( int ndef ) { return (ndef>=kolcomm)? &(aCommnew[ndef-kolcomm]):&(aCommands[ndef]); @@ -540,11 +601,12 @@ int ParseExpression( char* sLine, char* sOutLine ) { char sToken[MAX_NAME]; char *ptri, *ptro; - int lenToken,npars,i,ndef; + int lenToken,i,ndef; int rezDef, rezCom, kolpass = 0; int kolused = 0, lastused; DEFINES *aUsed[100], *stdef; + strotrim ( sLine ); do { ptri = sLine; ptro = sOutLine; @@ -554,53 +616,31 @@ int ParseExpression( char* sLine, char* sOutLine ) while ( ( lenToken = NextName(&ptri, sToken, &ptro) ) > 0 ) if ( (stdef=DefSearch(sToken)) != NULL ) { - for(i=0;ipars == NULL ) - { - rezDef = 1; - ptro -= lenToken; - lenToken = 0; - while ( *(stdef->value+lenToken) != '\0' ) - *ptro++ = *(stdef->value+lenToken++); - } - else - { - SKIPTABSPACES( ptri ); - if ( *ptri == '(' ) - { - npars=0; i = 0; - while ( *(ptri+i) != ')' && *(ptri+i) != '\0' ) - { - if ( *(ptri+i) == ',' ) npars++; - i++; - } - if ( stdef->npars == npars + 1 ) - { - rezDef = 1; - ptro -= lenToken; - WorkDefine( &ptri, &ptro, stdef ); - } - } - else *ptro++ = ' '; - } + for(i=0;i 0 ) + if ( (ndef=TraSearch(sToken,0)) >= 0 ) + WorkTranslate( sToken, &ptri, ptro, ndef ); + /* Look for definitions from #command */ if ( !kolpass ) { ptri = sLine; ptro = sOutLine; -// lenToken = NextWord( &ptri, sToken, FALSE); SKIPTABSPACES( ptri ); if ( isname(*ptri) ) lenToken = NextName( &ptri, sToken, NULL); else { *sToken = *ptri++; *(sToken+1) = '\0'; lenToken = 1; } if ( (ndef=ComSearch(sToken,0)) >= 0 ) { - if ( (i = WorkCommand( sToken, ptri, &ptro, ndef )) > 0 ) + if ( (i = WorkCommand( sToken, ptri, ptro, ndef )) > 0 ) memcpy ( sLine, sOutLine, i+1); rezCom = 1; } @@ -612,7 +652,41 @@ int ParseExpression( char* sLine, char* sOutLine ) return 0; } -void WorkDefine ( char** ptri, char** ptro, DEFINES *stdef ) +int WorkDefine ( char** ptri, char** ptro, DEFINES *stdef, int lenToken ) +{ + int rezDef = 0, npars, i; + if ( stdef->pars == NULL ) + { + rezDef = 1; + *ptro -= lenToken; + lenToken = 0; + while ( *(stdef->value+lenToken) != '\0' ) + *(*ptro)++ = *(stdef->value+lenToken++); + } + else + { + SKIPTABSPACES( *ptri ); + if ( **ptri == '(' ) + { + npars=0; i = 0; + while ( *(*ptri+i) != ')' && *(*ptri+i) != '\0' ) + { + if ( *(*ptri+i) == ',' ) npars++; + i++; + } + if ( stdef->npars == npars + 1 ) + { + rezDef = 1; + *ptro -= lenToken; + WorkPseudoF( ptri, ptro, stdef ); + } + } + else *(*ptro)++ = ' '; + } + return rezDef; +} + +void WorkPseudoF ( char** ptri, char** ptro, DEFINES *stdef ) { char parfict[MAX_NAME], parreal[MAX_NAME]; char *ptrb; @@ -668,67 +742,103 @@ void WorkDefine ( char** ptri, char** ptro, DEFINES *stdef ) *ptro += lenres; } -int WorkCommand ( char* sToken, char* ptri, char** ptro, int ndef ) +int WorkCommand ( char* sToken, char* ptri, char* ptro, int ndef ) { - int aCmdStru[100][2], iItem; - int rez, nbr; - int lenres = 0; - char *lastopti[2]; + int rez; + int lenres; char *ptrmp; - /* Copying result pattern to destination string */ - lenres = strocpy ( *ptro, getCommand(ndef)->value ); - - CmdParse ( ptri, aCmdStru ); /* Parse input string */ - ptrmp = getCommand(ndef)->mpatt; /* Pointer to a match pattern */ do { + lenres = strocpy ( ptro, getCommand(ndef)->value ); /* Copying result pattern */ + ptrmp = getCommand(ndef)->mpatt; /* Pointer to a match pattern */ Repeate = 0; groupchar = '@'; - rez = 1; nbr = 0; - if ( ptrmp == NULL ) rez = ( aCmdStru[0][0] )? 0:1; + rez = CommandStuff ( ptrmp, ptri, ptro, &lenres, TRUE ); + + if ( !rez ) ndef = ComSearch(sToken,ndef-1); + } + while ( !rez && ndef >= 0 ); + + *(ptro+lenres) = '\0'; + if ( rez ) return lenres; + return 0; +} + +int WorkTranslate ( char* sToken, char** ptri, char* ptro, int ndef ) +{ + int rez; + int lenres; + char *ptrmp; + + do + { + lenres = strocpy ( ptro, aTranslates[ndef].value ); + ptrmp = aTranslates[ndef].mpatt; + Repeate = 0; + groupchar = '@'; + rez = CommandStuff ( ptrmp, *ptri, ptro, &lenres, FALSE ); + + if ( !rez ) ndef = TraSearch(sToken,ndef-1); + } + while ( !rez && ndef >= 0 ); + + *(ptro+lenres) = '\0'; + if ( rez ) + { + Stuff( ptro, *ptri, lenres, rez, strolen(*ptri) ); + return lenres; + } + return 0; +} + +int CommandStuff ( char *ptrmp, char *inputLine, char * ptro, int *lenres, int com_or_tra ) +{ + int nbr = 0, endTranslation = FALSE; + char *lastopti[2]; + char *ptri = inputLine, *ptr; + + if ( ptrmp == NULL ) { if ( *ptri != '\0' ) return 0; } else - for ( iItem=1; iItem <= aCmdStru[0][0] && rez; iItem++) + while ( *ptri != '\0' && !endTranslation ) { SKIPTABSPACES( ptrmp ); + SKIPTABSPACES( ptri ); switch ( *ptrmp ) { case '[': - iItem--; nbr++; ptrmp++; lastopti[Repeate] = ptrmp; break; case ']': - iItem--; if ( Repeate ) { Repeate--; ptrmp = lastopti[Repeate]; } else { nbr--; ptrmp++; } break; case ',': - if ( aCmdStru[iItem][1] == IT_COMMA ) ptrmp++; + if ( *ptri == ',' ) { ptrmp++; ptri++; } else { - if ( nbr ) { SkipOptional( &ptrmp, *ptro, &lenres); iItem--; } - else rez = 0; + if ( nbr ) { SkipOptional( &ptrmp, ptro, lenres); } + else return 0; } break; case '\1': /* Match marker */ - rez = WorkMarkers( &ptrmp, ptri, *ptro, &lenres, aCmdStru, &iItem, nbr ); + if ( !WorkMarkers( &ptrmp, &ptri, ptro, lenres, nbr ) ) + return 0; break; case '\0': - rez = 0; - break; + if ( com_or_tra ) return 0; else endTranslation = TRUE; default: /* Key word */ - if ( aCmdStru[iItem][1] == IT_COMMA || - strocmp(ptri + aCmdStru[iItem][0], &ptrmp ) ) + ptr = ptrmp; + if ( *ptri == ',' || strincmp(ptri, &ptrmp ) ) { - if ( nbr ) { SkipOptional( &ptrmp, *ptro, &lenres); iItem--; } - else rez = 0; + if ( nbr ) { SkipOptional( &ptrmp, ptro, lenres); } + else return 0; } + else if ( *ptri != ',' ) ptri += (ptrmp - ptr); } - } + }; - if ( rez && ptrmp != NULL) + if ( ptrmp != NULL ) { - SKIPTABSPACES( ptrmp ); - if ( *ptrmp == ']' ) { ptrmp++; nbr--; } if ( Repeate ) { Repeate = 0; ptrmp = lastopti[0] - 1; } do { @@ -737,184 +847,67 @@ int WorkCommand ( char* sToken, char* ptri, char** ptro, int ndef ) switch ( *ptrmp ) { case '[': ptrmp++; - SkipOptional( &ptrmp, *ptro, &lenres); + SkipOptional( &ptrmp, ptro, lenres); ptrmp++; break; case ']': ptrmp++; break; default: - rez = 0; + return 0; } } - while ( *ptrmp != '\0' && rez ); + while ( *ptrmp != '\0' ); } - - if ( !rez && (ndef = ComSearch(sToken,ndef-1))>=0 ) - { - ptrmp = getCommand(ndef)->mpatt; /* Pointer to a match pattern */ - /* Copying result pattern to destination string */ - lenres = strocpy ( *ptro, getCommand(ndef)->value ); - } - } - while ( !rez && ndef >= 0 ); - - *(*ptro+lenres) = '\0'; - if ( rez ) return lenres; - return 0; + if ( com_or_tra ) return 1; else return (ptri-inputLine); } -void CmdParse ( char *ptri, int aCmdStru[100][2] ) +int WorkMarkers( char **ptrmp, char **ptri, char *ptro, int *lenres, int nbr ) { - char *sZnaki = "+-=><*/$"; - int State = State = STATE_ID_END, StBr1 = 0, StBr2 = 0, StBr3 = 0; - int i = 0; - - aCmdStru[0][0] = 0; - while ( *ptri != '\0' ) - { - switch ( State ) { - case STATE_QUOTE1: - if(*ptri=='\'') - State = (StBr1==0 && StBr2==0 && StBr3==0)? STATE_ID_END:STATE_BRACKET; - break; - case STATE_QUOTE2: - if(*ptri=='\"') - State = (StBr1==0 && StBr2==0 && StBr3==0)? STATE_ID_END:STATE_BRACKET; - break; - case STATE_BRACKET: - if ( *ptri == '\'' ) State = STATE_QUOTE1; - else if ( *ptri == '\"' ) State = STATE_QUOTE2; - else if ( *ptri == '(' ) StBr1++; - else if ( *ptri == '[' ) StBr2++; - else if ( *ptri == '{' ) StBr3++; - else if ( *ptri == ')' ) - { StBr1--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } - else if ( *ptri == ']' ) - { StBr2--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } - else if ( *ptri == '}' ) - { StBr3--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } - break; - case STATE_ID: - case STATE_ID_END: - if ( ( (isname(*ptri) || *ptri=='\\') && State == STATE_ID_END ) || - *ptri==',' || *ptri=='\'' || *ptri=='\"') - { - if ( !aCmdStru[ aCmdStru[0][0] ][1] ) aCmdStru[ aCmdStru[0][0] ][1] = IT_ID; - State = STATE_ID; - aCmdStru[0][0]++; - aCmdStru[ aCmdStru[0][0] ][0] = i; - if ( *ptri == ',' ) - { - State = STATE_ID_END; - aCmdStru[ aCmdStru[0][0] ][1] = IT_COMMA; - } - else if ( *ptri == '\'' ) - { - State = STATE_QUOTE1; - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - } - else if ( *ptri == '\"' ) - { - State = STATE_QUOTE2; - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - } - else - { - State = STATE_ID; - if ( isdigit(*ptri) ) aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - else aCmdStru[ aCmdStru[0][0] ][1] = 0; - } - } - else if ( IsInStr( *ptri, sZnaki ) ) State = STATE_EXPRES; - else if ( *ptri == '(' ) - { - State = STATE_BRACKET; - StBr1 = 1; - aCmdStru[ aCmdStru[0][0] ][1] = IT_ID_OR_EXPR; - aCmdStru[0][0]++; - aCmdStru[ aCmdStru[0][0] ][0] = i; - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - } - else if ( *ptri == '[' ) - { - State = STATE_BRACKET; - StBr2 = 1; - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - } - else if ( *ptri == '{' ) - { - State = STATE_BRACKET; - StBr3 = 1; - aCmdStru[ aCmdStru[0][0] ][1] = IT_ID; - aCmdStru[0][0]++; - aCmdStru[ aCmdStru[0][0] ][0] = i; - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - } - else if ( *ptri == ' ' ) State = STATE_ID_END; - break; - case STATE_EXPRES: - aCmdStru[ aCmdStru[0][0] ][1] = IT_EXPR; - if ( *ptri == '\'' ) State = STATE_QUOTE1; - else if ( *ptri == '\"' ) State = STATE_QUOTE2; - else if ( isname(*ptri) ) State = STATE_ID; - else if ( *ptri == '(' ) { StBr1++; State = STATE_BRACKET; } - else if ( *ptri == '[' ) { StBr2++; State = STATE_BRACKET; } - else if ( *ptri == '{' ) { StBr3++; State = STATE_BRACKET; } - break; - } - ptri++; i++; - } - if ( aCmdStru[0][0] && !aCmdStru[ aCmdStru[0][0] ][1] ) - aCmdStru[ aCmdStru[0][0] ][1] = IT_ID; - aCmdStru[ aCmdStru[0][0]+1 ][0] = i; -} - -int WorkMarkers( char **ptrmp, char *ptri, char *ptro, int *lenres, int aCmdStru[100][2], int *iItem, int nbr ) -{ - int ifiItem; char expreal[MAX_NAME], exppatt[MAX_NAME]; - int lenreal, lenpatt; - int rezrestr,i; - char *ptr; + int lenreal = 0, lenpatt; + int rezrestr, i, ipos; + char *ptr, *ptrtemp; - if ( aCmdStru[*iItem][1] == IT_COMMA ) return 0; + if ( **ptri == ',' ) return 0; /* Copying a match pattern to 'exppatt' */ lenpatt = stroncpy ( exppatt, *ptrmp, 4 ); *ptrmp += 4; + SKIPTABSPACES ( *ptrmp ); + if ( !isname( ** ptrmp ) && **ptrmp != '\1' && **ptrmp != ',' && + **ptrmp != '[' && **ptrmp != ']' && **ptrmp != '\0' ) + { + lenreal = strincpy ( expreal, *ptrmp ); + if ( (ipos = hb_strAt( expreal, lenreal, *ptri, strolen(*ptri) )) > 0 ) + { + lenreal = stroncpy( expreal, *ptri, ipos-1 ); + *ptri += lenreal; + } + else return 0; + } - ifiItem = *iItem; - if ( aCmdStru[ifiItem][1] == IT_ID_OR_EXPR ) (*iItem)++; if ( *(exppatt+2) == '4' ) /* ---- extended match marker */ { - /* Copying a real expression to 'expreal' */ - lenreal = stroncpy ( expreal, ptri + aCmdStru[ifiItem][0], - aCmdStru[*iItem+1][0]-aCmdStru[ifiItem][0] ); + if ( !lenreal ) lenreal = getExpReal ( expreal, ptri, FALSE ); SearnRep( exppatt,expreal,lenreal,ptro,lenres); } else if ( *(exppatt+2) == '3' ) /* ---- wild match marker */ { - *iItem = aCmdStru[0][0]; - /* Copying a real expression to 'expreal' */ - lenreal = stroncpy ( expreal, ptri + aCmdStru[ifiItem][0], - aCmdStru[*iItem+1][0]-aCmdStru[ifiItem][0] ); + lenreal = strocpy ( expreal, *ptri ); + *ptri += lenreal; SearnRep( exppatt,expreal,lenreal,ptro,lenres); } else if ( *(exppatt+2) == '2' ) /* ---- restricted match marker */ { - while ( **ptrmp != '>' && **ptrmp!= '\0' ) *(exppatt+lenpatt++) = *((*ptrmp)++); - *(exppatt+lenpatt++) = '>'; + while ( **ptrmp != '>' ) *(exppatt+lenpatt++) = *((*ptrmp)++); *(exppatt+lenpatt) = '\0'; (*ptrmp)++; - /* Copying a real expression to 'expreal' */ - lenreal = stroncpy ( expreal, ptri + aCmdStru[ifiItem][0], - aCmdStru[*iItem+1][0]-aCmdStru[ifiItem][0] ); ptr = exppatt + 4; rezrestr = 0; - while ( *ptr != '>' ) + while ( *ptr != '\0' ) { if ( *ptr == '&' ) { - if ( *expreal == '&' ) + if ( **ptri == '&' ) { rezrestr = 1; break; @@ -925,49 +918,134 @@ int WorkMarkers( char **ptrmp, char *ptri, char *ptro, int *lenres, int aCmdStru { SKIPTABSPACES( ptr ); /* Comparing real parameter and restriction value */ - for ( i=0; toupper(*ptr) == toupper(*(expreal+i)) && *ptr != ',' - && *ptr != '>' && i < lenreal; i++,ptr++ ); - if ( i == lenreal || *ptr == ',' || *ptr == '>' ) + ptrtemp = ptr; + if ( !strincmp ( *ptri, &ptr ) ) { + lenreal = stroncpy( expreal, *ptri, (ptr-ptrtemp) ); + *ptri += lenreal; SearnRep( exppatt,expreal,lenreal,ptro,lenres); rezrestr = 1; break; } else { - while ( *ptr != ',' && *ptr != '>' ) ptr++; + while ( *ptr != ',' && *ptr != '\0' ) ptr++; if ( *ptr == ',' ) ptr++; } } } if ( rezrestr == 0 ) { /* If restricted match marker doesn't correspond to real parameter */ - if ( nbr ) - { - SearnRep( exppatt,"",0,ptro,lenres); - (*iItem)--; /* if was optional, go to the next */ - } + if ( nbr ) SearnRep( exppatt,"",0,ptro,lenres); else return 0; } } else if ( *(exppatt+2) == '1' ) /* ---- list match marker */ { - while ( *iItem < aCmdStru[0][0] && aCmdStru[*iItem+1][1] == IT_COMMA ) *iItem+=2; - /* Copying a real expression to 'expreal' */ - lenreal = stroncpy ( expreal, ptri + aCmdStru[ifiItem][0], - aCmdStru[*iItem+1][0]-aCmdStru[ifiItem][0] ); + if ( !lenreal ) lenreal = getExpReal ( expreal, ptri, TRUE ); SearnRep( exppatt,expreal,lenreal,ptro,lenres); } else /* ---- regular match marker */ { /* Copying a real expression to 'expreal' */ - lenreal = stroncpy ( expreal, ptri + aCmdStru[ifiItem][0], - aCmdStru[*iItem+1][0]-aCmdStru[ifiItem][0] ); + if ( !lenreal ) lenreal = getExpReal ( expreal, ptri, FALSE ); SearnRep( exppatt,expreal,lenreal,ptro,lenres); } return 1; } +int getExpReal ( char *expreal, char **ptri, int prlist ) +{ + int lens = 0; + char *sZnaki = "+-=><*/$.&:"; + int State; + int StBr1 = 0, StBr2 = 0, StBr3 = 0; + int rez = 0; + + SKIPTABSPACES ( *ptri ); + State = (**ptri=='\'' || **ptri=='\"')? STATE_EXPRES:STATE_ID; + while ( **ptri != '\0' && !rez ) + { + switch ( State ) { + case STATE_QUOTE1: + if(**ptri=='\'') + State = (StBr1==0 && StBr2==0 && StBr3==0)? STATE_ID_END:STATE_BRACKET; + break; + case STATE_QUOTE2: + if(**ptri=='\"') + State = (StBr1==0 && StBr2==0 && StBr3==0)? STATE_ID_END:STATE_BRACKET; + break; + case STATE_BRACKET: + if ( **ptri == '\'' ) State = STATE_QUOTE1; + else if ( **ptri == '\"' ) State = STATE_QUOTE2; + else if ( **ptri == '(' ) StBr1++; + else if ( **ptri == '[' ) StBr2++; + else if ( **ptri == '{' ) StBr3++; + else if ( **ptri == ')' ) + { StBr1--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } + else if ( **ptri == ']' ) + { StBr2--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } + else if ( **ptri == '}' ) + { StBr3--; if (StBr1==0 && StBr2==0 && StBr3==0) State = STATE_ID_END; } + break; + case STATE_ID: + case STATE_ID_END: + if ( ( (isname(**ptri) || **ptri=='\\') && State == STATE_ID_END ) || + **ptri==',' || **ptri=='\'' || **ptri=='\"') + { + if ( **ptri == ',' ) + { + if ( !prlist ) rez = 1; + State = STATE_EXPRES; + } + else rez = 1; + } + else if ( IsInStr( **ptri, sZnaki ) ) + { + State = STATE_EXPRES; + } + else if ( **ptri == '(' ) + { + State = STATE_BRACKET; + StBr1 = 1; + } + else if ( **ptri == '[' ) + { + State = STATE_BRACKET; + StBr2 = 1; + } + else if ( **ptri == '{' ) + { + State = STATE_BRACKET; + StBr3 = 1; + } + else if ( **ptri == ' ' ) State = STATE_ID_END; + break; + case STATE_EXPRES: + case STATE_EXPRES_ID: + if ( **ptri == '\'' ) State = STATE_QUOTE1; + else if ( **ptri == '\"' ) State = STATE_QUOTE2; + else if ( isname(**ptri) ) State = STATE_EXPRES_ID; + else if ( **ptri == ' ' && State == STATE_EXPRES_ID ) State = STATE_ID_END; + else if ( **ptri == '(' ) { StBr1++; State = STATE_BRACKET; } + else if ( **ptri == '[' ) { StBr2++; State = STATE_BRACKET; } + else if ( **ptri == '{' ) { StBr3++; State = STATE_BRACKET; } + else if ( **ptri == ',' ) { if ( !prlist ) rez = 1; State = STATE_EXPRES; } + else State = STATE_EXPRES; + break; + } + if ( !rez ) + { + *expreal++ = **ptri; + (*ptri)++; + lens++; + } + } + if ( *(expreal-1) == ' ' ) { expreal--; lens--; }; + *expreal = '\0'; + return lens; +} + void SkipOptional( char** ptri, char *ptro, int* lenres) { int nbr = 0; @@ -1177,8 +1255,9 @@ char cha,cLast='\0'; } if ( cha != ' ' && cha != '\t' ) State = 1; if( lDropSpaces && State ) lDropSpaces = 0; - if(readed= 0 && ( buffer[readed] == ' ' || buffer[readed] == '\t') ); readed++; @@ -1198,7 +1277,7 @@ int hb_strAt(char *szSub, int lSubLen, char *szText, int lLen) { if( lSubLen ) { - if( lLen > lSubLen ) + if( lLen >= lSubLen ) { long lPos = 0, lSubPos = 0; @@ -1272,12 +1351,23 @@ int stroncpy (char* ptro, char* ptri, int lens ) return i; } -int strocmp (char* ptro, char** ptri ) +int strincmp (char* ptro, char** ptri ) { - for ( ; isname(**ptri) && isname(*ptro) && toupper(**ptri)==toupper(*ptro); + for ( ; **ptri != ' ' && **ptri != ',' && **ptri != '[' && **ptri != ']' && + **ptri != '\1' && **ptri != '\0' && toupper(**ptri)==toupper(*ptro); ptro++, (*ptri)++ ); - if ( toupper(**ptri) != toupper(*ptro) ) return 1; - return 0; + if ( **ptri == ' ' || **ptri == ',' || **ptri == '[' || + **ptri == ']' || **ptri == '\1' || **ptri == '\0' ) return 0; + return 1; +} + +int strincpy (char* ptro, char* ptri ) +{ + int lens = 0; + for ( ; *ptri != ' ' && *ptri != ',' && *ptri != '[' && *ptri != ']' && + *ptri != '\1' && *ptri != '\0'; ptro++, ptri++, lens++ ) + *ptro = *ptri; + return lens; } char* strodup ( char *stroka ) @@ -1298,6 +1388,37 @@ int strolen ( char *stroka ) return lens; } +int strotrim ( char *stroka ) +{ + char *ptr = stroka, lastc = '0'; + int lens = 0, State = STATE_NORMAL; + while ( *stroka != '\0' ) + { + if ( State == STATE_QUOTE1 ) { if (*stroka == '\'') State = STATE_NORMAL; } + else if ( State == STATE_QUOTE2 ) { if (*stroka=='\"') State = STATE_NORMAL; } + else + if ( (*stroka != ' ' && *stroka != '\t') || + ( isname(lastc) && isname(*(stroka+1)) ) ) + { + *ptr++ = *stroka; + lastc = *stroka; + lens++; + } + stroka++; + } + *ptr = '\0'; + return lens; +} + +int idDrag ( char *identif, char **ptri ) +{ + int idlen = 0; + while ( **ptri != '[' && **ptri != ']' && **ptri != '\1' && **ptri != '\0' ) + *(identif + idlen++) = *(*ptri)++; + do idlen--; while ( *(identif + idlen) == ' ' ); + return idlen+1; +} + int NextWord ( char** sSource, char* sDest, int lLower ) { int i = 0; diff --git a/harbour/source/hbpp/table.c b/harbour/source/hbpp/table.c index 71ee89b191..0639df7e45 100644 --- a/harbour/source/hbpp/table.c +++ b/harbour/source/hbpp/table.c @@ -1,7 +1,7 @@ /* * $Id$ */ - + #include typedef struct @@ -13,10 +13,11 @@ typedef struct } DEFINES; typedef struct { + int com_or_xcom; char *name; char *mpatt; char *value; -} COMMANDS; +} COMMANDS, TRANSLATES; int koldef = 41; DEFINES aDefines[] = @@ -67,269 +68,269 @@ DEFINES aDefines[] = int kolcomm = 239; COMMANDS aCommands[] = { - {"DO","WHILE \1A00","while \1A00"}, - {"END","\1A00","end"}, - {"END","SEQUENCE","end"}, - {"ENDSEQUENCE","","end"}, - {"ENDDO","\1A30","enddo"}, - {"ENDIF","\1A30","endif"}, - {"ENDCASE","\1A30","endcase"}, - {"ENDFOR","[ \1A30 ]","next"}, - {"NEXT","\1A00 [TO \1B00] [STEP \1C00]","next"}, - {"DO","\1A00.PRG [WITH \1B10]","do \1A00 [ WITH \1B00]"}, - {"CALL","\1A00() [WITH \1B10]","call \1A00 [ WITH \1B00]"}, - {"STORE","\1A00 TO \1B00 [, \1C00 ]","\1B00 := [ \1C00 := ] \1A00"}, - {"SET","ECHO \1A30",NULL}, - {"SET","HEADING \1A30",NULL}, - {"SET","MENU \1A30",NULL}, - {"SET","STATUS \1A30",NULL}, - {"SET","STEP \1A30",NULL}, - {"SET","SAFETY \1A30",NULL}, - {"SET","TALK \1A30",NULL}, - {"SET","PROCEDURE TO",NULL}, - {"SET","PROCEDURE TO \1A00","_ProcReq_( \1A30 )"}, - {"SET","EXACT \1A20ON,OFF,&>","Set( _SET_EXACT, \1A30 )"}, - {"SET","EXACT (\1A00)","Set( _SET_EXACT, \1A00 )"}, - {"SET","FIXED \1A20ON,OFF,&>","Set( _SET_FIXED, \1A30 )"}, - {"SET","FIXED (\1A00)","Set( _SET_FIXED, \1A00 )"}, - {"SET","DECIMALS TO \1A00","Set( _SET_DECIMALS, \1A00 )"}, - {"SET","DECIMALS TO","Set( _SET_DECIMALS, 0 )"}, - {"SET","PATH TO \1A30","Set( _SET_PATH, \1A30 )"}, - {"SET","PATH TO","Set( _SET_PATH, "" )"}, - {"SET","DEFAULT TO \1A40","Set( _SET_DEFAULT, \1A30 )"}, - {"SET","DEFAULT TO","Set( _SET_DEFAULT, "" )"}, - {"SET","CENTURY \1A20ON,OFF,&>","__SetCentury( \1A30 )"}, - {"SET","CENTURY (\1A00)","__SetCentury( \1A00 )"}, - {"SET","EPOCH TO \1A00","Set( _SET_EPOCH, \1A00 )"}, - {"SET","DATE FORMAT [TO] \1A00","Set( _SET_DATEFORMAT, \1A00 )"}, - {"SET","DATE [TO] AMERICAN","_DFSET( 'mm/dd/yyyy', 'mm/dd/yy' )"}, - {"SET","DATE [TO] ANSI","_DFSET( 'yyyy.mm.dd', 'yy.mm.dd' )"}, - {"SET","DATE [TO] BRITISH","_DFSET( 'dd/mm/yyyy', 'dd/mm/yy' )"}, - {"SET","DATE [TO] FRENCH","_DFSET( 'dd/mm/yyyy', 'dd/mm/yy' )"}, - {"SET","DATE [TO] GERMAN","_DFSET( 'dd.mm.yyyy', 'dd.mm.yy' )"}, - {"SET","DATE [TO] ITALIAN","_DFSET( 'dd-mm-yyyy', 'dd-mm-yy' )"}, - {"SET","DATE [TO] JAPANESE","_DFSET( 'yyyy/mm/dd', 'yy/mm/dd' )"}, - {"SET","DATE [TO] USA","_DFSET( 'mm-dd-yyyy', 'mm-dd-yy' )"}, - {"SET","ALTERNATE \1A20ON,OFF,&>","Set( _SET_ALTERNATE, \1A30 )"}, - {"SET","ALTERNATE (\1A00)","Set( _SET_ALTERNATE, \1A00 )"}, - {"SET","ALTERNATE TO","Set( _SET_ALTFILE, "" )"}, - {"SET","ALTERNATE TO \1A40 [\1B20 ADDITIVE>]","Set( _SET_ALTFILE, \1A30, \1B50 )"}, - {"SET","CONSOLE \1A20ON,OFF,&>","Set( _SET_CONSOLE, \1A30 )"}, - {"SET","CONSOLE (\1A00)","Set( _SET_CONSOLE, \1A00 )"}, - {"SET","MARGIN TO \1A00","Set( _SET_MARGIN, \1A00 )"}, - {"SET","MARGIN TO","Set( _SET_MARGIN, 0 )"}, - {"SET","PRINTER \1A20ON,OFF,&>","Set( _SET_PRINTER, \1A30 )"}, - {"SET","PRINTER (\1A00)","Set( _SET_PRINTER, \1A00 )"}, - {"SET","PRINTER TO","Set( _SET_PRINTFILE, "" )"}, - {"SET","PRINTER TO \1A40 [\1B20 ADDITIVE>]","Set( _SET_PRINTFILE, \1A30, \1B50 )"}, - {"SET","DEVICE TO SCREEN","Set( _SET_DEVICE, 'SCREEN' )"}, - {"SET","DEVICE TO PRINTER","Set( _SET_DEVICE, 'PRINTER' )"}, - {"SET","COLOR TO [\1A30]","SetColor( \1A10 )"}, - {"SET","COLOR TO ( \1A00 )","SetColor( \1A00 )"}, - {"SET","COLOUR TO [\1A30]","SET COLOR TO [\1A00]"}, - {"SET","CURSOR \1A20ON,OFF,&>","SetCursor( if(Upper(\1A30) == 'ON', 1, 0) )"}, - {"SET","CURSOR (\1A00)","SetCursor( if(\1A00, 1, 0) )"}, - {"?","[ \1A10]","QOut( \1A00 )"}, - {"??","[ \1A10]","QQOut( \1A00 )"}, - {"EJECT","","__Eject()"}, - {"TEXT","","text QOut, QQOut"}, - {"TEXT","TO FILE \1A40","__TextSave( \1A30 ) ; text QOut, __TextRestore"}, - {"TEXT","TO PRINTER","__TextSave('PRINTER') ; text QOut, __TextRestore"}, - {"CLS","","Scroll() ; SetPos(0,0)"}, - {"CLEAR","SCREEN","CLS"}, - {"@","\1A00, \1B00","Scroll( \1A00, \1B00, \1A00 ) ; SetPos( \1A00, \1B00 )"}, - {"@","\1A00, \1B00 CLEAR","Scroll( \1A00, \1B00 ) ; SetPos( \1A00, \1B00 )"}, - {"@","\1A00, \1B00 CLEAR TO \1C00, \1D00","Scroll( \1A00, \1B00, \1C00, \1D00 ) ; SetPos( \1A00, \1B00 )"}, - {"@","\1A00, \1B00, \1C00, \1D00 BOX \1E00 [COLOR \1F00]","DispBox( \1A00, \1B00, \1C00, \1D00, \1E00 [, \1F00 ] )"}, - {"@","\1A00, \1B00 TO \1C00, \1D00 [DOUBLE] [COLOR \1E00]","DispBox( \1A00, \1B00, \1C00, \1D00, 2 [, \1E00 ] )"}, - {"@","\1A00, \1B00 TO \1C00, \1D00 [COLOR \1E00]","DispBox( \1A00, \1B00, \1C00, \1D00, 1 [, \1E00 ] )"}, - {"@","\1A00, \1B00 SAY \1C00 [PICTURE \1D00] [COLOR \1E00]","DevPos( \1A00, \1B00 ) ; DevOutPict( \1C00, \1D00 [, \1E00] )"}, - {"@","\1A00, \1B00 SAY \1C00 [COLOR \1D00]","DevPos( \1A00, \1B00 ) ; DevOut( \1C00 [, \1D00] )"}, - {"SET","BELL \1A20ON,OFF,&>","Set( _SET_BELL, \1A30 )"}, - {"SET","BELL (\1A00)","Set( _SET_BELL, \1A00 )"}, - {"SET","CONFIRM \1A20ON,OFF,&>","Set( _SET_CONFIRM, \1A30 )"}, - {"SET","CONFIRM (\1A00)","Set( _SET_CONFIRM, \1A00 )"}, - {"SET","ESCAPE \1A20ON,OFF,&>","Set( _SET_ESCAPE, \1A30 )"}, - {"SET","ESCAPE (\1A00)","Set( _SET_ESCAPE, \1A00 )"}, - {"SET","INTENSITY \1A20ON,OFF,&>","Set( _SET_INTENSITY, \1A30 )"}, - {"SET","INTENSITY (\1A00)","Set( _SET_INTENSITY, \1A00 )"}, - {"SET","SCOREBOARD \1A20ON,OFF,&>","Set( _SET_SCOREBOARD, \1A30 )"}, - {"SET","SCOREBOARD (\1A00)","Set( _SET_SCOREBOARD, \1A00 )"}, - {"SET","DELIMITERS \1A20ON,OFF,&>","Set( _SET_DELIMITERS, \1A30 )"}, - {"SET","DELIMITERS (\1A00)","Set( _SET_DELIMITERS, \1A00 )"}, - {"SET","DELIMITERS TO \1A00","Set( _SET_DELIMCHARS, \1A00 )"}, - {"SET","DELIMITERS TO DEFAULT","Set( _SET_DELIMCHARS, '::' )"}, - {"SET","DELIMITERS TO","Set( _SET_DELIMCHARS, '::' )"}, - {"SET","FORMAT TO \1A00","_ProcReq_( \1A30 + '.FMT' ) ; __SetFormat( {|| \1A00()} )"}, - {"SET","FORMAT TO \1A00.\1B00","_ProcReq_( \1A30 + '.' + \1B30 ) ; __SetFormat( {|| \1A00()} )"}, - {"SET","FORMAT TO \1A20&>","if ( Empty(\1A30) ) ; SET FORMAT TO ; else ; __SetFormat( &('{||' + \1A30 + '()}') ) ; end"}, - {"SET","FORMAT TO","__SetFormat()"}, - {"@","\1A00, \1B00 GET \1C00 [PICTURE \1D00] [VALID \1E00] [WHEN \1F00] [SEND \1G00]", + {0,"DO","WHILE \1A00","while \1A00"}, + {0,"END","\1A00","end"}, + {0,"END","SEQUENCE","end"}, + {0,"ENDSEQUENCE","","end"}, + {0,"ENDDO","\1A30","enddo"}, + {0,"ENDIF","\1A30","endif"}, + {0,"ENDCASE","\1A30","endcase"}, + {0,"ENDFOR","[ \1A30 ]","next"}, + {0,"NEXT","\1A00 [TO \1B00] [STEP \1C00]","next"}, + {0,"DO","\1A00.PRG [WITH \1B10]","do \1A00 [ WITH \1B00]"}, + {0,"CALL","\1A00() [WITH \1B10]","call \1A00 [ WITH \1B00]"}, + {0,"STORE","\1A00 TO \1B00 [, \1C00 ]","\1B00 := [ \1C00 := ] \1A00"}, + {0,"SET","ECHO \1A30",NULL}, + {0,"SET","HEADING \1A30",NULL}, + {0,"SET","MENU \1A30",NULL}, + {0,"SET","STATUS \1A30",NULL}, + {0,"SET","STEP \1A30",NULL}, + {0,"SET","SAFETY \1A30",NULL}, + {0,"SET","TALK \1A30",NULL}, + {0,"SET","PROCEDURE TO",NULL}, + {0,"SET","PROCEDURE TO \1A00","_ProcReq_( \1A30 )"}, + {0,"SET","EXACT \1A20ON,OFF,&>","Set( _SET_EXACT, \1A30 )"}, + {0,"SET","EXACT (\1A00)","Set( _SET_EXACT, \1A00 )"}, + {0,"SET","FIXED \1A20ON,OFF,&>","Set( _SET_FIXED, \1A30 )"}, + {0,"SET","FIXED (\1A00)","Set( _SET_FIXED, \1A00 )"}, + {0,"SET","DECIMALS TO \1A00","Set( _SET_DECIMALS, \1A00 )"}, + {0,"SET","DECIMALS TO","Set( _SET_DECIMALS, 0 )"}, + {0,"SET","PATH TO \1A30","Set( _SET_PATH, \1A30 )"}, + {0,"SET","PATH TO","Set( _SET_PATH, "" )"}, + {0,"SET","DEFAULT TO \1A40","Set( _SET_DEFAULT, \1A30 )"}, + {0,"SET","DEFAULT TO","Set( _SET_DEFAULT, "" )"}, + {0,"SET","CENTURY \1A20ON,OFF,&>","__SetCentury( \1A30 )"}, + {0,"SET","CENTURY (\1A00)","__SetCentury( \1A00 )"}, + {0,"SET","EPOCH TO \1A00","Set( _SET_EPOCH, \1A00 )"}, + {0,"SET","DATE FORMAT [TO] \1A00","Set( _SET_DATEFORMAT, \1A00 )"}, + {0,"SET","DATE [TO] AMERICAN","_DFSET( 'mm/dd/yyyy', 'mm/dd/yy' )"}, + {0,"SET","DATE [TO] ANSI","_DFSET( 'yyyy.mm.dd', 'yy.mm.dd' )"}, + {0,"SET","DATE [TO] BRITISH","_DFSET( 'dd/mm/yyyy', 'dd/mm/yy' )"}, + {0,"SET","DATE [TO] FRENCH","_DFSET( 'dd/mm/yyyy', 'dd/mm/yy' )"}, + {0,"SET","DATE [TO] GERMAN","_DFSET( 'dd.mm.yyyy', 'dd.mm.yy' )"}, + {0,"SET","DATE [TO] ITALIAN","_DFSET( 'dd-mm-yyyy', 'dd-mm-yy' )"}, + {0,"SET","DATE [TO] JAPANESE","_DFSET( 'yyyy/mm/dd', 'yy/mm/dd' )"}, + {0,"SET","DATE [TO] USA","_DFSET( 'mm-dd-yyyy', 'mm-dd-yy' )"}, + {0,"SET","ALTERNATE \1A20ON,OFF,&>","Set( _SET_ALTERNATE, \1A30 )"}, + {0,"SET","ALTERNATE (\1A00)","Set( _SET_ALTERNATE, \1A00 )"}, + {0,"SET","ALTERNATE TO","Set( _SET_ALTFILE, "" )"}, + {0,"SET","ALTERNATE TO \1A40 [\1B20 ADDITIVE>]","Set( _SET_ALTFILE, \1A30, \1B50 )"}, + {0,"SET","CONSOLE \1A20ON,OFF,&>","Set( _SET_CONSOLE, \1A30 )"}, + {0,"SET","CONSOLE (\1A00)","Set( _SET_CONSOLE, \1A00 )"}, + {0,"SET","MARGIN TO \1A00","Set( _SET_MARGIN, \1A00 )"}, + {0,"SET","MARGIN TO","Set( _SET_MARGIN, 0 )"}, + {0,"SET","PRINTER \1A20ON,OFF,&>","Set( _SET_PRINTER, \1A30 )"}, + {0,"SET","PRINTER (\1A00)","Set( _SET_PRINTER, \1A00 )"}, + {0,"SET","PRINTER TO","Set( _SET_PRINTFILE, "" )"}, + {0,"SET","PRINTER TO \1A40 [\1B20 ADDITIVE>]","Set( _SET_PRINTFILE, \1A30, \1B50 )"}, + {0,"SET","DEVICE TO SCREEN","Set( _SET_DEVICE, 'SCREEN' )"}, + {0,"SET","DEVICE TO PRINTER","Set( _SET_DEVICE, 'PRINTER' )"}, + {0,"SET","COLOR TO [\1A30]","SetColor( \1A10 )"}, + {0,"SET","COLOR TO ( \1A00 )","SetColor( \1A00 )"}, + {0,"SET","COLOUR TO [\1A30]","SET COLOR TO [\1A00]"}, + {0,"SET","CURSOR \1A20ON,OFF,&>","SetCursor( if(Upper(\1A30) == 'ON', 1, 0) )"}, + {0,"SET","CURSOR (\1A00)","SetCursor( if(\1A00, 1, 0) )"}, + {0,"?","[ \1A10]","QOut( \1A00 )"}, + {0,"??","[ \1A10]","QQOut( \1A00 )"}, + {0,"EJECT","","__Eject()"}, + {0,"TEXT","","text QOut, QQOut"}, + {0,"TEXT","TO FILE \1A40","__TextSave( \1A30 ) ; text QOut, __TextRestore"}, + {0,"TEXT","TO PRINTER","__TextSave('PRINTER') ; text QOut, __TextRestore"}, + {0,"CLS","","Scroll() ; SetPos(0,0)"}, + {0,"CLEAR","SCREEN","CLS"}, + {0,"@","\1A00, \1B00","Scroll( \1A00, \1B00, \1A00 ) ; SetPos( \1A00, \1B00 )"}, + {0,"@","\1A00, \1B00 CLEAR","Scroll( \1A00, \1B00 ) ; SetPos( \1A00, \1B00 )"}, + {0,"@","\1A00, \1B00 CLEAR TO \1C00, \1D00","Scroll( \1A00, \1B00, \1C00, \1D00 ) ; SetPos( \1A00, \1B00 )"}, + {0,"@","\1A00, \1B00, \1C00, \1D00 BOX \1E00 [COLOR \1F00]","DispBox( \1A00, \1B00, \1C00, \1D00, \1E00 [, \1F00 ] )"}, + {0,"@","\1A00, \1B00 TO \1C00, \1D00 [DOUBLE] [COLOR \1E00]","DispBox( \1A00, \1B00, \1C00, \1D00, 2 [, \1E00 ] )"}, + {0,"@","\1A00, \1B00 TO \1C00, \1D00 [COLOR \1E00]","DispBox( \1A00, \1B00, \1C00, \1D00, 1 [, \1E00 ] )"}, + {0,"@","\1A00, \1B00 SAY \1C00 [PICTURE \1D00] [COLOR \1E00]","DevPos( \1A00, \1B00 ) ; DevOutPict( \1C00, \1D00 [, \1E00] )"}, + {0,"@","\1A00, \1B00 SAY \1C00 [COLOR \1D00]","DevPos( \1A00, \1B00 ) ; DevOut( \1C00 [, \1D00] )"}, + {0,"SET","BELL \1A20ON,OFF,&>","Set( _SET_BELL, \1A30 )"}, + {0,"SET","BELL (\1A00)","Set( _SET_BELL, \1A00 )"}, + {0,"SET","CONFIRM \1A20ON,OFF,&>","Set( _SET_CONFIRM, \1A30 )"}, + {0,"SET","CONFIRM (\1A00)","Set( _SET_CONFIRM, \1A00 )"}, + {0,"SET","ESCAPE \1A20ON,OFF,&>","Set( _SET_ESCAPE, \1A30 )"}, + {0,"SET","ESCAPE (\1A00)","Set( _SET_ESCAPE, \1A00 )"}, + {0,"SET","INTENSITY \1A20ON,OFF,&>","Set( _SET_INTENSITY, \1A30 )"}, + {0,"SET","INTENSITY (\1A00)","Set( _SET_INTENSITY, \1A00 )"}, + {0,"SET","SCOREBOARD \1A20ON,OFF,&>","Set( _SET_SCOREBOARD, \1A30 )"}, + {0,"SET","SCOREBOARD (\1A00)","Set( _SET_SCOREBOARD, \1A00 )"}, + {0,"SET","DELIMITERS \1A20ON,OFF,&>","Set( _SET_DELIMITERS, \1A30 )"}, + {0,"SET","DELIMITERS (\1A00)","Set( _SET_DELIMITERS, \1A00 )"}, + {0,"SET","DELIMITERS TO \1A00","Set( _SET_DELIMCHARS, \1A00 )"}, + {0,"SET","DELIMITERS TO DEFAULT","Set( _SET_DELIMCHARS, '::' )"}, + {0,"SET","DELIMITERS TO","Set( _SET_DELIMCHARS, '::' )"}, + {0,"SET","FORMAT TO \1A00","_ProcReq_( \1A30 + '.FMT' ) ; __SetFormat( {|| \1A00()} )"}, + {0,"SET","FORMAT TO \1A00.\1B00","_ProcReq_( \1A30 + '.' + \1B30 ) ; __SetFormat( {|| \1A00()} )"}, + {0,"SET","FORMAT TO \1A20&>","if ( Empty(\1A30) ) ; SET FORMAT TO ; else ; __SetFormat( &('{||' + \1A30 + '()}') ) ; end"}, + {0,"SET","FORMAT TO","__SetFormat()"}, + {0,"@","\1A00, \1B00 GET \1C00 [PICTURE \1D00] [VALID \1E00] [WHEN \1F00] [SEND \1G00]", "SetPos( \1A00, \1B00 ) ; AAdd( GetList, _GET_( \1C00, \1C20, \1D00, \1E40, \1F40 ):display() ) [; ATail(GetList):\1G00]"}, - {"@","\1A00, \1B00 SAY \1C00 [\1D10] GET \1E00 [\1F10]","@ \1A00, \1B00 SAY \1C00 [\1D00] ; @ Row(), Col()+1 GET \1E00 [\1F00]"}, - {"@","\1A00, \1B00 GET \1C00 [\1D10] RANGE \1E00, \1F00 [\1G10]", + {0,"@","\1A00, \1B00 SAY \1C00 [\1D10] GET \1E00 [\1F10]","@ \1A00, \1B00 SAY \1C00 [\1D00] ; @ Row(), Col()+1 GET \1E00 [\1F00]"}, + {0,"@","\1A00, \1B00 GET \1C00 [\1D10] RANGE \1E00, \1F00 [\1G10]", "@ \1A00, \1B00 GET \1C00 [\1D00] VALID {|_1| RangeCheck(_1,, \1E00, \1F00)} [\1G00]"}, - {"@","\1A00, \1B00 GET \1C00 [\1D10] COLOR \1E00 [\1F10]","@ \1A00, \1B00 GET \1C00 [\1D00] SEND colorDisp(\1E00) [\1F00]"}, - {"READ","SAVE","ReadModal(GetList)"}, - {"READ","","ReadModal(GetList) ; GetList := {}"}, - {"CLEAR","GETS","ReadKill(.T.) ; GetList := {}"}, - {"@","[\1A10] COLOUR [\1B10]","@ [\1A00] COLOR [\1B00]"}, - {"SET","WRAP \1A20ON,OFF,&>","Set( _SET_WRAP, \1A30 )"}, - {"SET","WRAP (\1A00)","Set( _SET_WRAP, \1A00 )"}, - {"SET","MESSAGE TO \1A00 [\1B20 CENTER, CENTRE>]","Set( _SET_MESSAGE, \1A00 ) ; Set( _SET_MCENTER, \1B50 )"}, - {"SET","MESSAGE TO","Set( _SET_MESSAGE, 0 ) ; Set( _SET_MCENTER, .f. )"}, - {"@","\1A00, \1B00 PROMPT \1C00 [MESSAGE \1D00]","__AtPrompt( \1A00, \1B00, \1C00 , \1D00 )"}, - {"MENU","TO \1A00","\1A00 := __MenuTo( {|_1| if(PCount() == 0, \1A00, \1A00 := _1)}, \1A10 )"}, - {"SAVE","SCREEN","__XSaveScreen()"}, - {"RESTORE","SCREEN","__XRestScreen()"}, - {"SAVE","SCREEN TO \1A00","\1A00 := SaveScreen( 0, 0, Maxrow(), Maxcol() )"}, - {"RESTORE","SCREEN FROM \1A00","RestScreen( 0, 0, Maxrow(), Maxcol(), \1A00 )"}, - {"WAIT","[\1A00]","__Wait( \1A00 )"}, - {"WAIT","[\1A00] TO \1B00","\1B00 := __Wait( \1A00 )"}, - {"ACCEPT","[\1A00] TO \1B00","\1B00 := __Accept( \1A00 )"}, - {"INPUT","[\1A00] TO \1B00", "if ( !Empty(__Accept(\1A00)) ) ; \1B00 := &( __AcceptStr() ) ; end"}, - {"KEYBOARD","\1A00","__Keyboard( \1A00 )"}, - {"CLEAR","TYPEAHEAD","__Keyboard()"}, - {"SET","TYPEAHEAD TO \1A00","Set( _SET_TYPEAHEAD, \1A00 )"}, - {"SET","KEY \1A00 TO \1B00","SetKey( \1A00, {|p, l, v| \1B00(p, l, v)} )"}, - {"SET","KEY \1A00 TO \1B00 ( [\1C10] )","SET KEY \1A00 TO \1B00"}, - {"SET","KEY \1A00 TO \1B20&>","if ( Empty(\1B30) ) ; SetKey( \1A00, NIL ) ; else ; SetKey( \1A00, {|p, l, v| \1B00(p, l, v)} ) ; end"}, - {"SET","KEY \1A00 [TO]","SetKey( \1A00, NIL )"}, - {"SET","FUNCTION \1A00 [TO] [\1B00]","__SetFunction( \1A00, \1B00 )"}, - {"CLEAR","MEMORY","__MClear()"}, - {"RELEASE","\1A10s","__MXRelease( \1A20 )"}, - {"RELEASE","ALL","__MRelease('*', .t.)"}, - {"RELEASE","ALL LIKE \1A00","__MRelease( \1A10, .t. )"}, - {"RELEASE","ALL EXCEPT \1A00","__MRelease( \1A10, .f. )"}, - {"RESTORE","[FROM \1A40] [\1B20 ADDITIVE>]","__MRestore( \1A30, \1B50 )"}, - {"SAVE","ALL LIKE \1A00 TO \1B40","__MSave( \1B30, \1A30, .t. )"}, - {"SAVE","TO \1A40 ALL LIKE \1B00","__MSave( \1A30, \1B30, .t. )"}, - {"SAVE","ALL EXCEPT \1A00 TO \1B40","__MSave( \1B30, \1A30, .f. )"}, - {"SAVE","TO \1A40 ALL EXCEPT \1B00","__MSave( \1A30, \1B30, .f. )"}, - {"SAVE","[TO \1A40] [ALL]","__MSave( \1A30, '*', .t. )"}, - {"ERASE","\1A40","FErase( \1A30 )"}, - {"DELETE","FILE \1A40","FErase( \1A30 )"}, - {"RENAME","\1A40 TO \1B40","FRename( \1A30, \1B30 )"}, - {"COPY","FILE \1A40 TO \1B40","__CopyFile( \1A30, \1B30 )"}, - {"DIR","[\1A40]","__Dir( \1A30 )"}, - {"TYPE","\1A40 [\1B20 TO PRINTER>] [TO FILE \1C40]","__TypeFile( \1A30, \1B50 ) [; COPY FILE \1A30 TO \1C30 ]"}, - {"TYPE","\1A40 [\1B20 TO PRINTER>]","__TypeFile( \1A30, \1B50 )"}, - {"REQUEST","\1A10s","EXTERNAL \1A00"}, - {"CANCEL","","__Quit()"}, - {"QUIT","","__Quit()"}, - {"RUN","\1A30","__Run( \1A10 )"}, - {"RUN","( \1A00 )","__Run( \1A00 )"}, - {"!","\1A30","RUN \1A00"}, - {"RUN","= \1A00","( run := \1A00 )"}, - {"RUN",":= \1A00","( run := \1A00 )"}, - {"SET","EXCLUSIVE \1A20ON,OFF,&>","Set( _SET_EXCLUSIVE, \1A30 )"}, - {"SET","EXCLUSIVE (\1A00)","Set( _SET_EXCLUSIVE, \1A00 )"}, - {"SET","SOFTSEEK \1A20ON,OFF,&>","Set( _SET_SOFTSEEK, \1A30 )"}, - {"SET","SOFTSEEK (\1A00)","Set( _SET_SOFTSEEK, \1A00 )"}, - {"SET","UNIQUE \1A20ON,OFF,&>","Set( _SET_UNIQUE, \1A30 )"}, - {"SET","UNIQUE (\1A00)","Set( _SET_UNIQUE, \1A00 )"}, - {"SET","DELETED \1A20ON,OFF,&>","Set( _SET_DELETED, \1A30 )"}, - {"SET","DELETED (\1A00)","Set( _SET_DELETED, \1A00 )"}, - {"SELECT","\1A00","dbSelectArea( \1A30 )"}, - {"SELECT","\1A00([\1B10])","dbSelectArea( \1A00(\1B00) )"}, - {"USE","","dbCloseArea()"}, - {"USE","\1A40 [VIA \1B00] [ALIAS \1C00] [\1D20 NEW>] [\1E20 EXCLUSIVE>] [\1F20 SHARED>] [\1G20 READONLY>] [INDEX \1H40 [, \1I40]]", + {0,"@","\1A00, \1B00 GET \1C00 [\1D10] COLOR \1E00 [\1F10]","@ \1A00, \1B00 GET \1C00 [\1D00] SEND colorDisp(\1E00) [\1F00]"}, + {0,"READ","SAVE","ReadModal(GetList)"}, + {0,"READ","","ReadModal(GetList) ; GetList := {}"}, + {0,"CLEAR","GETS","ReadKill(.T.) ; GetList := {}"}, + {0,"@","[\1A10] COLOUR [\1B10]","@ [\1A00] COLOR [\1B00]"}, + {0,"SET","WRAP \1A20ON,OFF,&>","Set( _SET_WRAP, \1A30 )"}, + {0,"SET","WRAP (\1A00)","Set( _SET_WRAP, \1A00 )"}, + {0,"SET","MESSAGE TO \1A00 [\1B20 CENTER, CENTRE>]","Set( _SET_MESSAGE, \1A00 ) ; Set( _SET_MCENTER, \1B50 )"}, + {0,"SET","MESSAGE TO","Set( _SET_MESSAGE, 0 ) ; Set( _SET_MCENTER, .f. )"}, + {0,"@","\1A00, \1B00 PROMPT \1C00 [MESSAGE \1D00]","__AtPrompt( \1A00, \1B00, \1C00 , \1D00 )"}, + {0,"MENU","TO \1A00","\1A00 := __MenuTo( {|_1| if(PCount() == 0, \1A00, \1A00 := _1)}, \1A10 )"}, + {0,"SAVE","SCREEN","__XSaveScreen()"}, + {0,"RESTORE","SCREEN","__XRestScreen()"}, + {0,"SAVE","SCREEN TO \1A00","\1A00 := SaveScreen( 0, 0, Maxrow(), Maxcol() )"}, + {0,"RESTORE","SCREEN FROM \1A00","RestScreen( 0, 0, Maxrow(), Maxcol(), \1A00 )"}, + {0,"WAIT","[\1A00]","__Wait( \1A00 )"}, + {0,"WAIT","[\1A00] TO \1B00","\1B00 := __Wait( \1A00 )"}, + {0,"ACCEPT","[\1A00] TO \1B00","\1B00 := __Accept( \1A00 )"}, + {0,"INPUT","[\1A00] TO \1B00", "if ( !Empty(__Accept(\1A00)) ) ; \1B00 := &( __AcceptStr() ) ; end"}, + {0,"KEYBOARD","\1A00","__Keyboard( \1A00 )"}, + {0,"CLEAR","TYPEAHEAD","__Keyboard()"}, + {0,"SET","TYPEAHEAD TO \1A00","Set( _SET_TYPEAHEAD, \1A00 )"}, + {0,"SET","KEY \1A00 TO \1B00","SetKey( \1A00, {|p, l, v| \1B00(p, l, v)} )"}, + {0,"SET","KEY \1A00 TO \1B00 ( [\1C10] )","SET KEY \1A00 TO \1B00"}, + {0,"SET","KEY \1A00 TO \1B20&>","if ( Empty(\1B30) ) ; SetKey( \1A00, NIL ) ; else ; SetKey( \1A00, {|p, l, v| \1B00(p, l, v)} ) ; end"}, + {0,"SET","KEY \1A00 [TO]","SetKey( \1A00, NIL )"}, + {0,"SET","FUNCTION \1A00 [TO] [\1B00]","__SetFunction( \1A00, \1B00 )"}, + {0,"CLEAR","MEMORY","__MClear()"}, + {0,"RELEASE","\1A10s","__MXRelease( \1A20 )"}, + {0,"RELEASE","ALL","__MRelease('*', .t.)"}, + {0,"RELEASE","ALL LIKE \1A00","__MRelease( \1A10, .t. )"}, + {0,"RELEASE","ALL EXCEPT \1A00","__MRelease( \1A10, .f. )"}, + {0,"RESTORE","[FROM \1A40] [\1B20 ADDITIVE>]","__MRestore( \1A30, \1B50 )"}, + {0,"SAVE","ALL LIKE \1A00 TO \1B40","__MSave( \1B30, \1A30, .t. )"}, + {0,"SAVE","TO \1A40 ALL LIKE \1B00","__MSave( \1A30, \1B30, .t. )"}, + {0,"SAVE","ALL EXCEPT \1A00 TO \1B40","__MSave( \1B30, \1A30, .f. )"}, + {0,"SAVE","TO \1A40 ALL EXCEPT \1B00","__MSave( \1A30, \1B30, .f. )"}, + {0,"SAVE","[TO \1A40] [ALL]","__MSave( \1A30, '*', .t. )"}, + {0,"ERASE","\1A40","FErase( \1A30 )"}, + {0,"DELETE","FILE \1A40","FErase( \1A30 )"}, + {0,"RENAME","\1A40 TO \1B40","FRename( \1A30, \1B30 )"}, + {0,"COPY","FILE \1A40 TO \1B40","__CopyFile( \1A30, \1B30 )"}, + {0,"DIR","[\1A40]","__Dir( \1A30 )"}, + {0,"TYPE","\1A40 [\1B20 TO PRINTER>] [TO FILE \1C40]","__TypeFile( \1A30, \1B50 ) [; COPY FILE \1A30 TO \1C30 ]"}, + {0,"TYPE","\1A40 [\1B20 TO PRINTER>]","__TypeFile( \1A30, \1B50 )"}, + {0,"REQUEST","\1A10s","EXTERNAL \1A00"}, + {0,"CANCEL","","__Quit()"}, + {0,"QUIT","","__Quit()"}, + {0,"RUN","\1A30","__Run( \1A10 )"}, + {0,"RUN","( \1A00 )","__Run( \1A00 )"}, + {0,"!","\1A30","RUN \1A00"}, + {0,"RUN","= \1A00","( run := \1A00 )"}, + {0,"RUN",":= \1A00","( run := \1A00 )"}, + {0,"SET","EXCLUSIVE \1A20ON,OFF,&>","Set( _SET_EXCLUSIVE, \1A30 )"}, + {0,"SET","EXCLUSIVE (\1A00)","Set( _SET_EXCLUSIVE, \1A00 )"}, + {0,"SET","SOFTSEEK \1A20ON,OFF,&>","Set( _SET_SOFTSEEK, \1A30 )"}, + {0,"SET","SOFTSEEK (\1A00)","Set( _SET_SOFTSEEK, \1A00 )"}, + {0,"SET","UNIQUE \1A20ON,OFF,&>","Set( _SET_UNIQUE, \1A30 )"}, + {0,"SET","UNIQUE (\1A00)","Set( _SET_UNIQUE, \1A00 )"}, + {0,"SET","DELETED \1A20ON,OFF,&>","Set( _SET_DELETED, \1A30 )"}, + {0,"SET","DELETED (\1A00)","Set( _SET_DELETED, \1A00 )"}, + {0,"SELECT","\1A00","dbSelectArea( \1A30 )"}, + {0,"SELECT","\1A00([\1B10])","dbSelectArea( \1A00(\1B00) )"}, + {0,"USE","","dbCloseArea()"}, + {0,"USE","\1A40 [VIA \1B00] [ALIAS \1C00] [\1D20 NEW>] [\1E20 EXCLUSIVE>] [\1F20 SHARED>] [\1G20 READONLY>] [INDEX \1H40 [, \1I40]]", "dbUseArea( \1D50, \1B00, \1A30, \1C30, if(\1F50 .or. \1E50, !\1E50, NIL), \1G50 ) [; dbSetIndex( \1H30 )] [; dbSetIndex( \1I30 )]"}, - {"APPEND","BLANK","dbAppend()"}, - {"PACK","","__dbPack()"}, - {"ZAP","","__dbZap()"}, - {"UNLOCK","","dbUnlock()"}, - {"UNLOCK","ALL","dbUnlockAll()"}, - {"COMMIT","","dbCommitAll()"}, - {"GOTO","\1A00","dbGoto(\1A00)"}, - {"GO","\1A00","dbGoto(\1A00)"}, - {"GOTO","TOP","dbGoTop()"}, - {"GO","TOP","dbGoTop()"}, - {"GOTO","BOTTOM","dbGoBottom()"}, - {"GO","BOTTOM","dbGoBottom()"}, - {"SKIP","","dbSkip(1)"}, - {"SKIP","\1A00","dbSkip( \1A00 )"}, - {"SKIP","ALIAS \1A00","\1A00 -> ( dbSkip(1) )"}, - {"SKIP","\1A00 ALIAS \1B00","\1B00 -> ( dbSkip(\1A00) )"}, - {"SEEK","\1A00 [\1B20 SOFTSEEK>]","dbSeek( \1A00, if( \1B50, .T., NIL ) )"}, - {"FIND","\1A30","dbSeek( \1A30 )"}, - {"FIND",":= \1A00","( find := \1A00 )"}, - {"FIND","= \1A00","( find := \1A00 )"}, - {"CONTINUE","","__dbContinue()"}, - {"LOCATE","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]", + {0,"APPEND","BLANK","dbAppend()"}, + {0,"PACK","","__dbPack()"}, + {0,"ZAP","","__dbZap()"}, + {0,"UNLOCK","","dbUnlock()"}, + {0,"UNLOCK","ALL","dbUnlockAll()"}, + {0,"COMMIT","","dbCommitAll()"}, + {0,"GOTO","\1A00","dbGoto(\1A00)"}, + {0,"GO","\1A00","dbGoto(\1A00)"}, + {0,"GOTO","TOP","dbGoTop()"}, + {0,"GO","TOP","dbGoTop()"}, + {0,"GOTO","BOTTOM","dbGoBottom()"}, + {0,"GO","BOTTOM","dbGoBottom()"}, + {0,"SKIP","","dbSkip(1)"}, + {0,"SKIP","\1A00","dbSkip( \1A00 )"}, + {0,"SKIP","ALIAS \1A00","\1A00 -> ( dbSkip(1) )"}, + {0,"SKIP","\1A00 ALIAS \1B00","\1B00 -> ( dbSkip(\1A00) )"}, + {0,"SEEK","\1A00 [\1B20 SOFTSEEK>]","dbSeek( \1A00, if( \1B50, .T., NIL ) )"}, + {0,"FIND","\1A30","dbSeek( \1A30 )"}, + {0,"FIND",":= \1A00","( find := \1A00 )"}, + {0,"FIND","= \1A00","( find := \1A00 )"}, + {0,"CONTINUE","","__dbContinue()"}, + {0,"LOCATE","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]", "__dbLocate(\1A40,\1B40,\1C00,\1D00,\1E50)"}, - {"SET","RELATION TO","dbClearRel()"}, - {"SET","RELATION [\1A20ADDITIVE>] [TO \1B00 INTO \1C40 [, [TO] \1D00 INTO \1E40]]", + {0,"SET","RELATION TO","dbClearRel()"}, + {0,"SET","RELATION [\1A20ADDITIVE>] [TO \1B00 INTO \1C40 [, [TO] \1D00 INTO \1E40]]", "if ( !\1A50 ) ; dbClearRel() ; end ; dbSetRelation(\1C30,\1B40,\1B20) [; dbSetRelation(\1E30,\1D40,\1D20)]"}, - {"SET","FILTER TO","dbClearFilter(NIL)"}, - {"SET","FILTER TO \1A00","dbSetFilter( \1A40, \1A20 )"}, - {"SET","FILTER TO \1A20&>","if ( Empty(\1A30) ) ; dbClearFilter() ; else ; dbSetFilter(\1A40,\1A30) ; end"}, - {"REPLACE","[ \1A00 WITH \1B00 [, \1C00 WITH \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]"}, - {"DBEval( {|| _FIELD->\1A00 := \1B00 [,_FIELD->\1C00 := \1D00]},\1E40,\1F40,\1G00,\1H00,\1I50)"}, - {"REPLACE","\1A00 WITH \1B00 [, \1C00 WITH \1D00 ]","_FIELD->\1A00 := \1B00 [; _FIELD->\1C00 := \1D00]"}, - {"DELETE","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]"}, - {"DBEval( {|| dbDelete()}, \1A40, \1B40, \1C00, \1D00, \1E50 )"}, - {"RECALL","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]"}, - {"DBEval( {|| dbRecall()}, \1A40, \1B40, \1C00, \1D00, \1E50 )"}, - {"DELETE","","dbDelete()"}, - {"RECALL","","dbRecall()"}, - {"CREATE","\1A40 [FROM \1B40] [VIA \1C00] [ALIAS \1D00] [\1E20 NEW>]","__dbCreate( \1A30, \1B30, \1C00, \1E50, \1D30 )"}, - {"COPY","[STRUCTURE] [EXTENDED] [TO \1A40]","__dbCopyXStruct( \1A30 )"}, - {"COPY","[STRUCTURE] [TO \1A40] [FIELDS \1B10]","__dbCopyStruct( \1A30, { \1B30 } )"}, - {"COPY","[TO \1A40] [DELIMITED [WITH \1B30]] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", + {0,"SET","FILTER TO","dbClearFilter(NIL)"}, + {0,"SET","FILTER TO \1A00","dbSetFilter( \1A40, \1A20 )"}, + {0,"SET","FILTER TO \1A20&>","if ( Empty(\1A30) ) ; dbClearFilter() ; else ; dbSetFilter(\1A40,\1A30) ; end"}, + {0,"REPLACE","[ \1A00 WITH \1B00 [, \1C00 WITH \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]"}, + {0,"DBEval( {|| _FIELD->\1A00 := \1B00 [,_FIELD->\1C00 := \1D00]},\1E40,\1F40,\1G00,\1H00,\1I50)"}, + {0,"REPLACE","\1A00 WITH \1B00 [, \1C00 WITH \1D00 ]","_FIELD->\1A00 := \1B00 [; _FIELD->\1C00 := \1D00]"}, + {0,"DELETE","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]"}, + {0,"DBEval( {|| dbDelete()}, \1A40, \1B40, \1C00, \1D00, \1E50 )"}, + {0,"RECALL","[FOR \1A00] [WHILE \1B00] [NEXT \1C00] [RECORD \1D00] [\1E20REST>] [ALL]"}, + {0,"DBEval( {|| dbRecall()}, \1A40, \1B40, \1C00, \1D00, \1E50 )"}, + {0,"DELETE","","dbDelete()"}, + {0,"RECALL","","dbRecall()"}, + {0,"CREATE","\1A40 [FROM \1B40] [VIA \1C00] [ALIAS \1D00] [\1E20 NEW>]","__dbCreate( \1A30, \1B30, \1C00, \1E50, \1D30 )"}, + {0,"COPY","[STRUCTURE] [EXTENDED] [TO \1A40]","__dbCopyXStruct( \1A30 )"}, + {0,"COPY","[STRUCTURE] [TO \1A40] [FIELDS \1B10]","__dbCopyStruct( \1A30, { \1B30 } )"}, + {0,"COPY","[TO \1A40] [DELIMITED [WITH \1B30]] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", "__dbDelim( .T., \1A30, \1B30, { \1C30 }, \1D40, \1E40, \1F00, \1G00, \1H50 )"}, - {"COPY","[TO \1A40] [SDF] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", + {0,"COPY","[TO \1A40] [SDF] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", "__dbSDF( .T., \1A30, { \1B30 }, \1C40, \1D40, \1E00, \1F00, \1G50 )"}, - {"COPY","[TO \1A40] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [VIA \1H00] [ALL]", + {0,"COPY","[TO \1A40] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [VIA \1H00] [ALL]", "__dbCopy( \1A30, { \1B30 }, \1C40, \1D40, \1E00, \1F00, \1G50, \1H00 )"}, - {"APPEND","[FROM \1A40] [DELIMITED [WITH \1B30]] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", + {0,"APPEND","[FROM \1A40] [DELIMITED [WITH \1B30]] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", "__dbDelim( .F., \1A30, \1B30, { \1C30 }, \1D40, \1E40, \1F00, \1G00, \1H50 )"}, - {"APPEND","[FROM \1A40] [SDF] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", + {0,"APPEND","[FROM \1A40] [SDF] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", "__dbSDF( .F., \1A30, { \1B30 }, \1C40, \1D40, \1E00, \1F00, \1G50 )"}, - {"APPEND","[FROM \1A40] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [VIA \1H00] [ALL]", + {0,"APPEND","[FROM \1A40] [FIELDS \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [VIA \1H00] [ALL]", "__dbApp( \1A30, { \1B30 }, \1C40, \1D40, \1E00, \1F00, \1G50, \1H00 )"}, - {"SORT","[TO \1A40] [ON \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", + {0,"SORT","[TO \1A40] [ON \1B10] [FOR \1C00] [WHILE \1D00] [NEXT \1E00] [RECORD \1F00] [\1G20REST>] [ALL]", "__dbSort( \1A30, { \1B30 }, \1C40, \1D40, \1E00, \1F00, \1G50 )"}, - {"TOTAL","[TO \1A40] [ON \1B00] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", + {0,"TOTAL","[TO \1A40] [ON \1B00] [FIELDS \1C10] [FOR \1D00] [WHILE \1E00] [NEXT \1F00] [RECORD \1G00] [\1H20REST>] [ALL]", "__dbTotal( \1A30, \1B40, { \1C30 }, \1D40, \1E40, \1F00, \1G00, \1H50 )"}, - {"UPDATE","[FROM \1A40] [ON \1B00] [REPLACE \1C00 WITH \1D00 [, \1E00 WITH \1F00]] [\1G20RANDOM>]", + {0,"UPDATE","[FROM \1A40] [ON \1B00] [REPLACE \1C00 WITH \1D00 [, \1E00 WITH \1F00]] [\1G20RANDOM>]", "__dbUpdate( \1A30, \1B40, \1G50, {|| _FIELD->\1C00 := \1D00 [, _FIELD->\1E00 := \1F00]} )"}, - {"JOIN","[WITH \1A40] [TO \1B00] [FIELDS \1C10] [FOR \1D00]","__dbJoin( \1A30, \1B30, { \1C30 }, \1D40 )"}, - {"COUNT","[TO \1A00] [FOR \1B00] [WHILE \1C00] [NEXT \1D00] [RECORD \1E00] [\1F20REST>] [ALL]", + {0,"JOIN","[WITH \1A40] [TO \1B00] [FIELDS \1C10] [FOR \1D00]","__dbJoin( \1A30, \1B30, { \1C30 }, \1D40 )"}, + {0,"COUNT","[TO \1A00] [FOR \1B00] [WHILE \1C00] [NEXT \1D00] [RECORD \1E00] [\1F20REST>] [ALL]", "\1A00 := 0 ; DBEval( {|| \1A00 := \1A00 + 1}, \1B40, \1C40, \1D00, \1E00, \1F50 )"}, - {"SUM","[ \1A00 [, \1B00] TO \1C00 [, \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", + {0,"SUM","[ \1A00 [, \1B00] TO \1C00 [, \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", "\1C00 := [ \1D00 := ] 0 ; DBEval( {|| \1C00 := \1C00 + \1A00 [, \1D00 := \1D00 + \1B00 ]}, \1E40, \1F40, \1G00, \1H00, \1I50 )"}, - {"AVERAGE","[ \1A00 [, \1B00] TO \1C00 [, \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", + {0,"AVERAGE","[ \1A00 [, \1B00] TO \1C00 [, \1D00] ] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", "M->__Avg := \1C00 := [ \1D00 := ] 0 ; DBEval( {|| M->__Avg := M->__Avg + 1, \1C00 := \1C00 + \1A00 [, \1D00 := \1D00 + \1B00] }, \1E40, \1F40, \1G00, \1H00, \1I50 ) ; \1C00 := \1C00 / M->__Avg [; \1D00 := \1D00 / M->__Avg ]"}, - {"LIST","[\1A10] [\1B20OFF>] [\1C20 TO PRINTER>] [TO FILE \1D40] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", + {0,"LIST","[\1A10] [\1B20OFF>] [\1C20 TO PRINTER>] [TO FILE \1D40] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [ALL]", "__dbList( \1B50, { \1A40 }, .t., \1E40, \1F40, \1G00, \1H00, \1I50, \1C50, \1D30 )"}, - {"DISPLAY","[\1A10] [\1B20OFF>] [\1C20 TO PRINTER>] [TO FILE \1D40] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [\1J20ALL>]", + {0,"DISPLAY","[\1A10] [\1B20OFF>] [\1C20 TO PRINTER>] [TO FILE \1D40] [FOR \1E00] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [\1J20ALL>]", "__DBList( \1B50, { \1A40 }, \1J50, \1E40, \1F40, \1G00, \1H00, \1I50, \1C50, \1D30 )"}, - {"REPORT","FORM \1A00 [HEADING \1B00] [\1C20 PLAIN>] [\1D20 NOEJECT>] [\1E20 SUMMARY>] [\1F20 NOCONSOLE>] [\1G20 TO PRINTER>] [TO FILE \1H40] [FOR \1I00] [WHILE \1J00] [NEXT \1K00] [RECORD \1L00] [\1M20REST>] [ALL]", + {0,"REPORT","FORM \1A00 [HEADING \1B00] [\1C20 PLAIN>] [\1D20 NOEJECT>] [\1E20 SUMMARY>] [\1F20 NOCONSOLE>] [\1G20 TO PRINTER>] [TO FILE \1H40] [FOR \1I00] [WHILE \1J00] [NEXT \1K00] [RECORD \1L00] [\1M20REST>] [ALL]", "__ReportForm( \1A30, \1G50, \1H30, \1F50, \1I40, \1J40, \1K00, \1L00, \1M50, \1C50, \1B00, \1D50, \1E50 )"}, - {"LABEL","FORM \1A00 [\1B20 SAMPLE>] [\1C20 NOCONSOLE>] [\1D20 TO PRINTER>] [TO FILE \1E40] [FOR \1F00] [WHILE \1G00] [NEXT \1H00] [RECORD \1I00] [\1J20REST>] [ALL]", + {0,"LABEL","FORM \1A00 [\1B20 SAMPLE>] [\1C20 NOCONSOLE>] [\1D20 TO PRINTER>] [TO FILE \1E40] [FOR \1F00] [WHILE \1G00] [NEXT \1H00] [RECORD \1I00] [\1J20REST>] [ALL]", "__LabelForm( \1A30, \1D50, \1E30, \1C50, \1F40, \1G40, \1H00, \1I00, \1J50, \1B50 )"}, - {"CLOSE","\1A00","\1A00->( dbCloseArea() )"}, - {"CLOSE","","dbCloseArea()"}, - {"CLOSE","DATABASES","dbCloseAll()"}, - {"CLOSE","ALTERNATE","Set(_SET_ALTFILE, "")"}, - {"CLOSE","FORMAT","__SetFormat(NIL)"}, - {"CLOSE","INDEXES","dbClearIndex()"}, - {"CLOSE","PROCEDURE",NULL}, - {"CLOSE","ALL","CLOSE DATABASES ; SELECT 1 ; CLOSE FORMAT"}, - {"CLEAR","","CLEAR SCREEN ; CLEAR GETS"}, - {"CLEAR","ALL","CLOSE DATABASES ; CLOSE FORMAT ; CLEAR MEMORY ; CLEAR GETS ; SET ALTERNATE OFF ; SET ALTERNATE TO"}, - {"INDEX","ON \1A00 [TAG \1B40 ] TO \1C40 [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>]", + {0,"CLOSE","\1A00","\1A00->( dbCloseArea() )"}, + {0,"CLOSE","","dbCloseArea()"}, + {0,"CLOSE","DATABASES","dbCloseAll()"}, + {0,"CLOSE","ALTERNATE","Set(_SET_ALTFILE, "")"}, + {0,"CLOSE","FORMAT","__SetFormat(NIL)"}, + {0,"CLOSE","INDEXES","dbClearIndex()"}, + {0,"CLOSE","PROCEDURE",NULL}, + {0,"CLOSE","ALL","CLOSE DATABASES ; SELECT 1 ; CLOSE FORMAT"}, + {0,"CLEAR","","CLEAR SCREEN ; CLEAR GETS"}, + {0,"CLEAR","ALL","CLOSE DATABASES ; CLOSE FORMAT ; CLEAR MEMORY ; CLEAR GETS ; SET ALTERNATE OFF ; SET ALTERNATE TO"}, + {0,"INDEX","ON \1A00 [TAG \1B40 ] TO \1C40 [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>]", "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )"}, - {"INDEX","ON \1A00 TAG \1B40 [TO \1C40] [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>]", + {0,"INDEX","ON \1A00 TAG \1B40 [TO \1C40] [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>]", "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )"}, - {"INDEX","ON \1A00 TO \1B40 [\1C20 UNIQUE>]","dbCreateIndex( \1B30, \1A20, \1A40, if( \1C50, .t., NIL ) )"}, - {"DELETE","TAG \1A40 [ IN \1B40 ] [, \1C40 [ IN \1D40 ] ]","ordDestroy( \1A30, \1B30 ) [; ordDestroy( \1C30, \1D30 ) ]"}, - {"REINDEX","[EVAL \1A00] [EVERY \1B00]","ordCondSet(,,,, \1A40, \1B00,,,,,,,) ; ordListRebuild()"}, - {"REINDEX","","ordListRebuild()"}, - {"SET","INDEX TO [ \1A40 [, \1B40]] [\1C20 ADDITIVE>]", + {0,"INDEX","ON \1A00 TO \1B40 [\1C20 UNIQUE>]","dbCreateIndex( \1B30, \1A20, \1A40, if( \1C50, .t., NIL ) )"}, + {0,"DELETE","TAG \1A40 [ IN \1B40 ] [, \1C40 [ IN \1D40 ] ]","ordDestroy( \1A30, \1B30 ) [; ordDestroy( \1C30, \1D30 ) ]"}, + {0,"REINDEX","[EVAL \1A00] [EVERY \1B00]","ordCondSet(,,,, \1A40, \1B00,,,,,,,) ; ordListRebuild()"}, + {0,"REINDEX","","ordListRebuild()"}, + {0,"SET","INDEX TO [ \1A40 [, \1B40]] [\1C20 ADDITIVE>]", "if !\1C50 ; ordListClear() ; end [; ordListAdd( \1A30 )] [; ordListAdd( \1B30 )]"}, - {"SET","ORDER TO \1A00 [IN \1B40]","ordSetFocus( \1A00 [, \1B30] )"}, - {"SET","ORDER TO TAG \1A40 [IN \1B40]","ordSetFocus( \1A30 [, \1B30] )"}, - {"SET","ORDER TO","ordSetFocus(0)"} + {0,"SET","ORDER TO \1A00 [IN \1B40]","ordSetFocus( \1A00 [, \1B30] )"}, + {0,"SET","ORDER TO TAG \1A40 [IN \1B40]","ordSetFocus( \1A30 [, \1B30] )"}, + {0,"SET","ORDER TO","ordSetFocus(0)"} };