summaryrefslogtreecommitdiff
path: root/support/w2latex/rtf.lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/w2latex/rtf.lex.c')
-rw-r--r--support/w2latex/rtf.lex.c744
1 files changed, 744 insertions, 0 deletions
diff --git a/support/w2latex/rtf.lex.c b/support/w2latex/rtf.lex.c
new file mode 100644
index 0000000000..89949770b9
--- /dev/null
+++ b/support/w2latex/rtf.lex.c
@@ -0,0 +1,744 @@
+#define MAX(a,b) ( a>b ? a : b )
+char *tampon;
+int length=512;
+char * nomsort;
+int motfini=0;
+#include <stdio.h>
+#include <stdlib.h>
+/* Declarations*/
+int yyerror(char * );
+
+#include "rtf.formule.c"
+#include "rtf.fields.c"
+#include "rtf.motcom.h"
+/**************************************************************************************************
+** Function name : valdefFD
+** --------
+** Description : Attribue les valeurs par defaut aux differents champs de formatage du document
+** Input : void
+** Output : void
+**************************************************************************************************/
+void valdefFD(void)
+{
+ PZ_FD.FDDEFTAB=(720/20);
+ PZ_FD.FDPAPERW=(12240/20);
+ PZ_FD.FDPAPERH=(15840/20);
+ PZ_FD.FDPSZ=0;
+ PZ_FD.FDMARGL=(1800/20);
+ PZ_FD.FDMARGR=(1800/20);
+ PZ_FD.FDMARGT=(1440/20);
+ PZ_FD.FDMARGB=(1440/20);
+ PZ_FD.FDFACINGP=0;
+ PZ_FD.FDGUTTER=0;
+ PZ_FD.FDMARGMIRROR=0;
+ PZ_FD.FDLANDSCAPE=0;
+ PZ_FD.FDPGNSTART=1;
+ PZ_FD.FDWIDOWCTRL=0;
+}
+
+
+
+/**************************************************************************************************
+** Function name : puretext
+** --------
+** Description : Lorsque l'on trouve une chaine de caracteres pure, il faut enlever les
+ retours a la ligne. En effet WORD coupe les lignes trop longues en plein milieu des mots !!
+ De meme, il y a des caracteres ASCII 7 bits que TeX considere des mots de commande. Il faut les
+ transformer dans son propre format. Ceci ne peut etre fait a l'interieur de la grammaire, car
+ le texte 7 bits est un token a part entiere.
+** Input : char * impuretamp: tampon avant d'avoir ete TeXifie.
+** Output : char * impuretamp: le meme.
+***************************************************************************************************/
+char* puretext(char * impuretamp)
+{
+ int i,j,k;
+ int longtemp=2*length;
+ char * tamptemp;
+ tamptemp=(char * ) malloc (longtemp +15);
+ i=0;
+ while(i<strlen(impuretamp))
+ {
+ if (i==longtemp)
+ {
+ longtemp*=2;
+ tamptemp=(char * ) realloc (longtemp +15);
+ }
+ if (impuretamp[i]=='\n')
+ {
+ strcpy(&impuretamp[i],&impuretamp[i+1]);
+ }
+ else
+ {
+ if (impuretamp[i]=='$' || impuretamp[i]=='#' ||
+ impuretamp[i]=='%' || impuretamp[i]=='&' ||
+ impuretamp[i]=='_' )
+ {
+ if ((strlen(impuretamp)+5)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=5;
+ }
+ strcpy(&tamptemp[i+1],&impuretamp[i]);
+ tamptemp[i]='\\';
+ strcpy(&impuretamp[i],&tamptemp[i]);
+ i++;
+ }
+
+ else
+ {
+ if ((impuretamp[i]=='\\' && impuretamp[i+1]=='{') || (impuretamp[i]=='\\' && impuretamp[i+1]=='}'))
+ {
+ /* C'est parfait, on ne fait rien */
+ }
+ else
+ {
+ if (impuretamp[i]=='\\' && impuretamp[i+1]=='\\')
+ {
+ if ((strlen(impuretamp)+15)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=15;
+ }
+ strcpy(&tamptemp[i],"$\\backslash$");
+ strcpy(&tamptemp[i+strlen("$\\backslash$")],&impuretamp[i+2]);
+ strcpy(&impuretamp[i],&tamptemp[i]);
+ i+=strlen("$\\backslash$");
+ }
+
+ else
+ {
+ if (impuretamp[i]=='~')
+ {
+ if ((strlen(impuretamp)+5)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=5;
+ }
+ strcpy(&tamptemp[i],"\\~{}");
+ strcpy(&tamptemp[i+strlen("\\~{}")],&impuretamp[i+1]);
+ strcpy(&impuretamp[i],&tamptemp[i]);
+ i+=strlen("\\~{}");
+ }
+ if (impuretamp[i]=='^')
+ {
+ if ((strlen(impuretamp)+5)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=5;
+ }
+ strcpy(&tamptemp[i],"\\^{}");
+ strcpy(&tamptemp[i+strlen("\\^{}")],&impuretamp[i+1]);
+ strcpy(&impuretamp[i],&tamptemp[i]);
+ i+=strlen("\\^{}");
+ }
+ if (impuretamp[i]==' ' && FLAG_Equation)
+ {
+ if ((strlen(impuretamp)+5)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=5;
+ }
+ strcpy(&tamptemp[i],"\\, ");
+ strcpy(&tamptemp[i+strlen("\\, ")],&impuretamp[i+1]);
+ strcpy(&impuretamp[i],&tamptemp[i]);
+ i+=strlen("\\, ");
+ }
+ if (strlen(impuretamp)>=i+5 && !strncmp(&impuretamp[i],"LaTeX",5))
+ {
+ if ((strlen(impuretamp)+5)>=length)
+ {
+ impuretamp=(char * ) realloc (impuretamp, length + 5);
+ length+=5;
+ }
+ if(impuretamp[i+5]=='.' || impuretamp[i+5]==',' || impuretamp[i+5]==';'
+ || impuretamp[i+5]==':' || impuretamp[i+5]=='!' || impuretamp[i+5]=='?'
+ || impuretamp[i+5]==')' || impuretamp[i+5]==']')
+ strcpy(tamptemp,"\\LaTeX ");
+ else
+ strcpy(tamptemp,"\\LaTeX\\ ");
+ strcat(tamptemp,&impuretamp[i+5]);
+ strcpy(&impuretamp[i],tamptemp);
+ i++;
+ }
+ }
+ }
+ }
+ };
+ i++;
+ }
+
+ return impuretamp;
+}
+
+
+/**************************************************************************************************
+** Function name : getcode
+** -------
+** Description : A partir de la chaine de caracteres d'un mot de commande renvoie son type et
+ leve un flag en cas de non reconnaissance.
+** Input : char *Mot_Comm, int * flag
+** Output : int: le type de token terminal correspondant.
+***************************************************************************************************/
+int getcode(char *Mot_Comm, int * flag)
+{
+ int i;
+ for (i=0;i<NB_Mots_Comm;i++)
+ if (strncmp(Mot_Comm,TaB_Mot_Comm[i].MC,MAX(strlen(Mot_Comm),strlen(TaB_Mot_Comm[i].MC)))==0)
+ {
+ /* ON A TROUVE UN MOT DE COMMANDE */
+ yylval.motcomm=TaB_Mot_Comm[i].MC;
+ (*flag)=1;
+ return TaB_Mot_Comm[i].TK;
+ };
+ /* Aucun mot de commande n'a pu etre trouve. */
+ /*fprintf(stderr,"Unknown Command Word: \t%s\n",Mot_Comm);*/
+ (*flag)=-1;
+ return -1;
+}
+
+/**************************************************************************************************
+** Function name : Avance_Champ
+** ------------
+** Description : Avance tant que le champ a ignorer n'est pas termine
+** Input : void
+** Output : void
+***************************************************************************************************/
+void Avance_Champ(void)
+{
+ char c;
+ int compteur=1;
+ do
+ {
+ c=fgetc(entree);
+ if (c=='{') compteur++;
+ if (c=='}') compteur--;
+ } while (compteur!=0);
+ ungetc(c,entree);
+}
+
+/**************************************************************************************************
+** Function name : Avance_Sauve_Champ
+** ------------
+** Description : Avance tant que le champ a ignorer n'est pas termine
+** Input : void
+** Output : void
+***************************************************************************************************/
+void Avance_Sauve_Champ(void)
+{
+ char c;
+ int compteur=1;
+ fclose(auxiliaire);
+ /* ATTENTION, A partir d'ici, les informations contenues dans le fichier
+ auxiliaire seront perdues !!!! ( A consommer avec moderation) */
+ if ((auxiliaire=fopen(nomsort,"w"))==NULL)
+ {
+ fprintf(stderr,"FATAL ERROR: Could not open Auxiliary File:%s\n",nomsort);
+ fclose(entree);
+ fclose(sortie);
+ exit(0);
+ }
+ do
+ {
+ c=fgetc(entree);
+ if (c=='{') compteur++;
+ if (c=='}') compteur--;
+ fprintf(auxiliaire,"%c",c);
+ } while (compteur!=0);
+ ungetc(c,entree);
+}
+/**************************************************************************************************
+** Function name : Avance_Sauve_ChampMAC
+** ------------
+** Description : Avance tant que le champ a ignorer n'est pas termine
+** Input : void
+** Output : void
+***************************************************************************************************/
+void Avance_Sauve_ChampMAC(void)
+{
+ char c,c2;
+ int compteur=0;
+ int djl=0;
+ int motEq=0;
+ fclose(auxiliaire);
+ /* ATTENTION, A partir d'ici, les informations contenues dans le fichier
+ auxiliaire seront perdues !!!! ( A consommer avec moderation) */
+ if ((auxiliaire=fopen(nomsort,"w"))==NULL)
+ {
+ fprintf(stderr,"FATAL ERROR: Could not open Auxiliary File:%s\n",nomsort);
+ fclose(entree);
+ fclose(sortie);
+ exit(0);
+ }
+ /* On teste le premier (que ce ne soit pas une accolade }) */
+ c=fgetc(entree);
+ fprintf(auxiliaire,"\\pzpeq \\\\");
+ if (c=='}' && (c2=fgetc(entree))=='{')
+ {
+ /* On est dans la situation suivante: \|}{\i\f20 o(.... */
+ /* L'ideal serait de garder les mdc \i et \f20. Mais pour
+ l'instant on les ignore... */
+ do
+ {
+ c=fgetc(entree);
+ if (c=='\\')
+ {
+ c=fgetc(entree);
+ if (c=='|')
+ {
+ motEq=1;
+ ungetc('\\',entree);
+ ungetc(c,entree);
+ }
+ }
+ }
+ while (c!=' ' && c!='(' && c!=')' && c!=',' && c!=';' && !motEq);
+ }
+ else
+ {
+
+ fprintf(auxiliaire,"%c",c);
+ if (c!='{') c2=fgetc(entree);
+ fprintf(auxiliaire,"%c",c2);
+ if (c=='(') { compteur++; djl=1; }
+ if (c==')') compteur--;
+ if (c2=='(') { compteur++; djl=1; }
+ if (c2==')') compteur--;
+ };
+ do
+ {
+ c=fgetc(entree);
+ if (c=='(') { compteur++; djl=1; }
+ if (c==')') compteur--;
+ fprintf(auxiliaire,"%c",c);
+ } while (compteur!=0 || !djl);
+ fflush(auxiliaire);
+}
+
+
+
+/**************************************************************************************************
+** Function name : yylex
+** -----
+** Description : Analyseur Lexical d'un fichier RTF. Fournit les Tokens a yyparse.
+** Input : void
+** Output : Token (non specifie: YACC ou BISON le castent)
+***************************************************************************************************/
+yylex()
+{
+ int i,j,k;
+ int c;
+ int flag=0;
+ int temp;
+ char cont_inue;
+ char ctemp;
+ tampon[0]='\0';
+ c=fgetc(entree);
+ if (FLAG_ERROR)
+ {
+ if (FLAG_ERROR==1)
+ {
+ do
+ {
+ i=0;
+ while (c!='\\' && c!=EOF)
+ c=fgetc(entree);
+ if (c==EOF)
+ return 0;
+ c=fgetc(entree);
+ while (c!=' ' && (c>='a' && c<='z'))
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ }
+ } while (getcode(tampon,&flag)!=PAR);
+ FLAG_ERROR++;
+ fprintf(sortie,"\n\n{\\bf W2\\LaTeX : ERROR}\n\n");
+ return PZERROR;
+
+ }
+ if (FLAG_ERROR==2)
+ {
+ FLAG_ERROR=0;
+ return PAR;
+ }
+
+ }
+ if (FLAG_Equation!=0 && FLAG_Equation!=-1 &&
+ (c==' ' || c==0x09 || c=='(' || c==')' || c==','))
+ {
+ /* Traitement du texte de l'equation */
+ yylval.calu=c;
+ motfini=1;
+ return c;
+ }
+ /* On traite les caracteres de controle. */
+ if (c == EOF)
+ {
+ if (entree==auxiliaire)
+ {
+ entree=filetemp;
+ return yylex();
+ }
+ else return 0;
+ }
+ if (c == '\n') return (yylex()); /* POUR L'INSTANT ON IGNORERA LES RETOURS A LA LIGNE */
+ if (c=='{' || c=='}' || c==';')
+ {
+ /* yylval.calu=c; */
+ motfini=1;
+ return c;
+ }
+ /* Traitement des mots de commande */
+ /* Il faudra verifier la syntaxe pour les caracteres de commande
+ On supposera que les mots de commande n'excedent pas 128 octets, ce qui est le cas. */
+ if ( c==0x5c /* Caractere '\' */ )
+ {
+ i=0;
+ c=fgetc(entree);
+ if (c==0x27) /* Ascii : ' ; Caractere special On ne passe que la valeur hexa. */
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ temp=getcode(tampon,&flag);
+ if (flag!=-1) /* Une ceinture et des bretelles ... */
+ { tampon[0]=fgetc(entree);
+ tampon[1]=fgetc(entree);
+ tampon[2]='\0';
+ yylval.motcomm=tampon;
+ return (temp);
+ }
+ return(yyerror("Unknown Special Char\n"));
+ }
+ if ((FLAG_Equation==0 && (c=='\\')) || (c=='{' || c=='}'))
+ {
+ /* Il s'agit d'un caractere reserve et on le traitera comme tel. */
+ tampon[i++]='\\';
+ tampon[i++]=c;
+ tampon[i]='\0';
+ strcpy(tampon,puretext(tampon));
+ yylval.pcdata=tampon;
+ motfini=1;
+ return PCDATA;
+ }
+ if (FLAG_Equation!=0 && c==0x5c)
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ }
+ if (FLAG_Equation==0)
+ {
+ while (c!=' ' && (c>='a' && c<='z'))
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ }
+ }
+ else
+ {
+ cpt2=0;
+ while (c!=' ' && ( (c>='a' && c<='z')||(c>='A' && c<='Z') ) )
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ cpt2++;
+ c=fgetc(entree);
+ }
+ if (cpt2==0) /* On n'a pas identifie le mot de commande correctement */
+ {
+ if(c=='|' || c=='{' || c=='}' || c=='(' || c==')' || c=='[' || c==']' )
+ {
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ }
+ }
+ };
+ if (c != EOF && c!=' ' && c!='\n') /* On supprime les espaces utilises comme delimiteurs. */
+ {
+ motfini=0;
+ ungetc (c,entree);
+ }
+ else
+ {
+ motfini=1;
+ }
+ tampon[i]='\0';
+ temp=getcode(tampon,&flag);
+ if (temp == INFO || temp == OBJECT || temp == DO || temp == XE || temp == TC ) /* ON IGNORE CERTAINS CHAMPS */
+ {
+ Avance_Champ();
+ return temp; /* ON RETOURNE QUAND MEME LE CHAMP CLE POUR LE CONFORT DE LA GRAMMAIRE */
+ }
+ if (temp == PIPE )
+ {
+ Avance_Sauve_ChampMAC();
+ moulineFormuleMAC();
+ entree==auxiliaire; /* LE reste sera lu dans le fichier auxiliaire */
+ entree=auxiliaire; /* LE reste sera lu dans le fichier auxiliaire */
+ return temp; /* ON RETOURNE QUAND MEME LE CHAMP CLE POUR LE CONFORT DE LA GRAMMAIRE */
+ }
+ if (temp == FLDINST)
+ {
+ Avance_Sauve_Champ();
+ filtrefields();
+ entree=auxiliaire; /* LE reste sera lu dans le fichier auxiliaire */
+ return temp; /* ON RETOURNE QUAND MEME LE CHAMP CLE POUR LE CONFORT DE LA GRAMMAIRE */
+ }
+ if (flag!=-1)
+ return (temp);
+ else
+ {
+ if ((strlen(tampon))==0)
+ {
+ /* Si ca se toruve c'est un caractere de commande... */
+ tampon[0]=fgetc(entree);
+ tampon[1]='\0';
+ temp=getcode(tampon,&flag);
+ if (temp == PIPE )
+ {
+ Avance_Sauve_ChampMAC();
+ moulineFormuleMAC();
+ entree==auxiliaire; /* LE reste sera lu dans le fichier auxiliaire */
+ entree=auxiliaire; /* LE reste sera lu dans le fichier auxiliaire */
+ return temp; /* ON RETOURNE QUAND MEME LE CHAMP CLE POUR LE CONFORT DE LA GRAMMAIRE */
+ }
+ if (flag!=-1)
+ return (temp);
+ /* Non... Il s'agit definitivement d'un code inconnu... */
+ ungetc(tampon[0],entree);
+ }
+ /* Le mot de commande est inconnu */
+ fprintf(stderr,"\t\t Unknown Command Word: *** %s *** (Skipping)\n",tampon);
+ c=fgetc(entree); /* On lis le caractere suivant */
+ if (c==' ')
+ {
+ motfini=1;
+ return (yylex());
+ }
+ if (c>='0' && c<='9')
+ {
+ ungetc(c,entree);
+ fscanf(entree,"%d",&yylval.numo);
+ fprintf(stderr,"\t\tParameter is being Ignored: %d\n",yylval.numo);
+ c=fgetc(entree);
+ if (c != ' ') ungetc(c,entree);
+ motfini=1;
+ return (yylex());
+ }
+ ungetc(c,entree);
+ return (yylex());
+ }
+ }
+ /* Traitement des valeurs numeriques associees aux mots de commande */
+ if ( ( (c>='0' && c<='9') || (c=='-') ) && motfini==0 )
+ {
+ ungetc (c,entree);
+ fscanf(entree,"%d",&yylval.numo);
+ c=fgetc(entree);
+ if (c != ' ') ungetc(c,entree);
+ motfini=1;
+ return NUM;
+ }
+ /* Si ce n'est ni un mot de commande, ni un entier, ni un caractere de controle simple, c'est du
+ texte. */
+ {
+ i=0;
+ cont_inue=1;
+ while (cont_inue)
+ {
+ if (FLAG_Equation==0 && !FLAG_InPict)
+ {
+ do
+ {
+ /* Si le tampon est plein, il faut l'agrandir */
+ if (i==length)
+ {
+ length*=2;
+ tampon=(char * ) realloc (tampon, length + 1);
+ }
+ if(c==' ' && i==0)
+ tampon[i++]='\\';
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ } while (c != EOF && c!='}' && c!='{' && c!=0x5c && c!=';'); /* ATTENTION: IL FAUDRA TRAITER LE ;
+ DE FACON IDEPENDANTE !!!!!!!!!!!! */
+ cont_inue=0;
+ if (c==0x5c) ctemp=fgetc(entree);
+ if (c==0x5c && (ctemp==0x5c || ctemp=='{' || ctemp=='}') )
+ {
+ cont_inue=1;
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=ctemp;
+ }
+ }
+ else
+ if (!FLAG_InPict)
+ do
+ {
+ cont_inue=0;
+ /* Si le tampon est plein, il faut l'agrandir */
+ if (i==length)
+ {
+ length*=2;
+ tampon=(char * ) realloc (tampon, length + 1);
+ }
+ if(c==' ' && i==0)
+ tampon[i++]='\\';
+ tampon[i++]=c;
+ tampon[i]='\0';
+ c=fgetc(entree);
+ } while (c != EOF && c!='}' && c!='{' && c!='\\' && c!=',' && c!='('
+ && c!=')'); /* ATTENTION: IL FAUDRA TRAITER LE ;
+ DE FACON IDEPENDANTE !!!!*/
+ if (FLAG_InPict)
+ {
+ while (c != EOF && c!='}' && c!='{' && c!=0x5c && c!=';')
+ c=fgetc(entree);
+ if (c!=EOF)
+ ungetc(c,entree);
+ cont_inue=0;
+ }
+
+ }
+ if (FLAG_InPict) { yylval.pcdata="IMAGE"; return PCDATA; }
+ if (FLAG_Equation==0 && c==0x5c) ungetc(ctemp,entree);
+ if (c!=EOF)
+ ungetc(c,entree);
+ tampon[i]='\0';
+ if (FLAG_Symbol==0) strcpy(tampon,puretext(tampon));
+ /*else
+ {
+ strcpy(tampon,Rec_Formule(tampon));
+ }*/
+ yylval.pcdata=tampon;
+ motfini=1;
+ return PCDATA;
+ }
+}
+
+
+/**************************************************************************************************
+** Function name : yyerror
+**
+** Description :
+** Input : char * syyerr
+** Output : rapelle yyparse en levant les flags d'Erreur.
+**************************************************************************************************/
+int yyerror(char * syyerr)
+{
+ if (!FLAG_DebutTeX)
+ {
+ fprintf(SORT,"%%\n%% This document was generated using\n%% ");
+ fprintf(SORT,"w2LaTeX\n%% Bug Reports: jgarmend@cyberspace.org\n%%\n\n");
+ fprintf(SORT,"\\documentstyle[a4]{article}\n");
+ fprintf(SORT,"%% THIS FILE CONTAINS ERRORS! THE ORIGINAL RTF FILE\n");
+ fprintf(SORT,"%% HAD A CORRUPTED HEADER\n");
+ fprintf(SORT,"\n\\parindent = %d pt \n",0/*(PZ_FD.FDDEFTAB)*/);
+ fprintf(SORT,"\n\\oddsidemargin0cm\n");
+ fprintf(SORT,"\n\\evensidemargin0cm\n");
+ fprintf(SORT,"\n\\hoffset%dpt \n",(int)(-72+(PZ_FD.FDMARGL)));
+ fprintf(SORT,"\n\\textwidth%dpt \n",(int)(614-(PZ_FD.FDMARGL)-(PZ_FD.FDMARGR)));
+ fprintf(SORT,"\n\\vsize=%dpt\n",(int)(644-(PZ_FD.FDMARGT)));
+ fprintf(SORT,"\n\\font\\mathex=cmex10\n");
+ fprintf(SORT,"\n\\font\\pzrm=cmr10\n");
+ fprintf(SORT,"\n\\pagestyle{myheadings}\n");
+ fprintf(SORT,"\n\\begin{document}\n");
+ }
+ FLAG_DebutTeX=1;
+ fprintf(stderr, "w2LaTeX: %s: trying to recover....\n",syyerr);
+ if (FLAG_FIRST_ERROR)
+ fprintf(stderr, "w2LaTeX: OUTPUT FILE WILL NOT BE CLEAN !\n");
+ FLAG_ERROR=1;
+ FLAG_FIRST_ERROR=0;
+ yyparse();
+}
+
+
+
+
+/**************************************************************************************************
+** Function name : main
+** ----
+** Description : Fonction Principale
+** Input : void
+** Output : void
+***************************************************************************************************/
+void main(int argc, char * argv[])
+{
+ char pzexit[1024];
+ char keepnomsort[512];
+ int pzi=0;
+ fprintf(stderr,"This is w2LaTeX version 0.1 (Fri Jul 22 1994) by Javier Garmendia,\n");
+ fprintf(stderr,"Centre International de Rencontres Mathematiques. Luminy. Marseille,\n");
+
+ FLAG_DebutTeX=1;
+ tampon=(char * ) malloc(length+1);
+ Ligne_Courante_Tabular=(char *) malloc(lengthLCT+1);
+ valdefFD();
+ if (argc<=1)
+ {
+ fprintf(stderr,"Usage: w2LaTeX filename.rtf\n");
+ exit(0);
+ }
+ if (argc>2)
+ {
+ for(pzi=2;pzi<argc;pzi++)
+ {
+ if (!strcmp(argv[pzi],"-uglyframes"))
+ {
+ pzIntermDef=pzIntermFrame;
+ pzEndDef=pzEndFrame;
+ pzStartDef=pzStartFrame;
+ }
+ if (!strcmp(argv[pzi],"-debug"))
+ {
+ yydebug=1;
+ }
+ }
+ }
+ if ((entree=fopen(argv[1],"r"))==NULL)
+ {
+ fprintf(stderr,"FATAL ERROR: Could not open Specified File::%s\n",argv[1]);
+ exit(0);
+ }
+ nomsort=(char *)malloc(strlen(argv[1])+15);
+ strcpy(nomsort,argv[1]);
+ if (!strcmp(&nomsort[strlen(nomsort)-4],".rtf"))
+ nomsort[strlen(nomsort)-4]='\0';
+ strcat(nomsort,".tex");
+ strcpy(keepnomsort,nomsort);
+ if ((sortie=fopen(nomsort,"w"))==NULL)
+ {
+ fprintf(stderr,"FATAL ERROR: Could not open Output File::%s\n",nomsort);
+ fclose(entree);
+ exit(0);
+ }
+ strcpy(nomsort,argv[1]);
+ strcat(nomsort,".auxtex");
+ if ((auxiliaire=fopen(nomsort,"w+"))==NULL)
+ {
+ fprintf(stderr,"FATAL ERROR: Could not open Auxiliary File::%s\n",nomsort);
+ fclose(entree);
+ fclose(sortie);
+ exit(0);
+ }
+ SORT=sortie;
+ filetemp=entree;
+ FLAG_DebutTeX=0;
+ yyparse();
+ if (!FLAG_EndTeX)
+ fprintf(SORT,"\n\\end{document}\n");
+ fclose(entree);
+ fclose(sortie);
+ fclose(auxiliaire);
+ strcpy(pzexit,"rm -f ");
+ strcat(pzexit,nomsort);
+ system(pzexit);
+ fprintf(stderr,"Output written on %s\nThanks for using w2LaTeX\n",keepnomsort);
+}
+