home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / SBL / SBL2TXT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  4.7 KB  |  179 lines

  1. /* SBL2TXT.C */
  2.  
  3. /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
  4.  
  5. /* Converts Synchronet BBS List (SBL.DAB) to text file */
  6.  
  7. #include "xsdk.h"
  8. #include "sbldefs.h"
  9.  
  10. char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  11. char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
  12.             ,"Jul","Aug","Sep","Oct","Nov","Dec"};
  13. char *nulstr="";
  14. char tmp[256];
  15. struct date date;
  16. struct time curtime;
  17.  
  18. extern int daylight=0;
  19. extern long timezone=0L;
  20.  
  21. /****************************************************************************/
  22. /* Generates a 24 character ASCII string that represents the time_t pointer */
  23. /* Used as a replacement for ctime()                                        */
  24. /****************************************************************************/
  25. char *timestr(time_t *intime)
  26. {
  27.     static char str[256];
  28.     char mer[3],hour;
  29.     struct tm *gm;
  30.  
  31. gm=localtime(intime);
  32. if(gm->tm_hour>=12) {
  33.     if(gm->tm_hour==12)
  34.         hour=12;
  35.     else
  36.         hour=gm->tm_hour-12;
  37.     strcpy(mer,"pm"); }
  38. else {
  39.     if(gm->tm_hour==0)
  40.         hour=12;
  41.     else
  42.         hour=gm->tm_hour;
  43.     strcpy(mer,"am"); }
  44. sprintf(str,"%s %s %02d %4d %02d:%02d %s"
  45.     ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
  46.     ,hour,gm->tm_min,mer);
  47. return(str);
  48. }
  49.  
  50. /****************************************************************************/
  51. /* Converts unix time format (long - time_t) into a char str MM/DD/YY        */
  52. /****************************************************************************/
  53. char *unixtodstr(time_t unix, char *str)
  54. {
  55.  
  56. if(!unix)
  57.     strcpy(str,"00/00/00");
  58. else {
  59.     unixtodos(unix,&date,&curtime);
  60.     if((unsigned)date.da_mon>12) {      /* DOS leap year bug */
  61.         date.da_mon=1;
  62.         date.da_year++; }
  63.     if((unsigned)date.da_day>31)
  64.         date.da_day=1;
  65.     sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
  66.         ,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
  67. return(str);
  68. }
  69.  
  70.  
  71. void long_bbs_info(FILE *out, bbs_t bbs)
  72. {
  73.     int i;
  74.  
  75. fprintf(out,"BBS Name: %s since %s\r\n"
  76.     ,bbs.name,unixtodstr(bbs.birth,tmp));
  77. fprintf(out,"Operator: ");
  78. for(i=0;i<bbs.total_sysops;i++) {
  79.     if(i) {
  80.         if(bbs.total_sysops>2)
  81.             fprintf(out,", ");
  82.         else
  83.             fputc(SP,out);
  84.         if(!(i%4))
  85.             fprintf(out,"\r\n          ");
  86.         if(i+1==bbs.total_sysops)
  87.             fprintf(out,"and "); }
  88.     fprintf(out,"%s",bbs.sysop[i]); }
  89. fprintf(out,"\r\n");
  90. fprintf(out,"Software: %-15.15s Nodes: %-5u "
  91.     "Users: %-5u Doors: %u\r\n"
  92.     ,bbs.software,bbs.nodes,bbs.users,bbs.xtrns);
  93. fprintf(out,"Download: %lu files in %u directories of "
  94.     "%luMB total space\r\n"
  95.     ,bbs.files,bbs.dirs,bbs.megs);
  96. fprintf(out,"Messages: %lu messages in %u sub-boards\r\n"
  97.     ,bbs.msgs,bbs.subs);
  98. fprintf(out,"Networks: ");
  99. for(i=0;i<bbs.total_networks;i++) {
  100.     if(i) {
  101.         if(bbs.total_networks>2)
  102.             fprintf(out,", ");
  103.         else
  104.             fputc(SP,out);
  105.         if(!(i%3))
  106.             fprintf(out,"\r\n          ");
  107.         if(i+1==bbs.total_networks)
  108.             fprintf(out,"and "); }
  109.     fprintf(out,"%s [%s]",bbs.network[i],bbs.address[i]); }
  110. fprintf(out,"\r\n");
  111. fprintf(out,"Terminal: ");
  112. for(i=0;i<bbs.total_terminals;i++) {
  113.     if(i) {
  114.         if(bbs.total_terminals>2)
  115.             fprintf(out,", ");
  116.         else
  117.             fputc(SP,out);
  118.         if(i+1==bbs.total_terminals)
  119.             fprintf(out,"and "); }
  120.     fprintf(out,"%s",bbs.terminal[i]); }
  121. fprintf(out,"\r\n\r\n");
  122. for(i=0;i<bbs.total_numbers;i++)
  123.     fprintf(out,"%-30.30s %12.12s %5u %-15.15s "
  124.         "Minimum: %u\r\n"
  125.         ,i && !strcmp(bbs.number[i].location,bbs.number[i-1].location)
  126.             ? nulstr : bbs.number[i].location
  127.         ,bbs.number[i].number
  128.         ,bbs.number[i].max_rate,bbs.number[i].modem
  129.         ,bbs.number[i].min_rate);
  130.  
  131. fprintf(out,"\r\n");
  132. for(i=0;i<5;i++) {
  133.     if(!bbs.desc[i][0])
  134.         break;
  135.     fprintf(out,"%15s%s\r\n",nulstr,bbs.desc[i]); }
  136.  
  137. fprintf(out,"\r\n");
  138. fprintf(out,"Entry created on %s by %s\r\n"
  139.     ,timestr(&bbs.created),bbs.user);
  140. fprintf(out," Last updated on %s\r\n\r\n",timestr(&bbs.updated));
  141. }
  142.  
  143.  
  144. void main(int argc, char **argv)
  145. {
  146.     char software[16]="";
  147.     int i,in;
  148.     FILE *out;
  149.     bbs_t bbs;
  150.  
  151. for(i=1;i<argc;i++)
  152.     if(argv[i][0]=='s' && argv[i][1]=='=')
  153.         sprintf(software,"%.15s",argv[i]+2);
  154.  
  155. if((in=open("SBL.DAB",O_RDONLY|O_BINARY))==-1) {
  156.     printf("error opening SBL.DAB\n");
  157.     return; }
  158.  
  159. if((out=fopen("SBL.TXT","wb"))==NULL) {
  160.     printf("error opening/creating SBL.TXT\n");
  161.     return; }
  162.  
  163. while(!eof(in)) {
  164.     read(in,&bbs,sizeof(bbs_t));
  165.     if(!bbs.name[0])
  166.         continue;
  167.     if(software[0] && strnicmp(bbs.software,software,strlen(software)))
  168.         continue;
  169.     // long_bbs_info(out,bbs);
  170.     for(i=0;i<bbs.total_numbers;i++)
  171.         fprintf(out,"%-25.25s  %12.12s  %5u  %s\r\n"
  172.             ,bbs.name,bbs.number[i].number
  173.             ,bbs.number[i].max_rate
  174.             ,bbs.number[i].modem);
  175.     }
  176. close(in);
  177. fclose(out);
  178. }
  179.