#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); }