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

1.1       root        1: /* SBL2SMB.C */
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: /* Scans SBL database and posts any additions/updates into the an SMB base */
                      6: 
                      7: #define  uint unsigned int
                      8: 
                      9: #include <dos.h>
                     10: #include "smblib.h"
                     11: #include "sbldefs.h"
                     12: 
                     13: smb_t          smb;
                     14: extern int     daylight=0;
                     15: extern long timezone=0L;
                     16: 
                     17: unsigned       _stklen=16000;
                     18: 
                     19: /****************************************************************************/
                     20: /* Checks the disk drive for the existence of a file. Returns 1 if it       */
                     21: /* exists, 0 if it doesn't.                                                 */
                     22: /****************************************************************************/
                     23: char fexist(char *filespec)
                     24: {
                     25:     struct ffblk f;
                     26: 
                     27: if(findfirst(filespec,&f,0)==0)
                     28:     return(1);
                     29: return(0);
                     30: }
                     31: 
                     32: 
                     33: /****************************************************************************/
                     34: /* Updates 16-bit "rcrc" with character 'ch'                                */
                     35: /****************************************************************************/
                     36: void ucrc16(uchar ch, ushort *rcrc) {
                     37:        ushort i, cy;
                     38:     uchar nch=ch;
                     39:  
                     40: for (i=0; i<8; i++) {
                     41:     cy=*rcrc & 0x8000;
                     42:     *rcrc<<=1;
                     43:     if (nch & 0x80) *rcrc |= 1;
                     44:     nch<<=1;
                     45:     if (cy) *rcrc ^= 0x1021; }
                     46: }
                     47: 
                     48: /****************************************************************************/
                     49: /* Returns 16-crc of string (not counting terminating NULL)                            */
                     50: /****************************************************************************/
                     51: ushort crc16(char *str)
                     52: {
                     53:        int     i=0;
                     54:        ushort  crc=0;
                     55: 
                     56: ucrc16(0,&crc);
                     57: while(str[i])
                     58:        ucrc16(str[i++],&crc);
                     59: ucrc16(0,&crc);
                     60: ucrc16(0,&crc);
                     61: return(crc);
                     62: }
                     63: 
                     64: 
                     65: /****************************************************************************/
                     66: /* Converts unix time format (long - time_t) into a char str MM/DD/YY          */
                     67: /****************************************************************************/
                     68: char *unixtodstr(time_t unix, char *str)
                     69: {
                     70:        struct time curtime;
                     71:        struct date date;
                     72: 
                     73: if(!unix)
                     74:        strcpy(str,"00/00/00");
                     75: else {
                     76:        unixtodos(unix,&date,&curtime);
                     77:        if((unsigned)date.da_mon>12) {    /* DOS leap year bug */
                     78:                date.da_mon=1;
                     79:                date.da_year++; }
                     80:        if((unsigned)date.da_day>31)
                     81:                date.da_day=1;
                     82:        sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
                     83:                ,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
                     84: return(str);
                     85: }
                     86: 
                     87: #define BUF_LEN 8192
                     88: 
                     89: int main(int argc, char **argv)
                     90: {
                     91:        uchar   str[128],tmp[128],buf[BUF_LEN],*p,software[128];
                     92:        int     i,file;
                     93:        ushort  xlat;
                     94:        long    length;
                     95:        ulong   offset;
                     96:        time_t  last,t;
                     97:        bbs_t   bbs;
                     98:        smbmsg_t msg;
                     99:        smbstatus_t status;
                    100:        FILE    *stream;
                    101: 
                    102: fprintf(stderr,"\nSBL2SMB v2.00 - Write SBL to SMB - Developed 1994-1997 "
                    103:        "Rob Swindell\n\n");
                    104: if(argc<3) {
                    105:        fprintf(stderr,"usage: sbl2smb <sbl.dab> <smb_file> [/s:software]\n\n");
                    106:        fprintf(stderr,"ex: sbl2smb c:\\sbbs\\xtrn\\sbl\\sbl.dab "
                    107:                "c:\\sbbs\\data\\subs\\syncdata /s:syn\n");
                    108:        return(1); }
                    109: 
                    110: software[0]=0;
                    111: if(argc>3 && !strnicmp(argv[3],"/S:",3))
                    112:        strcpy(software,argv[3]+3);
                    113: 
                    114: strcpy(smb.file,argv[2]);
                    115: strupr(smb.file);
                    116: 
                    117: strcpy(str,argv[1]);
                    118: strupr(str);
                    119: if((file=open(str,O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
                    120:        printf("error opening %s\n",str);
                    121:        return(1); }
                    122: if((stream=fdopen(file,"rb"))==NULL) {
                    123:        printf("error fdopening %s\n",str);
                    124:        return(1); }
                    125: strcpy(tmp,str);
                    126: p=strrchr(tmp,'.');
                    127: if(p) {
                    128:        (*p)=0;
                    129:        strcat(tmp,"2SMB.DAB");
                    130:        if((file=open(tmp,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
                    131:                printf("error opening %s\n",str);
                    132:                return(1); }
                    133:        t=time(NULL);
                    134:        if(read(file,&last,sizeof(time_t))!=sizeof(time_t))
                    135:                last=t;
                    136:        lseek(file,0L,SEEK_SET);
                    137:        write(file,&t,sizeof(time_t));
                    138:        close(file); }
                    139: 
                    140: sprintf(str,"%s.SHD",smb.file);
                    141: if(!fexist(str)) {
                    142:        printf("%s doesn't exist\n",smb.file);
                    143:        return(0); }
                    144: fprintf(stderr,"Opening %s\n",smb.file);
                    145: smb.retry_time=30;
                    146: if((i=smb_open(&smb))!=0) {
                    147:        printf("smb_open returned %d\n",i);
                    148:        return(1); }
                    149: i=smb_locksmbhdr(&smb);
                    150: if(i) {
                    151:        printf("smb_locksmbhdr returned %d\n",i);
                    152:        return(1); }
                    153: i=smb_getstatus(&smb);
                    154: smb_unlocksmbhdr(&smb);
                    155: if(i) {
                    156:        printf("smb_getstatus returned %d\n",i);
                    157:        return(1); }
                    158: 
                    159: while(!feof(stream)) {
                    160:        if(!fread(&bbs,sizeof(bbs_t),1,stream))
                    161:                break;
                    162:        if(!bbs.name[0] || bbs.misc&FROM_SMB
                    163:                || (bbs.updated<last && bbs.created<last))
                    164:                continue;
                    165:        if(software[0] && strnicmp(software,bbs.software,strlen(software)))
                    166:                continue;
                    167: 
                    168:        printf("%s\r\n",bbs.name);
                    169:        memset(buf,0,BUF_LEN);
                    170: 
                    171:        sprintf(str,"%-15.15s%s\r\n"
                    172:                ,"Name:",bbs.name);
                    173:        strcat(buf,str);
                    174: 
                    175:        sprintf(str,"%-15.15s%s\r\n"
                    176:                ,"Birth:",unixtodstr(bbs.birth,tmp));
                    177:     strcat(buf,str);
                    178: 
                    179:        sprintf(str,"%-15.15s%s\r\n"
                    180:                ,"Software:",bbs.software);
                    181:     strcat(buf,str);
                    182: 
                    183:        for(i=0;i<bbs.total_sysops;i++) {
                    184:                sprintf(str,"%-15.15s%s\r\n"
                    185:                        ,"Sysop:",bbs.sysop[i]);
                    186:                strcat(buf,str); }
                    187: 
                    188:        strcat(buf,"\r\n");
                    189:        for(i=0;i<bbs.total_numbers;i++) {
                    190:                sprintf(str,"%-15.15s%s\r\n"
                    191:                        ,"Number:",bbs.number[i].number);
                    192:                strcat(buf,str);
                    193:                sprintf(str,"%-15.15s%s\r\n"
                    194:                        ,"Modem:",bbs.number[i].modem);
                    195:         strcat(buf,str);
                    196:                sprintf(str,"%-15.15s%s\r\n"
                    197:                        ,"Location:",bbs.number[i].location);
                    198:         strcat(buf,str);
                    199:                sprintf(str,"%-15.15s%u\r\n"
                    200:                        ,"MinRate:",bbs.number[i].min_rate);
                    201:         strcat(buf,str);
                    202:                sprintf(str,"%-15.15s%u\r\n"
                    203:                        ,"MaxRate:",bbs.number[i].max_rate);
                    204:                strcat(buf,str);
                    205:                if(i+1<bbs.total_numbers)
                    206:                        strcat(buf,"\r\n"); }
                    207: 
                    208:        if(bbs.total_networks)
                    209:                strcat(buf,"\r\n");
                    210:        for(i=0;i<bbs.total_networks;i++) {
                    211:                sprintf(str,"%-15.15s%s\r\n"
                    212:                        ,"Network:",bbs.network[i]);
                    213:         strcat(buf,str);
                    214:                sprintf(str,"%-15.15s%s\r\n"
                    215:                        ,"Address:",bbs.address[i]);
                    216:                strcat(buf,str);
                    217:                if(i+1<bbs.total_networks)
                    218:                        strcat(buf,"\r\n"); }
                    219: 
                    220:        strcat(buf,"\r\n");
                    221:        for(i=0;i<bbs.total_terminals;i++) {
                    222:                sprintf(str,"%-15.15s%s\r\n"
                    223:                        ,"Terminal:",bbs.terminal[i]);
                    224:                strcat(buf,str); }
                    225: 
                    226:        strcat(buf,"\r\n");
                    227:        sprintf(str,"%-15.15s%lu\r\n"
                    228:                ,"Megs:",bbs.megs);
                    229:        strcat(buf,str);
                    230:        sprintf(str,"%-15.15s%lu\r\n"
                    231:                ,"Msgs:",bbs.msgs);
                    232:     strcat(buf,str);
                    233:        sprintf(str,"%-15.15s%lu\r\n"
                    234:                ,"Files:",bbs.files);
                    235:     strcat(buf,str);
                    236:        sprintf(str,"%-15.15s%u\r\n"
                    237:                ,"Nodes:",bbs.nodes);
                    238:     strcat(buf,str);
                    239:        sprintf(str,"%-15.15s%u\r\n"
                    240:                ,"Users:",bbs.users);
                    241:     strcat(buf,str);
                    242:        sprintf(str,"%-15.15s%u\r\n"
                    243:                ,"Subs:",bbs.subs);
                    244:     strcat(buf,str);
                    245:        sprintf(str,"%-15.15s%u\r\n"
                    246:                ,"Dirs:",bbs.dirs);
                    247:     strcat(buf,str);
                    248:        sprintf(str,"%-15.15s%u\r\n"
                    249:                ,"Xtrns:",bbs.xtrns);
                    250:     strcat(buf,str);
                    251: 
                    252:        if(bbs.desc[0][0])
                    253:                strcat(buf,"\r\n");
                    254:        for(i=0;i<5;i++) {
                    255:                if(!bbs.desc[i][0])
                    256:                        break;
                    257:                sprintf(str,"%-15.15s%s\r\n"
                    258:                        ,"Desc:",bbs.desc[i]);
                    259:                strcat(buf,str); }
                    260: 
                    261:        strcat(buf,"\r\n--- SBL2SMB v1.10");
                    262: 
                    263:        length=strlen(buf);   /* +2 for translation string */
                    264: 
                    265:        if(status.attr&SMB_HYPERALLOC)
                    266:                offset=smb_hallocdat(&smb);
                    267:        else {
                    268:                i=smb_open_da(&smb);
                    269:                if(i) {
                    270:                        printf("smb_open_da returned %d\n",i);
                    271:                        exit(1); }
                    272:                offset=smb_allocdat(&smb,length+2,1);
                    273:                fclose(smb.sda_fp); }
                    274: 
                    275:        fseek(smb.sdt_fp,offset,SEEK_SET);
                    276:        xlat=XLAT_NONE;
                    277:        fwrite(&xlat,2,1,smb.sdt_fp);
                    278:        fwrite(buf,length,1,smb.sdt_fp);
                    279:        length+=2;
                    280: 
                    281:        memset(&msg,0,sizeof(smbmsg_t));
                    282:        memcpy(msg.hdr.id,"SHD\x1a",4);
                    283:        msg.hdr.version=SMB_VERSION;
                    284:        msg.hdr.when_written.time=time(NULL);
                    285:     
                    286:        msg.hdr.offset=offset;
                    287: 
                    288:        strcpy(str,"SBL");
                    289:        i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
                    290:        if(i) {
                    291:                printf("smb_hfield returned %d\n",i);
                    292:                smb_freemsgdat(&smb,offset,length,1);
                    293:                exit(1); }
                    294:        strlwr(str);
                    295:        msg.idx.to=crc16(str);
                    296: 
                    297:        strcpy(str,bbs.user);
                    298:        i=smb_hfield(&msg,SENDER,strlen(str),str);
                    299:        if(i) {
                    300:                printf("smb_hfield returned %d\n",i);
                    301:                smb_freemsgdat(&smb,offset,length,1);
                    302:                exit(1); }
                    303:        strlwr(str);
                    304:        msg.idx.from=crc16(str);
                    305: 
                    306:        strcpy(str,bbs.name);
                    307:        i=smb_hfield(&msg,SUBJECT,strlen(str),str);
                    308:        if(i) {
                    309:                printf("smb_hfield returned %d\n",i);
                    310:                smb_freemsgdat(&smb,offset,length,1);
                    311:                exit(1); }
                    312:        strlwr(str);
                    313:        msg.idx.subj=crc16(str);
                    314: 
                    315:        i=smb_dfield(&msg,TEXT_BODY,length);
                    316:        if(i) {
                    317:                printf("smb_dfield returned %d\n",i);
                    318:                smb_freemsgdat(&smb,offset,length,1);
                    319:                exit(1); }
                    320: 
                    321:        i=smb_addmsghdr(&smb,&msg,status.attr&SMB_HYPERALLOC);
                    322:        if(i) {
                    323:                printf("smb_addmsghdr returned %d\n",i);
                    324:                smb_freemsgdat(&smb,offset,length,1);
                    325:                exit(1); }
                    326:        smb_freemsgmem(&msg); }
                    327: return(0);
                    328: }
                    329: 
                    330: /* End of SBL2SMB.C */

unix.superglobalmegacorp.com

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