🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11898

Re: Codigo en C para dividir palabras en silabas

#11898
From: Antonio
Date: Mon, 24 Sep 2001 20:42
1276 lines
23067 bytes
Se llama algoritmo de  hipenaci�n y se usa en los processadores de texto
para la partici�n con guiones de los textos.

puedes provar este codigo, est� adaptado al idioma catal�n pero es valido
para el castellano.

////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////
/***************************************************************************
/

/* Agost'90 */

/*    hypen.cpp*/

/* Funcions de hypenaci� */

/* */

/***************************************************************************
/



#include <string.h>

#define LF 0x0A

#define SPACE 0x20

#define RET 0x0D

#define min(a, b) (((a) < (b)) ? (a) : (b))

#define max(a, b) (((a) > (b)) ? (a) : (b))

#define DSP 0 /* espai */

#define DNU 1 /* numero */

#define DLE 2 /* lletra */

#define DPU 3 /* punt decimal */

#define DPO 4 /* parentesi ( */

#define DPT 5 /* parentesi ) */

#define DIG 6 /* igual */

#define DMA 7 /* mayor */

#define DME 8 /* menor */

#define DDF 9 /* diferent */

#define DMI 10 /* mayor o igual */

#define DEI 11 /* menor o igual */

#define DOR 12 /* or | */

#define DAN 13 /* and & */

#define DEX 14 /* potencia */

#define DDI 15 /* divisio */

#define DMU 16 /* multiplicacio */

#define DRE 17 /* resta */

#define DSU 18 /* suma */

#define DCO 19 /* coma */

#define DCM 20 /* cometes */

#define DM1 21 /* multiplicacio if(0)... = 1 */

/* MACROS : Calculs i funcions matematiques */

#define PI ( 3.14159810 )

/* MACROS : retornen 1 si es compleix. 0 si no es compleix */

/* ( control del caracter. utilitzat per QUE_ES i SIGNE ) */

#define SP(x) ( x == 32 ) /* espai */

#define NU(x) ( (x>47) && (x<58) ) /* numero */

#define LE(x) (((x>64)&&(x<91))||((x>96)&&(x<123))) /* lletra */

#define PU(x) ( x == 46 ) /* punt decimal */

#define PO(x) ( x == 40 ) /* parentesi ( */

#define PT(x) ( x == 41 ) /* parentesi ) */

#define IG(x) ( x == 61 ) /* igual */

#define MA(x) ( x == 62 ) /* mayor */

#define ME(x) ( x == 60 ) /* menor */

#define OR(x) ( x == 124 ) /* or | */

#define AN(x) ( x == 38 ) /* and & */

#define EX(x) ( x == 94 ) /* potencia */

#define DI(x) ( x == 47 ) /* divisio */

#define MU(x) ( x == 42 ) /* multiplicacio */

#define RE(x) ( x == 45 ) /* resta */

#define SU(x) ( x == 43 ) /* suma */

#define CO(x) ( x == 44 ) /* coma.separador*/

#define CM(x) ( x == 34 ) /* cometes */

#define M1(x) ( x == 35 ) /* # multipl. */



/**************************************************************************/

/* Prototipos locales *******************************************/

/***************************************************************************
/

extern int ajusta_marges_buffer( char *buffer , int lon_max , int ample);

extern int ample_lin_buffer( char *ini_linea , int reste_lon_max , int
*no_blancs , int *lon_lin );

extern int ins_blancs_buffer( char *ini_linea , int reste_lon_max , int
no_blancs , int no_blancs_ins );

extern int neteja_hypen_ant(char *buffer,int lon_max);

extern int hypen_buffer(char *buffer,int lon_max,int ample,int sw_hypen);

extern int busca_hypen(char *buffer,int pos_paraula,int pos_tall);

extern int seg_hypen(char *paraula,int pos);

extern int norma_hyp(char *paraula_test,char *norma);

extern int id_norma_hyp(char *norma);

/*e

extern int ajusta_marges_buffer();

extern int ample_lin_buffer();

extern int ins_blancs_buffer();

extern int neteja_hypen_ant();

extern int hypen_buffer();

extern int busca_hypen();

extern int seg_hypen();

extern int norma_hyp();

extern int id_norma_hyp();

#endif

*/

/**************************************************************************/

/* Macros per detectar el fi de linea i de texte */

/**************************************************************************/

#define BUF_FI_TEXTE( buf , pos_act , lon_max ) \

( buf[ pos_act ] == 0 || \

pos_act >= lon_max )

#define BUF_FI_LINEA( buf , pos_act , lon_max ) \

( BUF_FI_TEXTE( buf , pos_act , lon_max ) || \

buf[ pos_act ] == LF)

/**************************************************************************/

/* Actualitza hypenaci� y ajustar marges a un buffer de un camp tipus TXT */

/* Retorna el numero de linees que ocupa */

/**************************************************************************/

int actu_txt(char *buffer,int lon_max,int ample,int sw_hypen,int sw_ajusta)

{

int no_linees;

/* Treu tots els guions de hypenaci� anteriors */

/* (Els que estan just abans de un salt de linia tou. */

/* Treu tamb, els salts de linia tous (Linefeed) */

/* Respecta els finals de linea durs (Ret+Linefeed) */

neteja_hypen_ant(buffer,lon_max);

/* Efect�a Hypenaci�, (Parteix paraules) */

no_linees = hypen_buffer(buffer,lon_max,ample,sw_hypen);

if(sw_ajusta)

{

/* Ajusta Marges (Inserta espais) */

ajusta_marges_buffer(buffer,lon_max,ample);

}

return(no_linees);

}

/**************************************************************************/

/* Treu tots els guions de hypenaci� anteriors */

/* (Els que estan just abans de un salt de linia tou. */

/* Treu tamb, els salts de linia tous (Linefeed) */

/* Respecta els finals de linea durs (Ret+Linefeed) */

/* */

/* Si es volen eliminar tamb, els guions */

/* seguits de un fi de linia 'dur', el RET no ha d'afectar */

/* al estat */

/* */

/* Estat : 0 ==> Normal */

/* Estat : 1 ==> Gui� llegit */

/* Estat : 2 ==> Return Llegit */

/**************************************************************************/

int neteja_hypen_ant(char *buffer,int lon_max)

{

int i,car_act;

int estat,pos_1,pos_2,ample;

estat = 0;

i=0;

car_act=buffer[i];

while(i<lon_max && car_act!=0)

{

switch(car_act)

{

case '-':

pos_1 = i;

estat = 1;

break;

case LF :

switch(estat)

{

case 2: /* Si abans a llegit un RET, segueix normal */

break;

case 0: /* Si abans a llegit un altre caracter */

/* Elimina el LF */

pos_1 = i;

case 1: /* Si abans a llegit un gui� */

/* Elimina el guio i el LF */

pos_2 = i+1; /* Posicio que s'ha de desplassar */

ample = pos_2 - pos_1; /* valor del desplassament */

memmove(buffer+pos_1,buffer+pos_2,lon_max-pos_2);

memset(buffer+lon_max-ample,0,ample); /* Neteija reste buffer */

i-=ample; /* Recupera la posici� */

break;

}

estat = 0;

break;

case SPACE: /* No afecta al estat */

break; /* (Per si el gui� esta separat amb espais del LF) */

case RET:

estat = 2; /* Si es volen eliminar tamb, els guions */

/* seguits de un fi de linia 'dur', el RET no ha d'afectar */

/* al estat */

break;

default :

estat = 0;

break;

}

i++;

car_act=buffer[i];

}

}

/**************************************************************************/

/* Efect�a Hypenaci�, (Parteix paraules) en un buffer tipus TXT */

/* Estat : 0 ==> Normal */

/* Estat : 1 ==> Espai Llegit */

/* Retorna el numero de linees que ocupa */

/**************************************************************************/

int hypen_buffer(char *buffer,int lon_max,int ample,int sw_hypen)

{

int pos_paraula,i,car_act,estat,ample_lin,pos_tall;

int pos_1,pos_2;

int no_linees=1; /* Numero de linees en que queda convertit */

i=0;

ample_lin = 0;

pos_paraula = i; /* Possible posici� de la primera paraula */

car_act = buffer[i];

while(i<lon_max && car_act!=0)

{

switch(car_act)

{

case SPACE:

pos_paraula = i + 1; /* Possible posici� de una seg�ent paraula */

ample_lin++;

break;

case LF :

case RET:

ample_lin = 0; /* Torna a comenn?ar la linia */

pos_paraula = i + 1; /* Possible posici� de la primera paraula */

estat = 0;

no_linees++; /* Incrementa el numero de linea */

break;

default :

ample_lin++;

estat = 0;

if(ample_lin>=ample) /* Si s'ha arribat al limit del ample */

{

/* comproba posici� de hypenaci� */

pos_tall = i;

if(sw_hypen) /* Si ha de fer hypenaci� */

pos_tall = busca_hypen(buffer,pos_paraula,pos_tall);

else

pos_tall = -1; /* For?a que talli per principi de la paraula */

if(pos_tall<0) /* Si la primera sil.laba no hi cap */

{

if(pos_paraula <= i-ample_lin) /* Si la paraula comen?a al principi de la
linia */

pos_tall = i; /* Es una paraula que no t, hypenaci� i es talla */

else

pos_tall = pos_paraula; /* S'ha de tallar per el principi de la paraula */

/* Inserta un LF a pos_tall */

pos_1 = pos_tall+1;

pos_2 = pos_tall;

memmove(buffer+pos_1,buffer+pos_2,lon_max-pos_1);

buffer[pos_2] = LF;

i = pos_tall-1; /* Actualitza posici� */

}

else

{

/* Inserta un gui� i un LF a pos_tall */

pos_1 = pos_tall+2;

pos_2 = pos_tall;

memmove(buffer+pos_1,buffer+pos_2,lon_max-pos_1);

buffer[pos_2] = '-';

buffer[pos_2+1] = LF;

i = pos_tall; /* Actualitza posici� */

}

}

break;

}

i++;

car_act = buffer[i];

}

return(no_linees);

}

/**************************************************************************/

/********** FUNCIONS DE HYPENACIO **********/

/**************************************************************************/

char *c_lex[]={

/* pars consonants legals */

"pp
([BbCcFfGgKkPpTt][Ll]|[BbCcDdFfGgKkPpTt][Rr]|[Cc][Hh]|[Ll][Ll]|[Rr][Rr])",

/* consonants */

"c ([BCDFGHJKLMN�PQRSTVWXYZ]|[bcdfghjklmn�pqrstvwxyz])",

/* vocals */

"a ([AaEeOo]|[ ,���.S.�])",

"i ([IiUu]|[s�])",

"v ([AaEeOo]|[ ,���.S.�]|[IiUu]|[s�])",

/* cualsevol lletra */

"l
[BCDFGHJKLMN�PQRSTVWXYZ]|[bcdfghjklmn�pqrstvwxyz]|[AaEeOo]|[ ,���.S.�]|[IiUu
]|[s�])",

/* normas de hypenaci�n */

"hp1 ({l}{i}[hH]{i})", /* no */

"hp2 ({l}{a}[hH]{i})", /* no */

"hp3 ({l}{i}[hH]{a})", /* no */

"hp4 ({l}{l}{pp}{v})", /* SI */

"hp5 ({l}{pp}{l})", /* no */

"hp6 ({l}{l}{c}{v})", /* SI */

"hp7 ({l}{a}{a}{l})", /* SI */

""};

char *c_lex_aut[]={

/* pars consonants legals */

"ppl [BbCcFfGgKkPpTt][Ll]",

"ppr [BbCcDdFfGgKkPpTt][Rr]",

"tcl ([Cc][Hh]|[Ll][Ll]|[Rr][Rr])",

"pp ({ppl}|{ppr}|{tcl})",

/* consonants */

"uc [BCDFGHJKLMN�PQRSTVWXYZ]",

"lc [bcdfghjklmn�pqrstvwxyz]",

"c ({uc}|{lc})",

/* vocals */

"open [AaEeOo]",

"closed [IiUu]",

"a ({open}|[ ,���.S.�])",

"i ({closed}|[s�])",

"v ({a}|{i})",

/* cualsevol lletra */

"l ({c}|{v})",

/* normas de hypenaci�n */

"hp1 ({l1}{i1}[hH]{i1})", /* no */

"hp2 ({l1}{a1}[hH]{i1})", /* no */

"hp3 ({l1}{i1}[hH]{a1})", /* no */

"hp4 ({l1}{l1}{pp1}{v1})", /* SI */

"hp5 ({l1}{pp1}{l1})", /* no */

"hp6 ({l1}{l1}{c1}{v1})", /* SI */

"hp7 ({l1}{a1}{a1}{l1})", /* SI */

""};

/**************************************************

july 1987 Volume 30 Number 7

Notaci� compacte :

a Vocals obertes o accetntuades (obertees i tancades).

i Vocals tancades.

v Vocal.

h Lletra h.

pp Par legal de consonantes.

c Cualquier consonante.

l Cualquier letra.

Normas de hypenaci�n :

mascara acci�

HP1 li-hi NO

HP2 la-hi NO

HP3 li-ha NO

HP4 ll-ppv SI

HP5 lp-pl NO

HP6 ll-cv SI

HP7 la-al SI

HP8 altres NO

Umbral (Threshold) :

Es la posici�, de la paraula, a partir de la que es comencen a

considerar les normes de hypenaci�. Normalment es 2, per� fins

al valor 4 es pot considerar acceptable.

**************************************************/

/**************************************************************************/

/* Busca la hypenaci� m,s propera al tall desitjat, en un buffer tipus TXT*/

/* Torna la posici� on s'ha de partir la paraula */

/* Si no hi cap ni la primera sil.laba torna -1 */

/**************************************************************************/

int busca_hypen(char *buffer,int pos_paraula,int pos_tall)

{

int pos_hyp,ant_pos_hyp;

ant_pos_hyp = pos_paraula;

pos_hyp = seg_hypen(buffer,ant_pos_hyp);

while(pos_hyp>ant_pos_hyp && pos_hyp<=pos_tall)

{

ant_pos_hyp = pos_hyp;

pos_hyp = seg_hypen(buffer,ant_pos_hyp);

}

if(ant_pos_hyp == pos_paraula)

return(-1);

return(ant_pos_hyp);

}

/**************************************************************************/

/* Calcula Hypenaci�, en un buffer tipus TXT a partir de pos */

/* Torna la posici� on s'ha de partir la paraula */

/**************************************************************************/

int seg_hypen(char *buffer,int pos)

{

int ret,sw_hypen,pos_hyp;

char *c;

c=buffer+pos;

pos_hyp = pos+2; /* Son els dos caracters de desplassament de la mascara */

/* Doncs quan s'investiga el caracter c a pos, el tall */

/* s'efect�a a la pos+2 */

while(norma_hyp(c,"l")) /* Mentres sigui una lletra */

{

sw_hypen = !(ret = norma_hyp(c,"hp1"));

if(!ret)

sw_hypen = !(ret = norma_hyp(c,"hp2"));

if(!ret)

sw_hypen = !(ret = norma_hyp(c,"hp3"));

if(!ret)

sw_hypen = ret = norma_hyp(c,"hp4");

if(!ret)

sw_hypen = !(ret = norma_hyp(c,"hp5"));

if(!ret)

sw_hypen = ret = norma_hyp(c,"hp6");

if(!ret)

sw_hypen = ret = norma_hyp(c,"hp7");

if(!ret)

sw_hypen = 0;

if(sw_hypen)

return(pos_hyp);

c++;

pos_hyp++;

}

return(pos);

}

/**************************************************/

/*** Separa paraula amb sil.labes ***/

/**************************************************/

int norma_hyp(char * paraula_test,char *norma)

{

int i,i_norma;

int test_norma,test_lletra=0;

int car_avant,car;

char *c;

char *p_test;

p_test = paraula_test;

test_norma=1;

car_avant=0;

i_norma = id_norma_hyp(norma);

c = c_lex[i_norma];

while(*c!=0)

{

switch(*c)

{

case '|':

if(test_norma)

return(car_avant*test_norma);

case '(':

p_test = paraula_test;

test_norma=1;

car_avant=0;

break;

case '{':

if(test_norma)

{

c++;

car = norma_hyp(p_test,c);

test_norma=(car && test_norma);

while(*c!=0 && *c!='}')

c++;

p_test+=car;

car_avant+=car;

}

break;

case '[':

if(test_norma)

{

c++;

test_lletra=0;

while(*c!=0 && *c!=']')

{

test_lletra=((*c==*p_test) || test_lletra);

c++;

}

test_norma=(test_lletra && test_norma);

p_test++;

car_avant++;

}

break;

}

if(*c!=0)

c++;

}

return(car_avant*test_norma);

}





int id_norma_hyp(char *norma)

{

int i,j;

int i_norma=0;

int sw_id;

int l1,l2;

char *c1,*c2;

i=0;

sw_id=0;

while(*c_lex[i]!=0 && !sw_id)

{

c1=c_lex[i];

c2=norma;

for(l1=0;(LE(*c1)) || (NU(*c1));l1++,c1++); /* longitud */

for(l2=0;(LE(*c2)) || (NU(*c2));l2++,c2++); /* longitud */

if(l1==l2)

sw_id=1;

c1=c_lex[i];

c2=norma;

for(j=0;sw_id && l1>0;j++,c1++,c2++,l1--) /* mentres sigui una lletra */

if(*c1!=*c2)

sw_id=0;

i++;

}

if(sw_id)

i_norma=i-1;

else

i_norma=0;

return(i_norma);

}

/**************************************************************************/

/* Ajusta linees a la mateixa longitud amb espais */

/**************************************************************************/

int ajusta_marges_buffer( char *buffer , int lon_max , int ample)

{

int i , ample_lin , no_blancs_ins , no_blancs , reste_lon_max , lon_lin ;

char *ini_linea;

ini_linea = buffer;

reste_lon_max = lon_max;

i = 0;

while( !BUF_FI_TEXTE( buffer , i , lon_max ) )

{

/* Calcula l'ample visualitzable actual de la linea, */

/* l'ample real, */

/* i el numero de blancs que hi han */

ample_lin = ample_lin_buffer( ini_linea , reste_lon_max , &no_blancs ,
&lon_lin );

/* Numero total de blancs a insertar per for?ar l'ample de la liniea a
'ample' */

no_blancs_ins = ample - ample_lin;

/* Si no es la ultima linea */

if( !BUF_FI_TEXTE( buffer , i + lon_lin , lon_max )&& buffer[i+lon_lin-2] !=
RET )

/* Inserta els blancs corresponents */

lon_lin += ins_blancs_buffer( ini_linea , /* Inici de linea */

reste_lon_max , /* Reste de longitud disponoble del buffer */

no_blancs , /* Num de blancs que hi han a la linea */

no_blancs_ins + 1 ); /* Num de blancs que s'han d'insertar */

i += lon_lin;

ini_linea += lon_lin;

reste_lon_max -= lon_lin;

}

}

/**************************************************************************/

/* Calcula l'ample actual de la linea , */

/* l'ample real, */

/* i el numero de blancs que hi han */

/**************************************************************************/

int ample_lin_buffer( char *ini_linea , int reste_lon_max , int *no_blancs ,
int *lon_lin )

{

int ample_lin , nb , sw_ini_linea;

char *car_act;

nb = 0;

ample_lin = 0;

car_act = ini_linea;

sw_ini_linea = 1;

while( !BUF_FI_LINEA( ini_linea , ample_lin , reste_lon_max ) )

{

/* Incrementa no.blancs si no es l'ultim blanc de la linea */

/* ni es principi de la linea, */

/* Ja que no es conten com blancs els del principi de la linea. */

if( *car_act == SPACE &&

!BUF_FI_LINEA( ini_linea , ample_lin + 1 , reste_lon_max ) &&

!sw_ini_linea )

nb++;

if( *car_act != SPACE ) // Si el caracter no es un espai,

sw_ini_linea = 0; // Ja no es principi de la linea

ample_lin ++;

car_act ++;

}

/* Si no es fi de texte, incrementa una posici� (el LF) */

*lon_lin = ample_lin + !BUF_FI_TEXTE( ini_linea , ample_lin ,
reste_lon_max );

*no_blancs = nb;

return( ample_lin );

}

/**************************************************************************/

/* Inserta els blancs corresponents */

/**************************************************************************/

int ins_blancs_buffer( char *ini_linea , int reste_lon_max , int no_blancs ,
int no_blancs_ins )

{

int pos_act , pos_1 , pos_2 , nb_ins , pos_blanc_plus , nb ;

int len_buffer , max_blanc_ins , nbins;

char *car_act;

/* Longitud del string que hi ha en el buffer */

len_buffer = min( strlen( ini_linea ) ,reste_lon_max );

/* Calcula el numero m xim de blancs a insertar */

max_blanc_ins = reste_lon_max - len_buffer;

/* ReCalcula el numero de blancs a insertar */

no_blancs_ins = min( no_blancs_ins , max_blanc_ins );

/* Calcula blancs a insertar per cada blanc que hi ha a la linea */

nb_ins = ( no_blancs == 0 )?( no_blancs_ins ):( no_blancs_ins / no_blancs );

/* Calcula posicions on se n'ha d'insertar un de mes */

pos_blanc_plus = ( no_blancs == 0 )?( 0 ):( no_blancs_ins % no_blancs );

pos_act = 0;

car_act = ini_linea;

nbins = 0;

/* No s'han d'insertar blancs al principi de la linea. */

while( *car_act == SPACE && /* Mentres siguin blancs del principi, */

!BUF_FI_LINEA( ini_linea , pos_act , reste_lon_max )) /* i no sigui fi de
linea */

{

pos_act ++;

car_act ++;

}

while( no_blancs_ins > 0 && /* Mentres hi hagin blancs a insertar */

!BUF_FI_LINEA( ini_linea , pos_act , reste_lon_max )) /* i no sigui fi de
linea */

{

if( *car_act == SPACE ||

*car_act == '"' ||

*car_act == '(' ||

*car_act == '[' ||

*car_act == '{' ||

*car_act == '' ||

*car_act == '�')

{

nb = nb_ins + ( pos_blanc_plus > 0 );/* Calcula blancs a insertar */

pos_blanc_plus--; /* Decrementa posicions de blancs suplementaris */

no_blancs_ins -= nb; /* Decrementa blancs pendents a insertar */

nbins += nb; /* Incrementa blancs insertats */

pos_1 = pos_act + nb;

pos_2 = pos_act;

memmove( ini_linea + pos_1 , ini_linea + pos_2 , reste_lon_max - pos_1 );

memset( ini_linea + pos_2 , SPACE, nb ); /* Neteja resta buffer */

pos_act += nb; /* Actualitza posici� */

car_act += nb; /* Actualitza posici� */

}

pos_act ++;

car_act ++;

}

return( nbins );

}

/*

main(int argc,char**argv)

{

int nl;

int i;

int ancho = 40; // numero de caracteres de la columna

int ajusta = 0; // si > 0 hace justificaci�n

int swhypena = 1; // si 1 partre por guiones



char buffer[800] = "Napster las puso nerviosas y la pirater�a les sigue
achicando el negocio, pero adem�s las grandes compa��as musicales se las
tienen que ver con sus artistas m�s concienciados, los que buscan una
cultura musical rica en colaboraciones y mestizajes, y no est�n por la labor
de encadenarse a sus contratos. Chico C�sar ha tocado este fin de semana en
Canarias, donde ha defendido la colaboraci�n con artistas africanos y de
otros continentes como una red "que trascienda el Show Business".\n";

if( argc > 1 )

ancho = atoi(argv[1]);

if( argc > 2 )

swhypena = atoi(argv[2]);

if( argc > 3 )

ajusta = atoi(argv[3]);



// funcion principal que devueve el numero de linias del texto

nl = actu_txt(buffer,799,ancho,swhypena,ajusta);

printf("\nNumero de lineas = %d\n\n%s",nl,buffer);

}

*/


////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////


"Santiago Romero" <sromero@servicom2000.com> escribi� en el mensaje
news:f1gno9.89k.ln@127.0.0.1...
>
>  �Alguien conoce o tiene por ahi alg�n c�digo GPL que dada
>  una palabra la divida en s�labas?
>
>  (Tampoco me vendr�a mal una lista en texto plano de todas
>  las s�labas diferentes que existen).
>
>  saludos!
>
> --
> Santiago Romero
> Departamento de Sistemas
> sromero@servicom2000.com
>
> Av. Primado Reig 189, entlo
> 46020 Valencia - Spain
> Telf. (+34) 96 332 12 00
> Fax. (+34) 96 332 12 01
> http://www.servicom2000.com
>
Technical Details
Message-ID: <bVMr7.27619$6f1.95524@telenews.teleline.es>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!4.1.16.34!cpk-news-hub1.bbnplanet.com!news.gtei.net!news.maxwell.syr.edu!feed1.uncensored-news.com!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!caladan.arrakis.es!telenews.teleline.es!not-for-mail
References: <f1gno9.89k.ln@127.0.0.1>

Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII
X-Google-Thread: f86c8,ecf05142b734b038
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-09-24 19:10:29 PST
From: "Antonio" <andreupau@terra.es>
Newsgroups: es.comp.os.linux.programacion
References: <f1gno9.89k.ln@127.0.0.1>
Subject: Re: Codigo en C para dividir palabras en silabas
Lines: 1278
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4522.1200
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200
Message-ID: <bVMr7.27619$6f1.95524@telenews.teleline.es>
Date: Mon, 24 Sep 2001 20:42:47 GMT
NNTP-Posting-Host: 195.235.97.105
X-Complaints-To: usenet@teleline.es
X-Trace: telenews.teleline.es 1001364167 195.235.97.105 (Mon, 24 Sep 2001 22:42:47 MET DST)
NNTP-Posting-Date: Mon, 24 Sep 2001 22:42:47 MET DST
Organization: Clientes_Teleline
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!4.1.16.34!cpk-news-hub1.bbnplanet.com!news.gtei.net!news.maxwell.syr.edu!feed1.uncensored-news.com!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!caladan.arrakis.es!telenews.teleline.es!not-for-mail