Calendari & ...

Almanac.cpp



//----------------------------------------------------------------------
//   Project ................: pdfAlmanac.bpr
//   Version ................: 1.2.0
//   Author .................: G.Ciaccio
//   Email ..................: ciacciogi@infinito.it
//   Created ................: 22-11-2003
//   Development Tool .......: C++ Builder 6.0
//   Environment ............: Windows 98
//   Copyright ..............: 2002-2003
//----------------------------------------------------------------------
//   DISCLAIMER:
//   This software is provided 'as-is', without any express or
//   implied warranty.  In no event will the author be held liable
//   for any damages arising from the use of this software.
//----------------------------------------------------------------------
//   PURPOSE:
//   pdfAlmanac.exe produce different calendars in PDF format for any year
//   in the range 1583-2299
//----------------------------------------------------------------------
#include <vcl.h>
//---------------------------------------------------------------------------
#pragma hdrstop

#include "Almanac.h"
#include "Unit1.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//============================================================================
int Almanac::bold=0;               //0=No 1=Yes
int Almanac::autostart=1;          //0=No 1=Yes
int Almanac::language=1;           //0=Italian Help    1=English Help
int Almanac::xfont=0;
int Almanac::xcalendartype=1;
int Almanac::xdaynames=0;
int Almanac::xmarkedfestivity=0;
int Almanac::xbannercolor=1;
int Almanac::xlanguage=0;
TColor Almanac::mesecolor=clBlue;  //month name color
TColor Almanac::bandcolor=clWhite; //banner color
//============================================================================
Almanac::Almanac(int year){
int valrit,iniday,psq;
mese=1;
anno=year;
valrit=infoyear(year);
if(valrit<0){bstile=1;iniday=-valrit;nday=366;}
else{bstile=0;iniday=valrit;nday=365;}
firstday=iniday;
setmesi(bstile);
setgiorni(bstile);
setweekchar(bstile,iniday);
setfixedholidays(bstile);
psq=gauss(year,bstile);
setafterpsq(psq);
setmoon(year,bstile);
if(xdaynames==0)loadnames(bstile,psq);  //get names from resource file
else setweekdaynames(bstile);
}
//---------------------------------------------------------------------------
void Almanac::reset(int year){
int valrit,iniday,psq;
mese=1;
anno=year;
valrit=infoyear(year);
if(valrit<0){bstile=1;iniday=-valrit;nday=366;}
else{bstile=0;iniday=valrit;nday=365;}
firstday=iniday;
setmesi(bstile);
setgiorni(bstile);
setweekchar(bstile,iniday);
setfixedholidays(bstile);
psq=gauss(year,bstile);
setafterpsq(psq);
setmoon(year,bstile);
if(xdaynames==0)loadnames(bstile,psq);
else setweekdaynames(bstile);
}
//---------------------------------------------------------------------------
int Almanac::infoyear(int anno){
//Return a number between 1 and 7 to qualify the first day of the year passed
//as argument (Monday=1,Tuesday=2,...,Sunday=7)
//This function is valid only if 1583<=anno<=2299
bool vbool;
int capod,xanno;
int valrit;
if(anno==1583){
capod=6;
}else{
xanno=1583;
capod=6;
do{
xanno=xanno+1;
vbool=isleapyear(xanno-1);
if(vbool==true)capod=capod+2;else capod=capod+1;
if(capod>7)capod=capod-7;
}while(xanno<anno);
}
if(isleapyear(anno)==true)valrit=-capod;else valrit=capod;
return valrit;
}
//--------------------------------------------------------------------------
bool Almanac::isleapyear(int anno){
int r4,r100,r400;
bool vbool;
r4=anno%4;
r100=anno%100;
r400=anno%400;
if(r100==0){
//century year
if(r400==0)vbool=true;else vbool=false;
}else{
//not century year
if(r4==0)vbool=true;else vbool=false;
}
return vbool;
}
//--------------------------------------------------------------------------
void Almanac::loadnames(int bstile,int psqday){
//Loads calendar names from the resource file names.rc (for italian calendar)
int j,ymese,jday,jstr;
AnsiString astr;
jstr=0;
if(xlanguage==0){
//Italian calendar
for(j=1;j<=365+bstile;j=j+1){
jday=xday[j].mday;
ymese=xday[j].mese;
if(ymese==2 && jday==29){
//29 february
astr=AnsiString::LoadStr(IDS_NAME59bis);
}else{
jstr=jstr+1;
if(j==psqday)astr="Pasqua";else astr=AnsiString::LoadStr(100+jstr);
}//else
lstrcpy(&xday[j].nameday[0],astr.c_str());
}//for_j
}else{
for(j=1;j<=365+bstile;j=j+1){
jday=xday[j].mday;
ymese=xday[j].mese;
if(ymese==2 && jday==29){
//29 february
//astr=AnsiString::LoadStr(IDS_NAME59bis);
astr="____________";
}else{
jstr=jstr+1;
//if(j==psqday)astr="Pasqua";else astr=AnsiString::LoadStr(100+jstr);
astr="____________";
}//else
lstrcpy(&xday[j].nameday[0],astr.c_str());
}//for_j
}
}
//--------------------------------------------------------------------------
void Almanac::showparam(){
AnsiString astr;
if(Almanac::language==0){astr="anno="+IntToStr(anno)+"\n";
}else{
astr="year="+IntToStr(anno)+"\n";
}
astr=astr+"ngold="+IntToStr(ngold)+"\n";
astr=astr+"epatta="+IntToStr(epatta)+"\n";
astr=astr+"psqday="+IntToStr(psqday)+"\n";
astr=astr+"psqgauss="+IntToStr(psqgauss);
ShowMessage(astr.c_str());
}
//--------------------------------------------------------------------------
int Almanac::maxwname(CPDFdoc *pdf,int day1,int day2){
char str[256];
int wmaxname,j;
AnsiString astrname;
int wstr;
wmaxname=0;
for(j=day1;j<=day2;j=j+1){
astrname=&xday[j].nameday[0];
lstrcpy(&str[0],astrname.c_str());
wstr=cpdf_stringWidth(pdf,&str[0]);
if(wstr>wmaxname){wmaxname=wstr;}
}//for_j
return wmaxname;
}
//--------------------------------------------------------------------------
void Almanac::setmesi(int bstile){
int j,bs,xmese;
bs=bstile;
for(j=1;j<=365+bs;j=j+1){
if(j>=1 && j<=31)xmese=1;
else if(j>31 && j<=59+bs)xmese=2;
else if(j>59+bs && j<=90+bs)xmese=3;
else if(j>90+bs && j<=120+bs)xmese=4;
else if(j>120+bs && j<=151+bs)xmese=5;
else if(j>151+bs && j<=181+bs)xmese=6;
else if(j>181+bs && j<=212+bs)xmese=7;
else if(j>212+bs && j<=243+bs)xmese=8;
else if(j>243+bs && j<=273+bs)xmese=9;
else if(j>273+bs && j<=304+bs)xmese=10;
else if(j>304+bs && j<=334+bs)xmese=11;
else if(j>334+bs && j<=365+bs)xmese=12;
else ShowMessage("Errore in setmesi");
xday[j].mese=xmese;
}//for_j
}
//--------------------------------------------------------------------------
void Almanac::setgiorni(int bstile){
int j,bs,mday;
bs=bstile;
for(j=1;j<=365+bs;j=j+1){
if(bs==0){
//normal year
switch(j){
case 1:mday=1;break;
case 32:mday=1;break;
case 60:mday=1;break;
case 91:mday=1;break;
case 121:mday=1;break;
case 152:mday=1;break;
case 182:mday=1;break;
case 213:mday=1;break;
case 244:mday=1;break;
case 274:mday=1;break;
case 305:mday=1;break;
case 335:mday=1;break;
case 366:mday=1;break;
default:mday=mday+1;
}//switch_jday
}else{
//leap year
switch(j){
case 1:mday=1;break;
case 32:mday=1;break;
case 61:mday=1;break;
case 92:mday=1;break;
case 122:mday=1;break;
case 153:mday=1;break;
case 183:mday=1;break;
case 214:mday=1;break;
case 245:mday=1;break;
case 275:mday=1;break;
case 306:mday=1;break;
case 336:mday=1;break;
case 367:mday=1;break;
default:mday=mday+1;
}//switch_jday
}//else
xday[j].mday=mday;
}//for_j
}
//--------------------------------------------------------------------------
void Almanac::setweekchar(int bstile,int wday1gen){
int j,wday,bs;
bs=bstile;
for(j=1;j<=365+bs;j=j+1){
if(j==1)wday=wday1gen;
else{wday=wday+1;if(wday>7)wday=1;}
xday[j].wday=wday;
if(xlanguage==0){
//Italian calendar
switch(wday){
case 1:xday[j].chday='L';break; //Lunedi'
case 2:xday[j].chday='M';break; //Martedi'
case 3:xday[j].chday='M';break; //Mercoledi'
case 4:xday[j].chday='G';break; //Giovedi'
case 5:xday[j].chday='V';break; //Venerdi'
case 6:xday[j].chday='S';break; //Sabato
case 7:xday[j].chday='D';break; //Domenica
}//switch_wday
}else if(xlanguage==1){
//English calendar
switch(wday){
case 1:xday[j].chday='M';break; //Monday
case 2:xday[j].chday='T';break; //Tuesday
case 3:xday[j].chday='W';break; //Wednesday
case 4:xday[j].chday='T';break; //Thursday
case 5:xday[j].chday='F';break; //Friday
case 6:xday[j].chday='S';break; //Saturday
case 7:xday[j].chday='S';break; //Sunday
}//switch_wday
}else if(xlanguage==2){
//French calendar
switch(wday){
case 1:xday[j].chday='L';break; //Lundi
case 2:xday[j].chday='M';break; //Mardi
case 3:xday[j].chday='M';break; //Mercredi
case 4:xday[j].chday='J';break; //Jeudi
case 5:xday[j].chday='V';break; //Vendredi
case 6:xday[j].chday='S';break; //Samedi
case 7:xday[j].chday='D';break; //Dimanche
}//switch_wday
}else if(xlanguage==3){
//German calendar
switch(wday){
case 1:xday[j].chday='M';break; //Montag
case 2:xday[j].chday='D';beak; //Diestag
case 3:xday[j].chday='M';break; //Mittwoch
case 4:xday[j].chday='D';break; //Donnerstag
case 5:xday[j].chday='F';break; //Freitag
case 6:xday[j].chday='S';break; //Samstag
case 7:xday[j].chday='S';break; //Sonntag
}//switch_wday
}else{
//Spanish calendar (not implemented)
}
if(wday==7)xday[j].festflag=1;else xday[j].festflag=0;
}//for_j
}
//--------------------------------------------------------------------------
void Almanac::setfixedholidays(int bstile){
int bs;
bs=bstile;
switch(xlanguage){
case 0:
//Italian calendar
if(xmarkedfestivity==0){
//Fixed holidays of italian calendar
xday[1].festflag=2;       //1 gennaio
xday[6].festflag=2;       //6 gennaio
xday[115+bs].festflag=2;  //25 aprile
xday[121+bs].festflag=2;  //1 maggio
xday[153+bs].festflag=2;  //2 giugno
xday[227+bs].festflag=2;  //15 agosto
xday[305+bs].festflag=2;  //1 novembre
xday[342+bs].festflag=2;  //8 dicembre
xday[359+bs].festflag=2;  //25 dicembre
xday[360+bs].festflag=2;  //26 dicembre
}else{
//Set as fixed holiday only 1 January
xday[1].festflag=2;}//else_xmarkedfestivity
break;
case 1:
//English calendar
if(xmarkedfestivity==0){
//Fixed holidays of english calendar
xday[1].festflag=2;       //1 January
//...
//...
//...
}else{
//Set as fixed holiday only 1 January
xday[1].festflag=2;}//else_xmarkedfestivity
break;
case 2:
//French calendar
if(xmarkedfestivity==0){
//Fixed holidays of french calendar
xday[1].festflag=2;       //1 January
//...
//...
//...
}else{
//Set as fixed holiday only 1 January
xday[1].festflag=2;}//else_xmarkedfestivity
break;
case 3:
//German calendar
if(xmarkedfestivity==0){
//Fixed holidays of german calendar
xday[1].festflag=2;       //1 January
//...
//...
//...
}else{
//Set as fixed holiday only 1 January
xday[1].festflag=2;}//else_xmarkedfestivity
break;
case4:
//Spanish calendar
if(xmarkedfestivity==0){
//Fixed holidays of spanish calendar
xday[1].festflag=2;       //1 January
//...
//...
//...
}else{
//Set as fixed holiday only 1 January
xday[1].festflag=2;
}//else_xmarkedfestivity
break;
default:
break;
}//switch_xlanguage
}
//--------------------------------------------------------------------------
int Almanac::gauss(int anno,int bstile){
int m,n;
int a,b,c,d,e,psqmarzo,psqgen,vp;
if(anno>=1583 && anno<1700){m=22;n=2;}
else if(anno>=1700 && anno<1800){m=23;n=3;}
else if(anno>=1800 && anno<1900){m=23;n=4;}
else if(anno>=1900 && anno<2100){m=24;n=5;}
else if(anno>=2100 && anno<2200){m=24;n=6;}
else if(anno>=2200 && anno<2300){m=25;n=0;}
else {ShowMessage("Valore non gestito");return -1;}
vp=anno/19;a=anno-19*vp;
vp=anno/4;b=anno-4*vp;
vp=anno/7;c=anno-7*vp;
vp=(19*a+m)/30;d=(19*a+m)-30*vp;
vp=(2*b+4*c+6*d+n)/7;e=(2*b+4*c+6*d+n)-7*vp;
psqmarzo=22+d+e;
psqgauss=psqmarzo;
psqgen=psqmarzo;
//exceptions to Gauss method
if(e==6){
if(d==29){psqgen=psqgen-7;}
if(d==28 && a>10){psqgen=psqgen-7;}
}//if_e
psqgen=psqgen+59+bstile;
psqday=psqgen;
return psqgen;
}
//--------------------------------------------------------------------------
void Almanac::setafterpsq(int psq){
if(xlanguage==0 && xmarkedfestivity==0)xday[psq+1].festflag=3;
}
//--------------------------------------------------------------------------
int Almanac::gauss(int anno){
int m,n;
int a,b,c,d,e,psqmarzo,vp;
if(anno>=1583 && anno<1700){m=22;n=2;}
else if(anno>=1700 && anno<1800){m=23;n=3;}
else if(anno>=1800 && anno<1900){m=23;n=4;}
else if(anno>=1900 && anno<2100){m=24;n=5;}
else if(anno>=2100 && anno<2200){m=24;n=6;}
else if(anno>=2200 && anno<2300){m=25;n=0;}
else {ShowMessage("Valore non gestito");return -1;}
vp=anno/19;a=anno-19*vp;
vp=anno/4;b=anno-4*vp;
vp=anno/7;c=anno-7*vp;
vp=(19*a+m)/30;d=(19*a+m)-30*vp;
vp=(2*b+4*c+6*d+n)/7;e=(2*b+4*c+6*d+n)-7*vp;
psqmarzo=22+d+e;
//exceptions to Gauss method
if(e==6){
if(d==29){psqmarzo=psqmarzo-7;}
if(d==28 && a>10){psqmarzo=psqmarzo-7;}
}//if_e
return psqmarzo;
}
//--------------------------------------------------------------------------
void Almanac::setmoon(int anno,int bstyle){
//Calcolo approssimato di pleniluni e noviluni tramite l'epatta
//Rough estimate of plenilune and new moon
int j,bs;
int divint,pl0,plenilunio1,pluniox,nl0,novilunio1,nluniox,flipflop;
divint=anno/19;
ngold=1+anno-19*divint;
epatta=18+ngold*11;
while(epatta>30) epatta=epatta-30;
bs=bstile;
for(j=1;j<=365+bs;j=j+1){xday[j].chmoon=' ';}
//plenilune
pl0=14-epatta;        //plenilunio di competenza del 1 Gennaio
if(pl0>0)plenilunio1=pl0;else plenilunio1=pl0+29;
pluniox=plenilunio1;
flipflop=0;
do{
xday[pluniox].chmoon='>';
if(flipflop==0){pluniox=pluniox+30;flipflop=1;}
else{pluniox=pluniox+29;flipflop=0;}
}while(pluniox<=365+bstyle);
//new moon
nl0=plenilunio1-14;
if(nl0>0)novilunio1=nl0;else novilunio1=nl0+29;
nluniox=novilunio1;
flipflop=0;
do{
xday[nluniox].chmoon='<';
if(flipflop==0){nluniox=nluniox+30;flipflop=1;}
else{nluniox=nluniox+29;flipflop=0;}
}while(nluniox<=365+bstyle);
}
//--------------------------------------------------------------------------
void Almanac::gopdfalmanac(){
char buf[32];
CPDFdoc *pdf;
AnsiString astr;
int j;
pdf=cpdf_open(0,NULL);
cpdf_enableCompression(pdf,YES);
cpdf_init(pdf);
for(j=1;j<=12;j=j+1){makepdfpage(pdf,j);}
cpdf_finalizeAll(pdf);
if(xfont==0){astr="_Almanac"+IntToStr(anno)+"ag.pdf";}
else if(xfont==1){astr="_Almanac"+IntToStr(anno)+"bm.pdf";}
else if(xfont==2){astr="_Almanac"+IntToStr(anno)+"co.pdf";}
else if(xfont==3){astr="_Almanac"+IntToStr(anno)+"he.pdf";}
else if(xfont==4){astr="_Almanac"+IntToStr(anno)+"hc.pdf";}
else if(xfont==5){astr="_Almanac"+IntToStr(anno)+"hn.pdf";}
else if(xfont==6){astr="_Almanac"+IntToStr(anno)+"pa.pdf";}
else if(xfont==7){astr="_Almanac"+IntToStr(anno)+"ti.pdf";}
else ShowMessage("Caso non previsto");
psavedlg=new TSaveDialog(Application);
psavedlg->FileName=astr;
if (psavedlg->Execute()){
astr=psavedlg->FileName;
cpdf_savePDFmemoryStreamToFile(pdf,astr.c_str());
if(autostart!=0)cpdf_launchPreview(pdf);      //start Acrobat Reader
}//if_psavedialog
cpdf_close(pdf);
if(psavedlg!=0){delete psavedlg;psavedlg=0;}
}
//--------------------------------------------------------------------------
void Almanac::makepdfpage(CPDFdoc *pdf,int jmese){
char str[64];
char riga[256];
char chstr[6];
int j,festflag;
float wpage,hpage;
float hh,centerpos,wstr;
float red,green,blue;
int iniday,endday;
float numberspace,w1,w2,w3,w4,w5,w6,wmaxname;
float wbordo,wrigatura;
int n_;
AnsiString xastr;
wpage=595;hpage=842;
cpdf_pageInit(pdf,jmese,PORTRAIT,A4,A4);
cpdf_setgrayFill(pdf, 0.0);   //Black
cpdf_beginText(pdf, 0);
if(xlanguage==0){
//Italian calendar
switch(jmese){
case 1:wsprintf(&str[0],"GENNAIO %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBBRAIO %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARZO %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRILE %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAGGIO %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"GIUGNO %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"LUGLIO %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AGOSTO %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SETTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OTTOBRE %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBRE %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DICEMBRE %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else if(xlanguage==1){
//English calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANUARY %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBRUARY %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARCH %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAY %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUNE %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JULY %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AUGUST %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBER %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OCTOBER %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBER %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DECEMBER %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else if(xlanguage==2){
//French calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANVIER %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEVRIER %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARS %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"AVRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAI %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUIN %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JUILLET %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AOUT %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OCTOBRE %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBRE %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DECEMBRE %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}//else_language
else if(xlanguage==3){
//German calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANUAR %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBRUAR %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARZ %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAI %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUNI %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JULI %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AUGUST %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OKTOBER %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBER %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DEZEMBER %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else{
//Spanish calendar (not implemented)
}
hh=hpage-mmtotpoint(42);
pdfsetfont(pdf,28.0);
wstr=cpdf_stringWidth(pdf,&str[0]);
centerpos=(wpage-wstr)/2;
red=(float)GetRValue(ColorToRGB(mesecolor));red=red/255.0;
green=(float)GetGValue(ColorToRGB(mesecolor));green=green/255.0;
blue=(float)GetBValue(ColorToRGB(mesecolor));blue=blue/255.0;
cpdf_setrgbcolor(pdf,red,green,blue);
cpdf_rawText(pdf,centerpos,hh,0.0,&str[0]);
hh=hpage-mmtotpoint(62);
pdfsetfont(pdf,16.0);
for(j=1;j<=nday;j=j+1){
if(xday[j].mese==jmese){
xastr="1234567890";
numberspace=cpdf_stringWidth(pdf,xastr.c_str())/10;
wmaxname=maxwname(pdf,iniday,endday);
wbordo=2*numberspace;
w1=wbordo;
w2=w1+3.5*numberspace;
w3=w2+2.5*numberspace;
w4=w3+2.5*numberspace;
w5=w4+0.5*numberspace;
w6=w5+wmaxname+numberspace;
wrigatura=wpage-w6-wbordo;
n_=0;
do{
riga[n_]='_';riga[n_+1]=0;
wstr=cpdf_stringWidth(pdf,&riga[0]);
n_=n_+1;
}while(wstr<wrigatura);
riga[n_-1]=0;
festflag=xday[j].festflag;
if(festflag!=0)cpdf_setrgbcolor(pdf,1.0,0.0,0.0);
else cpdf_setrgbcolor(pdf,0.0,0.0,0.0);
xastr=IntToStr(xday[j].mday);
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=w1+(w2-w1-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
chstr[0]=xday[j].chday;chstr[1]=0;
xastr=&chstr[0];
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=w2+(w3-w2-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
chstr[0]=xday[j].chmoon;chstr[1]=0;
xastr=&chstr[0];
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=w3+(w4-w3-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
xastr=&xday[j].nameday[0];
cpdf_rawText(pdf,w5,hh,0.0,xastr.c_str());
cpdf_rawText(pdf,w6,hh,0.0,&riga[0]);
hh=hh-21;
}//if_day[j].mese
}//for_j
cpdf_endText(pdf);
cpdf_finalizePage(pdf,jmese);
}
//--------------------------------------------------------------------------
void Almanac::goboxpdfalmanac(){
CPDFdoc *pdf;
AnsiString astr;
int j;
pdf=cpdf_open(0,NULL);
cpdf_enableCompression(pdf,YES);
cpdf_init(pdf);
for(j=1;j<=12;j=j+1){makeboxpdfpage(pdf,j);}
cpdf_finalizeAll(pdf);
if(xfont==0){astr="Almanac"+IntToStr(anno)+"ag.pdf";}
else if(xfont==1){astr="Almanac"+IntToStr(anno)+"bm.pdf";}
else if(xfont==2){astr="Almanac"+IntToStr(anno)+"co.pdf";}
else if(xfont==3){astr="Almanac"+IntToStr(anno)+"he.pdf";}
else if(xfont==4){astr="Almanac"+IntToStr(anno)+"hc.pdf";}
else if(xfont==5){astr="Almanac"+IntToStr(anno)+"hn.pdf";}
else if(xfont==6){astr="Almanac"+IntToStr(anno)+"pa.pdf";}
else if(xfont==7){astr="Almanac"+IntToStr(anno)+"ti.pdf";}
else ShowMessage("Caso non previsto");
psavedlg=new TSaveDialog(Application);
psavedlg->FileName=astr;
if (psavedlg->Execute()){
astr=psavedlg->FileName;
cpdf_savePDFmemoryStreamToFile(pdf,astr.c_str());
if(autostart!=0)cpdf_launchPreview(pdf);   //start Acrobat Reader
}//if_psavedialog
cpdf_close(pdf);
if(psavedlg!=0){delete psavedlg;psavedlg=0;}
}
//--------------------------------------------------------------------------
void Almanac::makeboxpdfpage(CPDFdoc *pdf,int jmese){
char str[64];
char riga[256];
char chstr[6];
int j,festflag;
float wpage,hpage;
float hh,centerpos;
float wstr,hstr,xstr,ystr;
float red,green,blue;
float fontsize,fontsize1;
int iniday,endday;
float wbordo,wrigatura;
float x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,margine;
float y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14;
int n_;
AnsiString xastr;
wpage=595;hpage=842;
margine=mmtotpoint(2);
x1=mmtotpoint(5);
x2=wpage-mmtotpoint(5);
x3=x1;
x4=x2;
x5=x1;
x6=x2;
x7=x1+mmtotpoint(10);x8=x7;
x9=x7+mmtotpoint(8);x10=x9;
x11=x9+mmtotpoint(6);x12=x11;
x13=x11+mmtotpoint(40);x14=x13;
//se si varia names.rc puo' essere necessario variare x13
//modifying names.rc may require to change x13 value
y1=hpage-mmtotpoint(30);
y3=hpage-mmtotpoint(50);
y5=mmtotpoint(5);
y6=y5;
y2=y1;
y4=y3;
y7=y5;y8=y3;
y9=y5;y10=y3;
y11=y5;y12=y3;
y13=y5;y14=y3;
cpdf_pageInit(pdf,jmese,PORTRAIT,A4,A4);
cpdf_gsave(pdf);
cpdf_newpath(pdf);
cpdf_setlinewidth(pdf,1.0);
if(xbannercolor!=0){
switch(jmese){
case 1:red=255.0/255.0;green=170.0/255.0;blue=170.0/255.0;break;
case 2:red=204.0/255.0;green=204.0/255.0;blue=255.0/255.0;break;
case 3:red=135.0/255.0;green=206.0/255.0;blue=235.0/255.0;break;
case 4:red=204.0/255.0;green=255.0/255.0;blue=204.0/255.0;break;
case 5:red=252.0/255.0;green=186.0/255.0;blue=217.0/255.0;break;
case 6:red=204.0/255.0;green=204.0/255.0;blue=128.0/255.0;break;
case 7:red=240.0/255.0;green=230.0/255.0;blue=140.0/255.0;break;
case 8:red=255.0/255.0;green=192.0/255.0;blue=255.0/255.0;brea;
case 9:red=152.0/255.0;green=255.0/255.0;blue=255.0/255.0;break;
case 10:red=182.0/255.0;green=201.0/255.0;blue=211.0/255.0;break;
case 11:red=204.0/255.0;green=204.0/255.0;blue=204.0/255.0;break;
case 12:red=255.0/255.0;green=204.0/255.0;blue=204.0/255.0;break;
default:
ShowMessage("Caso non previsto");
break;
}//switch_jmese
}else{
red=(float)GetRValue(ColorToRGB(bandcolor));red=red/255.0;
green=(float)GetGValue(ColorToRGB(bandcolor));green=green/255.0;
blue=(float)GetBValue(ColorToRGB(bandcolor));blue=blue/255.0;
}
cpdf_setrgbcolorFill(pdf,red,green,blue);
cpdf_setrgbcolorStroke(pdf,0.0,0.0,0.0);
cpdf_rawRect(pdf,x3,y3,x4-x3,y1-y3);
cpdf_fillAndStroke(pdf);
cpdf_rawMoveto(pdf,x3,y3);
cpdf_rawLineto(pdf,x5,y5);
cpdf_rawLineto(pdf,x6,y6);
cpdf_rawLineto(pdf,x4,y4);
cpdf_rawMoveto(pdf,x7,y7);cpdf_rawLineto(pdf,x8,y8);
cpdf_rawMoveto(pdf,x9,y9);cpdf_rawLineto(pdf,x10,y10);
cpdf_rawMoveto(pdf,x11,y11);cpdf_rawLineto(pdf,x12,y12);
cpdf_rawMoveto(pdf,x13,y13);cpdf_rawLineto(pdf,x14,y14);
cpdf_stroke(pdf);
cpdf_grestore(pdf);
cpdf_beginText(pdf, 0);
//------------------------------------
if(xlanguage==0){
//Italian calendar
switch(jmese){
case 1:wsprintf(&str[0],"GENNAIO %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBBRAIO %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARZO %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRILE %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAGGIO %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"GIUGNO %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"LUGLIO %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AGOSTO %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SETTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OTTOBRE %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBRE %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DICEMBRE %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else if(xlanguage==1){
//English calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANUARY %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBRUARY %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARCH %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAY %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUNE %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JULY %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AUGUST %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBER %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OCTOBER %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBER %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DECEMBER %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else if(xlanguage==2){
//French calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANVIER %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEVRIER %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARS %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"AVRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAI %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUIN %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JUILLET %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AOUT %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OCTOBRE %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBRE %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DECEMBRE %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}//else_language
else if(xlanguage==3){
//German calendar
switch(jmese){
case 1:wsprintf(&str[0],"JANUAR %i\0",anno);
iniday=1;endday=31;break;
case 2:wsprintf(&str[0],"FEBRUAR %i\0",anno);
iniday=32;endday=59+bstile;break;
case 3:wsprintf(&str[0],"MARZ %i\0",anno);
iniday=60+bstile;endday=90+bstile;break;
case 4:wsprintf(&str[0],"APRIL %i\0",anno);
iniday=91+bstile;endday=120+bstile;break;
case 5:wsprintf(&str[0],"MAI %i\0",anno);
iniday=121+bstile;endday=151+bstile;break;
case 6:wsprintf(&str[0],"JUNI %i\0",anno);
iniday=152+bstile;endday=181+bstile;break;
case 7:wsprintf(&str[0],"JULI %i\0",anno);
iniday=182+bstile;endday=212+bstile;break;
case 8:wsprintf(&str[0],"AUGUST %i\0",anno);
iniday=213+bstile;endday=243+bstile;break;
case 9:wsprintf(&str[0],"SEPTEMBRE %i\0",anno);
iniday=244+bstile;endday=273+bstile;break;
case 10:wsprintf(&str[0],"OKTOBER %i\0",anno);
iniday=274+bstile;endday=304+bstile;break;
case 11:wsprintf(&str[0],"NOVEMBER %i\0",anno);
iniday=305+bstile;endday=334+bstile;break;
case 12:wsprintf(&str[0],"DEZEMBER %i\0",anno);
iniday=335+bstile;endday=365+bstile;break;
}//switch_mese
}else{
//Spanish calendar (not implemented)
}
//-------------------------------------------
fontsize=28.0;
pdfsetfont(pdf,fontsize);
wstr=cpdf_stringWidth(pdf,&str[0]);
hstr=cpdf_capHeight(pdf);
centerpos=(wpage-wstr)/2;
xstr=(wpage-wstr)/2;
ystr=y3+(y1-y3-hstr)/2;
if(xbannercolor!=0){
red=0.0;
green=0.0;
blue=0.0;
}else{
red=(float)GetRValue(ColorToRGB(mesecolor));red=red/255.0;
green=(float)GetGValue(ColorToRGB(mesecolor));green=green/255.0;
blue=(float)GetBValue(ColorToRGB(mesecolor));blue=blue/255.0;
}
cpdf_setrgbcolor(pdf,red,green,blue);
cpdf_rawText(pdf,xstr,ystr,0.0,&str[0]);
fontsize1=16.0;
pdfsetfont(pdf,fontsize1);
n_=0;
do{
riga[n_]='_';riga[n_+1]=0;
wstr=cpdf_stringWidth(pdf,&riga[0]);
n_=n_+1;
}while(wstr<wpage-x13-x1);
riga[n_-1]=0;
hh=hpage-mmtotpoint(62);
for(j=1;j<=nday;j=j+1){
if(xday[j].mese==jmese){
festflag=xday[j].festflag;
if(festflag!=0)cpdf_setrgbcolor(pdf,1.0,0.0,0.0);
else cpdf_setrgbcolor(pdf,0.0,0.0,0.0);
xastr=IntToStr(xday[j].mday);
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=x5+(x7-x5-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
chstr[0]=xday[j].chday;chstr[1]=0;
xastr=&chstr[0];
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=x7+(x9-x7-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
chstr[0]=xday[j].chmoon;chstr[1]=0;
xastr=&chstr[0];
wstr=cpdf_stringWidth(pdf,xastr.c_str());
centerpos=x9+(x11-x9-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,xastr.c_str());
xastr=&xday[j].nameday[0];
cpdf_rawText(pdf,x11+margine,hh,0.0,xastr.c_str());
wstr=cpdf_stringWidth(pdf,&riga[0]);
centerpos=x13+(x6-x13-wstr)/2;
cpdf_rawText(pdf,centerpos,hh,0.0,&riga[0]);
hh=hh-mmtotpoint(7.5);
}//if_day[j].mese
}//for_j
cpdf_endText(pdf);
cpdf_finalizePage(pdf,jmese);
}
//--------------------------------------------------------------------------
float Almanac::mmtotpoint(float mm){
float tippoint;
tippoint=72.0*mm/25.4;
return tippoint;
}
//--------------------------------------------------------------------------
void Almanac::setweekdaynames(int bstile){
int j,wday,bs;
bs=bstile;
switch(xlanguage){
case 0:
//Italian calendar
for(j=1;j<=365+bs;j=j+1){
wday=xday[j].wday;
switch(wday){
case 1:StrCopy(&xday[j].nameday[0],"Lunedi'");break;
case 2:StrCopy(&xday[j].nameday[0],"Martedi'");break;
case 3:StrCopy(&xday[j].nameday[0],"Mercoledi'");break;
case 4:StrCopy(&xday[j].nameday[0],"Giovedi'");break;
case 5:StrCopy(&xday[j].nameday[0],"Venerdi'");break;
case 6:StrCopy(&xday[j].nameday[0],"Sabato");break;
case 7:StrCopy(&xday[j].nameday[0],"Domenica");break;
}//switch_wday
}//for_j
break;
case 1:
//English calendar
for(j=1;j<=365+bs;j=j+1){
wday=xday[j].wday;
switch(wday){
case 1:StrCopy(&xday[j].nameday[0],"Monday");break;
case 2:StrCopy(&xday[j].nameday[0],"Tuesday");break;
case 3:StrCopy(&xday[j].nameday[0],"Wednesday");break;
case 4:StrCopy(&xday[j].nameday[0],"Thursday");break;
case 5:StrCopy(&xday[j].nameday[0],"Freeday");break;
case 6:StrCopy(&xday[j].nameday[0],"Saturday");break;
case 7:StrCopy(&xday[j].nameday[0],"Sunday");break;
}//switch_wday
}//for_j
break;
case 2:
//French calendar
for(j=1;j<=365+bs;j=j+1){
wday=xday[j].wday;
witch(wday){
case 1:StrCopy(&xday[j].nameday[0],"Lundi");break;
case 2:StrCopy(&xday[j].nameday[0],"Mardi");break;
case 3:StrCopy(&xday[j].nameday[0],"Mercredi");break;
case 4:StrCopy(&xday[j].nameday[0],"Jeudi");break;
case 5:StrCopy(&xday[j].nameday[0],"Vendredi");break;
case 6:StrCopy(&xday[j].nameday[0],"Samedi");break;
case 7:StrCopy(&xday[j].nameday[0],"Dimanche");break;
}//switch_wday
}//for_j
break;
case 3:
//German calendar
for(j=1;j<=365+bs;j=j+1){
wday=xday[j].wday;
switch(wday){
case 1:StrCopy(&xday[j].nameday[0],"Montag");break;
case 2:StrCopy(&xday[j].nameday[0],"Dienstag");break;
case 3:StrCopy(&xday[j].nameday[0],"Mittwoch");break;
case 4:StrCopy(&xday[j].nameday[0],"Donnerstag");break;
case 5:StrCopy(&xday[j].nameday[0],"Freitag");break;
case 6:StrCopy(&xday[j].nameday[0],"Samstag");break;
case 7:StrCopy(&xday[j].nameday[0],"Sonntag");break;
}//switch_wday
}//for_j
break;
case 4:
//Spanish calendar (not implemented)
break;
default:
break;
}//switch
}
//--------------------------------------------------------------------------
void Almanac::pdfsetfont(CPDFdoc *pdf,int fontsize){
//Set the calendar font
if(bold==0){
if(xfont==0)cpdf_setFont(pdf,"AvantGarde-Book","WinAnsiEncoding",fontsize);
else if(xfont==1)cpdf_setFont(pdf,"Bookman-Light","WinAnsiEncoding",fontsize);
else if(xfont==2)cpdf_setFont(pdf,"Courier","WinAnsiEncoding",fontsize);
else if(xfont==3)cpdf_setFont(pdf,"Helvetica","WinAnsiEncoding",fontsize);
else if(xfont==4)cpdf_setFont(pdf,"Helvetica-Condensed","WinAnsiEncoding",fontsize);
else if(xfont==5)cpdf_setFont(pdf,"Helvetica-Narrow","WinAnsiEncoding",fontsize);
else if(xfont==6)cpdf_setFont(pdf,"Palatino-Roman","WinAnsiEncoding",fontsize);
else if(xfont==7)cpdf_setFont(pdf,"Times-Roman","WinAnsiEncoding",fontsize);
else ShowMessage("Caso non previsto");
}else{
if(xfont==0)cpdf_setFont(pdf,"AvantGarde-Demi","WinAnsiEncoding",fontsize);
else if(xfont==1)cpdf_setFont(pdf,"Bookman-Demi","WinAnsiEncoding",fontsize);
else if(xfont==2)cpdf_setFont(pdf,"Courier-Bold","WinAnsiEncoding",fontsize);
else if(xfont==3)cpdf_setFont(pdf,"Helvetica-Bold","WinAnsiEncoding",fontsize);
else if(xfont==4)cpdf_setFont(pdf,"Helvetica-Condensed-Bold","WinAnsiEncoding",fontsize);
else if(xfont==5)cpdf_setFont(pdf,"Helvetica-Narrow-Bold","WinAnsiEncoding",fontsize);
else if(xfont==6)cpdf_setFont(pdf,"Palatino-Bold","WinAnsiEncoding",fontsize);
else if(xfont==1)cpdf_setFont(pdf,"Times-Bold","WinAnsiEncoding",fontsize);
else ShowMessage("Caso non previsto");
}
}
//--------------------------------------------------------------------------
void Almanac::goboxpdfalmanac(AnsiString astrdir){
char *pch,ch2[2];
CPDFdoc *pdf;
AnsiString astr;
int j;
pch=AnsiLastChar(astrdir);
if(*pch=='\\'){}else {ch2[0]='\\';ch2[1]=0;astrdir=astrdir+&ch2[0];}
pdf=cpdf_open(0,NULL);
cpdf_enableCompression(pdf,YES);
cpdf_init(pdf);
for(j=1;j<=12;j=j+1){makeboxpdfpage(pdf,j);}
cpdf_finalizeAll(pdf);
if(xfont==0){astr=astrdir+"Almanac"+IntToStr(anno)+"ag.pdf";}
else if(xfont==1){astr=astrdir+"Almanac"+IntToStr(anno)+"bm.pdf";}
else if(xfont==2){astr=astrdir+"Almanac"+IntToStr(anno)+"co.pdf";}
else if(xfont==3){astr=astrdir+"Almanac"+IntToStr(anno)+"he.pdf";}
else if(xfont==4){astr=astrdir+"Almanac"+IntToStr(anno)+"hc.pdf";}
else if(xfont==5){astr=astrdir+"Almanac"+IntToStr(anno)+"hn.pdf";}
else if(xfont==6){astr=astrdir+"Almanac"+IntToStr(anno)+"pa.pdf";}
else if(xfont==7){astr=astrdir+"Almanac"+IntToStr(anno)+"ti.pdf";}
else ShowMessage("Caso non previsto");
cpdf_savePDFmemoryStreamToFile(pdf,astr.c_str());
cpdf_close(pdf);
}
//--------------------------------------------------------------------------
void Almanac::gopdfalmanac(AnsiString astrdir){
char *pch,ch2[2];
CPDFdoc *pdf;
AnsiString astr;
int j;
pch=AnsiLastChar(astrdir);
if(*pch=='\\'){}else {ch2[0]='\\';ch2[1]=0;astrdir=astrdir+&ch2[0];}
pdf=cpdf_open(0,NULL);
cpdf_enableCompression(pdf,YES);
cpdf_init(pdf);
for(j=1;j<=12;j=j+1){makepdfpage(pdf,j);}
cpdf_finalizeAll(pdf);
if(xfont==0){astr=astrdir+"_Almanac"+IntToStr(anno)+"ag.pdf";}
else if(xfont==1){astr=astrdir+"_Almanac"+IntToStr(anno)+"bm.pdf";}
else if(xfont==2){astr=astrdir+"_Almanac"+IntToStr(anno)+"co.pdf";}
else if(xfont==3){astr=astrdir+"_Almanac"+IntToStr(anno)+"he.pdf";}
else if(xfont==4){astr=astrdir+"_Almanac"+IntToStr(anno)+"hc.pdf";}
else if(xfont==5){astr=astrdir+"_Almanac"+IntToStr(anno)+"hn.pdf";}
else if(xfont==6){astr=astrdir+"_Almanac"+IntToStr(anno)+"pa.pdf";}
else if(xfont==7){astr=astrdir+"_Almanac"+IntToStr(anno)+"ti.pdf";}
else ShowMessage("Caso non previsto");
cpdf_savePDFmemoryStreamToFile(pdf,astr.c_str());
cpdf_close(pdf);
}
//--------------------------------------------------------------------------





Per quanto si sia fatto il possibile non si puo' garantire che il prodotto (intendendo per tale qualunque file incluso nel pacchetto di installazione e non soltanto il file eseguibile) sia esente da errori e quindi si demanda agli utenti il compito di trovare conferma per altra via sia dei risultati ottenuti con l'uso del programma che di qualunque indicazione rilevabile dai file annessi al prodotto rigettando questo e qualunque altro tipo di responsabilita' per qualsiasi tipo di danno correlabile con l'uso del prodotto. Chi non accetta la sopracitata clausola di esclusione di responsabilita' non deve usare il prodotto.