First commit 20/09/1997
This commit is contained in:
243
BONITRON.CPP
Normal file
243
BONITRON.CPP
Normal file
@ -0,0 +1,243 @@
|
||||
/************************************************************************\
|
||||
|* *|
|
||||
|* Programa para poner bonito el c<>digo fuente de los otros programas... *|
|
||||
|* *|
|
||||
|* Jos<6F> David Guill<6C>n *|
|
||||
|* *|
|
||||
|* Historia *|
|
||||
|* Hay veces que empiezo a escribir un programa que creo que no *|
|
||||
|* me va a servir para nada y cuando me doy cuenta lo estoy re- *|
|
||||
|* escribiendo o adaptandolo, pero es un Spagetti-Code tan *|
|
||||
|* grande que pierdo un buen rato sangrandolo. Bien, pues se *|
|
||||
|* acabo el 'frotar' ya tengo 'bonitron'.... *|
|
||||
|* *|
|
||||
\************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
// los corchetes son '{' y '}'
|
||||
#define DESPLAZAMIENTO_CORCHETE 2
|
||||
// Considero etiquetas a los 'case' de switch();
|
||||
#define DESPLAZAMIENTO_ETIQUETA 12
|
||||
|
||||
// Mayor longitud de palabra compleja
|
||||
#define PALABRA_MAXIMA 14
|
||||
|
||||
void main( int argc, char *argv[] )
|
||||
{
|
||||
FILE *ORIGEN, *DESTINO;
|
||||
int i;
|
||||
int charR, OcharR;
|
||||
int NivelActual, NivelEtiqueta;
|
||||
char DetectadoEOL,
|
||||
DetectadoComm;
|
||||
char BufferPalabra[PALABRA_MAXIMA + 1];
|
||||
|
||||
|
||||
if ( argc != 3 )
|
||||
{
|
||||
printf( "\nError, n<> de parametros erroneo\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( ORIGEN = fopen( argv[1], "rt" ) ) == NULL ||
|
||||
( DESTINO = fopen( argv[2], "wt" ) ) == NULL )
|
||||
{
|
||||
printf( "\nError abriendo el origen o destino\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
NivelEtiqueta = 0;
|
||||
NivelActual = 0;
|
||||
DetectadoEOL = 0;
|
||||
DetectadoComm = 0;
|
||||
BufferPalabra[0] = '\0';
|
||||
|
||||
charR = 0;
|
||||
while ( !feof(ORIGEN) )
|
||||
{
|
||||
OcharR = charR;
|
||||
charR = fgetc(ORIGEN);
|
||||
|
||||
switch( charR )
|
||||
{
|
||||
// Cuidadin con esto
|
||||
case '\n':
|
||||
case '\r':
|
||||
BufferPalabra[0] = '\0';
|
||||
|
||||
DetectadoComm = 0;
|
||||
|
||||
DetectadoEOL = 1;
|
||||
|
||||
fputc( charR, DESTINO );
|
||||
break;
|
||||
case '=':
|
||||
case '<':
|
||||
case '>':
|
||||
case '!':
|
||||
case '+':
|
||||
case '-':
|
||||
case '/':
|
||||
case '*':
|
||||
case '^':
|
||||
case ']':
|
||||
case ')':
|
||||
case '[':
|
||||
case '(':
|
||||
case '"':
|
||||
// Si antes no hab<61>a un espacio, ni un caracter de los anteriores
|
||||
// me parece mas est<73>tico un espacio antes.
|
||||
if ( OcharR != ' ' &&
|
||||
OcharR != '=' && OcharR != '*' &&
|
||||
OcharR != '<' && OcharR != '^' &&
|
||||
OcharR != '>' && OcharR != '[' &&
|
||||
OcharR != ']' && OcharR != '(' &&
|
||||
OcharR != '!' && OcharR != ')' &&
|
||||
OcharR != '+' && OcharR != '-' &&
|
||||
OcharR != '/' )
|
||||
{
|
||||
fputc( ' ', DESTINO );
|
||||
}
|
||||
fputc( charR, DESTINO );
|
||||
DetectadoEOL = 0;
|
||||
break;
|
||||
// Veamos las etiquetas
|
||||
case ':':
|
||||
if ( !DetectadoComm )
|
||||
{
|
||||
if ( !DetectadoEOL )
|
||||
fputc( 13, DESTINO );
|
||||
NivelActual += DESPLAZAMIENTO_ETIQUETA;
|
||||
NivelEtiqueta += DESPLAZAMIENTO_ETIQUETA;
|
||||
fputc( ':', DESTINO );
|
||||
}
|
||||
DetectadoEOL = 0;
|
||||
break;
|
||||
// Corchetes de entrada
|
||||
case '{':
|
||||
if ( !DetectadoComm )
|
||||
{
|
||||
if ( !DetectadoEOL )
|
||||
fputc( 13, DESTINO );
|
||||
for ( i = 0; i < NivelActual; i++ )
|
||||
fputc( ' ', DESTINO );
|
||||
fputc( '{', DESTINO );
|
||||
NivelActual+=DESPLAZAMIENTO_CORCHETE;
|
||||
}
|
||||
DetectadoEOL = 0;
|
||||
break;
|
||||
// Corchetes de Salida
|
||||
case '}':
|
||||
if ( !DetectadoComm )
|
||||
{
|
||||
if ( !DetectadoEOL )
|
||||
fputc( 13, DESTINO );
|
||||
NivelActual-=DESPLAZAMIENTO_CORCHETE;
|
||||
for ( i = 0; i < NivelActual; i++ )
|
||||
fputc( ' ', DESTINO );
|
||||
fputc( '}', DESTINO );
|
||||
}
|
||||
DetectadoEOL = 0;
|
||||
break;
|
||||
case ';':
|
||||
if ( OcharR == '}' )
|
||||
fputc( ' ', DESTINO );
|
||||
fputc( ';', DESTINO );
|
||||
DetectadoEOL = 0;
|
||||
break;
|
||||
// Salvamos el EOL, para los corchetes
|
||||
case ' ':
|
||||
// Nos saltamos todos los espacios blancos
|
||||
if ( !DetectadoEOL )
|
||||
fputc( charR, DESTINO );
|
||||
BufferPalabra[0] = '\0';
|
||||
break;
|
||||
|
||||
// No sabemos procesar el simbolo
|
||||
default:
|
||||
if ( NivelActual < 0 )
|
||||
NivelActual = 0;
|
||||
PROCESA_CARACTER_POR_DEFECTO:
|
||||
if ( DetectadoEOL )
|
||||
for ( i = 0; i < NivelActual/*+DESPLAZAMIENTO_CORCHETE*/; i++ )
|
||||
fputc( ' ', DESTINO );
|
||||
DetectadoEOL = 0;
|
||||
|
||||
switch ( OcharR )
|
||||
{
|
||||
case '=':
|
||||
case '<':
|
||||
case '>':
|
||||
case '!':
|
||||
case '+':
|
||||
case '-':
|
||||
case '/':
|
||||
case '*':
|
||||
case '^':
|
||||
case ']':
|
||||
case '[':
|
||||
case '(':
|
||||
case ')':
|
||||
// Si el carater actual no es ninguno de estos, ni un espacio
|
||||
// quedaria muy bien un espacio detras de aqui...
|
||||
if ( charR != ' ' &&
|
||||
charR != '=' && charR != '*' &&
|
||||
charR != '<' && charR != '^' &&
|
||||
charR != '>' && charR != '[' &&
|
||||
charR != ']' && charR != '(' &&
|
||||
charR != '!' && charR != ')' &&
|
||||
charR != '+' && charR != '-' &&
|
||||
charR != '/' )
|
||||
{
|
||||
fputc( ' ', DESTINO );
|
||||
}
|
||||
fputc( charR, DESTINO );
|
||||
break;
|
||||
default:
|
||||
fputc( charR, DESTINO );
|
||||
}
|
||||
|
||||
// Procesado de palabras complejas
|
||||
i = strlen(BufferPalabra);
|
||||
BufferPalabra[ i ] = (char)charR;
|
||||
BufferPalabra[ i+1] = '\0';
|
||||
|
||||
// Detectado 'break'
|
||||
if ( strcmp( BufferPalabra, "break;" ) == 0 )
|
||||
{
|
||||
NivelEtiqueta -= DESPLAZAMIENTO_ETIQUETA;
|
||||
if ( NivelEtiqueta >= 0 )
|
||||
NivelActual -= DESPLAZAMIENTO_ETIQUETA;
|
||||
fputc( 13, DESTINO );
|
||||
|
||||
BufferPalabra[0] = '\0';
|
||||
}
|
||||
|
||||
if ( strcmp( BufferPalabra, "//" ) == 0 )
|
||||
{
|
||||
BufferPalabra[0] = '\0';
|
||||
DetectadoComm = 0;
|
||||
}
|
||||
|
||||
if ( strlen( BufferPalabra ) == PALABRA_MAXIMA )
|
||||
BufferPalabra[0] = '\0';
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
fclose( ORIGEN );
|
||||
fclose( DESTINO );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user