Updating preprocessor files

This commit is contained in:
Alexander S.Kresin
1999-07-27 10:47:16 +00:00
parent 48f86fb637
commit 39a5835899
2 changed files with 142 additions and 105 deletions

View File

@@ -1,3 +1,7 @@
19990727-14:21 Alexander Kresin
* source\hbpp\hbpp.c
* ParseExpression() rewritten for supporting new classes functionality
19990727-02:22 EDT Paul Tucker <ptucker@sympatico.ca>
* include/gtapi.h
+ added definition of gtSetAttribute

View File

@@ -64,7 +64,7 @@ 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 WorkTranslate ( char*, char*, char*, int, int* );
int WorkMarkers( char**, char**, char*, int*, int );
int getExpReal ( char *, char **, int, int );
int isExpres ( char* );
@@ -385,7 +385,7 @@ int TraSearch(char *cmdname, int ncmd)
{
int i,j;
for ( i=(ncmd)? ncmd:koltranslates-1; i >= 0; i-- )
for ( i=(ncmd>=0)? ncmd:koltranslates-1; i >= 0; i-- )
{
for ( j=0; *(aTranslates[i].name+j)==toupper(*(cmdname+j)) &&
*(aTranslates[i].name+j)!='\0' &&
@@ -543,103 +543,141 @@ COMMANDS* getCommand ( int ndef )
int ParseExpression( char* sLine, char* sOutLine )
{
char sToken[MAX_NAME];
char *ptri, *ptro;
int lenToken, i, ndef, ipos, isdvig, lens;
int rezDef, rezCom, kolpass = 0;
int kolused = 0, lastused;
DEFINES *aUsed[100], *stdef;
char sToken[MAX_NAME];
char *ptri, *ptro;
int lenToken, i, ndef, ipos, isdvig, lens;
int rezDef, rezDefsub, rezCom, kolpass = 0;
int kolused = 0, lastused;
DEFINES *aUsed[100], *stdef;
do
{
strotrim ( sLine );
ptri = sLine; ptro = sOutLine;
rezDef = 0; rezCom = 0;
lastused = kolused;
/* Look for macros from #define */
while ( ( lenToken = NextName(&ptri, sToken, &ptro) ) > 0 )
if ( (stdef=DefSearch(sToken)) != NULL )
{
for(i=0;i<kolused;i++) if ( aUsed[i] == stdef ) break;
if ( i < kolused )
{
if ( i < lastused ) GenError( _szPErrors, 'P', ERR_RECURSE, NULL, NULL );
}
if ( WorkDefine ( &ptri, &ptro, stdef, lenToken ) )
{
aUsed[kolused++] = stdef;
rezDef++;
}
}
*ptro = '\0';
memcpy ( sLine, sOutLine, ptro - sOutLine + 1);
/* Look for definitions from #translate */
ptri = sLine;
while ( ( lenToken = NextName(&ptri, sToken, NULL) ) > 0 )
if ( (ndef=TraSearch(sToken,0)) >= 0 )
WorkTranslate( sToken, &ptri, ptro, ndef );
/* Look for definitions from #command */
if ( kolpass < 3 )
do
{
ptri = sLine; isdvig = 0;
do
{
ptri = sLine + isdvig;
ipos = md_strAt( ";", 1, ptri );
if ( ipos > 0 ) *(ptri+ipos-1) = '\0';
SKIPTABSPACES( ptri );
if ( *ptri == '#' )
{
ParseDirective( ptri+1 );
lens = strolen( sLine+isdvig );
pp_Stuff ( "", sLine+isdvig, 0, (ipos)? ipos-1:lens, lens );
}
else
{
if ( isname(*ptri) )
NextName( &ptri, sToken, NULL);
else
{
i = 0;
while ( *ptri != ' ' && *ptri != '\t' && *ptri != '\0' && !isname(*ptri) )
{
*(sToken+i) = *ptri++;
i++;
}
*(sToken+i) = '\0';
}
SKIPTABSPACES( ptri );
if ( *ptri != ':' && *ptri != '=' && (isname(*ptri) || *(ptri+1) != '=')
&& (ndef=ComSearch(sToken,0)) >= 0 )
{
ptro = sOutLine;
i = WorkCommand( sToken, ptri, ptro, ndef );
if ( ipos > 0 ) *(sLine+isdvig+ipos-1) = ';';
if ( i >= 0 )
{
strotrim ( sLine );
ptri = sLine; ptro = sOutLine;
rezDef = 0; rezCom = 0;
lastused = kolused;
isdvig = 0;
do
{
ptri = sLine + isdvig;
ipos = md_strAt( ";", 1, ptri );
if ( ipos > 0 ) *(ptri+ipos-1) = '\0';
SKIPTABSPACES( ptri );
if ( *ptri == '#' )
{
ParseDirective( ptri+1 );
lens = strolen( sLine+isdvig );
pp_Stuff ( "", sLine+isdvig, 0, (ipos)? ipos-1:lens, lens );
}
else
{
/* Look for macros from #define */
rezDefsub = 0;
while ( ( lenToken = NextName(&ptri, sToken, &ptro) ) > 0 )
if ( (stdef=DefSearch(sToken)) != NULL )
{
for(i=0;i<kolused;i++) if ( aUsed[i] == stdef ) break;
if ( i < kolused )
{
if ( i < lastused ) GenError( _szPErrors, 'P', ERR_RECURSE, NULL, NULL );
}
if ( WorkDefine ( &ptri, &ptro, stdef, lenToken ) )
{
aUsed[kolused++] = stdef;
rezDef++; rezDefsub++;
}
}
if ( rezDefsub ) /* if some defines was processed */
{
*ptro = '\0';
ptri = sLine + isdvig;
if ( isdvig + ipos > 0 )
{
lens = strolen( sLine+isdvig );
pp_Stuff ( ptro, sLine+isdvig, i, (ipos)? ipos-1:lens, lens );
ipos = i + 1;
lens = strolen( ptri );
if ( ipos > 0 )
{
*(ptri+lens) = ';';
lens += strolen( ptri+ipos );
}
pp_Stuff ( sOutLine, ptri, ptro - sOutLine + 1, (ipos)? ipos-1:lens, lens );
if ( ipos > 0 )
{
ipos = strolen( ptri );
*(ptri+ipos) = '\0';
}
}
else
memcpy ( sLine, sOutLine, i+1);
}
rezCom = 1;
}
else if ( ipos > 0 ) *(sLine+isdvig+ipos-1) = ';';
}
isdvig += ipos;
}
while ( ipos != 0 );
memcpy ( sLine, sOutLine, ptro - sOutLine + 1);
}
/* Look for definitions from #translate */
ptri = sLine + isdvig;
while ( ( lenToken = NextName(&ptri, sToken, NULL) ) > 0 )
if ( (ndef=TraSearch(sToken,-1)) >= 0 )
{
if( (i = WorkTranslate( sToken, ptri, ptro, ndef, &lens )) >= 0 )
{
while ( lens > 0 && (*(ptri+lens-1)==' ' || *(ptri+lens-1)=='\t') )
lens--;
ptri -= lenToken;
if ( ipos > 0 ) *(sLine+isdvig+ipos-1) = ';';
pp_Stuff( ptro, ptri, i, lens+lenToken, strolen(ptri) );
if ( ipos > 0 )
{
ipos += i - lens - lenToken;
*(sLine+isdvig+ipos-1) = '\0';
}
ptri += i;
}
}
/* Look for definitions from #command */
if ( kolpass < 3 )
{
ptri = sLine + isdvig;
if ( isname(*ptri) )
NextName( &ptri, sToken, NULL);
else
{
i = 0;
while ( *ptri != ' ' && *ptri != '\t' && *ptri != '\0' && !isname(*ptri) )
{
*(sToken+i) = *ptri++;
i++;
}
*(sToken+i) = '\0';
}
SKIPTABSPACES( ptri );
if ( *ptri != ':' && *ptri != '=' && (isname(*ptri) || *(ptri+1) != '=')
&& (ndef=ComSearch(sToken,0)) >= 0 )
{
ptro = sOutLine;
i = WorkCommand( sToken, ptri, ptro, ndef );
ptri = sLine + isdvig;
if ( ipos > 0 ) *(ptri+ipos-1) = ';';
if ( i >= 0 )
{
if ( isdvig + ipos > 0 )
{
lens = strolen( sLine+isdvig );
pp_Stuff ( ptro, sLine+isdvig, i, (ipos)? ipos-1:lens, lens );
if( ipos > 0 ) ipos = i + 1;
}
else
memcpy ( sLine, sOutLine, i+1);
}
rezCom = 1;
}
else if ( ipos > 0 ) *(sLine+isdvig+ipos-1) = ';';
}
}
isdvig += ipos;
}
while ( ipos != 0 );
kolpass++;
}
kolpass++;
}
while ( rezDef || rezCom );
while ( rezDef || rezCom );
return 0;
}
@@ -758,22 +796,19 @@ int WorkCommand ( char* sToken, char* ptri, char* ptro, int ndef )
return -1;
}
int WorkTranslate ( char* sToken, char** ptri, char* ptro, int ndef )
int WorkTranslate ( char* sToken, char* ptri, char* ptro, int ndef, int *lens )
{
int rez;
int lenres;
int lenToken;
char *ptrmp, *ptr;
char *ptrmp;
lenToken = strolen( sToken );
ptr = *ptri - lenToken;
do
{
lenres = strocpy ( ptro, aTranslates[ndef].value );
ptrmp = aTranslates[ndef].mpatt;
Repeate = 0;
groupchar = '@';
rez = CommandStuff ( ptrmp, *ptri, ptro, &lenres, FALSE );
rez = CommandStuff ( ptrmp, ptri, ptro, &lenres, FALSE );
if ( rez < 0 ) ndef = TraSearch(sToken,ndef-1);
}
@@ -782,12 +817,10 @@ int WorkTranslate ( char* sToken, char** ptri, char* ptro, int ndef )
*(ptro+lenres) = '\0';
if ( rez >= 0 )
{
while ( rez > 0 && (*(*ptri+rez-1)==' ' || *(*ptri+rez-1)=='\t') ) rez--;
pp_Stuff( ptro, ptr, lenres, rez + lenToken, strolen(ptr) );
*ptri = ptr + lenres;
return lenres;
*lens = rez;
return lenres;
}
return 0;
return -1;
}
int CommandStuff ( char *ptrmp, char *inputLine, char * ptro, int *lenres, int com_or_tra )
@@ -1318,7 +1351,7 @@ int ReplacePattern ( char patttype, char *expreal, int lenreal, char *ptro, int
void pp_rQuotes( char *expreal, char **sQuotes )
{
int lQuote1 = 0, lQuote2 = 0;
while( *expreal != '\0' )
{
if( *expreal == '\"' ) lQuote2 = 1;
@@ -1600,7 +1633,7 @@ int NextWord ( char** sSource, char* sDest, int lLower )
{
int i = 0;
SKIPTABSPACES( (*sSource) );
while ( **sSource != '\0' && **sSource != ' ' && **sSource != '(')
while ( **sSource != '\0' && **sSource != ' ' && **sSource != '\t' && **sSource != '(')
{
*sDest++ = (lLower)? tolower(**sSource):**sSource;
(*sSource)++;