Annotation of sbbs/sbbs2/sbl/sbl2smb.c, revision 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.