#include
#include
#include
#include
#include
#include
#include"scrtools.h"
#include"mails.c"
void main() {
/*Variable Defs*/
char *fnames = (char *) malloc(MAXMES * 13 * 2);
FILE *fp,*in,*out;
char buffer1[250];
char buffer2[250];
char filechk[100];
char fna[100];
char to[10];
char from[10];
struct time ts;
struct date dt;
struct ffblk ffblk;
char numfiles = 0;
char filenumber = 0;
unsigned fa = 0;
char new = 0;
int x = 0;
/*Code*/
clrscr();
directvideo=1;
textmode(64);
sprintf(buffer1,"%s%s%s@0F@:",MAILVER,MAILVER2,__DATE__);
disp(buffer1);
switch(getusr(from)) {
case 0: textmode(3); disp("\r\n\7@0F@User Name not Found, exiting...\r\n\r\n"); exit(90);
case -1: textmode(3); disp("@03@\7 Error Exiting..."); exit(9);
case 1: break;
default: textmode(3); disp("\r\n\7@07@Error, exiting...\r\n"); exit(222);
}
disp("\r\n@03@Checking For @0F@Personal@03@ E-Mail...\r\n");
delay(900);
new = 0;
numfiles=0;
if(findfirst(MAILFILES,&ffblk,0)) {
disp("@03@\r\nSorry, No @0f@Personal @03@E-Mail...\r\n");
delay(500);
goto No_Mail_EndProg;
}
sprintf(fnames,"%s",ffblk.ff_name);
sprintf(filechk,"%s%s",MAILDIR,ffblk.ff_name);
_dos_getfileattr(filechk,&fa);
if((fa & FA_ARCH)) new++;
numfiles=1;
disp("@04@Scanning Mail... ");
while(!findnext(&ffblk)) {
sprintf(fnames + (numfiles * 13) ,"%s",ffblk.ff_name);
sprintf(filechk,"%s%s",MAILDIR,ffblk.ff_name);
_dos_getfileattr(filechk,&fa);
if((fa & FA_ARCH)) new++;
numfiles++;
if(numfiles == MAXMES * 2) break;
}
textcolor(15);
cprintf("%i",numfiles);
disp(" @09@Message(s) found,");
if(!new) disp("@07@ 0 new.\r\n");
else {
textcolor(15);
cprintf("%i",new);
disp(" @07@new.\r\n");
}
disp("@09@Sorting mail...");
if(numfiles > MAXMES + 1 ){
qsort((void *)fnames,numfiles,13, sorter2);
qsort((void *)fnames,MAXMES,13, sorter);
}
else qsort((void *)fnames,numfiles,13, sorter);
delay(500);
disp("\r\n@07@Mail Sorted...");
if(numfiles > MAXMES - WARNDIF && numfiles <= MAXMES) {
disp("\r\n@0F@You now have ");
cprintf("%i",numfiles);
disp(" messages. The upper limit\r\n");
cprintf("on mail is %i pieces. If you exceed %i,\r\n",MAXMES,MAXMES);
disp("Some mail will be inaccessible until you get\r\n");
cprintf("rid of enough to drop back below %i.\r\n",MAXMES);
disp("@8F@This is a warning.\r\n");
disp("@0f@Thank you.\r\n");
disp("@09@Hit any key to continue...");
getch();
}
if(numfiles>MAXMES && numfiles <= MAXMES + WARNDIF) {
disp("\r\n@0F@You now have ");
cprintf("%i",numfiles);
disp(" messages. The upper limit\r\n");
cprintf("on mail is %i pieces. You have exceeded\r\n",MAXMES);
disp("this limit. Some of your newer mail is now inaccessible,\r\n");
cprintf("if you get rid of mail and drop back below %i,\r\n",MAXMES);
disp("you will be able to read all of your mail.\r\n");
cprintf("If you exceed %i, user %s will be notified...\r\n",MAXMES + WARNDIF,SUPERUSER);
disp("@0f@Thank you.\r\n");
disp("@09@Hit any key to continue...");
getch();
}
if(numfiles > MAXMES + WARNDIF) {
textcolor(15);
cprintf("\r\n");
cprintf("You now have %i messages. The upper limit is %i.\r\n\r\n",numfiles,MAXMES);
textcolor(7);
cprintf("You have exceeded %i. %s will now be notified.\r\n\r\n",MAXMES + WARNDIF,SUPERUSER);
textcolor(BLINK + 7);
cprintf("Please kill some of your mail. Now.\7\r\n\r\n");
textcolor(9);
delay(4000);
cprintf("Hit any key to continue...");
if(chkusr(SUPERUSER) == 0) goto ub;
do {
sprintf(filechk,"%s%s\\MAIL\\%s.MSG",ROOTDIR,SUPERUSER,ultoa(time(NULL) - Toff,buffer1,16));
} while(exist(filechk));
if(!(fp = fopen(filechk,"w"))) goto ub;
gettime(&msghdr.msgtime);
getdate(&msghdr.msgdate);
strcpy(msghdr.sender,"SYSTEM");
strcpy(msghdr.reciever, SUPERUSER);
msghdr.forward = 0;
msghdr.carbon = 0;
msghdr.replied = 0;
sprintf(msghdr.subject,"User %s has too Many Messages!",from);
fwrite(&msghdr,sizeof(mhdr),1,fp);
fclose(fp);
while(kbhit()) getch();
getch();
ub:
}
delay(1200);
filenumber = 0;
theloop:
clrscr();
sprintf(fna,"%s%s",MAILDIR,fnames + (filenumber * 13));
sprintf(buffer1,"@09@Message number %i of %i",filenumber+1,numfiles);
_dos_getfileattr(fna,&fa);
if((fa & FA_ARCH)) strcat(buffer1," @0A@\r\n");
else strcat(buffer1," @04@\r\n");
_dos_setfileattr(fna,0);
disp(buffer1);
dmsg(fna);
disp("\r\n@03@[@0B@N@03@]ext, @03@[@0B@R@03@]eply, @03@[@0B@A@03@]gain, @03@[@0B@L@03@]ast, @03@[@0B@F@03@]orward \r\n");
disp( "@03@[@0B@S@03@]ave, @03@[@0B@P@03@]rint, @03@[@0B@J@03@]ump, @03@[@04@K@03@]ill, @03@[@0B@T@03@]ag New, @03@[@0F@Q@03@]uit: ");
h:
x=getch();
if(!x) goto h;
switch(toupper(x)) {
case 'N': case 13:
disp("@0B@Next...\r\n");
delay(200);
filenumber++;
if(numfiles <= filenumber || filenumber >= MAXMES) goto endprog;
goto theloop;
case 'T':
disp("@0b@Tag New\r\n");
delay(200);
disp("Tagging as new\r\n");
_chmod(fna,1,FA_ARCH);
delay(200);
disp("@07@Jumping to next message...");
delay(700);
filenumber++;
if(numfiles <= filenumber || filenumber >= MAXMES) goto endprog;
goto theloop;
case 'L':
disp("@0B@Last...\r\n");
delay(200);
if(filenumber) filenumber--;
if(numfiles <= filenumber || filenumber >= MAXMES) goto endprog;
goto theloop;
case 'J':
if(numfiles <= MAXMES) sprintf(buffer1,"@0b@Jump\r\nMessage (1 - @0A@%i@0B@): ",numfiles);
else sprintf(buffer1,"@0b@Jump\r\nMessage (1 - @0A@%i@0B@): ",numfiles);
disp(buffer1);
fgets(buffer1,4,stdin);
if(buffer1[0] == '\n' || buffer1[0] == '\r') goto theloop;
x = atoi(buffer1);
if(x < 1 || x > numfiles || x > MAXMES) {
disp("@0f@Invalid Message Number");
delay(500);
goto theloop;
}
filenumber = x - 1;
goto theloop;
case 'F':
disp("@0B@Forward...\r\n");
delay(500);
clrscr();
disp(MAILVER);
dfile(INFOFILE);
disp("\r\n@04@Forward To : ");
if(sgets(8,to,0)) goto theloop;
if(!to[0]) goto theloop;
if(stricmp(to,"ALL") == 0) {
disp("\r\n\7@09@Enter Password: ");
textcolor(0);
sgets(20,buffer1,0);
if(stricmp(buffer1,ALLPASS)) {
disp("\7\r\n@0F@Invalid Password...");
goto theloop;
}
else {
disp("\r\n@0F@Password Accepted, \1 Have a nice Day \1");
copy_file(fna,"MAILTEMP.$$$");
sprintf(buffer1,"ECHO @0A@Forwarded by: @04@%s >> MAILTEMP.$$$",from);
system(buffer1);
distr();
remove("MAILTEMP.$$$");
to[0] = 0;
goto theloop;
}
} //ALL
switch(chkusr(to)) {
case 0: disp("\r\n\7@0F@Invalid User Name...\r\n\r\n"); delay(500); goto theloop;
case -1: textmode(3); disp("@03@\7ERROR Exiting..."); exit(9);
case 1: break;
default: textmode(3); disp("\r\n\7@07@Error, exiting...\r\n"); exit(222);
}
x = 0;
strupr(&to);
while(to[x] != ' ' && to[x++]);
to[x - 1] = 0;
copy_file(fna,"mailtemp.$$$");
fp = fopen("mailtemp.$$$","r+");
fread(&msghdr,sizeof(mhdr),1,fp);
msghdr.forward = 1;
strcpy(msghdr.forwarder,from);
fseek(fp,0L,SEEK_SET);
fwrite(&msghdr,sizeof(mhdr),1,fp);
fclose(fp);
do {
sprintf(filechk,"%s%s\\MAIL\\%s.msg",ROOTDIR,to,ultoa(time(NULL) - Toff,buffer1,16));
} while(exist(filechk));
move_file("MAILTEMP.$$$",filechk);
disp("\r\n@0F@File Forwarded...\r\n");
delay(500);
goto theloop;
case 'S':
disp("@0B@Save...@07@\r\nEnter file name: ");
gets(filechk);
if(!buffer1[0]) {
disp("@0F@File save aborted...\r\n");
goto theloop;
}
in = fopen(fna,"r");
out = fopen("MAILTEMP.!!!","w");
disp("@03@Saving...\r\n");
delay(200);
fread(&msghdr,sizeof(mhdr),1,in);
fprintf(out,"From : %s\n", msghdr.sender);
fprintf(out,"To : %s\n", msghdr.reciever);
fprintf(out,"Subject : ");
if(msghdr.replied) fprintf(out,"Re: ");
fprintf(out,"%s\n", msghdr.subject);
fprintf(out,"Date : %i/%i/%i @ %i:%i\n",msghdr.msgdate.da_day,msghdr.msgdate.da_mon,msghdr.msgdate.da_year,
msghdr.msgtime.ti_hour, msghdr.msgtime.ti_min);
if(msghdr.carbon) fprintf(out,"Carbon Copy\n");
if(msghdr.forward)
fprintf(out,"Forwarded by: %s\n",msghdr.forwarder);
fprintf(out,"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n");
for(;;){
if(fgets(buffer1,388,in) == 0) {
fputs("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n",out);
fclose(out);
fclose(in);
sprintf(buffer1,"type MAILTEMP.!!! >> %s",filechk);
system(buffer1);
remove("mailtemp.!!!");
goto theloop;
}
stripstr(buffer1,buffer2);
fputs(buffer2,out);
}
/* case 'P':
in = fopen(fna,"r");
out = fopen("MAILTEMP.!!!","w");
disp("@03@Printing...\r\n");
delay(200);
fread(&msghdr,sizeof(mhdr),1,in);
fprintf(out,"From : %s\n", msghdr.sender);
fprintf(out,"To : %s\n", msghdr.reciever);
fprintf(out,"Subject : ");
if(msghdr.replied) fprintf(out,"Re: ");
fprintf(out,"%s\n", msghdr.subject);
fprintf(out,"Date : %i/%i/%i @ %i:%i\n",msghdr.msgdate.da_day,msghdr.msgdate.da_mon,msghdr.msgdate.da_year,
msghdr.msgtime.ti_hour, msghdr.msgtime.ti_min);
if(msghdr.carbon) fprintf(out,"Carbon Copy\n");
if(msghdr.forward)
fprintf(out,"Forwarded by: %s\n",msghdr.forwarder);
fprintf(out,"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n");
for(;;){
if(fgets(buffer1,388,in) == 0) {
fclose(out);
fclose(in);
system("COPY MAILTEMP.!!! PRN > NUL");
remove("mailtemp.!!!");
goto theloop;
}
stripstr(buffer1,buffer2);
fputs(buffer2,out);
}
*/ case 'R':
in = fopen(fna,"r");
disp("@0B@Reply...\r\n");
delay(200);
fread(&msghdr, sizeof(mhdr),1,in);
strcpy(buffer1,msghdr.sender);
switch(chkusr(buffer1)) {
case 0: disp("\r\n\7@0F@Invalid User Name...\r\n\r\n"); delay(600); goto theloop;
case -1: textmode(3); disp("@03@Error, Exiting..."); exit(9);
case 1: break;
default: textmode(3); disp("\r\n\7@07@Error, exiting...\r\n"); exit(222);
}
strcpy(to,buffer1);
fclose(in);
disp("\r\n@07@Quote from Message(@04@Y@07@/n)? ");
if (toupper(getch()) == 'N') {
disp("@03@No...\r\n");
sendm(to,from,buffer2,"",1);
}
else {
disp("@03@Yes...\r\n");
sendm(to,from,buffer2,fna,1);
}
delay(400);
goto theloop;
case 'A':
disp("@0B@Again...\r\n");
delay(200);
goto theloop;
case 'K':
disp("@04@Kill!\r\n");
disp("@04@Are You Sure @03@(@0A@N/y@03@)? ");
if(toupper(getch()) != 'Y') {
disp("@0B@Nope...\r\n");
goto theloop;
}
disp("@04@Yes...\r\n");
delay(500);
if(remove(fna) == -1) disp("@0F@Cannot Kill Message...\r\n");
else {
disp("@0F@Message Removed...\r\n");
disp("@09@Re-Sorting...\r\n");
numfiles--;
strcpy(fnames +(filenumber * 13),fnames + (numfiles * 13));
if(numfiles > MAXMES + 1) {
qsort((void *)fnames,numfiles,13, sorter2);
qsort((void *)fnames,MAXMES,13, sorter);
}
else qsort((void *)fnames,numfiles,13, sorter);
delay(400);
if(numfiles <= filenumber || filenumber >= MAXMES) goto endprog;
}
goto theloop;
case 'Q': case 27:
disp("@0F@Quit...");
delay(200);
goto endprog;
default:
goto h;
} //Switch
endprog:
clrscr();
disp("@03@\r\nSorry, No @07@More @0f@Personal @03@E-Mail...\r\n");
No_Mail_EndProg:
delay(800);
textmode(3);
disp("\r\n\r\n@03@Thank you for using ");
disp(MAILVER);
cprintf("\r\n");
delay(300);
exit(0);
}