|
|
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.