home *** CD-ROM | disk | FTP | other *** search
- #include "msgg.h"
-
- /* Function prototypes */
-
- int pascal swap_LMRs (word user1,word user2);
- char * genin(char length,char password,char caps,char hot,char type);
- 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 */
-
- extern struct _user user;
- extern word userno;
- extern struct ffblk f;
- extern char changed;
- extern char usedirect;
- extern char online_user;
- extern char nodenumber;
- extern word baud;
- extern word timelimit;
- extern struct time starter;
- extern struct time timeon;
- extern char variable[10][82];
- extern char pages;
- extern struct _mboard mboard;
- extern struct _fboard fboard;
- extern char level;
- extern char timer_off;
- extern char age;
- extern word *LMR;
- extern word hold_time;
- extern struct _config conf;
- extern struct _events event[10];
- extern char *deletelist;
- extern char page;
- extern char clear_vars;
- extern char didbreak;
- extern char packing;
-
- struct _msetup {
- unsigned long userid;
- char node;
- unsigned char areas[512];
- };
-
- extern struct _msetup mset;
-
-
-
-
- void prepare (void)
-
- {
-
- FILE *fp;
- char s[90];
- char numnode[4]="";
-
- if (nodenumber!=1) sprintf(numnode,"%hu",nodenumber);
- sprintf(s,"online%s.xbs",numnode);
- if(!(fp=fopen(s,"wb"))) {
- perror("ONLINE OPEN");
- fclose(fp);
- exit(1);
- }
- else {
- fwrite(&user,sizeof(struct _user),1,fp);
- fwrite(&userno,sizeof(userno),1,fp);
- fwrite(&timelimit,sizeof(timelimit),1,fp);
- fwrite(&timeon,sizeof(timeon),1,fp);
- fwrite(&starter,sizeof(starter),1,fp);
- fwrite(&baud,sizeof(baud),1,fp);
- fwrite(&pages,sizeof(pages),1,fp);
- fwrite(&age,sizeof(age),1,fp);
- fwrite(&timer_off,sizeof(timer_off),1,fp);
- fwrite(&hold_time,sizeof(hold_time),1,fp);
- fwrite(variable,sizeof(variable[0]),10,fp);
- fwrite(&mboard,sizeof(mboard),1,fp);
- fwrite(&fboard,sizeof(fboard),1,fp);
- fwrite(event,sizeof(struct _events),10,fp);
- if (ferror(fp)) {
- perror("ONLINE WRITE");
- fclose(fp);
- exit(1);
- }
- fclose(fp);
- }
- }
-
-
-
- void getonline (void)
-
- {
-
- FILE *fp;
- char s[90];
- char numnode[4]="";
-
- if (nodenumber!=1) sprintf(numnode,"%hu",nodenumber);
- sprintf(s,"online%s.xbs",numnode);
- if(!(fp=fopen(s,"rb"))) goto FatalError;
- fread(&user,sizeof(struct _user),1,fp);
- fread(&userno,sizeof(userno),1,fp);
- fread(&timelimit,sizeof(timelimit),1,fp);
- fread(&timeon,sizeof(timeon),1,fp);
- fread(&starter,sizeof(starter),1,fp);
- fread(&baud,sizeof(baud),1,fp);
- fread(&pages,sizeof(pages),1,fp);
- fread(&age,sizeof(age),1,fp);
- fread(&timer_off,sizeof(timer_off),1,fp);
- fread(&hold_time,sizeof(hold_time),1,fp);
- fread(variable,sizeof(variable[0]),10,fp);
- fread(&mboard,sizeof(mboard),1,fp);
- fread(&fboard,sizeof(fboard),1,fp);
- if (!(fread(event,sizeof(struct _events),10,fp))) goto FatalError;
- if (ferror(fp)) {
- FatalError:
- printf("\nFatal Error...sorry...\n");
- perror("ONLINE READ");
- fclose(fp);
- exit(1);
- }
- fclose(fp);
- }
-
-
- void set_new (void) {
-
- register word x;
-
- strcpy(user.name,"New User");
- strcpy(user.handle,"New User");
- strset(user.password,0);
- strcpy(user.city,"Nowhere");
- if (!conf.genstatezip) {
- strcpy(user.state,"XX");
- strcpy(user.zip,"00000");
- }
- else strcpy(user.state,"XXXXXXXX");
- strcpy(user.phone1,"3180000000");
- strcpy(user.phone2,"3180000000");
- user.length=24;
- user.width=80;
- user.graphics=0;
- user.fullscreen=0;
- user.deleted=0;
- user.ansimenus=1;
- user.gen1=0;
- user.gen2=0;
- user.gen3=0;
- user.ignorehrs=0;
- user.ignorerat=0;
- user.nokill=0;
- user.more=0;
- user.expert=0;
- user.arq=0;
- user.scrnclr=0;
- user.twit=0;
- user.commodore=0;
- user.attr2=0;
- user.stat[0]=(word)5;
- user.stat[1]=(word)0;
- user.upk=0;
- user.downk=0;
- user.upno=0;
- user.downno=0;
- user.posts=0;
- user.credit=0;
- user.violations=0;
- user.lastdate.da_year=1980;
- user.lastdate.da_day=1;
- user.lastdate.da_mon=1;
- gettime(&user.lasttime);
- getdate(&user.logondate);
- gettime(&user.logontime);
- getdate(&user.birthdate);
- user.times=0;
- user.callsperday=3;
- user.timepercall=30;
- user.totaltime=90;
- user.callstoday=0;
- user.timetoday=0;
- user.pointid=0;
- user.id=conf.nextid++;
- saveconfig();
- user.node=1;
- for (x=0;x<10;x++) user.numvars[x]=0;
- for(x=0;x<5;x++)strset(user.variable[x],0);
- user.comptype=0;
- user.uktoday=0;
- user.dktoday=0;
- for(x=0;x<conf.nolmrs;x++) LMR[x]=0;
-
- }
-
-
- void readconfig (void)
-
- {
-
- FILE *fp;
- struct ffblk f;
-
- if(findfirst("config.bbs",&f,0)) {
- printf("\nFATAL ERROR: Configuration file 'CONFIG.BBS' not found\n");
- exit (2);
- }
- if(!(fp=fopen("config.bbs","rb"))) {
- perror("\nCONFIG.BBS ERROR");
- exit(2);
- }
- rewind(fp);
- fread(&conf,sizeof(conf),1,fp);
- fclose(fp);
- }
-
-
-
- void saveconfig (void)
-
- {
-
- FILE *fp;
- struct ffblk f;
-
- if(findfirst("config.bbs",&f,0)) return;
- if(!(fp=fopen("config.bbs","wb"))) return;
- fwrite(&conf,sizeof(struct _config),1,fp);
- fclose(fp);
- }
-
-
-
- void LMRpack (void) {
-
- FILE *fp;
- FILE *pf;
- FILE *list;
- register word x=1;
- word hi;
- static char buffer[133];
- static char backup[133];
- static char line[134];
- struct ffblk f;
-
- if (findfirst("USERS.BBS",&f,0)!=0) {
- printf("\nCan't find USERS.BBS\n");
- return;
- }
- else hi=f.ff_fsize/(long)sizeof(struct _user);
- sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
- sprintf(backup,"%sLASTREAD.BAK",conf.messpath);
- remove(backup);
- rename(buffer,backup);
- if(!(fp=fopen(backup,"rb"))) {
- printf("\nUnable to open LASTREAD.BAK\n");
- rename(backup,buffer);
- return;
- }
- if(!(pf=fopen(buffer,"wb"))) {
- printf("\nUnable to create LASTREAD.BBS\n");
- fclose(fp);
- remove(buffer);
- rename(backup,buffer);
- return;
- }
- while (!feof(fp) && x<(hi+1)) {
- if(deletelist[x-1]) {
- fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,pf);
- printf("%5u\b\b\b\b\b",x);
- }
- x++;
- }
- fclose(fp);
- fclose(pf);
-
- if(searchpath("MSGDIRS.XBS")==NULL) return;
- if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
- printf("\nUnable to open MSGDIRS.XBS\n");
- return;
- }
-
- while (!feof(list)) {
- fgets(line,134,list);
- if(*line==';' || *line=='\n' || *line==' ') continue;
- line[strlen(line)-1]=0;
- sprintf(buffer,"%sLASTREAD.BBS",line);
- sprintf(backup,"%sLASTREAD.BAK",line);
- remove(backup);
- rename(buffer,backup);
- if(!(fp=fopen(backup,"rb"))) {
- printf("\nUnable to open LASTREAD.BAK in %s\n",line);
- rename(backup,buffer);
- continue;
- }
- if(!(pf=fopen(buffer,"wb"))) {
- printf("\nUnable to create LASTREAD.BBS in %s\n",line);
- fclose(fp);
- remove(buffer);
- rename(backup,buffer);
- continue;
- }
- x=1;
- while (!feof(fp) && x<(hi+1)) {
- if(deletelist[x-1]) {
- fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,pf);
- printf("%5u\b\b\b\b\b",x);
- }
- x++;
- }
- fclose(fp);
- fclose(pf);
- }
- fclose(list);
- }
-
-
-
-
- void addLMRs (void) {
-
- FILE *fp;
- FILE *list;
- static char buffer[134];
- static char line[134];
- struct ffblk f;
-
- sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
- if(!(fp=fopen(buffer,"a+b"))) {
- printf("\nUnable to open LASTREAD.BBS\n");
- return;
- }
- fseek(fp,0L,SEEK_END);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fclose(fp);
-
- if(searchpath("MSGDIRS.XBS")==NULL) return;
- if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
- printf("\nUnable to open MSGDIRS.XBS\n");
- return;
- }
-
- while (!feof(list)) {
- fgets(line,134,list);
- if(*line==';' || *line=='\n' || *line==' ') continue;
- line[strlen(line)-1]=0;
- sprintf(buffer,"%sLASTREAD.BBS",line);
- if(!(fp=fopen(buffer,"a+b"))) {
- if(!(fp=fopen(buffer,"wb"))) { /* TC bug? */
- printf("\nUnable to open LASTREAD.BBS in %s\n",line);
- continue;
- }
- }
- fseek(fp,0L,SEEK_END);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fclose(fp);
- }
- fclose(list);
- }
-
-
- char regularkey2 (char a) {
-
- char *p;
-
- switch ((int)a) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': printer("\nNumeric variable %c: ",a);
- p=genin(5,0,1,0,NUM);
- rstrip(p);
- if(strlen(p)>0) {
- user.numvars[a-'0']=(word)atol(p);
- changed=1;
- }
- displayuser();
- break;
- case '?': printer("\nCTRL-Page Up or CTRL-Page Down to return to first page\n");
- printer("Page Up or Page Down for previous/next user, ALT-X to quit\n");
- while(!kbhit());
- displayuser();
- break;
- default: printf("\x7");
- break;
- }
- return 0;
- }
-
- char specialkey2 (char a) {
-
- char *p;
- register word x;
-
- switch ((int)a) {
- case 129:
- case 120:
- case 121:
- case 122:
- case 123: if(a==129) a=0;
- else a=a-119;
- printer("\nString variable #%hu:\n",a);
- p=genin(75,0,0,0,ALL);
- if (strlen(p)>1) {
- strcpy(user.variable[a],p);
- changed=1;
- }
- 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 118:
- case 132: page=1-page;
- displayuser();
- break;
- case 45: update();
- exit (0);
- default: printf("\x7");
- break;
- }
- return 0;
- }
-
-
- void pack_mset (void) {
-
- struct ffblk f;
- FILE *fp;
- FILE *pf;
- word x=0;
- register word y;
- register word z=0;
- struct _delids {
- unsigned long userid;
- char node;
- } *delids;
- char s[133];
-
- if(searchpath("deleted.ids") && searchpath("msetup.usr")) {
- if(findfirst(searchpath("deleted.ids"),&f,0))return;
- if(f.ff_fsize==0L) {
- remove(searchpath("deleted.ids"));
- return;
- }
- delids=(struct _delids *)farmalloc(f.ff_fsize+(long)sizeof(struct _delids));
- if(delids==NULL) {
- printf("\nNot enough memory to pack MSETUP.USR\n");
- return;
- }
- fp=fopen(searchpath("deleted.ids"),"rb");
- if(!fp) {
- if(delids)farfree(delids);
- return;
- }
- x=0;
- while(!feof(fp) && x<(word)(f.ff_fsize/(long)sizeof(struct _delids))) {
- if(fread(&delids[x++],sizeof(struct _delids),1,fp)!=1)break;
- }
- fclose(fp);
- strcpy(s,searchpath("msetup.usr"));
- remove("msetup.bak");
- rename(s,"msetup.bak");
- fp=fopen("msetup.bak","rb");
- if(!fp) {
- if(delids)farfree(delids);
- return;
- }
- pf=fopen("msetup.usr","wb");
- if(!pf) {
- fclose(fp);
- rename("msetup.bak","msetup.usr");
- if(delids)farfree(delids);
- return;
- }
- printf("\nPacking MSETUP.USR...");
- while(!feof(fp)) {
- if(fread(&mset,sizeof(struct _msetup),1,fp)!=1)break;
- for(y=0;y<x;y++) {
- if(mset.userid==delids[y].userid && mset.node==delids[y].node) goto SkipIt;
- }
- fwrite(&mset,sizeof(struct _msetup),1,pf);
- SkipIt:
- printf("%5u\b\b\b\b\b",++z);
- }
- fclose(fp);
- fclose(pf);
- if(delids)farfree(delids);
- printf("\n");
- }
- }
-
-
-
- int pascal swap_LMRs (word user1,word user2) {
-
- FILE *fp;
- FILE *list;
- static char buffer[134];
- static char line[134];
- struct ffblk f;
- word *LMR2;
-
- LMR2=(word *)malloc(conf.nolmrs * sizeof(word));
- if(LMR2==NULL) {
- printf("\nOOM for LMR's (%u)\n",conf.nolmrs);
- return(1);
- }
-
- sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
- if(!(fp=fopen(buffer,"r+b"))) {
- printf("\nUnable to open LASTREAD.BBS\n");
- free(LMR2);
- return 1;
- }
- fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fread(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fwrite(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
- fclose(fp);
-
- if(searchpath("MSGDIRS.XBS")==NULL) return;
- if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
- printf("\nUnable to open MSGDIRS.XBS\n");
- free(LMR2);
- return 0;
- }
-
- while (!feof(list)) {
- fgets(line,134,list);
- if(*line==';' || *line=='\n' || *line==' ') continue;
- line[strlen(line)-1]=0;
- sprintf(buffer,"%sLASTREAD.BBS",line);
- if(!(fp=fopen(buffer,"r+b"))) {
- if(!(fp=fopen(buffer,"wb"))) { /* TC bug? */
- printf("\nUnable to open LASTREAD.BBS in %s\n",line);
- continue;
- }
- }
- fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fread(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
- fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
- fwrite(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
- fclose(fp);
- }
- fclose(list);
- free(LMR2);
- return 0;
- }