int hb_pp_Internal( FILE * handl_o, char * sOut ) { PFILE pFile; char * ptr, * ptrOut, * tmpPtr; int lContinue; int lens, rdlen; int lLine = 0; int State = 0; HB_TRACE(HB_TR_DEBUG, ("hb_pp_Internal(%p, %s)", handl_o, sOut)); while( TRUE ) { pFile = hb_comp_files.pLast; lens = lContinue = 0; ptrOut = sOut; while( ( rdlen = hb_pp_RdStr( pFile->handle, s_szLine + lens, HB_PP_STR_SIZE - 1 - lens, lContinue, ( char * ) pFile->pBuffer, &( pFile->lenBuffer ), &( pFile->iBuffer ), State ) ) >= 0 ) { lens += rdlen; hb_comp_iLine ++; // printf( "Line: %i Len: %i <%s>\n", hb_comp_iLine, lens, s_szLine ); if( lens >= HB_PP_STR_SIZE ) { hb_compGenError( hb_pp_szErrors, 'F', HB_PP_ERR_BUFFER_OVERFLOW, NULL, NULL ); } if( hb_pp_bInline ) { break; } if( s_szLine[ lens - 1 ] == ';' ) { lContinue = 1; lens--; lens--; while( s_szLine[ lens ] == ' ' || s_szLine[ lens ] == '\t' ) { lens--; } s_szLine[ ++lens ] = ' '; s_szLine[ ++lens ] = '\0'; State = STATE_NORMAL; } else { lContinue = 0; lens = 0; State = 0; } if( ! lContinue ) { if( *s_szLine != '\0' ) { ptr = s_szLine; HB_SKIPTABSPACES( ptr ); if( *ptr == '#' ) { hb_pp_ParseDirective( ptr + 1 ); if( pFile != hb_comp_files.pLast ) { pFile = ( PFILE ) ( ( PFILE ) hb_comp_files.pLast )->pPrev; if( lLine ) { hb_snprintf( s_szLine, sizeof( s_szLine ), "#line %d \"%s\"\n", pFile->iLine, pFile->szFileName ); } else { *s_szLine = '\0'; } lLine = 0; hb_snprintf( s_szLine + strlen( s_szLine ), sizeof( s_szLine ) - strlen( s_szLine ), "#line 1 \"%s\"", hb_comp_files.pLast->szFileName ); } else { *s_szLine = '\0'; } } else { if( *ptr == '\0' ) { if( hb_comp_files.iFiles == 1 ) { *s_szLine = '\0'; } else { continue; } } else { if( hb_pp_nCondCompile == 0 || hb_pp_aCondCompile[ hb_pp_nCondCompile - 1 ] > 0 ) { //printf( "Parse: >%s<\n", ptr ); hb_pp_ParseExpression( ptr, s_szOutLine ); //printf( "1-Parsed: >%s<\n", s_szLine ); //printf( "2-Parsed: >%s<\n", s_szOutLine ); } else { *s_szLine = '\0'; } } } } break; } } if( hb_pp_bInComment ) { hb_compGenError( hb_pp_szErrors, 'F', HB_PP_ERR_UNTERMINATED_COMMENTS, NULL, NULL ); } if( rdlen < 0 ) { if( hb_comp_files.iFiles == 1 ) { return 0; /* we have reached the main EOF */ } else { CloseInclude(); lLine = 1; } /* Ron Pinkas added 2000-06-22 */ s_szLine[0] = '\0'; break; /* Ron Pinkas end 2000-06-22 */ } if( *s_szLine ) { break; } else { if( handl_o && s_szOutLine[0] == '#' ) { hb_pp_WrStr( handl_o, s_szOutLine ); s_szOutLine[0] = '\0'; } } } if( lLine ) { if( hb_comp_files.iFiles == 1 ) { hb_pp_LastOutLine = hb_comp_iLine; } sprintf( ptrOut, "#line %d \"%s\"", ( hb_comp_files.pLast->iLine ) , hb_comp_files.pLast->szFileName ); while( *ptrOut ) { ptrOut++; } /* Ron Pinkas added 2000-06-14 */ tmpPtr = s_szLine; HB_SKIPTABSPACES( tmpPtr ); /* Last Opened file ended without CR - adding CR to the #line directive. */ if( *tmpPtr != '\0' ) { *ptrOut++ = '\n'; *ptrOut = '\0'; } /* Ron Pinkas end 2000-06-14 */ } lens = hb_pp_strocpy( ptrOut, s_szLine ) + ( ptrOut - sOut ); if( hb_comp_iLineINLINE && hb_pp_bInline == 0 ) { hb_comp_iLine = hb_comp_iLinePRG + ( hb_comp_iLine - hb_comp_iLineINLINE ); hb_comp_iLineINLINE = 0; } if( handl_o ) { char *pTmp = sOut; HB_SKIPTABSPACES( pTmp ); //printf( "1>%s<\n", sOut ); //printf( "2>%s<\n", s_szOutLine ); if( s_szOutLine[0] && ( strstr( s_szOutLine, pTmp ) ) ) { if( pTmp > sOut ) { hb_pp_Stuff( sOut, s_szOutLine, pTmp - sOut, 0, strlen( s_szOutLine ) ); } hb_pp_WrStr( handl_o, s_szOutLine ); } else if( s_szOutLine[0] == '#' && strstr( pTmp, s_szOutLine ) == NULL ) { strcpy( sOut + lens, s_szOutLine ); hb_pp_WrStr( handl_o, sOut ); } else { hb_pp_WrStr( handl_o, sOut ); } s_szOutLine[0] = '\0'; } *( sOut + lens++ ) = '\n'; *( sOut + lens ) = '\0'; #if 0 printf( "%d : %s\n", hb_comp_iLine, sOut ); #endif return lens; }
static void OutTable( DEFINES * endDefine, COMMANDS * endCommand ) { FILE *handl_o; int ipos, len_mpatt = 0, len_value; int num; DEFINES * stdef1 = hb_pp_topDefine, * stdef2 = NULL, * stdef3; COMMANDS * stcmd1 = hb_pp_topCommand, * stcmd2 = NULL, * stcmd3; HB_TRACE(HB_TR_DEBUG, ("OutTable(%p, %p)", endDefine, endCommand)); while( stdef1 != endDefine ) { stdef3 = stdef1->last; stdef1->last = stdef2; stdef2 = stdef1; stdef1 = stdef3; } while( stcmd1 != endCommand ) { stcmd3 = stcmd1->last; stcmd1->last = stcmd2; stcmd2 = stcmd1; stcmd1 = stcmd3; } if( ( handl_o = fopen( "hbpp.out", "wt" ) ) == NULL ) { printf( "\nCan't open hbpp.out\n" ); return; } num = 1; while( stdef2 != NULL ) { fprintf( handl_o, "\n static DEFINES sD___%i = ", num ); fprintf( handl_o, "{\"%s\",", stdef2->name ); if( stdef2->pars ) fprintf( handl_o, "\"%s\",", stdef2->pars ); else fprintf( handl_o, "NULL," ); fprintf( handl_o, "%d,", stdef2->npars ); if( stdef2->value ) fprintf( handl_o, "\"%s\"", stdef2->value ); else fprintf( handl_o, "NULL" ); if( num == 1 ) fprintf( handl_o, ", NULL };" ); else fprintf( handl_o, ", &sD___%i };", num - 1 ); stdef2 = stdef2->last; num++; } fprintf( handl_o, "\n DEFINES * hb_pp_topDefine = " ); if( num == 1 ) fprintf( handl_o, "NULL;" ); else fprintf( handl_o, " = &sD___%i;\n", num - 1 ); num = 1; while( stcmd2 != NULL ) { fprintf( handl_o, "\n static COMMANDS sC___%i = ", num ); fprintf( handl_o, "{%d,\"%s\",", stcmd2->com_or_xcom, stcmd2->name ); if( stcmd2->mpatt != NULL ) { len_mpatt = hb_pp_strocpy( s_szLine, stcmd2->mpatt ); while( ( ipos = hb_strAt( "\1", 1, s_szLine, len_mpatt ) ) > 0 ) { hb_pp_Stuff( "\\1", s_szLine + ipos - 1, 2, 1, len_mpatt ); len_mpatt++; } fprintf( handl_o, "\"%s\",", s_szLine ); } else fprintf( handl_o, "NULL," ); if( stcmd2->value != NULL ) { len_value = hb_pp_strocpy( s_szLine, stcmd2->value ); while( ( ipos = hb_strAt( "\1", 1, s_szLine, len_value ) ) > 0 ) { hb_pp_Stuff( "\\1", s_szLine + ipos - 1, 2, 1, len_value ); len_value++; } if( len_mpatt + len_value > 80 ) fprintf( handl_o, "\n " ); fprintf( handl_o, "\"%s\"", s_szLine ); } else fprintf( handl_o, "NULL" ); if( num == 1 ) fprintf( handl_o, ",NULL };" ); else fprintf( handl_o, ",&sC___%i };", num - 1 ); stcmd2 = stcmd2->last; num++; } fprintf( handl_o, "\n COMMANDS * hb_pp_topCommand = " ); if( num == 1 ) fprintf( handl_o, "NULL;" ); else fprintf( handl_o, " = &sC___%i;\n", num - 1 ); stcmd1 = hb_pp_topTranslate; stcmd2 = NULL; while( stcmd1 != NULL ) { stcmd3 = stcmd1->last; stcmd1->last = stcmd2; stcmd2 = stcmd1; stcmd1 = stcmd3; } num = 1; while( stcmd2 != NULL ) { fprintf( handl_o, "\n static COMMANDS sC___%i = ", num ); fprintf( handl_o, "{%d,\"%s\",", stcmd2->com_or_xcom, stcmd2->name ); if( stcmd2->mpatt != NULL ) { len_mpatt = hb_pp_strocpy( s_szLine, stcmd2->mpatt ); while( ( ipos = hb_strAt( "\1", 1, s_szLine, len_mpatt ) ) > 0 ) { hb_pp_Stuff( "\\1", s_szLine + ipos - 1, 2, 1, len_mpatt ); len_mpatt++; } fprintf( handl_o, "\"%s\",", s_szLine ); } else fprintf( handl_o, "NULL," ); if( stcmd2->value != NULL ) { len_value = hb_pp_strocpy( s_szLine, stcmd2->value ); while( ( ipos = hb_strAt( "\1", 1, s_szLine, len_value ) ) > 0 ) { hb_pp_Stuff( "\\1", s_szLine + ipos - 1, 2, 1, len_value ); len_value++; } if( len_mpatt + len_value > 80 ) fprintf( handl_o, "\n " ); fprintf( handl_o, "\"%s\"", s_szLine ); } else fprintf( handl_o, "NULL" ); if( num == 1 ) fprintf( handl_o, ",NULL };" ); else fprintf( handl_o, ",&sC___%i };", num - 1 ); stcmd2 = stcmd2->last; num++; } fprintf( handl_o, "\n COMMANDS * hb_pp_topTranslate = " ); if( num == 1 ) fprintf( handl_o, "NULL;" ); else fprintf( handl_o, " = &sT___%i;", num ); fclose( handl_o ); }