home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / WWIVMODS / MODSUNKN.ZIP / LITTLE_C.TXT < prev    next >
Text File  |  1990-08-05  |  18KB  |  558 lines

  1. MODNET9/10
  2. Here are some small C programs that have come across lately.  The first two 
  3. are convert programs for Elric's mods 34 and 37, respectively.  The third is a 
  4. little program that will retuen the result codes of any key pressed.  Handy 
  5. for needing to know what codes to use in programming.  The two following are 
  6. two different programs for printing out your user list.
  7. -=>mtb
  8. ─────────────────────────────────────────────────────────────────────────────
  9.  
  10. /*  This applies to Elric 37 */
  11.  
  12. /*  CONVERT Chains.DAT PROGRAM */
  13.  
  14. /*  Command Parameters:  */
  15. /*  CHAINCON  */
  16.  
  17.  
  18.  
  19. /** Ok. signifigant changes to the convert software, as in I re-wrote the
  20. whole thing mostly from scratch.
  21. Just compile it, stick it in the main BBS dir, and type CHAINCON, and it
  22. does the rest.
  23.  
  24. The only thing I will add is that it was compiled and tested under
  25. Turbo C 2.0, and it was tested in the large memory model. Use whatever you
  26. want, I think it should work in all of them.
  27.  
  28. Lord Elric  1@18251 LINK  1@8251 NET */
  29.  
  30.  
  31.  
  32. #include <stdio.h>
  33. #include <string.h>
  34. #include <mem.h>
  35. #include <io.h>
  36. #include <stdlib.h>
  37. #include <fcntl.h>
  38. #include "vardec.h"
  39. /* DATA FOR OTHER PROGRAMS AVAILABLE */
  40. typedef struct {
  41.     char        filename[81],        /* filename for .chn file */
  42.             description[81];    /* description of it */
  43.     unsigned char    sl,            /* seclev restriction */
  44.             ansir;            /* if ANSI required */
  45.     unsigned short    ar;            /* AR restriction */
  46. } oldchainfilerec;
  47.  
  48. void main()
  49. {
  50.   FILE *infile,*outfile;
  51.   unsigned int l,num=0;
  52.   oldchainfilerec old[99];
  53.   chainfilerec new[99];
  54.   int configfile;
  55.   configrec syscfg;
  56.   char s[81],s1[81];
  57.  
  58.   configfile=-1;
  59.   strcpy(s,"CONFIG.DAT");
  60.   configfile=open(s,O_RDWR | O_BINARY);
  61.   if (configfile<0) {
  62.     printf("%s NOT FOUND.\n",s);
  63.     printf("This program must be run from the main BBS directory\n");
  64.     exit(0);
  65.     }
  66.   read(configfile,(void *) (&syscfg), sizeof(configrec));
  67.   close(configfile);
  68.  
  69.   sprintf(s1,"%sCHAINS.DAT",syscfg.datadir);
  70.   sprintf(s,"%sCHAINS.XXX",syscfg.datadir);
  71.   printf("\nNow renaming %s to %s\n",s1,s);
  72.   if (rename(s1,s) != 0) {
  73.     printf("\nCould not rename...please delete/rename file %s",s);
  74.     exit(0);
  75.     }
  76.  
  77.  
  78.   if ((infile=fopen(s,"rb"))==NULL) {
  79.     printf("\nCould not open input chains file %s\n",s);
  80.     abort();
  81.   }
  82.   num=fread(old,sizeof(oldchainfilerec),99,infile);
  83.   fclose(infile);
  84.   printf("\nSize of old chain record : %d",sizeof(oldchainfilerec));
  85.   printf("\nSize of new chain record : %d\n\n",sizeof(chainfilerec));
  86.  
  87.   memset(&new,0,99*sizeof(chainfilerec));
  88.  
  89.   for (l=0;l<num;l++) {
  90.     printf("Processing chain #%u of %u, %40s\n",l,num,old[l].description);
  91.     strcpy(new[l].description,old[l].description);
  92.     strcpy(new[l].filename,old[l].filename);
  93.     new[l].sl   =old[l].sl;
  94.     new[l].ansir=old[l].ansir;
  95.     new[l].ar   =old[l].ar;
  96.     new[l].gold=0;
  97.   }
  98.   if ((outfile=fopen(s1,"wb"))==NULL) {
  99.     printf("\nCould not open output chains file %s\n",s1);
  100.     rename(s,s1);
  101.     abort();
  102.   }
  103.   fwrite(new,sizeof(chainfilerec),num,outfile);
  104.   fclose(outfile);
  105.   unlink(s);
  106. }
  107.  
  108. ─────────────────────────────────────────────────────────────────────────────
  109.  
  110. /*  CONVERT SUBS.DAT PROGRAM */
  111. /*  This applies to ELRIC 34 */
  112.  
  113. /*  Written by The Black Dragon, 1989 */
  114. /*  (C) 1989 Black Dragon Enterprises */
  115. /*  Compiled and tested using Borland Turbo C - Version 1.5 */
  116. /*  License granted to freely distribute without compensation and to */
  117. /*  modify as needed "to get the job done."  Use at your own risk.  */
  118. /*  Distributed "as is".  No warranty or guarentee */
  119.  
  120. /*  Command Parameters:  */
  121. /*  SUBCONVERT  <old subs filename>  <new subs filename>  */
  122.  
  123.  
  124.  
  125. /** Hey, does this header look familiar. Well, if you have used Convert, then
  126. it probably does, because I took that code and just modded it to
  127. convert the subs data files instead of the user data files...no
  128. sense re-inventing the wheel. Anyway, I leave the credit by the Black Dragon
  129. intact and in place since a small portion of this is his anyway. Thanks
  130. once again.
  131.  
  132. The only thing I will add is that it was compiled and tested under
  133. Turbo C 2.0, and it was tested in the large memory model. Use whatever you
  134. want, I think it should work in all of them.
  135.  
  136. Lord Elric  1@18251 LINK  1@8251 NET */
  137.  
  138.  
  139.  
  140. #include <stdio.h>
  141. #include <string.h>
  142. #include <mem.h>
  143. #include <io.h>
  144. #include <fcntl.h>
  145. #include <stdlib.h>
  146. #include <sys\stat.h>
  147. #include "vardec.h"        /* rename it from subboardrec to oldsubboardrec */
  148.  
  149. void main(int argc, char *argv[])
  150. {
  151.   int f,g;
  152.   unsigned int loop,num=0;
  153.   unsigned long len;
  154.   oldsubboardrec old;
  155.   subboardrec new;
  156.  
  157.  
  158.   if (argc<3) {
  159.     printf("\nRequires 2 parameters.\n");
  160.     printf("Usage: SUBCON oldfile newfile \n");
  161.     abort();
  162.   }
  163.   if ((f=open(argv[1],O_RDWR|O_BINARY,S_IREAD|S_IWRITE))<=0) {
  164.     printf("\nCould not open input subs file %s\n",argv[1]);
  165.     abort();
  166.   }
  167.   if ((g=open(argv[2],O_RDWR|O_BINARY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE))<=0) {
  168.     printf("\nCould not open output subs file %s\n",argv[2]);
  169.     abort();
  170.   }
  171.   printf("\n\nSize of old sub record %d",sizeof(oldsubboardrec));
  172.   printf("\nSize of new sub record %d\n\n",sizeof(subboardrec));
  173.  
  174.   len=filelength(f);
  175.   num=(len/sizeof(oldsubboardrec))+!(len%sizeof(oldsubboardrec));
  176.   for (loop=0;loop<num;loop++) {
  177.     if (sizeof(oldsubboardrec)==read(f,&old,sizeof(oldsubboardrec))) {
  178.     printf("\015Processing sub #%u of %u, %40s",loop,num-1,old.name);
  179.  
  180.     memset(&new,0,sizeof(subboardrec));    /* Nice to clear out garbage */
  181.     strcpy(new.name,old.name);        /* Now copy all data over    */
  182.     strcpy(new.filename,old.filename);
  183.     new.key=old.key;
  184.     new.readsl=old.readsl;
  185.     new.postsl=old.postsl;
  186.     new.anony=old.anony;
  187.     new.age=old.age;
  188.     new.maxage=0;
  189.     new.sex=0;
  190.     new.gold=0;
  191.     new.ansi=0;
  192.     new.maxmsgs=old.maxmsgs;
  193.     new.ar=old.ar;
  194.     new.storage_type=old.storage_type;
  195.     new.type=old.type;
  196.     write(g,&new,sizeof(subboardrec));    /* User record converted here */
  197.     }
  198.   }
  199.   close(f);
  200.   close(g);
  201. }
  202.  
  203. ─────────────────────────────────────────────────────────────────────────────
  204.  
  205. Dave Wallace #19 @5803
  206. Thu May 17 19:11:56 1990
  207.  
  208. RE: Ok serious question........
  209.  
  210. Their scan codes are different on AT-class machines.  (Also, I know of at
  211. least one AT-style keyboard with F-11 through F-30 but those keys are really
  212. control- and alt- f1 thru f10!)  But if you don't mind making a special
  213. version of the BBS that might only work on your particular machine, try the
  214. following program:
  215.  
  216. /*  Warning:  this is coded on-the-fly and may be buggy!  The author is
  217.     used to Microsoft C, too, so you may have to translate. */
  218.  
  219. #include <stdio.h>
  220. #include <conio.h>
  221. #include <stdlib.h>
  222.  
  223. void main(void);
  224.  
  225. void main()
  226. {
  227.     for (;;)
  228.     {
  229.         printf ("\n>");
  230.         while (!kbhit())
  231.            ;
  232.         for (;;)
  233.         {
  234.             char c;
  235.             c = getch();
  236.             if (c != 0)
  237.             {
  238.                printf ("%d\n", c);
  239.                break;
  240.             }
  241.             else
  242.             {
  243.                printf ("0 + %d\n", getch());
  244.                break;
  245.             }
  246.          }
  247.          if (c == '\n') break;
  248.      }
  249.      exit(0);
  250. }
  251.  
  252. As I say, this is untried and written by a guy who's more used to Microsoft C
  253. 5.1 instead of Turbo.  Note that some of the "funny" keys are TWO byte
  254. sequences: zero plus some other code.  Good luck.
  255.  
  256. ──────────────────────────────────────────────────────────────────────────────
  257.  
  258. Rick Hung #331 @18
  259. Fri May 11 01:58:30 1990
  260.  
  261. RE: Help..
  262.  
  263. there already is a mod for this... i wrote this little utility under request
  264. from Zaphod, sysop of The Heart of Gold - here is the read.me file, and the
  265. next post will be the source.
  266.  
  267.  
  268. USERLiST - a utility to print the contents of WWIV's USER.LST to a text file.
  269.         Like Wayne, I'm releasing the code to the program.  (Wow, what
  270.         a nice guy!).  The reasons?  First, the code is pretty simple,
  271.         o that it could've been written by somebody else.
  272.         Scond, I know that many of you sysops out there have added mods
  273.         such as the FROM mod...that requires a different compile for each
  274.         person.
  275.         Now, let me say some of the usual crap that accompanies mods
  276.         and the other crap.  I hereby grant any user the right to modify,
  277.         delete, change, distribute, puke on, or anything else with the
  278.         code.  I wrote it, released it, and that's it.  I claim NO
  279.         responsibility for whatever happens from using this utility.
  280.         It has been tested, and it works fine.  It could've been done
  281.         in a much better format, but since I didn't feel like screwing
  282.         around with the code any longer, and since the code IS released,
  283.         you can change anything to suit your needs.
  284.  
  285.         USERLST.EXE accepts TWO arguments, and if not supplied, the
  286.         program will abort.  The FIRST argument is the name of your
  287.         USER.LST file, or if you happened to change the name of it (yeah,
  288.         right), then that name.  The second argument is the name of the
  289.         OUTPUT file.
  290.  
  291.         There is ONE bug I have found... no matter what I do, it always
  292.         prints as the FIRST user everything set to NULL.  Ah well...you
  293.         have the code, you can fix it. (The first record is always a
  294.         null - just simply a little bit of "bad-coding" from Wayne,
  295.         but it doesn't really harm anything...
  296.                                              ...Rick
  297.  
  298.  
  299. P.S.  Aren't all of you glad now that I finally shut up?    :)
  300.  
  301. ──────────────────────────────────────────────────────────────────────────────
  302.  
  303. Rick Hung #331 @18  
  304. Fri May 11 02:03:23 1990
  305. The Federation [818-407-0419]
  306.  
  307. #include <stdio.h>
  308. #include <io.h>
  309. #include <fcntl.h>
  310. #include <sys\stat.h>
  311. #include "vardec.h"
  312.  
  313. int exist(char *string)
  314. {
  315.   int f;
  316.  
  317.   f=open(string,O_RDONLY | O_BINARY);
  318.   close(f);
  319.   if (f>0)
  320.     return(1);
  321.   else
  322.     return(0);
  323. }
  324.  
  325. main(int argc, char *argv[])
  326. {
  327.   int binfile;
  328.   FILE *txtfile;
  329.   userrec u;
  330.   unsigned int loop,num=0;
  331.   unsigned long len;
  332.   char s[81],s1[81];
  333.  
  334.   if (argc<3) {
  335.     puts("\nRequires TWO parameters.\n");
  336.     puts("USERLST [path to USER.LST] [dest filename & path]\n");
  337.     abort();
  338.   }
  339.   if ((binfile=open(argv[1],O_RDWR|O_BINARY,S_IREAD|S_IWRITE))<=0) {
  340.     puts("\nCould not open USER.LST\n");
  341.     close(binfile);
  342.     abort();
  343.   }
  344.   if (exist(argv[2])) {
  345.     printf("\nCould not open output file %s.  Same file exists.\n",argv[1]);
  346.     abort();
  347.   }
  348.   if (binfile<0) {
  349.     puts("\nNo users to process!\n");
  350.     close(binfile);
  351.     abort();
  352.   }
  353.   txtfile=fopen(argv[2],"a+");
  354.   len=filelength(binfile);
  355.   num=(len/sizeof(userrec))+!(len%sizeof(userrec));
  356.   for (loop=1; loop<num; ++loop) {
  357.     printf("\015Processing user #%u of %u",loop,num);
  358.     read(binfile,&u,sizeof(userrec));
  359.     if (u.inact == 0) {
  360.       fputs("WWIV BBS USER RECORD LISTING\n",txtfile);
  361.       fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",txtfile);
  362.         sprintf(s,"USER's HANDLE                 : %s\n",u.name);
  363.         fputs(s,txtfile);
  364.         sprintf(s,"USER's REAL NAME              : %s\n",u.realname);
  365.         fputs(s,txtfile);
  366.         sprintf(s,"USER's ADDRESS                : %s\n",u.street);
  367.         fputs(s,txtfile);
  368.         sprintf(s,"                              : %s %s\n",u.citystate,u.zip);
  369.         fputs(s,txtfile);
  370.         sprintf(s,"USER's CALL SIGN              : %s\n",u.callsign);
  371.         fputs(s,txtfile);
  372.         sprintf(s,"USER's PHONE #                : %s\n",u.phone);
  373.         fputs(s,txtfile);
  374.         sprintf(s,"USER's PASSWORD               : %s\n",u.pw);
  375.         fputs(s,txtfile);
  376.         sprintf(s,"USER's LAST DATE ON           : %s\n",u.laston);
  377.         fputs(s,txtfile);
  378.         sprintf(s,"USER's FIRST DATE ON          : %s\n",u.firston);
  379.         fputs(s,txtfile);
  380.         sprintf(s,"SYSOP's NOTE ON USER          : %s\n",u.note);
  381.         fputs(s,txtfile);
  382.         sprintf(s,"USER's SEX                    : %c",u.sex);
  383.         strcat(s,"\n");
  384.         fputs(s,txtfile);
  385.         sprintf(s,"USER's AGE                    : %d\n",u.age);
  386.         fputs(s,txtfile);
  387.         sprintf(s,"USER's BIRTHDATE              :
  388. %d-%d-%d\n",u.month,u.day,u.year);
  389.         fputs(s,txtfile);
  390.         sprintf(s,"Messages Posted               : %d\n",u.msgpost);
  391.         fputs(s,txtfile);
  392.         sprintf(s,"Emails Sent                   : %d\n",u.emailsent);
  393.         fputs(s,txtfile);
  394.         sprintf(s,"Feedback Sent                 : %d\n",u.feedbacksent);
  395.         fputs(s,txtfile);
  396.         sprintf(s,"User's Ass Pts                : %d\n",u.ass_pts);
  397.         fputs(s,txtfile);
  398.         sprintf(s,"Total Files Uploaded          : %d\n",u.uploaded);
  399.         fputs(s,txtfile);
  400.         sprintf(s,"Total Files Downloaded        : %d\n",u.downloaded);
  401.         fputs(s,txtfile);
  402.         sprintf(s,"Total Number of Logons        : %d\n",u.logons);
  403.         fputs(s,txtfile);
  404.         sprintf(s,"Total Number of Messages Read : %d\n",u.msgread);
  405.         fputs(s,txtfile);
  406.         sprintf(s,"Uploaded Kbytes               : %d\n",u.uk);
  407.         fputs(s,txtfile);
  408.         sprintf(s,"Downloaded Kbytes             : %d\n",u.dk);
  409.         fputs(s,txtfile);
  410.         sprintf(s,"Total Gold                    : %d\n",u.gold);
  411.         fputs(s,txtfile);
  412.         sprintf(s,"Number of NET Emails          : %d\n",u.emailnet);
  413.         fputs(s,txtfile);
  414.         sprintf(s,"Number of NET Posts           : %d\n",u.postnet);
  415.         fputs(s,txtfile);
  416.       fputs("\r\n",txtfile);
  417.     }
  418.   }
  419.   close(binfile);
  420.       fputs("\n                                        ...Courtesy of Rick
  421. Hung",txtfile);
  422.   fclose(txtfile);
  423.  
  424. ──────────────────────────────────────────────────────────────────────────────
  425.  
  426. Lord Darkster #1 @3114
  427. Mon May 14 07:46:07 1990
  428.  
  429. /*
  430. ============================================================================
  431. userrpt.c -- Lord Darkster -- Baltimore's Dark Side of the Moon -- @3114
  432. ============================================================================
  433. I wrote this on the fly one day, so don't criticize the code.  I take no
  434. responsibility for it!
  435.  
  436. This thing is rediculously simple.  Compile it, put it in your \DATA directory,
  437. then use     USERRPT >USERRPT.OUT  to create a text file report.  Then you
  438. can print the report using COMPRESSED print.  (it's 132 columns).
  439.  
  440. I run this thing every night in my external event, and the output goes to
  441. my sysop file directory, where my remote can download it.
  442.  
  443. Don't want any money, just drop me some e-mail if you like it.  Enjoy!
  444.                                     LD
  445. ============================================================================
  446. */
  447.  
  448. #include <string.h>
  449. #include <stdlib.h>
  450. #include <stdio.h>
  451. #include "vardec.h"
  452. #include "vars.h"
  453.  
  454. #define PAGE_LEN 60
  455. /* ******************************************************************* */
  456. /* function prototypes                                                 */
  457. /* ******************************************************************* */
  458.  
  459. void print_heading();
  460. void print_user();
  461.  
  462.  
  463. /* ******************************************************************* */
  464. /* global vars                                                         */
  465. /* ******************************************************************* */
  466. int line_count = PAGE_LEN + 1;
  467.  
  468. userrec u;
  469.  
  470. int records_read=0;
  471. int active_users=0;
  472.  
  473.  
  474. main(argc, argv, envp)
  475.    int argc;
  476.    char *argv[];
  477.    char *envp;
  478. {
  479. FILE *userfile;
  480.  
  481. /* open user file */
  482. if ((userfile=fopen("user.lst","rb")) == NULL)
  483.    {
  484.     printf("Error: Unable to open user.lst\n\n");
  485.     exit(1);
  486.    }
  487.  
  488.  
  489. /*  Loop and read users from "user.lst"  */
  490.  
  491. while ((fread(&u,sizeof(u), 1, userfile)) > 0)
  492.    {
  493.     records_read++;
  494.     if (line_count > PAGE_LEN)
  495.         print_heading();
  496.  
  497.     if (!u.inact && (records_read!=1))  /* skips first dummy record in file */
  498.        {                           /* skips all deleted/inactive users      */
  499.          print_user();
  500.        }
  501.  
  502.    } /* while */
  503. fcloseall();
  504. printf("\n\n%d Active users selected.\n\n", active_users);
  505. } /* main() */
  506.  
  507.  
  508. /*===========================================  subroutines ===============*/
  509.  
  510. /**************************************** print report heading */
  511. void print_heading()
  512. {
  513. if (active_users)
  514.   printf("%c\n",12);
  515.  
  516.  
  517. printf(" #  User Name/Alias      S/A Last On  First On  #On  SL  DSL
  518.    MSGR  MSGP   EM    FB  NETE  NETP   UL    DL     UK     DK   Time On\n");
  519. printf("--- -------------------- --- -------- -------- ----- --- ---
  520.    ----- ----- ----- ---- ----- ----- ----- ----- ------ ------ --------\n");
  521. /* note!  you need to pull the     MSGR   and  -----   lines up to the
  522.    lines above them with the turbo editor -- they wouldn't fit in 80
  523.    column posts!
  524. */
  525.  
  526. line_count=3;
  527.  
  528. } /* print_heading */
  529.  
  530.  
  531. /**************************************** print the current user data */
  532. void print_user()
  533. {
  534.  printf("%3d",records_read-1);
  535.  printf(" %-20.20s",u.name);
  536.  printf(" %c",u.sex);
  537.  printf("%2d",u.age);
  538.  printf(" %-8.8s",u.laston);
  539.  printf(" %-8.8s",u.firston);
  540.  printf(" %5d",u.logons);
  541.  printf(" %3d",u.sl);
  542.  printf(" %3d",u.dsl);
  543.  printf(" %5d",u.msgread);
  544.  printf(" %5d",u.msgpost);
  545.  printf(" %5d",u.emailsent);
  546.  printf(" %4d",u.feedbacksent);
  547.  printf(" %5d",u.emailnet);
  548.  printf(" %5d",u.postnet);
  549.  printf("  %4d",u.uploaded);
  550.  printf("  %4d",u.downloaded);
  551.  printf(" %6d",u.uk);
  552.  printf(" %6d",u.dk);
  553.  printf(" %8.0f\n",u.timeon/60.0);
  554.  
  555.    ++active_users;
  556.    ++line_count;
  557. } /* print_user */
  558.