home *** CD-ROM | disk | FTP | other *** search
- /*======================================================================*/
- /* XBBS Bulletin Board System.....CHEAP USER EDITOR (XUser) */
- /* Copyright (c) 1989/90 by M. Kimes...all rights reserved */
- /*======================================================================*/
-
- #include "msgg.h"
-
- /* Function prototypes */
-
- char * genin(char length,char password,char caps,char hot,char type);
- int pascal swap_LMRs (word user1,word user2);
- int inkey(void);
- void update(void);
- void displayuser(void);
- void getuser(void);
- void rstrip (char *);
- void packusers(void);
- char * saydate(struct date *);
- char * saytime(struct time *);
- void userlist(void);
- char specialkey(char);
- char inkey2(void);
- char regularkey(char);
- void left(char *a,char *b,word x);
- void right(char *a,char *b,word x);
- void mid(char *a,char *b,word x,word y);
- word finduser(char *,word);
- void printer (char *,...);
- ulong diffdays(struct date *);
- void deletebyday(ulong);
- void getonline(void);
- void set_new(void);
- void prepare(void);
- void readconfig(void);
- void saveconfig(void);
- void LMRpack(void);
- int break_handler(void);
- void addLMRs(void);
- void display2(void);
- char specialkey2(char);
- char regularkey2(char);
- void pack_mset(void);
-
- /* Symbols for GENIN */
-
- #define ALL 1
- #define ALPHA 2
- #define NUM 3
- #define ALPHANUM 4
- #define YESNO 5
- #define FLE 6
- #define FLEP 7
- #define FLEW 8
- #define FLEPW 9
- #define NAME 10
- #define NEAT 11
-
- /* Global variables */
-
- struct _user user;
- word userno=1;
- struct ffblk f;
- char changed=0;
- char usedirect=1;
- char online_user=0;
- char nodenumber=1;
- word baud=0;
- word timelimit=60;
- struct time starter;
- struct time timeon;
- char variable[10][82];
- char pages;
- struct _mboard mboard;
- struct _fboard fboard;
- char level=0;
- char timer_off;
- char age;
- word *LMR;
- word hold_time;
- struct _config conf;
- struct _events event[10];
- char *deletelist;
- char page=0;
- char clear_vars=0;
- char didbreak=0;
- char packing=0;
-
- struct _msetup {
- unsigned long userid;
- char node;
- unsigned char areas[512];
- } mset;
-
-
-
-
- void main (int argc,char **argv) {
-
- FILE *fp;
- int handle;
- char *p;
- register word xx;
-
- readconfig();
- LMR=(word *)malloc(conf.nolmrs * sizeof(word));
- if(LMR==NULL) {
- printf("\nOOM for LMR's (%u)\n",conf.nolmrs);
- exit(1);
- }
-
- printf("\nXUSER copyright (c) 1989 by M. Kimes\nCompiled: %s %s\n",__DATE__,__TIME__);
- ctrlbrk(break_handler);
- if ((argc>1) and (stricmp(argv[1],"PACK"))==0) {
- deletelist=(char *)malloc((word)65535);
- if(deletelist==NULL) {
- printf("\nNot enough memory to run\n");
- exit(2);
- }
- packusers();
- if(deletelist) free(deletelist);
- exit(0);
- }
- if ((argc>1) and (stricmp(argv[1],"CLEAR"))==0) {
- deletelist=(char *)malloc((word)65535);
- if(deletelist==NULL) {
- printf("\nNot enough memory to run\n");
- exit(2);
- }
- clear_vars=1;
- packusers();
- if(deletelist) free(deletelist);
- exit(0);
- }
-
- if ((argc>1) and (*argv[1]=='?' || toupper(*argv[1])=='H')) {
- printf("\nUsage: XUSER <USER user_name> <DOS> <PACK> <CLEAR> <DAYS num_days>\n");
- exit(0);
- }
-
- deletelist=(char *)malloc((word)65535);
- if(deletelist==NULL) {
- printf("\nNot enough memory to run\n");
- exit(2);
- }
-
- if ((argc>1) and (stricmp(argv[1],"DAYS"))==0) {
- if (argc<3) {
- printf("\nError in command line\n");
- if(deletelist) free(deletelist);
- exit (2);
- }
- deletebyday(atol(argv[2]));
- if(deletelist) free(deletelist);
- exit(0);
- }
-
- if ((argc>1) && (stricmp(argv[argc-1],"DOS"))==0) {
- usedirect=0;
- window(0,0,80,25);
- }
-
- if (findfirst("USERS.BBS",&f,0)!=0) {
- fputs("\nCan't find a userfile! Do you want to make one? (y-N) ",stdout);
- if (*genin(1,0,1,1,YESNO)!='Y') exit(2);
- changed=1;
- userno=1;
- fp=fopen("users.bbs","a+b");
- fclose(fp);
- set_new();
- update();
- findfirst("users.bbs",&f,0);
- }
-
- if((argc>2) && (stricmp(argv[1],"USER"))==0) {
- userno=0;
- if (strchr(argv[2],'_')==NULL) userno=(word)atol(argv[2]);
- if(!userno) {
- while(p=strchr(argv[2],'_')) *p=' ';
- printf("\nSearching for %s...",argv[2]);
- xx=0;
- if (f.ff_fsize) {
- if ((handle=_open(searchpath("USERS.BBS"),O_RDONLY | O_BINARY | O_DENYNONE))==-1) {
- printf("\nError opening userfile\n");
- perror("\nERROR");
- exit(254);
- }
- fp=fdopen(handle,"rb");
- rewind(fp);
- lseek(handle,0L,SEEK_SET);
- while (!feof(fp) && !ferror(fp)) {
- xx++;
- if (!(xx%50)) printf(".");
- if (fread(&user,sizeof(user),1,fp)!=1) break;
- if (!stricmp(user.name,argv[2]) || !stricmp(user.handle,argv[2])) break;
- }
- if (ferror(fp)) perror("\nERROR");
- if (!stricmp(user.name,argv[2]) || !stricmp(user.handle,argv[2])) {
- userno=(word)(ftell(fp)/(long)sizeof(struct _user));
- }
- fclose(fp);
- _close(handle);
- }
- if(!userno) userno=1;
- }
- }
-
- getuser();
- displayuser();
- inkey2();
- if(deletelist) free(deletelist);
- }
-
-
-
- int break_handler (void) {
-
- if(packing) {
- cprintf("\r\nNot safe to stop while packing!\r\n");
- didbreak=1;
- return 1;
- }
- else return 0;
- }
-
-
-
- void displayuser (void) { /* Display user */
-
- int a;
- word temp;
- register word x;
- struct date dos_date;
- struct time dos_time;
- char *p;
- char *pp;
-
- if(didbreak) {
- printf("\nStopping in response to previous user BREAK\n");
- exit(0);
- }
- if (findfirst("USERS.BBS",&f,0)!=0) {
- printf("\nYou have to have a user file.\n");
- exit(2);
- }
- Restart:
- if(page){
- display2();
- return;
- }
- if (usedirect) {
- clrscr();
- textattr(BLACK | LIGHTGRAY * 16);
- }
- else printf("\x1b[0m\x1b[2J\x1b[0;1;37m\x1b[7m");
- if (online_user) printer(" XBBS USER EDITOR * Online.XBS User (%u)",userno);
- else printer(" XBBS USER EDITOR * User #%u of %lu",userno,f.ff_fsize/(long)sizeof(struct _user));
- if (user.stat[0]==0) printer(" * LOCKED OUT");
- if (usedirect) {
- textattr (LIGHTGRAY | BLACK * 16);
- }
- else printf("\x1b[0;1;37m");
- printf("\x1b[0;74H");
- printer("%03hu\nA. Real Name: %-36s\nB. Handle: %-36s\n",user.violations,user.name,user.handle);
- a=inkey();
- if (a==(-81)) {
- x=userno+1;
- if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=1;
- userno=x;
- getuser();
- goto Restart;
- }
- if (a==(-73)) {
- x=userno-1;
- if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- if (x==0) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- userno=x;
- getuser();
- goto Restart;
- }
- if (conf.genstatezip) {
- p="";
- pp="";
- }
- else {
- p=user.zip;
- pp=" Alt-F. ZipCode: ";
- }
- printer("C. Password: %-12s D. City: %-36s\n E. State: %-2s%s%-5s\n",user.password,user.city,user.state,pp,p);
- printer("F. Home Phone: %10s G. Other Phone: %10s\n",user.phone1,user.phone2);
- printer("H. BirthDate: %-10s ",saydate(&user.birthdate));
- printer("I. Length: %02hu J. Width: %02hu\n",user.length,user.width);
- printer("K. S0: %05u S1: %05u S2: %05u S3: %05u S4: %05u\n S5: %05u S6: %05u S7: %05u S8: %05u S9:%05u",user.stat[0],user.stat[1],user.stat[2],user.stat[3],user.stat[4],user.stat[5],user.stat[6],user.stat[7],user.stat[8],user.stat[9]);
- printer("\nM. Calls/Day: %03u N. Time/Call: %03u ",user.callsperday,user.timepercall);
- printer("O. Total time: %03u\nP. Calls today: %03u ",user.totaltime,user.callstoday);
- printer("Q. Total Calls: %05lu R. Time Today: %05u\n",user.times,user.timetoday);
- printer("S. LastDate: %-10s T. LastTime: %-8s\n",saydate(&user.lastdate),saytime(&user.lasttime));
- printer("U. UpK: %08lu V. DownK: %08lu W. UpNo: %05u X. DownNo: %05u\n",user.upk,user.downk,user.upno,user.downno);
- printer("Y. Posts: %05u Z. Credit: %04d ALT-A. Comp. Type: %hu",user.posts,user.credit,user.comptype);
-
- printer("\n0. ANSI: ");
- user.graphics ? printer("X") : printer("-");
- printer(" 1. ED: ");
- user.fullscreen ? printer("X") : printer("-");
- printer(" 2. CLR: ");
- user.scrnclr ? printer("-"): printer("X");
- printer(" 3. Spec: ");
- user.commodore ? printer("X"): printer("-");
- printer(" 4. Expert: ");
- user.expert ? printer("X"): printer("-");
- printer(" 5. More: ");
- user.more ? printer("-"): printer("X");
- printer("\n6. HOURS: ");
- user.ignorehrs ? printer("X") : printer("-");
- printer(" 7. RATIO: ");
- user.ignorerat ? printer("X") : printer("-");
- printer(" 8. NOKILL: ");
- user.nokill ? printer("X") : printer("-");
- printer(" 9. DEL: ");
- user.deleted ? printer("X") : printer("-");
- printer(" ; TWIT: ");
- user.twit ? printer("X") : printer("-");
- printer(" : COLD: ");
- user.cold ? printer("X") : printer("-");
- printer("\nAlt0. ANSIMENU: ");
- user.ansimenus ? printer("-") : printer("X");
- printer(" Alt1. Genl#1: ");
- user.gen1 ? printer("X") : printer("-");
- printer(" Alt2. Genl#2: ");
- user.gen2 ? printer("X") : printer("-");
- printer(" Alt3. Genl#3: ");
- user.gen2 ? printer("X") : printer("-");
- printer("\nAlt4. Flags: [");
- for (x=0;x<16;x++) {
- temp=1;
- temp=temp<<x;
- (user.attr2 & temp) ? printer("X") : printer ("-");
- }
- printer("] Alt5. UKDay: %05u Alt6. DKDay: %05u",user.uktoday,user.dktoday);
- printer("\nAlt7. HiBit: ");
- user.hiok ? printer("X") : printer("-");
- printer(" Alt8. LastMsgArea: %04u",user.lastmsgarea);
- printer("\n%lu days since last * ",diffdays(&user.lastdate));
- getdate(&dos_date);
- gettime(&dos_time);
- age=((dos_date.da_year-user.birthdate.da_year)-1);
- if (dos_date.da_mon>user.birthdate.da_mon) age++;
- else if ((dos_date.da_mon==user.birthdate.da_mon) && (dos_date.da_day>=user.birthdate.da_day)) age++;
- printer("Age: %hu ** User id: %08lx.%03hu ** ALT-P. Point: %u\n",age,user.id,user.node,user.pointid);
- if (usedirect) {
- textattr(BLACK | LIGHTGRAY * 16);
- }
- else printf("\x1b[0;1;37m\x1b[7m");
- printer("F1=LST F2=FND F3=PK F4=LCK F5=SRCH F6=ONLN F7=D_LK F8=D_DAY F9=CLR F10=ADD ?");
- if (usedirect) {
- textattr(LIGHTGRAY | BLACK * 16);
- }
- else printf("\x1b[0;2;37m");
- printer("\nCommand: ");
-
- }
-
-
-
- void display2 (void) {
-
- register word x;
-
- printf("\x1b[2J");
- if (usedirect) {
- clrscr();
- textattr(BLACK | LIGHTGRAY * 16);
- }
- else printf("\x1b[0m\x1b[2J\x1b[0;1;37m\x1b[7m");
- if (online_user) printer(" XBBS USER EDITOR * Online.XBS User (%u)",userno);
- else printer(" XBBS USER EDITOR * User #%u of %lu",userno,f.ff_fsize/(long)sizeof(struct _user));
- if (user.stat[0]==0) printer(" * LOCKED OUT");
- if (usedirect) {
- textattr (LIGHTGRAY | BLACK * 16);
- }
- printf("\x1b[0;74H");
- printer("%03hu\nReal Name: %-36s\nHandle: %-36s\n\n",user.violations,user.name,user.handle);
- printer("Numeric variables:\n");
- printer("0. %05u 1. %05u 2. %05u 3. %05u 4. %05u\n",user.numvars[0],user.numvars[1],user.numvars[2],user.numvars[3],user.numvars[4]);
- printer("5. %05u 6. %05u 7. %05u 8. %05u 9. %05u\n\n",user.numvars[5],user.numvars[6],user.numvars[7],user.numvars[8],user.numvars[9]);
- printer("String variables: (ALT+#)\n");
- for(x=0;x<5;x++) printer("%u. %s\n",x,user.variable[x]);
- if (usedirect) {
- textattr(LIGHTGRAY | BLACK * 16);
- }
- else printf("\x1b[0;2;37m");
- printer("\nCommand: ");
-
- }
-
-
-
- void packusers (void) /* Pack out deleted users */
-
- {
-
- struct _user check;
- register word deleted=0;
- register word x=1;
- word y;
- FILE *fp;
- FILE *pf;
- FILE *id;
-
- packing=1;
- printf("\nPacking user database...");
-
- remove("users.bak");
-
- if (rename("users.bbs","users.bak")!=0) {
- printf("\nRename error...");
- packing=0;
- return;
- }
-
- if(!(fp=fopen("users.bbs","a+b"))) {
- perror("\nUSERS.BBS ERROR");
- packing=0;
- return;
- }
- if(!(pf=fopen("users.bak","rb"))) {
- perror("\nUSERS.BAK ERROR");
- printf("\nRestoring old user database...\n");
- remove("users.bbs");
- rename("users.bak","users.bbs");
- packing=0;
- return;
- }
-
- rewind(fp);
- rewind(pf);
-
- id=fopen("deleted.ids","a+b");
- if(id)fseek(id,0L,SEEK_END);
-
- while (feof(pf)==0) {
- if (fread(&check,sizeof(check),1,pf)!=1) break;
- if (feof(pf)!=0) break;
- if (ferror(pf)) perror("\nUSERS.BAK READ ERROR");
- if (!check.deleted || x==1) {
- deletelist[x-1]=1;
- deletelist[x]=0;
- if(clear_vars) {
- for(y=0;y<10;y++) check.numvars[y]=0;
- for(y=0;y<5;y++) strset(check.variable[y],0);
- }
- fwrite(&check,sizeof(check),1,fp);
- printf("%5u\b\b\b\b\b",x);
- }
- else {
-
- char delfile[133];
-
- deletelist[x-1]=0;
- deletelist[x]=0;
- if(id) {
- fwrite(&check.id,sizeof(long),1,id);
- fwrite(&check.node,sizeof(char),1,id);
- }
- deleted++;
- sprintf(delfile,"%sFORCE\\%08lx.%03hu\n",conf.homepath,check.id,check.node);
- remove(delfile);
- printf("\nDeleted %s",check.name);
- }
- if (ferror(fp)) perror("\nUSERS.BBS WRITE ERROR");
- x++;
- }
- fclose(fp);
- fclose(pf);
- if(id)fclose(id);
-
- if(deleted) {
- printf("\nPacking LMR files...");
- LMRpack();
- }
- pack_mset();
- printf("\nPacking complete. %u users removed from database.\n",deleted);
- conf.lastusernum=0;
- saveconfig();
- packing=0;
- }
-
-
- void dellocked(void) /* Pack out locked/deleted users */
-
- {
-
- struct _user check;
- register word x=1;
- register word deleted=0;
- FILE *fp;
- FILE *pf;
- FILE *id;
-
- packing=1;
- printf("\nPacking user database...deleting locked-out users...");
-
- remove("users.bak");
-
- if (rename("users.bbs","users.bak")!=0)
- {
- printf("\nRename error...");
- packing=0;
- return;
- }
-
-
- if(!(fp=fopen("users.bbs","a+b"))) {
- perror("\nUSERS.BBS ERROR");
- packing=0;
- return;
- }
-
- if(!(pf=fopen("users.bak","rb")))
- {
- perror("\nUSERS.BAK ERROR");
- printf("\nRestoring old user database...\n");
- remove("users.bbs");
- rename("users.bak","users.bbs");
- packing=0;
- return;
- }
-
- rewind(fp);
- rewind(pf);
-
- id=fopen("deleted.ids","a+b");
- if(id)fseek(id,0L,SEEK_END);
-
- while (!feof(pf) && !ferror(pf)) {
- if (fread(&check,sizeof(check),1,pf)!=1) break;
- if (feof(pf)!=0) break;
- if (ferror(pf)) perror("\nUSERS.BAK READ ERROR");
- if (check.nokill || x==1) {
- deletelist[x-1]=1;
- deletelist[x]=0;
- if (fwrite(&check,sizeof(check),1,fp)!=1) break;
- printf("%5u\b\b\b\b\b",x);
- goto SkipIt;
- }
- if ((!check.deleted) and (check.stat[0]!=0))
- {
- deletelist[x-1]=1;
- deletelist[x]=0;
- if (fwrite(&check,sizeof(check),1,fp)!=1) break;
- printf("%5u\b\b\b\b\b",x);
- }
- else {
-
- char delfile[133];
-
- deletelist[x-1]=0;
- deletelist[x]=0;
- if(id) {
- fwrite(&check.id,sizeof(long),1,id);
- fwrite(&check.node,sizeof(char),1,id);
- }
- deleted++;
- sprintf(delfile,"%sFORCE\\%08lx.%03hu\n",conf.homepath,check.id,check.node);
- remove(delfile);
- printf("\nDeleted %s",check.name);
- }
- SkipIt:
- if (ferror(fp)) perror("\nUSERS.BBS WRITE ERROR");
- x++;
- }
- fclose(fp);
- fclose(pf);
- if(id)fclose(id);
-
- if(deleted) {
- printf("\nPacking LMR files...");
- LMRpack();
- }
- pack_mset();
- printf("\nPacking complete. %u users removed from database.\n",deleted);
- conf.lastusernum=0;
- saveconfig();
- packing=0;
- }
-
-
-
- void deletebyday(numdays) /* Pack out users who haven't called in x days */
-
- ulong numdays;
-
- {
-
- struct _user check;
- register word x=1;
- register word deleted=0;
- FILE *fp;
- FILE *pf;
- FILE *id;
-
- if (numdays<=0) {
- printf("\nError in daycount...\n");
- return;
- }
-
- packing=1;
- printf("\nPacking user database...killing users who haven't called in %lu days...",numdays);
-
- remove("users.bak");
-
- if (rename("users.bbs","users.bak")!=0) {
- printf("\nRename error...");
- packing=0;
- return;
- }
-
-
- if(!(fp=fopen("users.bbs","a+b"))) {
- perror("\nUSERS.BBS ERROR");
- rename("users.bak","users.bbs");
- packing=0;
- return;
- }
-
- if(!(pf=fopen("users.bak","rb"))) {
- perror("\nUSERS.BAK ERROR");
- printf("\nRestoring old user database...\n");
- remove("users.bbs");
- rename("users.bak","users.bbs");
- packing=0;
- return;
- }
-
- rewind(fp);
- rewind(pf);
-
- id=fopen("deleted.ids","a+b");
- if(id)fseek(id,0L,SEEK_END);
-
- while (!feof(pf)) {
- if (fread(&check,sizeof(check),1,pf)!=1) break;
- if (feof(pf)) break;
- if (ferror(pf)) perror("\nUSERS.BAK READ ERROR");
- if (check.nokill || x==1) {
- deletelist[x-1]=1;
- deletelist[x]=0;
- fwrite(&check,sizeof(check),1,fp);
- printf("%5u\b\b\b\b\b",x);
- goto SkipIt;
- }
- if ((numdays>diffdays(&check.lastdate)) && (!check.deleted)) {
- deletelist[x-1]=1;
- deletelist[x]=0;
- fwrite(&check,sizeof(check),1,fp);
- printf("%5u\b\b\b\b\b",x);
- }
- else {
-
- char delfile[133];
-
- deletelist[x-1]=0;
- deletelist[x]=0;
- if(id) {
- fwrite(&check.id,sizeof(long),1,id);
- fwrite(&check.node,sizeof(char),1,id);
- }
- deleted++;
- sprintf(delfile,"%sFORCE\\%08lx.%03hu\n",conf.homepath,check.id,check.node);
- remove(delfile);
- printf("\nDeleted %s",check.name);
- if (!check.deleted) printf("*");
- }
- SkipIt:
- if (ferror(fp)) perror("\nUSERS.BBS WRITE ERROR");
- x++;
- }
- fclose(fp);
- fclose(pf);
- if(id)fclose(id);
-
- if(deleted) {
- printf("\nPacking LMR files...");
- LMRpack();
- }
- pack_mset();
- printf("\nPacking complete. %u users removed from database.\n",deleted);
- conf.lastusernum=0;
- saveconfig();
- packing=0;
- }
-
-
-
- char * genin (length,password,caps,hot,type) /* GENERIC INPUT ROUTINE */
-
- char length;
- char password;
- char caps;
- char hot;
- char type;
-
- {
-
- static char input[256];
- char x=0;
- char one=0;
-
- length--;
- strset(input,0);
-
- while (1) {
-
- one=inkey();
- if (one == 13) break;
- if (one == 8) {
- if (x>0) {
- printf("\b \b");
- input [--x]=0;
- }
- continue;
- }
- if ((caps) or (type==YESNO)) one=toupper(one);
- if (x <= length) {
- if (type==NAME) {
- if((isalpha(one)==0) and (one!=' ') and (one!='.') and
- (one!='\'') and (one!='-') or (x==0 and one==' ')) continue;
- }
- if (type==NEAT) {
- if((isalnum(one)==0) and (one!=' ') or (x==0 and one==' ')) continue;
- }
- if ((type==NEAT) or (type==NAME)) {
- if(x==0) one=toupper(one);
- else one=tolower(one);
- }
- if((type==NEAT) or (type==NAME)) {
- if((x>0) and ((input[x-1]==' ') or (input[x-1]=='.') ||
- (input[x-1]=='\'') or (input[x-1]=='-'))) one=toupper(one);
- }
- if ((type==ALL) and ((isprint(one)==0) and (one!=1))) continue;
- if ((type==ALPHA) and (isalpha(one)==0) and (one!=' ')) continue;
- if ((type==NUM) and (isdigit(one)==0)) continue;
- if ((type==ALPHANUM) and (isalnum(one)==0) and (one!=' ')) continue;
- if ((type==YESNO) and (one!='Y' and one!='N')) continue;
- if (type==FLE) {
- if ((isalnum(one)==0) and (!strchr("._-+=!@#$%^&<>/",one))) continue;
- }
- if (type==FLEP) {
- if ((isalnum(one)==0) and (!strchr("._-+=!@#$%^&<>/\:",one))) continue;
- }
- if (type==FLEW) {
- if ((isalnum(one)==0) and (!strchr("._-+=!@#$%^&<>/?*",one))) continue;
- }
- if (type==FLEPW) {
- if ((isalnum(one)==0) and (!strchr("._-+=!@#$%^&<>/?*\:",one))) continue;
- }
- }
-
- if ((one!=0) and (x <= length)) {
- input[x]=one;
- input[++x]=0;
- if (!password) printer(&input[x-1]);
- if (password) printer("*");
- if ((hot)and(x >= length)) return (input);
- }
-
- }
-
- return (input);
-
- }
-
-
-
- void update (void) {
-
- FILE *fp;
-
- if (!changed) return;
- changed=0;
- if (!online_user) {
- if(!(fp=fopen("users.bbs","r+b"))) {
- perror("\nUSERS.BBS ERROR");
- exit(1);
- }
- fseek(fp,(long)sizeof(struct _user)*(userno-1),SEEK_SET);
- clearerr(fp);
- if (ferror(fp)) {
- perror("\nERROR");
- return;
- }
- fwrite(&user,sizeof(struct _user),1,fp);
- if (ferror(fp)) perror("\nERROR");
- fclose(fp);
- }
- else {
- prepare();
- online_user=0;
- }
- }
-
-
-
- void getuser (void) {
-
- FILE *fp;
-
- if (!online_user) {
- if(!(fp=fopen("users.bbs","rb"))) {
- perror("\nUSERS.BBS ERROR");
- return;
- }
- fseek(fp,(long)sizeof(struct _user)*(userno-1),SEEK_SET);
- clearerr(fp);
- if ((fread(&user,sizeof(struct _user),1,fp)!=1) || ferror(fp)) perror("\nERROR READING USER");
- fclose(fp);
- }
- else getonline();
-
- }
-
-
-
-
- void rstrip(a)
-
- char *a;
-
- {
-
- while ((strlen(a)!=0) and (a[strlen(a)-1]==' ')) a[strlen(a)-1]=0;
-
- }
-
-
- void userlist (void)
-
- {
-
- char line[81];
- struct _user check;
- FILE *fp;
- char p[37];
- char pp[37];
- word register x;
- word register y;
- struct date dos_date;
- struct time dos_time;
- char *mmore;
-
- printer("\nString to search for or [Enter] for all: ");
- strcpy(p,strupr(genin(36,0,0,0,NAME)));
-
- if(!(fp=fopen("users.bbs","rb")))
- {
- printer("\nError with userfile...\n");
- perror("\nERROR");
- return;
- }
-
- printer("\nName/handle: Last on:\n");
- printer("------------------------------------ ------------------------------------\n");
- rewind(fp);
- y=0;
- while (feof(fp)==0)
- {
- if (fread(&check,sizeof(check),1,fp)!=1) break;
- if (feof(fp)) break;
- pp[0]=0;
- strncpy(pp,check.handle,36);
- if ((strstr(strupr(check.handle),p)) or (p[0]==0))
- {
- line[0]=0;
- strcpy(line,pp);
- for (x=strlen(line);x!=38;strcat(line," "),x++);
- strcat(line,saydate(&check.lastdate));
- strcat(line," ");
- strcat(line,saytime(&check.lasttime));
- printer(line);
- if (check.deleted) printer("*");
- printer("\n");
- y++;
- }
- if (y>23) {
- printer ("More? (Y-n) ");
- mmore = genin (1,0,1,1,YESNOM);
- printer("\r");
- y=0;
- if (*mmore == 'N') break;
- }
- }
- printer("\n");
-
- fclose(fp);
-
- return;
-
- }
-
-
-
- char * saydate (struct date *a)
-
- {
-
- static char xdate[11];
-
- sprintf(xdate,"%02hu/%02hu/%02d",a->da_mon,a->da_day,a->da_year);
- return(xdate);
-
- }
-
-
-
- char * saytime(struct time *a)
-
- {
-
- static char xtime[9];
-
- sprintf(xtime,"%02u:%02u:%02u",a->ti_hour,a->ti_min,a->ti_sec);
- return(xtime);
-
- }
-
-
-
-
- int inkey (void) /* MIMICS BASIC'S INKEY$ FUNCTION */
-
- {
-
- union REGS r;
-
- r.h.ah=11;
- int86(33,&r,&r);
- if (r.h.al) {
- r.h.ah=8;
- int86(33,&r,&r);
- if (r.h.al) return(r.h.al);
- r.h.ah=8;
- int86(33,&r,&r);
- return-(r.h.al);
- }
- return(0);
-
- }
-
-
- char inkey2 (void) /* MIMICS BASIC'S INKEY$ FUNCTION */
-
- {
-
- union REGS r;
-
- while (1) {
- r.h.ah=11;
- int86(33,&r,&r);
- if (r.h.al) {
- r.h.ah=8;
- int86(33,&r,&r);
- if (!r.h.al) {
- r.h.ah=8;
- int86(33,&r,&r);
- if(!page)specialkey(r.h.al);
- else specialkey2(r.h.al);
- }
- else {
- if(!page)regularkey(r.h.al);
- else regularkey2(r.h.al);
- }
- }
- }
- return 0;
- }
-
-
- char specialkey (char a) {
-
- register word x;
- ulong numdays;
- char temp[16];
- char tempo;
- char *p;
-
- strset(temp,0);
-
- switch ((int)a) {
- case 132:
- case 118: page=1-page;
- displayuser();
- break;
- case 81:
- update();
- x=userno+1;
- if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=1;
- userno=x;
- getuser();
- displayuser();
- break;
- case 73:
- update();
- x=userno-1;
- if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- if (x==0) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- userno=x;
- getuser();
- displayuser();
- break;
- case 113:
- if(online_user) {
- printer("\nNot while editting online user, dummy.\n");
- sleep(1);
- break;
- }
- printer("\nSwap this user with which user #? (1-%u) ",(word)(f.ff_fsize/(long)sizeof(struct _user)));
- fgets(temp,16,stdin);
- if((word)atol(temp)<1 || (word)atol(temp)==userno || (word)atol(temp)>(word)(f.ff_fsize/(long)sizeof(struct _user))) {
- printer("\nInvalid.\n");
- sleep(1);
- displayuser();
- break;
- }
- {
- struct _user tempuser;
- word tempuserno;
- char temp2[17];
-
- memcpy(&tempuser,&user,sizeof(struct _user));
- tempuserno=userno;
- userno=(word)atol(temp);
- getuser();
- printer("\nSwap %s with %s? (Y-n) ",tempuser.name,user.name);
- fgets(temp2,16,stdin);
- if(toupper(*temp2)=='N') {
- NoSwap:
- userno=tempuserno;
- getuser();
- displayuser();
- break;
- }
- if(swap_LMRs(tempuserno,userno))
- goto NoSwap; /* Couldn't swap LMRs */
- changed=1;
- userno=tempuserno;
- update();
- memcpy(&user,&tempuser,sizeof(struct _user));
- userno=(word)atol(temp);
- changed=1;
- update();
- displayuser();
- }
- break;
- case 68:
- if(online_user) {
- printer("\nNot while editting online user, dummy.\n");
- sleep(1);
- break;
- }
- userno=(word)(f.ff_fsize/(long)sizeof(struct _user))+1;
- printer("\nUse current user for template? (y-N) ");
- fgets(temp,16,stdin);
- printer("\n");
- if(toupper(*temp)!='Y') set_new();
- changed=1;
- update();
- addLMRs();
- findfirst("users.bbs",&f,0);
- displayuser();
- break;
- case 45:
- update();
- exit (0);
- case 60:
- printer("\nUser #: ");
- fgets(temp,16,stdin);
- if (*temp=='\n') {
- displayuser();
- break;
- }
- x=(word)atol(temp);
- if (x<0) {
- displayuser();
- break;
- }
- if (f.ff_fsize/(long)sizeof(struct _user)<x) {
- printer("\nUser number too high.\n");
- printer("\n[Enter] to continue...");
- getch();
- displayuser();
- break;
- }
- update();
- userno=x;
- getuser();
- displayuser();
- break;
- case 59:
- userlist();
- printer("\n[Enter] to continue...");
- getch();
- displayuser();
- break;
- case 61:
- update();
- packusers();
- userno=1;
- if((findfirst("USERS.BBS",&f,0)!=0) or (f.ff_fsize==0L)) {
- printf("\nYou must have a user file.\n");
- exit(2);
- }
- printer("\n[Enter] to continue...");
- getch();
- getuser();
- displayuser();
- break;
- case 62:
- user.stat[0]=0;
- changed=1;
- displayuser();
- break;
- case 71:
- update();
- userno=1;
- getuser();
- displayuser();
- break;
- case 79:
- update();
- userno=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- if (userno==0) userno=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
- getuser();
- displayuser();
- break;
- case 63:
- update();
- printer("\nEnter string to search for: ");
- x=finduser(strupr(genin(36,0,0,0,NAME)),userno);
- if ((f.ff_fsize/(long)sizeof(struct _user)<(long)x) or (x<1)) x=userno;
- userno=x;
- getuser();
- displayuser();
- break;
- case 66:
- update();
- printf("\nNumber of days to delete from? ");
- fgets(temp,16,stdin);
- if (*temp=='\n') {
- displayuser();
- break;
- }
- numdays=(word)atol(temp);
- if (numdays<=1) {
- printer("\nI think you goofed.\n[Enter] to continue...");
- getch();
- displayuser();
- break;
- }
- deletebyday(numdays);
- userno=1;
- if((findfirst("USERS.BBS",&f,0)!=0) or (f.ff_fsize==0L)) {
- printf("\nYou must have a user file.\n");
- exit(2);
- }
- printer("\n[Enter] to continue...");
- getch();
- getuser();
- displayuser();
- break;
- case 65:
- update();
- dellocked();
- userno=1;
- if((findfirst("USERS.BBS",&f,0)!=0) or (f.ff_fsize==0L)) {
- printf("\nYou must have a user file.\n");
- exit(2);
- }
- printer("\n[Enter] to continue...");
- getch();
- getuser();
- displayuser();
- break;
- case 33:
- if (conf.genstatezip) break;
- printer("\nZipcode: ");
- p=genin(5,0,0,0,NUM);
- if (strlen(p)==5) {
- strcpy(user.zip,p);
- changed=1;
- }
- displayuser();
- break;
- case 67:
- user.violations=0;
- changed=1;
- displayuser();
- break;
- case 129: user.ansimenus=1-user.ansimenus;
- changed=1;
- displayuser();
- break;
- case 120: user.gen1=1-user.gen1;
- changed=1;
- displayuser();
- break;
- case 121: user.gen2=1-user.gen2;
- changed=1;
- displayuser();
- break;
- case 122: user.gen3=1-user.gen3;
- changed=1;
- displayuser();
- break;
- case 123: printer("\nFlag # to toggle (1-16): ");
- tempo=(word)atoi(genin(2,0,0,0,NUM));
- if (tempo<1 || tempo>16) {
- displayuser();
- break;
- }
- x=1;
- x=x<<(tempo-1);
- user.attr2 = user.attr2 ^ x;
- changed=1;
- displayuser();
- break;
- case 124: printer("\nNew Upload K for today: ");
- p=genin(5,0,0,0,NUM);
- if (!*p) break;
- user.uktoday=(word)atol(p);
- changed=1;
- displayuser();
- break;
- case 125: printer("\nNew Download K for today: ");
- p=genin(5,0,0,0,NUM);
- if (!*p) break;
- user.dktoday=(word)atol(p);
- changed=1;
- displayuser();
- break;
- case 30:
- Retry:
- printer("\nNew Computer Type (1-255): ");
- p=genin(3,0,0,0,NUM);
- if ((char)atoi(p)<1 || (char)atoi(p)>255) goto Retry;
- user.comptype=(char)atoi(p);
- changed=1;
- displayuser();
- break;
- case 64: if (online_user) {
- changed=1;
- update();
- online_user=0;
- getuser();
- displayuser();
- }
- else {
- changed=1;
- update();
- online_user=1;
- getuser();
- displayuser();
- }
- break;
- case 17: {
-
- char dostring[133];
-
- sprintf(dostring,"USERED.BAT %sFORCE\\%08lx.%03hu\n",conf.homepath,user.id,user.node);
- system(dostring);
- displayuser();
-
- }
- break;
- case 126: user.hiok=1-user.hiok;
- changed=1;
- displayuser();
- break;
- case 127: printer("\nNew Last Msg Area #: ");
- p=genin(5,0,0,0,NUM);
- if (!*p) break;
- if((word)atol(p)<1024) {
- user.lastmsgarea=(word)atol(p);
- changed=1;
- }
- else {
- printer("\n0-1023...");
- sleep(1);
- }
- displayuser();
- break;
- case 25: printer("\nNew Point #: ");
- p=genin(5,0,0,0,NUM);
- if(!*p) break;
- user.pointid=(word)atol(p);
- changed=1;
- displayuser();
- break;
- default: fputs("\07",stdout);
- return 0;
- }
- return 0;
-
- }
-
-
-
- char regularkey (char a) {
-
- word x;
- char *p;
- char text[24];
- word temp=0;
- char tempo[16];
-
- strset(tempo,0);
-
- switch ((int)toupper(a))
- {
- case 'A':
- printer("\nName: ");
- p=genin(35,0,0,0,NAME);
- rstrip(p);
- if (strlen(p)>1)
- {
- strcpy(user.name,p);
- changed=1;
- }
- displayuser();
- break;
- case 'B':
- printer("\nHandle: ");
- p=genin(35,0,0,0,NAME);
- rstrip(p);
- if (strlen(p)>1)
- {
- strcpy(user.handle,p);
- changed=1;
- }
- displayuser();
- break;
- case 'C':
- printer("\nPassword: ");
- p=genin(11,0,0,0,ALL);
- rstrip(p);
- if (strlen(p)>2)
- {
- strcpy(user.password,p);
- changed=1;
- }
- displayuser();
- break;
- case 'D':
- printer("\nCity: ");
- p=genin(23,0,0,0,NEAT);
- rstrip(p);
- if (strlen(p)>1)
- {
- strcpy(user.city,p);
- changed=1;
- }
- displayuser();
- break;
- case 'E':
- if (!conf.genstatezip) {
- printer("\nState abbreviation: ");
- p=genin(2,0,1,0,ALPHA);
- rstrip(p);
- if (strlen(p)==2)
- {
- strcpy(user.state,p);
- changed=1;
- }
- }
- else {
- printer("\nGeneric field: ");
- p=genin(8,0,0,0,ALPHANUM);
- changed=1;
- rstrip(p);
- strcpy(user.state,p);
- }
- displayuser();
- break;
- case 'F':
- printer("\nPhone 1: ");
- p=genin(10,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)==10)
- {
- strcpy(user.phone1,p);
- changed=1;
- }
- displayuser();
- break;
- case 'G':
- printer("\nPhone 2: ");
- p=genin(10,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)==10)
- {
- strcpy(user.phone2,p);
- changed=1;
- }
- displayuser();
- break;
- case 'H':
- printer("\nBirthdate: ");
- p=genin(10,0,0,0,ALL);
- left(text,p,2);
- user.birthdate.da_mon=atoi(text);
- mid(text,p,4,2);
- user.birthdate.da_day=atoi(text);
- right(text,p,4);
- user.birthdate.da_year=atoi(text);
- changed=1;
- nope:
- displayuser();
- break;
- case 'I':
- printer("\nLength: ");
- p=genin(2,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.length=(char)atoi(p);
- if (user.length<10) user.length=10;
- if (user.length>66) user.length=66;
- changed=1;
- }
- displayuser();
- break;
- case 'J':
- printer("\nWidth: ");
- p=genin(2,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.width=(char)atoi(p);
- if (user.width<32) user.width=32;
- if (user.width>80) user.width=80;
- changed=1;
- }
- displayuser();
- break;
- case 'K':
- printer("\nSecurity Level #: ");
- fgets(tempo,16,stdin);
- temp=(char)atol(tempo);
- if ((!strlen(tempo)) || temp<0 || temp>9 || *tempo=='\n') {
- displayuser();
- break;
- }
- printer("Enter new seclvl: ");
- fgets(tempo,16,stdin);
- if ((!strlen(tempo)) || *tempo=='\n') {
- displayuser();
- break;
- }
- user.stat[temp]=(word)atol(tempo);
- changed=1;
- displayuser();
- break;
- case 'L':
- break;
- case 'M':
- printer("\nCalls Per Day: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.callsperday=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'N':
- printer("\nTime Per Call: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.timepercall=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'O':
- printer("\nTotal Time: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.totaltime=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'P':
- printer("\nCalls Today: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.callstoday=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'Q':
- printer("\nTotal Calls: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.times=atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'R':
- printer("\nTime Today: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.timetoday=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'S':
- printer("\nLast Call Date (MM/DD/YYYY): ");
- p=genin(10,0,0,0,ALL);
- rstrip(p);
- if (strlen(p)<10) goto nope2;
- left(text,p,2);
- user.lastdate.da_mon=atoi(text);
- mid(text,p,4,2);
- user.lastdate.da_day=atoi(text);
- right(text,p,4);
- user.lastdate.da_year=atoi(text);
- changed=1;
- nope2:
- displayuser();
- break;
- case 'T':
- printer("\nLast Call Date (HH:MM:SS): ");
- p=genin(8,0,0,0,ALL);
- rstrip(p);
- if (strlen(p)<8) goto nope3;
- left(text,p,2);
- user.lasttime.ti_hour=atoi(text);
- mid(text,p,4,2);
- user.lasttime.ti_min=atoi(text);
- right(text,p,2);
- user.lasttime.ti_sec=atoi(text);
- changed=1;
- nope3:
- displayuser();
- break;
- case 'U':
- printer("\nUploaded KBytes: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.upk=atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'V':
- printer("\nDownloaded KBytes: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.downk=atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'W':
- printer("\nNumber of files uploaded: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.upno=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'X':
- printer("\nNumber of files downloaded: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.downno=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'Y':
- printer("\nNumber of messages posted: ");
- p=genin(6,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.posts=atol(p);
- changed=1;
- }
- displayuser();
- break;
- case 'Z':
- printer("\nCredit in cents: ");
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0)
- {
- user.credit=atoi(p);
- changed=1;
- }
- displayuser();
- break;
- case '0': user.graphics=1-user.graphics;
- changed=1;
- displayuser();
- break;
- case '1': user.fullscreen=1-user.fullscreen;
- changed=1;
- displayuser();
- break;
- case '2': user.scrnclr=1-user.scrnclr;
- changed=1;
- displayuser();
- break;
- case '3': user.commodore=1-user.commodore;
- changed=1;
- displayuser();
- break;
- case '4': user.expert=1-user.expert;
- changed=1;
- displayuser();
- break;
- case '5': user.more=1-user.more;
- changed=1;
- displayuser();
- break;
- case '6': user.ignorehrs=1-user.ignorehrs;
- changed=1;
- displayuser();
- break;
- case '7': user.ignorerat=1-user.ignorerat;
- changed=1;
- displayuser();
- break;
- case '8': user.nokill=1-user.nokill;
- changed=1;
- displayuser();
- break;
- case '9': if (user.nokill && !user.deleted) {
- printf("\x7");
- break;
- }
- user.deleted=1-user.deleted;
- changed=1;
- displayuser();
- break;
- case ':': user.cold=1-user.cold;
- changed=1;
- displayuser();
- break;
- case ';': user.twit=1-user.twit;
- changed=1;
- displayuser();
- break;
- case '?': fputs("\r",stdout);
- printer("ALT-X to exit, CTRL-Page Up or CTRL-Page Down for next page,\n");
- printer("Page Up or Page Down for previous or next user\n");
- printer("ALT-W on first user page will spawn USERED.BAT with unique id filename.\n");
- printer("ALT-F10 will allow you to swap two users.");
- while(!kbhit());
- displayuser();
- break;
- default: fputs("\x7",stdout);
- return 0;
- }
-
- return 0;
-
- }
-
-
-
- void left(a,b,x)
-
- char *a,*b;
- word x;
-
- {
-
- word i=0;
-
- x = (x <= strlen(b)) ? x : strlen(b);
-
- while (i++ < x) *a++ = *b++;
-
- *a = '\0';
-
- }
-
-
- void right(a,b,x)
-
- char *a,*b;
- word x;
-
- {
-
- word i,l;
-
- l = strlen(b);
- x=(x>l) ? l : x;
- i = l - x;
-
- while (*a++ = *(b + i++));
-
- }
-
-
- void mid(a,b,x,y)
-
- char *a,*b;
- word x,y;
-
- {
-
- word l;
-
- --x;
- y+=x;
- l = strlen(b);
-
- while (x<y and x<=l) *a++ = *(b + x++);
-
- *a = '\0';
-
- }
-
-
- word finduser (string,x)
-
- char *string;
- word x;
-
- {
-
- struct _user check;
- FILE *fp;
- word start;
-
- start=x;
-
- strupr(string);
- if(!(fp=fopen("users.bbs","rb"))) {
- printer("\nError with userfile...\n");
- perror("\nERROR");
- return(0);
- }
- Restart:
- fseek(fp,(long)((long)(x+1)*(long)sizeof(struct _user)),SEEK_SET);
- while (!feof(fp) && !ferror(fp)) {
- ++x;
- if (x==start) goto Notfound;
- if ((fread(&check,sizeof(struct _user),1,fp)!=1)) break;
- strupr(check.name);
- strupr(check.handle);
- if (strstr(check.name,string) || strstr(check.handle,string)) {
- fclose(fp);
- return (++x);
- }
- }
- if (start) {
- x=0;
- goto Restart;
- }
-
- Notfound:
-
- fclose(fp);
- return (0);
-
- }
-
-
- void printer (char *string,...)
-
- {
-
- static char text[256];
- char *p;
- char *pp;
-
- va_list ap;
- va_start(ap,string);
- vsprintf(text,string,ap);
- va_end(ap);
- if (usedirect>0) {
- if ((p=strchr(text,'\n'))==NULL) cputs(text);
- else {
- pp=text;
- do {
- p=strchr(pp,'\n');
- if (p) *p++=0;
- cputs(pp);
- if (p) {
- cputs("\r\n");
- pp=p;
- }
- } while (p && *pp!=0);
- }
- }
- else fputs(text,stdout);
-
- }
-
-
- ulong diffdays (then)
-
- struct date *then;
-
- {
- ulong numdays=0;
- ulong today=0;
- word register x;
- struct date dos_date;
- char month[13]={
- 0,31,28,31,30,31,30,31,31,30,31,30,31
- };
-
- getdate(&dos_date);
- for (x=1987;x<dos_date.da_year;x++) numdays=numdays+365;
- for (x=1;x<dos_date.da_mon;x++) numdays=numdays+month[x];
- today=numdays+dos_date.da_day;
- numdays=0;
- for (x=1987;x<then->da_year;x++) numdays=numdays+365;
- for (x=1;x<then->da_mon;x++) numdays=numdays+month[x];
- numdays=numdays+then->da_day;
- if(today<numdays) {
- printf("\nToday: %lu\nNumdays: %lu\n",today,numdays);
- return 0;
- }
- return (today-numdays);
-
- }
-
-
-