"Fossies" - the Fresh Open Source Software archive 
Member "dbox-2.41/online/addrbook.C" of archive dbox-2.41.tgz:
/*
DBOX Module
Copyright (C) 1994-2000 Daniel Kroening <kroening@handshake.de>
Purpose:
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dirent.h>
#include <fcntl.h>
#include <time.h>
#include <sys/stat.h>
#include <dbox.h>
#include <log_serv.h>
#include <oldui.h>
#include <oldtools.h>
#include "online.h"
#include "help.h"
#include "vfolder.h"
#include "readmail.h"
#include "editor.h"
#include "wmail.h"
#include "readnews.h"
#include "addrbook.h"
#define MAXENTRIES 20000
struct indexentryt
{
char *email, *description;
};
static int sort_string(const void *a, const void *b)
{
indexentryt *aa, *bb;
aa=(indexentryt *)a;
bb=(indexentryt *)b;
return stricmp(aa->email, bb->email);
}
class addrbookt:public viewfoldert
{
public:
indexentryt index[MAXENTRIES];
virtual void readindex();
virtual void freeindex();
virtual void displayline(dword line);
virtual void key(word k);
virtual void nameeingeben();
virtual void draw(bool complete);
virtual void read();
virtual void help();
virtual void eintragen();
virtual void del();
private:
void doedit(const char *username);
};
void addrbookt::readindex()
{
char filename[DIRLEN], kennung[1000], text[1000], name[TEXTLEN];
FILE *infile;
online.clrscr();
online.setcursor(1, 1);
online.printf("Bitte warten...");
anz=0;
snprintf(filename, DIRLEN, "%saddrbook", status.userprofile.getpath());
if((infile=fopen(filename, "rt"))==NULL) return;
schleife:
switch(readconfigline(infile, kennung, text, 499))
{
case 0:
if(stricmp(kennung, "email")==0)
{
text[TEXTLEN-1]=0;
index[anz].email=strdup(text);
if(index[anz].email==NULL)
{
log_serv.printf("userverwt::readindex", "FATAL: Zu wenig RAM!");
return;
}
index[anz].description=strdup(name);
if(index[anz].description==NULL)
{
log_serv.printf("userverwt::readindex", "FATAL: Zu wenig RAM!");
return;
}
anz++;
}
else if(stricmp(kennung, "name")==0)
{
strmaxcpy(name, text, TEXTLEN-1);
}
else
{
log_serv.printf("addrbook",
"Unbekannter Eintrag \"%s\" in der addrbook-Datei",
kennung);
break;
}
goto schleife;
case 1:
break;
default:
log_serv.printf("addrbook", "Fehler in der addrbook-Datei");
}
fclose(infile);
qsort(index, anz, sizeof(indexentryt), sort_string);
}
void addrbookt::freeindex()
{
dword i;
for(i=0; i<anz; i++)
{
free(index[i].email);
if(index[i].description!=NULL) free(index[i].description);
}
}
void addrbookt::displayline(dword line)
{
char tempstr[TEXTLEN*2], tempstr2[TEXTLEN*2];
if(line>=anz) return;
strmaxcpy(tempstr2, index[line].email, (TEXTLEN*2)-1);
tempstr2[40]=0;
snprintf(tempstr, TEXTLEN, " %-40s ", tempstr2);
if(index[line].description!=NULL)
strcat(tempstr, index[line].description);
viewfoldert::displayline(line, tempstr);
}
void addrbookt::key(word k)
{
char ch=upcase(lo(k));
switch(ch)
{
case '/':
nameeingeben();
break;
case 'E':
eintragen();
break;
default:
viewfoldert::key(k);
}
}
void addrbookt::nameeingeben()
{
}
void addrbookt::draw(bool complete)
{
snprintf(title, TEXTLEN, "Adressbuch - drcken Sie ? fr Hilfe");
viewfoldert::draw(complete);
}
void addrbookt::read()
{
}
void addrbookt::doedit(const char *username)
{
}
void addrbookt::help()
{
displayhelp("addrbook.html");
if(!status.dologout) draw(TRUE);
}
void addrbookt::del()
{
char tempstr[TEXTLEN];
omet mes[3];
online.setattr(2, FALSE);
online.box(20, 8, 60, 16, BOXFRAMEDBL, "Eintrag lschen", TRUE);
online.setcursor(25, 10);
online.printf("E-Mail: ");
online.setattr(2, TRUE);
strmaxcpy(tempstr, index[pos].email, 25);
online.printf("%s", tempstr);
online.setattr(2, FALSE);
online.setcursor(28, 12);
online.printf("Wirklich lschen?");
mes[0].type=omet::COMMANDBUTTON;
mes[0].x=26;
mes[0].y=14;
mes[0].key=Key_C_Ent;
mes[0].sizex=6;
mes[0].text="O^k";
mes[1].type=omet::COMMANDBUTTON;
mes[1].x=43;
mes[1].y=14;
mes[1].key=0;
mes[1].sizex=9;
mes[1].text="^Abbruch";
mes[2].type=omet::END_OF_LIST;
schleife:
switch(domenu(&online, mes, 1, TRUE))
{
case 0:
break;
case MENU_HELP:
goto schleife;
}
online.setattr(1, FALSE);
if(!status.dologout && !reread) draw(TRUE);
}
void addrbookt::eintragen()
{
char email[TEXTLEN]="";
omet mes[3];
online.setattr(2, FALSE);
online.box(20, 10, 60, 16, BOXFRAMEDBL, "Eintrag hinzufgen", TRUE);
online.setcursor(28, 12);
online.printf("E-Mail:");
mes[0].type=omet::EDIT;
mes[0].key=0;
mes[0].x=36;
mes[0].y=12;
mes[0].sizex=16;
mes[0].maxlen=40;
mes[0].text=email;
mes[1].type=omet::COMMANDBUTTON;
mes[1].x=26;
mes[1].y=14;
mes[1].key=Key_C_Ent;
mes[1].sizex=6;
mes[1].text="O^k";
mes[2].type=omet::COMMANDBUTTON;
mes[2].x=43;
mes[2].y=14;
mes[2].key=0;
mes[2].sizex=9;
mes[2].text="^Abbruch";
mes[3].type=omet::END_OF_LIST;
schleife:
switch(domenu(&online, mes, 0, TRUE))
{
case 1:
break;
case MENU_HELP:
goto schleife;
}
online.setattr(1, FALSE);
if(!status.dologout && !reread) draw(TRUE);
}
void addrbook()
{
addrbookt *ab=new addrbookt;
if(ab!=NULL)
{
ab->viewfolder();
delete ab;
}
}