Annotation of sbbs/sbbs2/sbl/sbl2txt.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.