#define INVOICE 0
#define DELIVERY 1
#define ORDER 2
#define CONFIRMATION 3
#define OFFER 4 \

#define USENGLISH 0
#define GERMAN 1
#define FRENCH 3
#define ENGLISH 4 \

#define FIRSTPAGEPOSITIONS 10
#define FOLLOWPAGEPOSITIONS 22
#define LASTPAGEPOSITIONS 2 \

#define POSITION_READ_ERROR 2 \

#define UMLAUT_A 'ä'
#define UMLAUT_CA 'Ä'
#define UMLAUT_O 'ö'
#define UMLAUT_CO 'Ö'
#define UMLAUT_U 'ü'
#define UMLAUT_CU 'Ü'
#define ESZET 'ß' \

#define RETURN_OK 0
#define FILE_OPEN_ERROR 1 \

/*1:*/
#line 95 "Invoice.w"

/*40:*/
#line 768 "Invoice.w"

#include <stdio.h>
#include <string.h>

/*:40*/
#line 96 "Invoice.w"

/*3:*/
#line 148 "Invoice.w"

int invoiceTeXprintf(int,char*,int,int,int,double,double,int,char[],
char[],char[],int,int,char*,char*);

/*:3*//*20:*/
#line 453 "Invoice.w"

extern int invoiceinterface(int,char*,char*,double*,double*,int*,char*);

/*:20*/
#line 97 "Invoice.w"

/*2:*/
#line 123 "Invoice.w"

int invoiceTeXprintf(int Formularart,char*Dateiname,int Rechnungsjahr,int Rechnungsnummer,
int Anzahl_Positionen,double Mehrwertsteuersatz_I,double Mehrwertsteuersatz_II,
int Kundennummer,char Kundenanschrift[],char Kundenkennzeichen[],
char Bestelldatum[],int Adressaufkleber,int Spracheinstellung,
char*InsertString,char Rechnungsdatum[])
{
/*37:*/
#line 712 "Invoice.w"

FILE*Rechnungsdatei;
int Bestelltag,Bestellmonat,Bestelljahr,Seitenzahl= 1,i,j;
int Rechnungstag,Rechnungsmonat,Rechjahr;
int Positionen_erste_Seite,Positionen_Folgeseiten,Aktuelle_Position;
double Gesamtpreis_I,Gesamtpreis_II;
double Zwischensumme_I= 0.,Zwischensumme_II= 0.;
double Mehrwertsteuer_I= 0.,Mehrwertsteuer_II= 0.;
char*Zeichenzeiger;
int Preistabelle;
double Menge;
char Artikelnummer[51];
char Artikelbezeichnung[199];
double Einzelpreis;
char AppendString[151];

/*:37*/
#line 130 "Invoice.w"


/*38:*/
#line 746 "Invoice.w"

{
char buffer[60];
sprintf(buffer,"%s.tex",Dateiname);

if(!(Rechnungsdatei= fopen(buffer,"w")))
return(FILE_OPEN_ERROR);
}

/*:38*/
#line 132 "Invoice.w"

/*27:*/
#line 567 "Invoice.w"

fputs("\\input invoice\n\n",Rechnungsdatei);

/*:27*/
#line 133 "Invoice.w"

/*4:*/
#line 164 "Invoice.w"

/*5:*/
#line 187 "Invoice.w"

fputs("\\invoiceswitch=",Rechnungsdatei);
switch(Formularart){
case DELIVERY:fputc('1',Rechnungsdatei);break;
case ORDER:fputc('2',Rechnungsdatei);break;
case CONFIRMATION:fputc('3',Rechnungsdatei);break;
case OFFER:fputc('4',Rechnungsdatei);break;
case INVOICE:
default:fputc('0',Rechnungsdatei);
}
fputs("\n\n",Rechnungsdatei);

/*:5*/
#line 165 "Invoice.w"

/*6:*/
#line 218 "Invoice.w"

fputs("\\selectlanguage{",Rechnungsdatei);
switch(Spracheinstellung){
case FRENCH:fputs("french",Rechnungsdatei);break;
case ENGLISH:fputs("english",Rechnungsdatei);break;
case USENGLISH:fputs("USenglish",Rechnungsdatei);break;
case GERMAN:
default:fputs("german",Rechnungsdatei);
}
fputs("}\n\n",Rechnungsdatei);

/*:6*/
#line 166 "Invoice.w"

/*7:*/
#line 237 "Invoice.w"

fprintf(Rechnungsdatei,"\\vatrateI{%.0f}\n\\vatrateII{%.0f}\n\n",
100.*Mehrwertsteuersatz_I,100.*Mehrwertsteuersatz_II);

/*:7*/
#line 167 "Invoice.w"

/*11:*/
#line 286 "Invoice.w"

if(Rechnungsdatum)
{
if(sscanf(Rechnungsdatum,"%d.%d.%d",
&Rechnungstag,&Rechnungsmonat,&Rechjahr)==3)
{
fprintf(Rechnungsdatei,
"\\date{\\printformatteddate{%02d%02d%04d}}\n\n",
Rechnungstag,Rechnungsmonat,Rechjahr);
}
}

/*:11*/
#line 168 "Invoice.w"

/*8:*/
#line 246 "Invoice.w"

fprintf(Rechnungsdatei,"%s",InsertString);

/*:8*/
#line 169 "Invoice.w"

/*9:*/
#line 256 "Invoice.w"

fprintf(Rechnungsdatei,
"\\invoiceyear=%d\n"
"\\invoicenumber=%d\n\n"
"\\customernumber=%d\n\n",
Rechnungsjahr,Rechnungsnummer,Kundennummer);

/*:9*/
#line 170 "Invoice.w"

/*10:*/
#line 274 "Invoice.w"

if(Bestelldatum){
if(sscanf(Bestelldatum,"%d.%d.%d",
&Bestelltag,&Bestellmonat,&Bestelljahr)==3){
fprintf(Rechnungsdatei,"\\orderdate{%02d%02d%04d}\n\n",
Bestelltag,Bestellmonat,Bestelljahr);
}
}

/*:10*/
#line 171 "Invoice.w"

/*12:*/
#line 303 "Invoice.w"

if(Kundenkennzeichen)
fprintf(Rechnungsdatei,"\\yourref{%s}\n\n",Kundenkennzeichen);

/*:12*/
#line 172 "Invoice.w"


/*:4*/
#line 134 "Invoice.w"

/*28:*/
#line 575 "Invoice.w"

fputs("\\invoice\n\n",Rechnungsdatei);

/*:28*/
#line 135 "Invoice.w"

/*29:*/
#line 597 "Invoice.w"

fputs("\\address\n",Rechnungsdatei);
Zeichenzeiger= Kundenanschrift;if(*Zeichenzeiger=='\n')Zeichenzeiger++;
for(;*Zeichenzeiger!='\0';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 601 "Invoice.w"

fputs("\n\n",Rechnungsdatei);

/*:29*/
#line 136 "Invoice.w"

/*30:*/
#line 604 "Invoice.w"

fputs("\\toname{",Rechnungsdatei);
for(Zeichenzeiger= Kundenanschrift;*Zeichenzeiger!='\0'&&
*Zeichenzeiger!='\n';Zeichenzeiger++);
for(Zeichenzeiger++;*Zeichenzeiger!='\0'&&
*Zeichenzeiger!='\n';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 610 "Invoice.w"

fputs("}\n\n",Rechnungsdatei);

/*:30*/
#line 137 "Invoice.w"

/*13:*/
#line 340 "Invoice.w"

/*14:*/
#line 351 "Invoice.w"

if(Anzahl_Positionen>FIRSTPAGEPOSITIONS)
/*15:*/
#line 363 "Invoice.w"

{
Aktuelle_Position= Anzahl_Positionen-FIRSTPAGEPOSITIONS;
Positionen_erste_Seite= FIRSTPAGEPOSITIONS;
Seitenzahl++;

/*16:*/
#line 376 "Invoice.w"

Positionen_Folgeseiten= FOLLOWPAGEPOSITIONS;
while(Aktuelle_Position>FOLLOWPAGEPOSITIONS){
Aktuelle_Position-= FOLLOWPAGEPOSITIONS;
Positionen_Folgeseiten= FOLLOWPAGEPOSITIONS;
Seitenzahl++;
}

/*:16*/
#line 369 "Invoice.w"

/*17:*/
#line 394 "Invoice.w"

while((Aktuelle_Position<LASTPAGEPOSITIONS)&&
(Aktuelle_Position+Seitenzahl-1)<=FOLLOWPAGEPOSITIONS){
Positionen_erste_Seite--;
Positionen_Folgeseiten--;
Aktuelle_Position+= Seitenzahl-1;
}

/*:17*/
#line 370 "Invoice.w"

}

/*:15*/
#line 353 "Invoice.w"

else{
Positionen_erste_Seite= Anzahl_Positionen;
Positionen_Folgeseiten= 0;
}

/*:14*/
#line 341 "Invoice.w"

/*18:*/
#line 417 "Invoice.w"

{
/*19:*/
#line 431 "Invoice.w"

fputs("\\body{{%\n",Rechnungsdatei);
for(j= 1,Aktuelle_Position= 1;
(j<=Positionen_erste_Seite)&&
(Aktuelle_Position<=Anzahl_Positionen);
j++,Aktuelle_Position++){

/*21:*/
#line 463 "Invoice.w"

if(invoiceinterface(Aktuelle_Position,Artikelnummer,Artikelbezeichnung,
&Einzelpreis,&Menge,&Preistabelle,AppendString))
return(POSITION_READ_ERROR);

/*:21*/
#line 438 "Invoice.w"

/*22:*/
#line 480 "Invoice.w"

if(Preistabelle==1){
Gesamtpreis_I= Menge*Einzelpreis*100.;
Gesamtpreis_II= 0.;
Zwischensumme_I+= Gesamtpreis_I;

Mehrwertsteuer_I= (double)((long)(Zwischensumme_I/100*Mehrwertsteuersatz_I+0.5));
}
else{
Gesamtpreis_I= 0.;
Gesamtpreis_II= Menge*Einzelpreis*100.;
Zwischensumme_II+= Gesamtpreis_II;

Mehrwertsteuer_II= (double)((long)(Zwischensumme_II/100*Mehrwertsteuersatz_II+0.5));
}

/*:22*/
#line 439 "Invoice.w"

/*23:*/
#line 500 "Invoice.w"

fputs("\t\\singleposition|",Rechnungsdatei);
/*32:*/
#line 637 "Invoice.w"

for(Zeichenzeiger= Artikelbezeichnung;*Zeichenzeiger!='\0';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 639 "Invoice.w"


/*:32*/
#line 502 "Invoice.w"

fprintf(Rechnungsdatei,"|%.0f|%.0f|%.0f|%.0f|",
100.*Menge,100.*Einzelpreis,Gesamtpreis_I,Gesamtpreis_II);
/*33:*/
#line 646 "Invoice.w"

for(Zeichenzeiger= Artikelnummer;*Zeichenzeiger!='\0';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 648 "Invoice.w"


/*:33*/
#line 505 "Invoice.w"

fprintf(Rechnungsdatei,"|%s|%%\n",AppendString);

/*:23*/
#line 440 "Invoice.w"

}
fputs("}}\n\n",Rechnungsdatei);

/*:19*/
#line 419 "Invoice.w"

if(Seitenzahl>1)
/*25:*/
#line 535 "Invoice.w"

fprintf(Rechnungsdatei,"\\subtotals|%.0f|%.0f|%.0f|%.0f|%.0f|%%\n\n",
Zwischensumme_I,Zwischensumme_II,
Mehrwertsteuer_I,Mehrwertsteuer_II,
Zwischensumme_I+Mehrwertsteuer_I+
Zwischensumme_II+Mehrwertsteuer_II);

/*:25*/
#line 421 "Invoice.w"

else
/*26:*/
#line 546 "Invoice.w"

fprintf(Rechnungsdatei,"\\totals|%.0f|%.0f|%.0f|%.0f|%.0f|%%\n\n",
Zwischensumme_I,Zwischensumme_II,
Mehrwertsteuer_I,Mehrwertsteuer_II,
Zwischensumme_I+Mehrwertsteuer_I+
Zwischensumme_II+Mehrwertsteuer_II);

/*:26*/
#line 423 "Invoice.w"

}

/*:18*/
#line 342 "Invoice.w"

for(i= 2;i<=Seitenzahl;i++)
/*24:*/
#line 512 "Invoice.w"

{
fputs("\\body{{%\n",Rechnungsdatei);
for(j= 1;(j<=Positionen_Folgeseiten)&&
(Aktuelle_Position<=Anzahl_Positionen);
j++,Aktuelle_Position++){

/*21:*/
#line 463 "Invoice.w"

if(invoiceinterface(Aktuelle_Position,Artikelnummer,Artikelbezeichnung,
&Einzelpreis,&Menge,&Preistabelle,AppendString))
return(POSITION_READ_ERROR);

/*:21*/
#line 519 "Invoice.w"

/*22:*/
#line 480 "Invoice.w"

if(Preistabelle==1){
Gesamtpreis_I= Menge*Einzelpreis*100.;
Gesamtpreis_II= 0.;
Zwischensumme_I+= Gesamtpreis_I;

Mehrwertsteuer_I= (double)((long)(Zwischensumme_I/100*Mehrwertsteuersatz_I+0.5));
}
else{
Gesamtpreis_I= 0.;
Gesamtpreis_II= Menge*Einzelpreis*100.;
Zwischensumme_II+= Gesamtpreis_II;

Mehrwertsteuer_II= (double)((long)(Zwischensumme_II/100*Mehrwertsteuersatz_II+0.5));
}

/*:22*/
#line 520 "Invoice.w"

/*23:*/
#line 500 "Invoice.w"

fputs("\t\\singleposition|",Rechnungsdatei);
/*32:*/
#line 637 "Invoice.w"

for(Zeichenzeiger= Artikelbezeichnung;*Zeichenzeiger!='\0';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 639 "Invoice.w"


/*:32*/
#line 502 "Invoice.w"

fprintf(Rechnungsdatei,"|%.0f|%.0f|%.0f|%.0f|",
100.*Menge,100.*Einzelpreis,Gesamtpreis_I,Gesamtpreis_II);
/*33:*/
#line 646 "Invoice.w"

for(Zeichenzeiger= Artikelnummer;*Zeichenzeiger!='\0';Zeichenzeiger++)
/*31:*/
#line 618 "Invoice.w"

{
switch(*Zeichenzeiger){
case UMLAUT_A:fputs("\\\"a",Rechnungsdatei);break;
case UMLAUT_CA:fputs("\\\"A",Rechnungsdatei);break;
case UMLAUT_O:fputs("\\\"o",Rechnungsdatei);break;
case UMLAUT_CO:fputs("\\\"O",Rechnungsdatei);break;
case UMLAUT_U:fputs("\\\"u",Rechnungsdatei);break;
case UMLAUT_CU:fputs("\\\"U",Rechnungsdatei);break;
case ESZET:fputs("{\\ss}",Rechnungsdatei);break;
default:fputc(*Zeichenzeiger,Rechnungsdatei);
}
}

/*:31*/
#line 648 "Invoice.w"


/*:33*/
#line 505 "Invoice.w"

fprintf(Rechnungsdatei,"|%s|%%\n",AppendString);

/*:23*/
#line 521 "Invoice.w"

}
fputs("}}\n\n",Rechnungsdatei);

if(Seitenzahl>i)
/*25:*/
#line 535 "Invoice.w"

fprintf(Rechnungsdatei,"\\subtotals|%.0f|%.0f|%.0f|%.0f|%.0f|%%\n\n",
Zwischensumme_I,Zwischensumme_II,
Mehrwertsteuer_I,Mehrwertsteuer_II,
Zwischensumme_I+Mehrwertsteuer_I+
Zwischensumme_II+Mehrwertsteuer_II);

/*:25*/
#line 526 "Invoice.w"

else
/*26:*/
#line 546 "Invoice.w"

fprintf(Rechnungsdatei,"\\totals|%.0f|%.0f|%.0f|%.0f|%.0f|%%\n\n",
Zwischensumme_I,Zwischensumme_II,
Mehrwertsteuer_I,Mehrwertsteuer_II,
Zwischensumme_I+Mehrwertsteuer_I+
Zwischensumme_II+Mehrwertsteuer_II);

/*:26*/
#line 528 "Invoice.w"

}

/*:24*/
#line 344 "Invoice.w"


/*:13*/
#line 138 "Invoice.w"

/*34:*/
#line 656 "Invoice.w"

fputs("\\endinvoice\n\n",Rechnungsdatei);

/*:34*/
#line 139 "Invoice.w"

/*35:*/
#line 669 "Invoice.w"

switch(Adressaufkleber){
case 1:fputs("\\invoicelabel\n\n",Rechnungsdatei);break;
case 2:fputs("\\makelabel\n\n",Rechnungsdatei);break;
}

/*:35*/
#line 140 "Invoice.w"

/*39:*/
#line 759 "Invoice.w"

fputs("\\bye\n",Rechnungsdatei);
fclose(Rechnungsdatei);
return(RETURN_OK);

/*:39*/
#line 141 "Invoice.w"

}

/*:2*/
#line 98 "Invoice.w"


/*:1*/
