home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / BBS / MISC / XDEV_117.ZIP / XUSER2.C < prev   
Encoding:
C/C++ Source or Header  |  1990-10-08  |  14.5 KB  |  621 lines

  1. #include "msgg.h"
  2.  
  3. /* Function prototypes */
  4.  
  5. int    pascal swap_LMRs (word user1,word user2);
  6. char * genin(char length,char password,char caps,char hot,char type);
  7. int    inkey(void);
  8. void   update(void);
  9. void   displayuser(void);
  10. void   getuser(void);
  11. void   rstrip (char *);
  12. void   packusers(void);
  13. char * saydate(struct date *);
  14. char * saytime(struct time *);
  15. void   userlist(void);
  16. char   specialkey(char);
  17. char   inkey2(void);
  18. char   regularkey(char);
  19. void   left(char *a,char *b,word x);
  20. void   right(char *a,char *b,word x);
  21. void   mid(char *a,char *b,word x,word y);
  22. word   finduser(char *,word);
  23. void   printer (char *,...);
  24. ulong  diffdays(struct date *);
  25. void   deletebyday(ulong);
  26. void   getonline(void);
  27. void   set_new(void);
  28. void   prepare(void);
  29. void   readconfig(void);
  30. void   saveconfig(void);
  31. void   LMRpack(void);
  32. int    break_handler(void);
  33. void   addLMRs(void);
  34. void   display2(void);
  35. char   specialkey2(char);
  36. char   regularkey2(char);
  37. void   pack_mset(void);
  38.  
  39. /* Symbols for GENIN */
  40.  
  41. #define ALL      1
  42. #define ALPHA    2
  43. #define NUM      3
  44. #define ALPHANUM 4
  45. #define YESNO    5
  46. #define FLE      6
  47. #define FLEP     7
  48. #define FLEW     8
  49. #define FLEPW    9
  50. #define NAME     10
  51. #define NEAT     11
  52.  
  53. /* Global variables */
  54.  
  55. extern struct _user   user;
  56. extern word           userno;
  57. extern struct ffblk   f;
  58. extern char           changed;
  59. extern char           usedirect;
  60. extern char              online_user;
  61. extern char            nodenumber;
  62. extern word           baud;
  63. extern word           timelimit;
  64. extern struct time    starter;
  65. extern struct time    timeon;
  66. extern char           variable[10][82];
  67. extern char           pages;
  68. extern struct _mboard mboard;
  69. extern struct _fboard fboard;
  70. extern char           level;
  71. extern char           timer_off;
  72. extern char           age;
  73. extern word           *LMR;
  74. extern word           hold_time;
  75. extern struct _config conf;
  76. extern struct _events event[10];
  77. extern char           *deletelist;
  78. extern char           page;
  79. extern char           clear_vars;
  80. extern char            didbreak;
  81. extern char            packing;
  82.  
  83. struct _msetup {
  84.     unsigned long userid;
  85.     char node;
  86.     unsigned char areas[512];
  87. };
  88.  
  89. extern struct _msetup mset;
  90.  
  91.  
  92.  
  93.  
  94. void prepare (void)
  95.  
  96. {
  97.  
  98.   FILE *fp;
  99.   char s[90];
  100.   char numnode[4]="";
  101.  
  102.  if (nodenumber!=1) sprintf(numnode,"%hu",nodenumber);
  103.  sprintf(s,"online%s.xbs",numnode);
  104.  if(!(fp=fopen(s,"wb"))) {
  105.     perror("ONLINE OPEN");
  106.     fclose(fp);
  107.     exit(1);
  108.  }
  109.  else {
  110.   fwrite(&user,sizeof(struct _user),1,fp);
  111.   fwrite(&userno,sizeof(userno),1,fp);
  112.   fwrite(&timelimit,sizeof(timelimit),1,fp);
  113.   fwrite(&timeon,sizeof(timeon),1,fp);
  114.   fwrite(&starter,sizeof(starter),1,fp);
  115.   fwrite(&baud,sizeof(baud),1,fp);
  116.   fwrite(&pages,sizeof(pages),1,fp);
  117.   fwrite(&age,sizeof(age),1,fp);
  118.   fwrite(&timer_off,sizeof(timer_off),1,fp);
  119.   fwrite(&hold_time,sizeof(hold_time),1,fp);
  120.   fwrite(variable,sizeof(variable[0]),10,fp);
  121.   fwrite(&mboard,sizeof(mboard),1,fp);
  122.   fwrite(&fboard,sizeof(fboard),1,fp);
  123.   fwrite(event,sizeof(struct _events),10,fp);
  124.   if (ferror(fp)) {
  125.     perror("ONLINE WRITE");
  126.     fclose(fp);
  127.     exit(1);
  128.   }
  129.   fclose(fp);
  130.  }
  131. }
  132.  
  133.  
  134.  
  135. void getonline (void)
  136.  
  137. {
  138.  
  139.   FILE *fp;
  140.   char s[90];
  141.   char numnode[4]="";
  142.  
  143.   if (nodenumber!=1) sprintf(numnode,"%hu",nodenumber);
  144.   sprintf(s,"online%s.xbs",numnode);
  145.   if(!(fp=fopen(s,"rb"))) goto FatalError;
  146.   fread(&user,sizeof(struct _user),1,fp);
  147.   fread(&userno,sizeof(userno),1,fp);
  148.   fread(&timelimit,sizeof(timelimit),1,fp);
  149.   fread(&timeon,sizeof(timeon),1,fp);
  150.   fread(&starter,sizeof(starter),1,fp);
  151.   fread(&baud,sizeof(baud),1,fp);
  152.   fread(&pages,sizeof(pages),1,fp);
  153.   fread(&age,sizeof(age),1,fp);
  154.   fread(&timer_off,sizeof(timer_off),1,fp);
  155.   fread(&hold_time,sizeof(hold_time),1,fp);
  156.   fread(variable,sizeof(variable[0]),10,fp);
  157.   fread(&mboard,sizeof(mboard),1,fp);
  158.   fread(&fboard,sizeof(fboard),1,fp);
  159.   if (!(fread(event,sizeof(struct _events),10,fp))) goto FatalError;
  160.   if (ferror(fp)) {
  161. FatalError:
  162.          printf("\nFatal Error...sorry...\n");
  163.          perror("ONLINE READ");
  164.          fclose(fp);
  165.          exit(1);
  166.    }
  167.    fclose(fp);
  168. }
  169.  
  170.  
  171. void set_new (void) {
  172.  
  173.     register word x;
  174.  
  175. strcpy(user.name,"New User");
  176. strcpy(user.handle,"New User");
  177. strset(user.password,0);
  178. strcpy(user.city,"Nowhere");
  179. if (!conf.genstatezip) {
  180.     strcpy(user.state,"XX");
  181.     strcpy(user.zip,"00000");
  182. }
  183. else strcpy(user.state,"XXXXXXXX");
  184. strcpy(user.phone1,"3180000000");
  185. strcpy(user.phone2,"3180000000");
  186. user.length=24;
  187. user.width=80;
  188. user.graphics=0;
  189. user.fullscreen=0;
  190. user.deleted=0;
  191. user.ansimenus=1;
  192. user.gen1=0;
  193. user.gen2=0;
  194. user.gen3=0;
  195. user.ignorehrs=0;
  196. user.ignorerat=0;
  197. user.nokill=0;
  198. user.more=0;
  199. user.expert=0;
  200. user.arq=0;
  201. user.scrnclr=0;
  202. user.twit=0;
  203. user.commodore=0;
  204. user.attr2=0;
  205. user.stat[0]=(word)5;
  206. user.stat[1]=(word)0;
  207. user.upk=0;
  208. user.downk=0;
  209. user.upno=0;
  210. user.downno=0;
  211. user.posts=0;
  212. user.credit=0;
  213. user.violations=0;
  214. user.lastdate.da_year=1980;
  215. user.lastdate.da_day=1;
  216. user.lastdate.da_mon=1;
  217. gettime(&user.lasttime);
  218. getdate(&user.logondate);
  219. gettime(&user.logontime);
  220. getdate(&user.birthdate);
  221. user.times=0;
  222. user.callsperday=3;
  223. user.timepercall=30;
  224. user.totaltime=90;
  225. user.callstoday=0;
  226. user.timetoday=0;
  227. user.pointid=0;
  228. user.id=conf.nextid++;
  229. saveconfig();
  230. user.node=1;
  231. for (x=0;x<10;x++) user.numvars[x]=0;
  232. for(x=0;x<5;x++)strset(user.variable[x],0);
  233. user.comptype=0;
  234. user.uktoday=0;
  235. user.dktoday=0;
  236. for(x=0;x<conf.nolmrs;x++) LMR[x]=0;
  237.  
  238. }
  239.  
  240.  
  241. void readconfig (void)
  242.  
  243. {
  244.  
  245. FILE *fp;
  246. struct ffblk f;
  247.  
  248.     if(findfirst("config.bbs",&f,0)) {
  249.       printf("\nFATAL ERROR: Configuration file 'CONFIG.BBS' not found\n");
  250.       exit (2);
  251.     }
  252.     if(!(fp=fopen("config.bbs","rb"))) {
  253.        perror("\nCONFIG.BBS ERROR");
  254.        exit(2);
  255.     }
  256.     rewind(fp);
  257.     fread(&conf,sizeof(conf),1,fp);
  258.        fclose(fp);
  259. }
  260.  
  261.  
  262.  
  263. void saveconfig (void)
  264.  
  265. {
  266.  
  267. FILE *fp;
  268. struct ffblk f;
  269.  
  270.     if(findfirst("config.bbs",&f,0)) return;
  271.     if(!(fp=fopen("config.bbs","wb"))) return;
  272.     fwrite(&conf,sizeof(struct _config),1,fp);
  273.        fclose(fp);
  274. }
  275.  
  276.  
  277.  
  278. void LMRpack (void) {
  279.  
  280.     FILE *fp;
  281.     FILE *pf;
  282.     FILE *list;
  283.     register word x=1;
  284.     word hi;
  285.     static char buffer[133];
  286.     static char backup[133];
  287.     static char line[134];
  288.     struct ffblk f;
  289.  
  290.     if (findfirst("USERS.BBS",&f,0)!=0) {
  291.        printf("\nCan't find USERS.BBS\n");
  292.        return;
  293.     }
  294.     else hi=f.ff_fsize/(long)sizeof(struct _user);
  295.     sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
  296.     sprintf(backup,"%sLASTREAD.BAK",conf.messpath);
  297.     remove(backup);
  298.     rename(buffer,backup);
  299.     if(!(fp=fopen(backup,"rb"))) {
  300.         printf("\nUnable to open LASTREAD.BAK\n");
  301.         rename(backup,buffer);
  302.         return;
  303.     }
  304.     if(!(pf=fopen(buffer,"wb"))) {
  305.         printf("\nUnable to create LASTREAD.BBS\n");
  306.         fclose(fp);
  307.         remove(buffer);
  308.         rename(backup,buffer);
  309.         return;
  310.     }
  311.     while (!feof(fp) && x<(hi+1)) {
  312.        if(deletelist[x-1]) {
  313.            fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  314.            fwrite(LMR,(conf.nolmrs * sizeof(word)),1,pf);
  315.            printf("%5u\b\b\b\b\b",x);
  316.        }
  317.        x++;
  318.     }
  319.     fclose(fp);
  320.     fclose(pf);
  321.  
  322.     if(searchpath("MSGDIRS.XBS")==NULL) return;
  323.     if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
  324.         printf("\nUnable to open MSGDIRS.XBS\n");
  325.         return;
  326.     }
  327.  
  328.   while (!feof(list)) {
  329.     fgets(line,134,list);
  330.     if(*line==';' || *line=='\n' || *line==' ') continue;
  331.     line[strlen(line)-1]=0;
  332.     sprintf(buffer,"%sLASTREAD.BBS",line);
  333.     sprintf(backup,"%sLASTREAD.BAK",line);
  334.     remove(backup);
  335.     rename(buffer,backup);
  336.     if(!(fp=fopen(backup,"rb"))) {
  337.         printf("\nUnable to open LASTREAD.BAK in %s\n",line);
  338.         rename(backup,buffer);
  339.         continue;
  340.     }
  341.     if(!(pf=fopen(buffer,"wb"))) {
  342.         printf("\nUnable to create LASTREAD.BBS in %s\n",line);
  343.         fclose(fp);
  344.         remove(buffer);
  345.         rename(backup,buffer);
  346.         continue;
  347.     }
  348.     x=1;
  349.     while (!feof(fp) && x<(hi+1)) {
  350.        if(deletelist[x-1]) {
  351.            fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  352.            fwrite(LMR,(conf.nolmrs * sizeof(word)),1,pf);
  353.            printf("%5u\b\b\b\b\b",x);
  354.        }
  355.        x++;
  356.     }
  357.     fclose(fp);
  358.     fclose(pf);
  359.   }
  360.   fclose(list);
  361. }
  362.  
  363.  
  364.  
  365.  
  366. void addLMRs (void) {
  367.  
  368.     FILE *fp;
  369.     FILE *list;
  370.     static char buffer[134];
  371.     static char line[134];
  372.     struct ffblk f;
  373.  
  374.     sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
  375.     if(!(fp=fopen(buffer,"a+b"))) {
  376.         printf("\nUnable to open LASTREAD.BBS\n");
  377.         return;
  378.     }
  379.     fseek(fp,0L,SEEK_END);
  380.     fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  381.     fclose(fp);
  382.  
  383.     if(searchpath("MSGDIRS.XBS")==NULL) return;
  384.     if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
  385.         printf("\nUnable to open MSGDIRS.XBS\n");
  386.         return;
  387.     }
  388.  
  389.   while (!feof(list)) {
  390.     fgets(line,134,list);
  391.     if(*line==';' || *line=='\n' || *line==' ') continue;
  392.     line[strlen(line)-1]=0;
  393.     sprintf(buffer,"%sLASTREAD.BBS",line);
  394.     if(!(fp=fopen(buffer,"a+b"))) {
  395.         if(!(fp=fopen(buffer,"wb"))) {        /* TC bug? */
  396.             printf("\nUnable to open LASTREAD.BBS in %s\n",line);
  397.             continue;
  398.         }
  399.     }
  400.     fseek(fp,0L,SEEK_END);
  401.     fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  402.     fclose(fp);
  403.   }
  404.   fclose(list);
  405. }
  406.  
  407.  
  408. char regularkey2 (char a) {
  409.  
  410.     char *p;
  411.  
  412.     switch ((int)a) {
  413.         case '0':
  414.         case '1':
  415.         case '2':
  416.         case '3':
  417.         case '4':
  418.         case '5':
  419.         case '6':
  420.         case '7':
  421.         case '8':
  422.         case '9':   printer("\nNumeric variable %c: ",a);
  423.                     p=genin(5,0,1,0,NUM);
  424.                     rstrip(p);
  425.                     if(strlen(p)>0) {
  426.                         user.numvars[a-'0']=(word)atol(p);
  427.                         changed=1;
  428.                     }
  429.                     displayuser();
  430.                     break;
  431.         case '?':    printer("\nCTRL-Page Up or CTRL-Page Down to return to first page\n");
  432.                     printer("Page Up or Page Down for previous/next user, ALT-X to quit\n");
  433.                     while(!kbhit());
  434.                     displayuser();
  435.                     break;
  436.         default:    printf("\x7");
  437.                     break;
  438.     }
  439. return 0;
  440. }
  441.  
  442. char specialkey2 (char a) {
  443.  
  444.     char *p;
  445.     register word x;
  446.  
  447.     switch ((int)a) {
  448.         case 129:
  449.         case 120:
  450.         case 121:
  451.         case 122:
  452.         case 123:   if(a==129) a=0;
  453.                     else a=a-119;
  454.                     printer("\nString variable #%hu:\n",a);
  455.                     p=genin(75,0,0,0,ALL);
  456.                     if (strlen(p)>1) {
  457.                        strcpy(user.variable[a],p);
  458.                        changed=1;
  459.                     }
  460.                     displayuser();
  461.                     break;
  462.         case 81:    update();
  463.                     x=userno+1;
  464.                     if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=1;
  465.                     userno=x;
  466.                     getuser();
  467.                     displayuser();
  468.                     break;
  469.         case 73:    update();
  470.                     x=userno-1;
  471.                     if ((f.ff_fsize/(long)sizeof(struct _user)<x) or (x<0)) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
  472.                     if (x==0) x=(unsigned int)(f.ff_fsize/(long)sizeof(struct _user));
  473.                     userno=x;
  474.                     getuser();
  475.                     displayuser();
  476.         break;
  477.         case 118:
  478.         case 132:   page=1-page;
  479.                     displayuser();
  480.                     break;
  481.         case 45:    update();
  482.                     exit (0);
  483.         default:    printf("\x7");
  484.                     break;
  485.     }
  486.     return 0;
  487. }
  488.  
  489.  
  490. void pack_mset (void) {
  491.  
  492.     struct ffblk f;
  493.     FILE *fp;
  494.     FILE *pf;
  495.     word x=0;
  496.     register word y;
  497.     register word z=0;
  498.     struct _delids {
  499.         unsigned long userid;
  500.         char node;
  501.     } *delids;
  502.     char s[133];
  503.  
  504.     if(searchpath("deleted.ids") && searchpath("msetup.usr")) {
  505.         if(findfirst(searchpath("deleted.ids"),&f,0))return;
  506.         if(f.ff_fsize==0L) {
  507.             remove(searchpath("deleted.ids"));
  508.             return;
  509.         }
  510.         delids=(struct _delids *)farmalloc(f.ff_fsize+(long)sizeof(struct _delids));
  511.         if(delids==NULL) {
  512.             printf("\nNot enough memory to pack MSETUP.USR\n");
  513.             return;
  514.         }
  515.         fp=fopen(searchpath("deleted.ids"),"rb");
  516.         if(!fp) {
  517.             if(delids)farfree(delids);
  518.             return;
  519.         }
  520.         x=0;
  521.         while(!feof(fp) && x<(word)(f.ff_fsize/(long)sizeof(struct _delids))) {
  522.             if(fread(&delids[x++],sizeof(struct _delids),1,fp)!=1)break;
  523.         }
  524.         fclose(fp);
  525.         strcpy(s,searchpath("msetup.usr"));
  526.         remove("msetup.bak");
  527.         rename(s,"msetup.bak");
  528.         fp=fopen("msetup.bak","rb");
  529.         if(!fp) {
  530.             if(delids)farfree(delids);
  531.             return;
  532.         }
  533.         pf=fopen("msetup.usr","wb");
  534.         if(!pf) {
  535.             fclose(fp);
  536.             rename("msetup.bak","msetup.usr");
  537.             if(delids)farfree(delids);
  538.             return;
  539.         }
  540.         printf("\nPacking MSETUP.USR...");
  541.         while(!feof(fp)) {
  542.             if(fread(&mset,sizeof(struct _msetup),1,fp)!=1)break;
  543.             for(y=0;y<x;y++) {
  544.                 if(mset.userid==delids[y].userid && mset.node==delids[y].node) goto SkipIt;
  545.             }
  546.             fwrite(&mset,sizeof(struct _msetup),1,pf);
  547. SkipIt:
  548.             printf("%5u\b\b\b\b\b",++z);
  549.         }
  550.         fclose(fp);
  551.         fclose(pf);
  552.         if(delids)farfree(delids);
  553.         printf("\n");
  554.      }
  555. }
  556.  
  557.  
  558.  
  559. int pascal swap_LMRs (word user1,word user2) {
  560.  
  561.      FILE *fp;
  562.     FILE *list;
  563.     static char buffer[134];
  564.     static char line[134];
  565.     struct ffblk f;
  566.     word *LMR2;
  567.  
  568.     LMR2=(word *)malloc(conf.nolmrs * sizeof(word));
  569.     if(LMR2==NULL) {
  570.         printf("\nOOM for LMR's (%u)\n",conf.nolmrs);
  571.         return(1);
  572.     }
  573.  
  574.     sprintf(buffer,"%sLASTREAD.BBS",conf.messpath);
  575.     if(!(fp=fopen(buffer,"r+b"))) {
  576.         printf("\nUnable to open LASTREAD.BBS\n");
  577.         free(LMR2);
  578.         return 1;
  579.     }
  580.     fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  581.     fread(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
  582.     fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  583.     fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  584.     fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  585.     fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  586.     fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  587.     fwrite(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
  588.     fclose(fp);
  589.  
  590.     if(searchpath("MSGDIRS.XBS")==NULL) return;
  591.     if(!(list=fopen(searchpath("MSGDIRS.XBS"),"r"))) {
  592.         printf("\nUnable to open MSGDIRS.XBS\n");
  593.         free(LMR2);
  594.         return 0;
  595.     }
  596.  
  597.   while (!feof(list)) {
  598.     fgets(line,134,list);
  599.     if(*line==';' || *line=='\n' || *line==' ') continue;
  600.     line[strlen(line)-1]=0;
  601.     sprintf(buffer,"%sLASTREAD.BBS",line);
  602.     if(!(fp=fopen(buffer,"r+b"))) {
  603.         if(!(fp=fopen(buffer,"wb"))) {        /* TC bug? */
  604.             printf("\nUnable to open LASTREAD.BBS in %s\n",line);
  605.             continue;
  606.         }
  607.     }
  608.     fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  609.     fread(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
  610.     fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  611.     fread(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  612.     fseek(fp,(long)(user2-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  613.     fwrite(LMR,(conf.nolmrs * sizeof(word)),1,fp);
  614.     fseek(fp,(long)(user1-1)*(long)(conf.nolmrs * sizeof(word)),SEEK_SET);
  615.     fwrite(LMR2,(conf.nolmrs * sizeof(word)),1,fp);
  616.     fclose(fp);
  617.   }
  618.   fclose(list);
  619.   free(LMR2);
  620.   return 0;
  621. }