// General #defines and externs. #include #include #include #include #include #include #include #include "sock.h" #include "g:\tarot\sweph\src\swedll.h" #include "g:\tarot\sweph\src\sweodef.h" #include "g:\tarot\sweph\src\swephexp.h" // sock.cc extern ICCSocket *sock; inline int GetData(char *buf) { return (sock ? sock->GetData(buf) : GD_NONE); } inline void Send(const char *buf, int print=0) { if (sock) sock->Send(buf, print); } void Sendf(const char *fmt, ...); inline unsigned Idle() { return (sock ? sock->Idle() : 0); } class ignoreNames { public: // constructor ignoreNames(){ std::ifstream inFile("ignore.txt", std::ios::in); if(!inFile) return; char *aName= new char [20]; char *bName=aName; int a=0; while(inFile >> aName) {names.push_back(aName); aName= new char [20]; std::cout << names[a++];} }// end funct int getCount(){return names.size();} char *getName(int index){char *temp=names[index];return temp;} std::vector names; bool isListed( const char *n) { for(int a=0; a0) { if(*(p+aa)==' ' && *(p+aa-1)==' ') continue; } else if(*(p+aa)==' ') continue; if(newline==1) { newline=0; myTop++; cc=aa; } if(*(p+aa)!=' ') { myString[myTop-1][aa-cc]=*(p+aa); } else { newline=1; myString[myTop-1][aa-cc]='\0'; } } if(myTop>0) myString[myTop-1][aa-cc]='\0'; else printf("\nmytop is %d", myTop); printf("\n have set mystring[][]"); int idate1=0, *date1=&idate1, idate2=0, *date2=&idate2, itime1=0, *time1=&itime1, itime2=0, *time2=&itime2; int ilocationlat=0, *locationlat=&ilocationlat, ilocationlon=0, *locationlon=&ilocationlon, imajor=0, *major=&imajor, iplanetstype=0; int iplanetrange=0, *planetrange=&iplanetrange; for(aa=0; aatm_hour+(double)ptm->tm_min/60); } if(hour2!=-1 && minute2!=-1) thetime2= ( double ) (hour2+ (double) minute2/60); else { time_t rawtime; tm * ptm; time ( &rawtime ); ptm = gmtime ( &rawtime ); thetime2= (double) (ptm->tm_hour+(double)ptm->tm_min/60); } if(channel==6) { int go=1; if(*date1==0) go=0; if(*time1==0) go=0; if(lat==-1000) go=0; if(lon==-1000) go=0; if(go==0) return -1; else return 0; } if(*date1==0) return -1; printf("\nreturn %d", *major * 10 + *planetrange); return *planetrange+*major*10; } void processValue(char mystring[], int *date1, int *date2, int *time1, int *time2, int *locationlat, int *locationlon, int *major, int *planetrange, int place) { if(*date1==0) if(isdate(mystring)) { getdate(mystring, 1, date1); return; } if(*date2==0) if(isdate(mystring)) { getdate(mystring, 2, date2); return; } if(*time1==0 && *date2==0) if(istime(mystring)) { gettime(mystring, 1, time1); return; } if(*time2==0 && *date2==1) if(istime(mystring)) { gettime(mystring, 2, time2); return; } if(*locationlat==0) if(istime(mystring)) { getdegree(mystring, 1, locationlat); return; } if(*locationlon==0) if(istime(mystring)) { getdegree(mystring, 2, locationlon); return; } if(!strcmp(mystring, "inner")) { *planetrange=1; return; } if(!strcmp(mystring, "outer")) { *planetrange=2; return; } if(!strcmp(mystring, "asteroid")) { *planetrange=3; return; } if(!strcmp(mystring, "all")) { *planetrange=4; return; } if(!strcmp(mystring, "minor")) { *major=1; return; } if(place==1) readFile2(mystring, date1, time1, locationlat, locationlon); return; } int isdate(char *p) { char temp[1000]; for(a=0; *(p+a)!='\0' && *(p+a)!='.'; a++) temp[a]=*(p+a); temp[a]='\0'; // day=atoi(temp); if(*(p+a)!='.') return 0; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!='.'; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; // month=atoi(temp); if(*(p+a)!='.') return 0; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!=' '; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; // year=atoi(temp); return 1; } int istime(char *p) { char temp[1000]; for(a=0; *(p+a)!='\0' && (*(p+a)!=':' && *(p+a)!='.'); a++) temp[a]=*(p+a); temp[a]='\0'; // hour=atoi(temp); if(*(p+a)!=':' && *(p+a)!='.') return 0; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!=' '; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; // minute=atoi(temp); return 1; } int isdegree(char mystring[]) { return 0; } void getdate(char *p, int type, int *date3) { char temp[1000]; for(a=0; *(p+a)!='\0' && *(p+a)!='.'; a++) temp[a]=*(p+a); temp[a]='\0'; if(type==1) day=atoi(temp); else day2=atoi(temp); if(*(p+a)!='.') return; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!='.'; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; if(type==1) month=atoi(temp); else month2=atoi(temp); if(*(p+a)!='.') return; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!=' '; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; if(type==1) year=atoi(temp); else year2=atoi(temp); *date3=1; } void gettime(char *p, int type, int *time3) { char temp[1000]; for(a=0; *(p+a)!='\0' && (*(p+a)!=':' && *(p+a)!='.'); a++) temp[a]=*(p+a); temp[a]='\0'; if(type==1) hour=atoi(temp); if(type==2) hour2=atoi(temp); if(*(p+a)!=':' && *(p+a)!='.') return; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!=' '; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; if(type==1) minute=atoi(temp); if(type==2) minute2=atoi(temp); *time3=1; } void getdegree(char *p, int type, int *location) { char temp[1000]; printf("\n in get degree and type==%d", type); if(type==1) { for(a=0; *(p+a)!='\0' && *(p+a)!=':' ; a++) temp[a]=*(p+a); temp[a]='\0'; double lat1=atoi(temp); if(*(p+a)!=':') return; printf("\nlat1=%f", lat1); b=a+1; for(a=b; *(p+a)!='\0'; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; double lat2=atoi(temp); printf("\nlat2=%f", lat2); if(lat1>=0) lat=lat1+lat2/60; else lat=lat1-lat2/60; } else { for(a=0; *(p+a)!='\0' && *(p+a)!=':' ; a++) temp[a]=*(p+a); temp[a]='\0'; double lon1=atoi(temp); printf("\nlon1=%f", lon1); if(*(p+a)!=':') return; b=a+1; for(a=b; *(p+a)!='\0' && *(p+a)!=' ' ; a++) temp[a-b]=*(p+a); temp[a-b]='\0'; double lon2=atoi(temp); printf("\nlon2=%f", lon2); if(lon1>=0) lon=lon1+lon2/60; else lon=lon1-lon2/60; } *location=1; } int readFile2(char *p, int *date1, int *time1, int *locationlat, int *locationlon){ int bb; char rname[1000]; rname[0]='\0'; for(bb=0; *(p+bb)!='\0'; bb++) rname[bb]=*(p+bb); rname[bb]='\0'; std::ifstream inFile("birthdata.txt", std::ios::in); if(!inFile) { printf("\nno file"); return -1; } char record[1000]; record[0]='\0'; int i=0; int found=0; while(inFile >> record) { if(found==1){ if(i==0) day=atoi(record); if(i==1) month=atoi(record); if(i==2) year=atoi(record); if(i==3) hour=atoi(record); if(i==4) minute=atoi(record); if(i==5) latdeg=atoi(record); if(i==6) latmin=atoi(record); if(i==7) londeg=atoi(record); if(i==8) lonmin=atoi(record); i++; if(i==9) break; } if(!strcmp(record, rname)) { found=1; *date1=1; *time1=1; *locationlat=1; *locationlon=1; } }// end for if(i==9 && found==1) { thetime=(double) hour+(double) minute/60; if(londeg>=0) lon=londeg+lonmin/60; else lon=londeg-lonmin/60; if(latdeg>=0) lat=latdeg+latmin/60; else lat=latdeg-latmin/60; return 0; } return -1; } }; class tarot { public: // http://en.wikipedia.org/wiki/Tarot_of_Marseilles#Structure ~tarot() { deck.clear(); links.clear(); card.clear(); } tarot(){ deck.push_back("I The Mountebank, The Juggler, The Magician"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/magician.shtml"); card.push_back("i"); deck.push_back("II The High Priestess"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/highpriestess.shtml"); card.push_back("ii"); deck.push_back("III. The Empress"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/empress.shtml"); card.push_back("iii"); deck.push_back("IV The Emperor"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/emperor.shtml"); card.push_back("iv"); deck.push_back("V The Hierophant"); card.push_back("v"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/hierophant.shtml"); deck.push_back("VI The Lovers"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/lovers.shtml"); card.push_back("vi"); deck.push_back("VII The Chariot"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/chariot.shtml"); card.push_back("vii"); deck.push_back("VIII Justice"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/justice.shtml"); card.push_back("viii"); deck.push_back("IX The Hermit"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/hermit.shtml"); card.push_back("ix"); deck.push_back("X The Wheel of Fortune"); card.push_back("x"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/wheel.shtml"); deck.push_back("XI Strength, or Fortitude"); card.push_back("xi"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/strength.shtml"); deck.push_back("XII The Hanged Man"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/hangedman.shtml"); card.push_back("xii"); deck.push_back("XIII Death"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/death.shtml"); card.push_back("xiii"); deck.push_back("XIV Temperance"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/temperance.shtml"); card.push_back("xiv"); deck.push_back("XV The Devil"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/devil.shtml"); card.push_back("xv"); deck.push_back("XVI The Tower"); card.push_back("xvi"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/tower.shtml"); deck.push_back("XVII The Star"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/star.shtml"); card.push_back("xvii"); deck.push_back("XVIII The Moon"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/moon.shtml"); card.push_back("xviii"); deck.push_back("XIX The Sun"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sun.shtml"); card.push_back("xix"); deck.push_back("XX Judgement"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/judgement.shtml"); card.push_back("xx"); deck.push_back("XXI The World"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/world.shtml"); card.push_back("xxi"); deck.push_back("The Fool"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fool.shtml"); card.push_back("xxii"); deck.push_back("Ace of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/aces.shtml"); deck.push_back("Ace of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/aces.shtml"); deck.push_back("Ace of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/aces.shtml"); deck.push_back("Ace of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/aces.shtml"); deck.push_back("Two of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/twos.shtml"); deck.push_back("Two of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/twos.shtml"); deck.push_back("Two of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/twos.shtml"); deck.push_back("Two of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/twos.shtml"); deck.push_back("Three of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/threes.shtml"); deck.push_back("Three of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/threes.shtml"); deck.push_back("Three of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/threes.shtml"); deck.push_back("Three of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/threes.shtml"); deck.push_back("Four of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fours.shtml"); deck.push_back("Four of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fours.shtml"); deck.push_back("Four of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fours.shtml"); deck.push_back("Four of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fours.shtml"); deck.push_back("Five of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fives.shtml"); deck.push_back("Five of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fives.shtml"); deck.push_back("Five of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fives.shtml"); deck.push_back("Five of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/fives.shtml"); deck.push_back("Six of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sixes.shtml"); deck.push_back("Six of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sixes.shtml"); deck.push_back("Six of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sixes.shtml"); deck.push_back("Six of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sixes.shtml"); deck.push_back("Seven of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sevens.shtml"); deck.push_back("Seven of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sevens.shtml"); deck.push_back("Seven of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sevens.shtml"); deck.push_back("Seven of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/sevens.shtml"); deck.push_back("Eight of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/eights.shtml"); deck.push_back("Eight of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/eights.shtml"); deck.push_back("Eight of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/eights.shtml"); deck.push_back("Eight of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/eights.shtml"); deck.push_back("Nine of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/nines.shtml"); deck.push_back("Nine of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/nines.shtml"); deck.push_back("Nine of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/nines.shtml"); deck.push_back("Nine of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/nines.shtml"); deck.push_back("Ten of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/tens.shtml"); deck.push_back("Ten of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/tens.shtml"); deck.push_back("Ten of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/tens.shtml"); deck.push_back("Ten of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/tens.shtml"); deck.push_back("Page of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/pages.shtml"); deck.push_back("Page of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/pages.shtml"); deck.push_back("Page of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/pages.shtml"); deck.push_back("Page of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/pages.shtml"); deck.push_back("Knight of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/knights.shtml"); deck.push_back("Knight of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/knights.shtml"); deck.push_back("Knight of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/knights.shtml"); deck.push_back("Knight of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/knights.shtml"); deck.push_back("Queen of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/queens.shtml"); deck.push_back("Queen of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/queens.shtml"); deck.push_back("Queen of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/queens.shtml"); deck.push_back("Queen of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/queens.shtml"); deck.push_back("King of Wands"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/kings.shtml"); deck.push_back("King of Cups"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/kings.shtml"); deck.push_back("King of Swords"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/kings.shtml"); deck.push_back("King of Pentacles"); links.push_back("http://www.aeclectic.net/tarot/learn/meanings/kings.shtml"); srand ( time(NULL) ); mytime=time(NULL); shouttime=time(NULL); wait=1200; pch_planets[0]="Sun"; pch_planets[1]="Moon"; pch_planets[2]="Mercury"; pch_planets[3]="Venus"; pch_planets[4]="Mars"; pch_planets[5]="Jupiter"; pch_planets[6]="Saturn"; pch_planets[7]="Uranus"; pch_planets[8]="Neptune"; pch_planets[9]="Pluto"; pch_planets[10]="Chiron"; pch_planets[11]="Eris"; pch_planets[12]="Pholus"; pch_planets[13]="Ceres"; pch_planets[14]="Pallas"; pch_planets[15]="Juno"; pch_planets[16]="Vesta"; pch_planets[17]="N_Node"; pch_planets2[0]="SUN"; pch_planets2[1]="MOON"; pch_planets2[2]="MERCURY"; pch_planets2[3]="VENUS"; pch_planets2[4]="MARS"; pch_planets2[5]="JUPITER"; pch_planets2[6]="SATURN"; pch_planets2[7]="URANUS"; pch_planets2[8]="NEPTUNE"; pch_planets2[9]="PLUTO"; pch_planets2[10]="CHIRON"; pch_planets2[11]="ERIS"; pch_planets2[12]="PHOLUS"; pch_planets2[13]="CERES"; pch_planets2[14]="PALLAS"; pch_planets2[15]="JUNO"; pch_planets2[16]="VESTA"; pch_planets2[17]="N_NODE"; i_maxplanets=18; } void processTELL(const char *p, const char *n) { char temp[1000]; int a=rand()%78; char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); printf("\n%s %s", timebuf, datebuf); if(!strcmp(p, "!time")) showtime((char *) n, 1); if(!strcmp(p, "help")) showhelp((char *) n); if(!strcmp(p, "!planets")) { planets((char *) n, (char *) p, 0, false, "", 0); return; } if(!strcmp(p, "!planets inner")) { planets((char *) n, (char *) p, 0, false, "", 1); return; } if(!strcmp(p, "!planets outer")) { planets((char *) n, (char *) p, 0, false, "", 2); return; } if(!strcmp(p, "!planets asteroid")) { planets((char *) n, (char * ) p, 0, false, "", 3); return; } if(!strcmp(p, "!planets all")) { planets((char *) n, (char * ) p, 0, false, "", 4); return; } if(!strcmp(p, "!aspects")) { planets((char *) n, (char * ) p, 5, false, "", 3); return; } if(strlen(p)>7) { if(*(p)=='!' && *(p+1)=='p' && *(p+2)=='l' && *(p+3)=='a' && *(p+4)=='n' && *(p+5)=='e' && *(p+6)=='t' && *(p+7)=='s' && *(p+8)==' ' ) planets((char *) n,(char *) p, 0, true, "", 0); if(*(p)=='!' && *(p+1)=='a' && *(p+2)=='s' && *(p+3)=='p' && *(p+4)=='e' && *(p+5)=='c' && *(p+6)=='t' && *(p+7)=='s' && *(p+8)==' ' ) planets((char *) n,(char *) p, 5, true, "", 0); if(*(p)=='!' && *(p+1)=='t' && *(p+2)=='r' && *(p+3)=='a' && *(p+4)=='n' && *(p+5)=='s' && *(p+6)=='i' && *(p+7)=='t' && *(p+8)=='s' && *(p+9)==' ' ) planets((char *) n,(char *) p, 6, true, "", 0); if(*(p)=='!' && *(p+1)=='h' && *(p+2)=='o' && *(p+3)=='u' && *(p+4)=='s' && *(p+5)=='e' && *(p+6)=='s' && *(p+7)==' ' ) writeHouses((char *) n,(char *) p, 0); if(*(p)=='!' && *(p+1)=='c' && *(p+2)=='h' && *(p+3)=='a' && *(p+4)=='r' && *(p+5)=='t' && *(p+6)==' ') planets((char *) n,(char *) p, 7, true, "", 0); } if(0) // disables no tarot now on icc my choice { if(!strcmp(p, "!draw")) { Sendf("tell %s %s\n", n, deck[a]); Sendf("tell %s %s \n", n, links[a]); printf("\n response is %s \n", deck[a]); return; } if(!strcmp(p, "!draw m")) { a=rand()%22; Sendf("tell %s %s\n", n, deck[a]); Sendf("tell %s %s \n", n, links[a]); printf("\n response is %s \n", deck[a]); return; } if(!strcmp(p, "cards")) { Sendf("tell %s Major Arcana\n", n); Sendf("tell %s %s; %s; %s; %s; %s; %s\n", n, deck[0], deck[1], deck[2], deck[3], deck[4], deck[5]); Sendf("tell %s %s; %s; %s; %s; %s; %s\n", n, deck[6], deck[7], deck[8], deck[9], deck[10], deck[11]); Sendf("tell %s %s; %s; %s; %s; %s; %s\n", n, deck[12], deck[13], deck[14], deck[15], deck[16], deck[17]); Sendf("tell %s %s; %s; %s; %s \n", n, deck[18], deck[19], deck[20], deck[21]); Sendf("tell %s To get help on what a card means, take its number, say XV, use 'tell Tarot !card XV', for non major arcana use the number 1-10 or 11 for page 12 knight 13 for queen and 14 for king.\n", n); Sendf("tell %s the fool doesnt have a number but for help it's xxii, i.e. 'tell Tarot !card xxii'\n", n); return; } } // if 0 disabling tarot if(!strcmp(n, "Mike")) { if(strlen(p)>3) { if(*p=='1' && *(p+1)=='0' && *(p+2)==' ') { char truncated[1000]; for(int sc=3; *(p+sc)!='\0'; sc++) { truncated[sc-3]=*(p+sc); } truncated[sc-3]='\0'; Sendf("%s \n", truncated); } } } int index=0; if(0) // disabling tarot { if(strlen(p)>6) { char num[3]; if(*(p)=='!' && *(p+1)=='c' && *(p+2)=='a' && *(p+3)=='r' && *(p+4)=='d' && *(p+5)==' ') { num[0]=*(p+6); num[1]='\0'; if(strlen(p)>7) { num[1]=*(p+7); num[2]='\0'; } bool go=false; int number=atoi(num); if(number>0 && number<15) { index=22+number*4-1; Sendf("tel %s %s\n", n, links[index]); printf("\n tell link %s from %s \n", links[index], n); go=true; } else{ for(int d=6; *(p+d)!='\0'; d++) { temp[d-6]=*(p+d); } temp[d-6]='\0'; makeNameLower(temp); for(d=0; d<22; d++) { if(!strcmp(temp, card[d])) { Sendf("tel %s %s\n", n, links[d]); printf("\n tell link %s from %s \n", links[d], n); go=true; break; } // end if } // end for d=0-22 } // end else if(go==false) { Sendf("tel %s number not in the range of 1-14, i-xxii or I-XXII \n", n); printf("\n channel invalid number from %s\n", n); } }// end if card }// end if strlen(p)>6 if(strlen(p)==7) spread(p, n, 0, ""); if(strlen(p)==9) spreadMajor(p,n,0, ""); }// if 0 disabling tarot } void spread(const char *p, const char *n, int type, char *mychannel) { char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); bool ignore=ignoreList.isListed(n); int num=0, ii, jj; int numbers[99]; char temp[2]; char *temp2= new char[500]; temp2[0]='\0'; char *temp3= new char[500];temp3[0]='\0'; if(*(p)=='!' && *(p+1)=='d' && *(p+2)=='r' && *(p+3)=='a' && *(p+4)=='w' && *(p+5)==' ') { temp[0]=*(p+6); temp[1]='\0'; num=atoi(temp); bool go=false; if(num>0 && num<8) { // draw cards for(ii=0; ii0 <8 if(go==false && type!=5) { Sendf("tel %s you can draw 1-7 cards\n", n); printf("\n tell invalid spread number from %s\n", n); } }// end if !draw } void spreadMajor(const char *p, const char *n, int type, char *mychannel) { char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); bool ignore=ignoreList.isListed(n); int num=0, ii, jj; int numbers[99]; char temp[2]; char *temp2= new char[500]; temp2[0]='\0'; char *temp3= new char[500];temp3[0]='\0'; if(*(p+8)!='m') return; if(*(p)=='!' && *(p+1)=='d' && *(p+2)=='r' && *(p+3)=='a' && *(p+4)=='w' && *(p+5)==' ') { temp[0]=*(p+6); temp[1]='\0'; num=atoi(temp); bool go=false; if(num>0 && num<8) { // draw cards for(ii=0; ii0 <8 if(go==false && type!=5) { Sendf("tel %s you can draw 1-7 cards\n", n); printf("\n tell invalid spread number from %s\n", n); } }// end if !draw } void processCHANELL(const char *p, const char *n){ char temp[1000]; char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); bool ignore=ignoreList.isListed(n); if(!strcmp(p, "!planets")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n, (char *) p, 1, false, "", 0); } if(!strcmp(p, "!planets inner")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n, (char *) p, 1, false, "", 1); } if(!strcmp(p, "!planets outer")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n, (char *) p, 1, false, "", 2); } if(!strcmp(p, "!planets asteroid")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n, (char *) p, 1, false, "", 3); } if(!strcmp(p, "!planets all")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n, (char *) p, 1, false, "", 4); } if(strlen(p)>7) { if(*(p)=='!' && *(p+1)=='p' && *(p+2)=='l' && *(p+3)=='a' && *(p+4)=='n' && *(p+5)=='e' && *(p+6)=='t' && *(p+7)=='s' && *(p+8)==' ' ) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; planets((char *) n,(char *) p, 1, true, "", 0); } if(*(p)=='!' && *(p+1)=='h' && *(p+2)=='o' && *(p+3)=='u' && *(p+4)=='s' && *(p+5)=='e' && *(p+6)=='s' && *(p+7)==' ' ) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!spamGuard(n)) return; writeHouses((char *) n,(char *) p, 1); return; } } if(strlen(p)>6) { char num[3]; if(*(p)=='!' && *(p+1)=='c' && *(p+2)=='a' && *(p+3)=='r' && *(p+4)=='d' && *(p+5)==' ') { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } num[0]=*(p+6); num[1]='\0'; if(strlen(p)>7) { num[1]=*(p+7); num[2]='\0'; } bool go=false; int number=atoi(num); if(number>0 && number<15) { if(!spamGuard(n)) return; Sendf("tel 103 %s\n", links[22+number*4-1]); printf("\n channel link %s from %s \n", links[22+number*4-1], n); printf("\n%s %s", timebuf, datebuf); go=true; } else{ for(int d=6; *(p+d)!='\0'; d++) { temp[d-6]=*(p+d); } temp[d-6]='\0'; makeNameLower(temp); for(d=0; d<22; d++) { if(!strcmp(temp, card[d])) { if(!spamGuard(n)) return; Sendf("tel 103 %s\n", links[d]); printf("\n%s %s", timebuf, datebuf); printf("\n channel link %s from %s \n", links[d], n); go=true; break; } // end if } // end for d=0-22 } // end else if(go==false) { Sendf("tel %s number not in the range of 1-14, i-xxii or I-XXII \n", n); printf("\n%s %s", timebuf, datebuf); printf("\n channel invalid number from %s\n", n); } }// end if card }// end if strlen(p)>6 } // end function void processSHOUT(const char *p, const char *n){ char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); bool ignore=ignoreList.isListed(n); if(!strcmp(p, "!time")) { if(ignore==true) { printf("\n shout ignoring !time %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; showtime((char *) n, 2); } if(!strcmp(p, "!planets")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; planets((char *) n, (char *) p, 2, false, "", 0); return; } if(!strcmp(p, "!planets inner")) { printf("\n !planets inner shout"); if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; printf("\ncalling planets for !planets inner shout"); planets((char *) n, (char *) p, 2, false, "", 1); return; } if(!strcmp(p, "!planets outer")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; planets((char *) n, (char *) p, 2, false, "", 2); return; } if(!strcmp(p, "!planets asteroid")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; planets((char *) n, (char *) p, 2, false, "", 3); return; } if(!strcmp(p, "!planets all")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; planets((char *) n, (char *) p, 2, false, "", 4); } if(strlen(p)>7) { if(*(p)=='!' && *(p+1)=='p' && *(p+2)=='l' && *(p+3)=='a' && *(p+4)=='n' && *(p+5)=='e' && *(p+6)=='t' && *(p+7)=='s' && *(p+8)==' ' ) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; planets((char *) n,(char *) p, 2, true, "", 0); return; } if(strlen(p)>7) { if(*(p)=='!' && *(p+1)=='a' && *(p+2)=='s' && *(p+3)=='p' && *(p+4)=='e' && *(p+5)=='c' && *(p+6)=='t' && *(p+7)=='s' && *(p+8)==' ' ) planets((char *) n,(char *) p, 15, true, "", 0); if(*(p)=='!' && *(p+1)=='t' && *(p+2)=='r' && *(p+3)=='a' && *(p+4)=='n' && *(p+5)=='s' && *(p+6)=='i' && *(p+7)=='t' && *(p+8)=='s' && *(p+9)==' ' ) planets((char *) n,(char *) p, 16, true, "", 0); } if(*(p)=='!' && *(p+1)=='h' && *(p+2)=='o' && *(p+3)=='u' && *(p+4)=='s' && *(p+5)=='e' && *(p+6)=='s' && *(p+7)==' ' ) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; writeHouses((char *) n,(char *) p, 2); return; } }// if >16 if(!strcmp(p, "!draw")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; int a=rand()%78; Sendf("i %s \n", deck[a]); Sendf("tell %s %s \n", n, links[a]); printf("\n%s %s", timebuf, datebuf); printf("\n%s shout , response: %s\n", n, deck[a]); return; } if(!strcmp(p, "!draw m")) { if(ignore==true) { printf("\n channel ignoring %s %s %s", n, timebuf, datebuf); return; } if(!shoutspamGuard(n)) return; int a=rand()%22; Sendf("i %s \n", deck[a]); Sendf("tell %s %s \n", n, links[a]); printf("\n%s %s", timebuf, datebuf); printf("\n%s shout , response: %s\n", n, deck[a]); return; } if(strlen(p)==7) spread(p, n, 2, ""); if(strlen(p)==9) spreadMajor(p,n, 2, ""); } // end function void makeNameLower(char *thename) {for(int i=0; *(thename+i)!='\0'; i++) if(*(thename+i)>64 && *(thename+i)<91) *(thename+i)+=32; } bool spamGuard(const char *n){ char timebuf[256]; char datebuf[256]; _strtime( timebuf ); _strdate(datebuf); long a=time(NULL); int max_tells=5; if(channel_tells.size()>max_tells-1) { //spam code --- true means go printf("\n channel tells > maxtells"); printf("\n time %d and value %d \n", a, channel_tells[channel_tells.size()-max_tells]); if(channel_tells[channel_tells.size()-max_tells]+300max_tells-1) { int maxseconds=210; if(shout_tells[shout_tells.size()-max_tells]+maxsecondstm_hour+(double)ptm->tm_min/60); double planet_signs[25]; int day=ptm->tm_mday; int month=ptm->tm_mon+1; int year=ptm->tm_year+1900; int go=-1; int maxplanets=11; int minplanets=0; int major=1; if(specific==true) { // testing this line type=qobject.readString(p, channel); printf("\n in ircplanets and year=%d month=%d day=%d", qobject.year, qobject.month, qobject.day); if(type>=10 && type<15) { major=0; type=type-10; } if(type==-1 && channel==6) return; if(type!=-1) { day=qobject.day; month=qobject.month; year=qobject.year; // thetime= ( double ) (qobject.hour+ (double) qobject.minute/60); thetime=qobject.thetime; } else { printf("\n channel planets date/time format attempted by %s, %s %s ", n, timebuf, datebuf); return; } } // double swe_julday(int year, int month, int day, double hour, int gregflag); double astro_time=swe_julday(year, month, day, thetime, 1); if(type==1) { maxplanets=5; minplanets=0; } if(type==2) { maxplanets=10; minplanets=5; } if(type==3) { minplanets=10; maxplanets=17; } if(type==4) { minplanets=0; maxplanets=i_maxplanets; } // int swe_calc(double tjd_et, int ipl, int iflag, double *xx, char *serr), double xxx[6], *xx=xxx; char serr[999], *serr2=serr; int val=0; char *temp= new char[500]; temp[0]='\0'; int s=0; int weight=0; double cusp[16]; /* empty + 12 houses */ if(maxplanets==11 && minplanets==0) { if(qobject.lon!=-1000) { weight=1; pch_planets[11]="ASC"; double ascmc[10]; /* asc, mc, armc, vertex .. */ int aaa=swe_houses(astro_time, (double ) qobject.lat, (double ) qobject.lon, 'P', cusp, ascmc); char tempcharnum2[33]; char tempminute2[33]; convert(cusp[1], tempcharnum2, tempminute2); temp=strcat(temp, "Asc"); temp=strcat(temp, " "); temp=strcat(temp, tempcharnum2); temp=strcat(temp, "° "); temp=strcat(temp, tempminute2); temp=strcat(temp, "' "); temp=strcat(temp, getsign(cusp[1])); temp=strcat(temp, "; "); } } if(channel==7 && weight==0) // they tried to call !chart without lat lon return; for(int a=0; a=minplanets && a=cusp[a+1] && sign cusp[a+2]-3.5) // its on the cusp { temp2=itoa(a+2, temp2, 10); for(b=0; temp1[b]!='\0'; b++) ; // just move through temp1[b++]='/'; for(c=b; temp2[c-b]!='\0'; c++) temp1[c]=temp2[c-b]; temp1[c]='\0'; } return temp1; } } if(sign>=cusp[12] && sign cusp[1]-3.5 && signcusp[a]-3.5) // its on the cusp { temp2=itoa(a, temp2, 10); for(b=0; temp1[b]!='\0'; b++) ; // just move through temp1[b++]='/'; for(c=b; temp2[c-b]!='\0'; c++) temp1[c]=temp2[c-b]; temp1[c]='\0'; } return temp1; } } if(sign>cusp[1]-3.5) return "12/1"; else return "12"; return " "; } void convert(double myDegree, char tempcharnum[], char tempminute[]){ // degreetypes[a]=xxx[0]; int s= (int)((myDegree/30))%12 + 1; // ss[a]=s; int tempnum=(int) (myDegree-((s-1)*30)); itoa(tempnum, tempcharnum, 10); int degree= (int) myDegree; double fraction= ( double) myDegree-degree; double fraction2= (double) fraction*3600; double minute1=fraction2/60; int minute= (int ) (fraction2/60); // minutes[a]=minute; itoa(minute, tempminute, 10); } void makeAspectString(char *temp, char tempcharnum[], char tempminute[], int type, int i, int j) { char *types[10]; types[0]="Conj"; types[1]="Trine"; types[2]="Square"; types[3]="Opp"; types[4]="Sext"; types[5]="SemiSextile"; types[6]="Decile"; types[7]="SemiSquare"; temp=strcat(temp, pch_planets[i]); temp=strcat(temp, " "); temp=strcat(temp, types[type]); temp=strcat(temp, " "); temp=strcat(temp, pch_planets[j]); temp=strcat(temp, " "); temp=strcat(temp, tempcharnum); temp=strcat(temp, "° "); temp=strcat(temp, tempminute); temp=strcat(temp, "' "); } void makeTransitString(char *temp, char tempcharnum[], char tempminute[], int type, int i, int j){ char *types[10]; types[0]="Conj"; types[1]="Trine"; types[2]="Square"; types[3]="Opp"; types[4]="Sext"; temp=strcat(temp, pch_planets[j]); temp=strcat(temp, " "); temp=strcat(temp, types[type]); temp=strcat(temp, " n"); temp=strcat(temp, pch_planets[i]); temp=strcat(temp, " "); temp=strcat(temp, tempcharnum); temp=strcat(temp, "° "); temp=strcat(temp, tempminute); temp=strcat(temp, "' "); } char *getsign(double truedegree){ int s= (int)((truedegree/30))%12 + 1; if(s==1) return "Ari"; if(s==2) return "Tau"; if(s==3) return "Gem"; if(s==4) return "Can"; if(s==5) return "Leo"; if(s==6) return "Vir"; if(s==7) return "Lib"; if(s==8) return "Sco"; if(s==9) return "Sag"; if(s==10) return "Cap"; if(s==11) return "Aqu"; if(s==12) return "Pis"; return ""; // double sign_degree=truedegree-((sign-1)*30); } void calculateAspects(double planet_signs[], int pbottom, int ptop, char *mychannel, int major, int weight, int channel) { double conjunction=8; double square=8; double trine=8; double opposition=8; double sextile=5; double orb=0; double semisquare=1.5; double semisextile=1.5; double decile=1.5; char *temp= new char[500]; temp[0]='\0'; char *temp2= new char[500]; temp2[0]='\0'; char *temp3= new char[500]; temp3[0]='\0'; char *temp4= new char[500]; temp4[0]='\0'; char *temp5= new char[500]; temp5[0]='\0'; int mymax=11; if(pbottom==0 && ptop==11) mymax=11+weight; else mymax=i_maxplanets; planetcheck obj; for(int ii=pbottom; iiplanet_signs[jj]) orb=planet_signs[ii]-planet_signs[jj]; else orb=planet_signs[jj]-planet_signs[ii]; if(360-orbplanet_signs[jj]) orb=planet_signs[ii]-planet_signs[jj]; else orb=planet_signs[jj]-planet_signs[ii]; if(360-orb1) { Sendf("tell %s :%s\n", mychannel, temp2); Sleep(wait); } if(strlen(temp3)>1) { Sendf("tell %s :%s\n", mychannel, temp3); Sleep(wait); } if(strlen(temp4)>1) { Sendf("tell %s :%s\n", mychannel, temp4); Sleep(wait); } if(strlen(temp5)>1) { Sendf("tell %s :%s\n", mychannel, temp5); Sleep(wait); } } delete temp; delete temp2; delete temp3; delete temp4; delete temp5; } // end function void calculateTransits(double planet_signs[], int pbottom, int ptop, char *mychannel, const char *p, int weight, queryTime qobject, int channel) { double conjunction=2; double square=2; double trine=2; double opposition=2; double sextile=2; double orb=2; char *temp= new char[500]; temp[0]='\0'; char *temp2= new char[500]; temp2[0]='\0'; char *temp3= new char[500]; temp3[0]='\0'; int mymax=11; double xxx[6], *xx=xxx; char serr[999], *serr2=serr; time_t rawtime; tm * ptm; time ( &rawtime ); ptm = gmtime ( &rawtime ); double thetime= (double) (ptm->tm_hour+(double)ptm->tm_min/60); int day=ptm->tm_mday; int month=ptm->tm_mon+1; int year=ptm->tm_year+1900; int value=-1; if(qobject.year2!=-1000) if(qobject.month2!=0) if(qobject.day2!=0) { day=qobject.day2; month=qobject.month2; year=qobject.year2; thetime=qobject.thetime2; } if(value==0) { pbottom=0; ptop=11; } if(value==1) { ptop=5; pbottom=0; } if(value==2) { ptop=10; pbottom=5; } if(value==3) { pbottom=10; ptop=17; } if(value==4) { pbottom=0; ptop=i_maxplanets; } if(pbottom==0 && ptop==11) mymax=11; else mymax=i_maxplanets; double astro_time=swe_julday(year, month, day, thetime, 1); int val; double planet_signs2[25]; for(int a=0; a=pbottom && jj=pbottom && jjplanet_signs2[jj]) orb=planet_signs[ii]-planet_signs2[jj]; else orb=planet_signs2[jj]-planet_signs[ii]; if(360-orb1) { Sendf("tell %s :%s\n", mychannel, temp2); Sleep(wait); } if(strlen(temp3)>1) { Sendf("tell %s :%s\n", mychannel, temp3); Sleep(wait); } } delete temp; delete temp2; delete temp3; } // end function void writeHouses( char *n, char *p, int channel){ char hnum[50]; char *temp= new char[500]; temp[0]='\0'; double cusp[16]; /* empty + 12 houses */ double ascmc[10]; /* asc, mc, armc, vertex ... */ queryTime qobject; // int go=qobject.parseQuery(p, channel); int go=qobject.readString(p, 6); if(go==-1) return; double thetime= ( double ) (qobject.hour+ (double) qobject.minute/60); double astro_time=swe_julday(qobject.year, qobject.month, qobject.day, thetime, 1); char *hsy="PKORCAEVXHTBG"; int aa=swe_houses(astro_time, (double ) qobject.lat, (double ) qobject.lon, 'P', cusp, ascmc); for (int ii = 1; ii <= 12; ii++) { char tempcharnum[33]; char tempminute[33]; convert(cusp[ii], tempcharnum, tempminute); if(ii!=1 && ii!=10) temp=strcat(temp, "H"); itoa(ii, hnum, 10); if(ii!=1 && ii!=10) temp=strcat(temp, hnum); if(ii==1) temp=strcat(temp, "Asc"); if(ii==10) temp=strcat(temp, "MC"); temp=strcat(temp, " "); temp=strcat(temp, tempcharnum); temp=strcat(temp, "° "); temp=strcat(temp, tempminute); temp=strcat(temp, "' "); temp=strcat(temp, getsign(cusp[ii])); if(ii<12) temp=strcat(temp, "; "); } // end for if(channel==0) Sendf("tell %s %s\n", n, temp); if(channel==1) Sendf("tell 103 %s\n", temp); if(channel==2) Sendf("shout %s\n", temp); Sleep(wait); printf("\n !houses"); delete temp; } // end function void showtime(char *n, int type) { time_t rawtime; tm * ptm; time ( &rawtime ); ptm = gmtime ( &rawtime ); int hour=ptm->tm_hour; int minute=ptm->tm_min; int day=ptm->tm_mday; int month=ptm->tm_mon+1; int year=ptm->tm_year+1900; if(type==1){ if(minute>9) Sendf("tell %s %d.%d.%d %d:%d UTC\n", n, day, month, year, hour, minute); else Sendf("tell %s %d.%d.%d %d:0%d UTC\n", n, day, month, year, hour, minute); } else if(type==2) { if(minute>9) Sendf("i %d.%d.%d %d:%d UTC\n", day, month, year, hour, minute); else Sendf("i %d.%d.%d %d:0%d UTC\n", day, month, year, hour, minute); } Sleep(wait); } void showhelp( char *n) { Sendf("tell %s This is a help file for astro help with astrobot.\n", n); Sendf("tell %s To show the planets now use the commands, '!planets' '!planets inner' '!planets outer' '!planets asteroid' '!plants all' such as tell astrobot !planets asteroid\n", n); Sendf("tell %s Also to get the planets at a given time, say your birth time which would be your chart, use 'tell astrobot !planets d.m.y h:m'. Since people gives times in different time zones i assume the time and date is converted to UTC time.\n", n); Sendf("tell %s Type 'tell astrobot !time' to see the current UTC time. Be aware UTC time does not move ahead like the rest of the time zones in the spring and summer for daylights savings time\n", n); Sendf("tell %s I also calculate aspects which are the angles between the planets at a given time. A trine is a 120 degree angle, a conjunction is a 0 degree angle ( i.e. both in same degree). I give the aspects along with their orb how much they deviate from the perfect angle\n", n); Sendf("tell %s Use 'tell astrobot !aspects' To see the aspects the planets now make. Use 'tell astrobot !aspects d.m.y h:m' to see the aspects for a birth time.\n", n); Sendf("tell %s I can calculate which planets now are transiting a persons natal planets. This means the planet now is forming an angle with where a planet is in the birth chart.\n", n); Sendf("tell %s Use 'tell astrobot !transits d.m.y h:m' The output gives the orb of the transit and the natal planet or birth planet has an 'n' before it.\n", n); Sendf("tell %s To see your transits that occured or are going to occur at a day other than the present type 'tel astrobot !transits d.m.y h:m d.m.y h:m' were the second date is the date you want the transits for.\n", n); Sendf("tell %s Houses are based on the time of sunrise and sunset for a birthdate. If you have an exact birthtime, location of birth latitude and longitude, you can get the houses. Use 'tel tarot !houses d.m.y h:m latdeg:latmin longdeg:longmin'", n); Sendf("tell %s Example 'tel astrobot !houses 28.12.1970 15:25 33:46 -118:11' You can use www.astro.com/atlas for the long and lat. N/E is positive, W/S is negative. The start of house 1 is your ascendent or rising.", n); } std::vector deck; std::vector links; std::vector card; long mytime; long shouttime; ignoreNames ignoreList; std::vector channel_tells; std::vector shout_tells; char *pch_planets[25]; char *pch_planets2[25]; long wait; int i_maxplanets; }; void Connect(); void Process(tarot *);