|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.