First commit 20/09/1997

This commit is contained in:
2021-09-08 21:23:56 +02:00
commit 985e2b64cc
8 changed files with 1319 additions and 0 deletions

243
BONITRON.CPP Normal file
View 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 );
}