Annotation of sbbs/sbbs2/pack_qwk.c, revision 1.1.1.1

1.1       root        1: #line 1 "PACK_QWK.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include "sbbs.h"
                      6: #include "qwk.h"
                      7: #include "post.h"
                      8: #include "etext.h"
                      9: 
                     10: /****************************************************************************/
                     11: /* Creates QWK packet, returning 1 if successful, 0 if not.                            */
                     12: /****************************************************************************/
                     13: char pack_qwk(char *packet, ulong *msgcnt, int prepack)
                     14: {
                     15:        uchar   str[256],tmp2[256],ch,*p;
                     16:        uchar   HUGE16 *qwkbuf;
                     17:        int     file,mode;
                     18:        uint    i,j,k,n,conf;
                     19:        long    l,size,msgndx;
                     20:        ulong   totalcdt,totalsize,totaltime,lastmsg
                     21:                        ,mailmsgs=0,files,submsgs,msgs,posts,netfiles=0,preqwk=0;
                     22:        float   f;      /* Sparky is responsible */
                     23:        time_t  start;
                     24:        node_t  node;
                     25:        mail_t  *mail;
                     26:        post_t  HUGE16 *post;
                     27:        FILE    *stream,*qwk,*personal,*ndx;
                     28:     struct  ffblk ff;
                     29:        smbmsg_t msg;
                     30: 
                     31: delfiles(temp_dir,"*.*");
                     32: sprintf(str,"%sFILE\\%04u.QWK",data_dir,useron.number);
                     33: if(fexist(str)) {
                     34:        for(k=0;k<total_fextrs;k++)
                     35:                if(!stricmp(fextr[k]->ext,useron.tmpext)
                     36:                        && chk_ar(fextr[k]->ar,useron))
                     37:                        break;
                     38:        if(k>=total_fextrs)
                     39:                k=0;
                     40:        i=external(cmdstr(fextr[k]->cmd,str,"*.*",NULL),EX_OUTL|EX_OUTR);
                     41:        if(!i)
                     42:         preqwk=1; }
                     43: 
                     44: if(useron.rest&FLAG('Q') && useron.qwk&QWK_RETCTLA)
                     45:        useron.qwk|=(QWK_NOINDEX|QWK_NOCTRL|QWK_VIA|QWK_TZ);
                     46: 
                     47: if(useron.qwk&QWK_EXPCTLA)
                     48:        mode=A_EXPAND;
                     49: else if(useron.qwk&QWK_RETCTLA)
                     50:        mode=A_LEAVE;
                     51: else mode=0;
                     52: if(useron.qwk&QWK_TZ)
                     53:        mode|=TZ;
                     54: if(useron.qwk&QWK_VIA)
                     55:        mode|=VIA;
                     56: (*msgcnt)=0L;
                     57: if(!prepack && !(useron.qwk&QWK_NOCTRL)) {
                     58:        /***************************/
                     59:        /* Create CONTROL.DAT file */
                     60:        /***************************/
                     61:        sprintf(str,"%sCONTROL.DAT",temp_dir);
                     62:        if((stream=fnopen(&file,str,O_WRONLY|O_CREAT|O_TRUNC))==NULL) {
                     63:                errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
                     64:                return(0); }
                     65: 
                     66:        now=time(NULL);
                     67:        unixtodos(now,&date,&curtime);
                     68: 
                     69:        fprintf(stream,"%s\r\n%s\r\n%s\r\n%s, Sysop\r\n0000,%s\r\n"
                     70:                "%02u-%02u-%u,%02u:%02u:%02u\r\n"
                     71:                ,sys_name
                     72:                ,sys_location
                     73:                ,node_phone
                     74:                ,sys_op
                     75:                ,sys_id
                     76:                ,date.da_mon,date.da_day,date.da_year
                     77:                ,curtime.ti_hour,curtime.ti_min,curtime.ti_sec);
                     78:        k=0;
                     79:        for(i=0;i<usrgrps;i++)
                     80:                for(j=0;j<usrsubs[i];j++)
                     81:                        k++;    /* k is how many subs */
                     82:        fprintf(stream,"%s\r\n\r\n0\r\n0\r\n%u\r\n",useron.alias,k);
                     83:        fprintf(stream,"0\r\nE-mail\r\n");   /* first conference is e-mail */
                     84:        for(i=0;i<usrgrps;i++)
                     85:                for(j=0;j<usrsubs[i];j++)
                     86:                        fprintf(stream,"%u\r\n%s\r\n"
                     87:                                ,sub[usrsub[i][j]]->qwkconf ? sub[usrsub[i][j]]->qwkconf
                     88:                                : ((i+1)*1000)+j+1,sub[usrsub[i][j]]->qwkname);
                     89:        fprintf(stream,"HELLO\r\nBBSNEWS\r\nGOODBYE\r\n");
                     90:        fclose(stream);
                     91:        /***********************/
                     92:        /* Create DOOR.ID File */
                     93:        /***********************/
                     94:        sprintf(str,"%sDOOR.ID",temp_dir);
                     95:        if((stream=fnopen(&file,str,O_WRONLY|O_CREAT|O_TRUNC))==NULL) {
                     96:                errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
                     97:                return(0); }
                     98:        p="CONTROLTYPE = ";
                     99:        fprintf(stream,"DOOR = %s\r\nVERSION = %s\r\n"
                    100:                "SYSTEM = %s v%s\r\n"
                    101:                "CONTROLNAME = SBBS\r\n"
                    102:                "%sADD\r\n"
                    103:                "%sDROP\r\n"
                    104:                "%sYOURS\r\n"
                    105:                "%sRESET\r\n"
                    106:                "%sRESETALL\r\n"
                    107:                "%sFILES\r\n"
                    108:                "%sATTACH\r\n"
                    109:                "%sOWN\r\n"
                    110:                "%sMAIL\r\n"
                    111:                "%sDELMAIL\r\n"
                    112:                "%sCTRL-A\r\n"
                    113:                "%sFREQ\r\n"
                    114:                "%sNDX\r\n"
                    115:                "%sTZ\r\n"
                    116:                "%sVIA\r\n"
                    117:                "%sCONTROL\r\n"
                    118:                "MIXEDCASE = YES\r\n"
                    119:                ,decrypt(Synchronet,0)
                    120:                ,VERSION
                    121:                ,decrypt(Synchronet,0)
                    122:                ,VERSION
                    123:                ,p,p,p,p
                    124:                ,p,p,p,p
                    125:                ,p,p,p,p
                    126:                ,p,p,p,p
                    127:                );
                    128:        fclose(stream);
                    129:        if(useron.rest&FLAG('Q')) {
                    130:                /***********************/
                    131:                /* Create NETFLAGS.DAT */
                    132:                /***********************/
                    133:                sprintf(str,"%sNETFLAGS.DAT",temp_dir);
                    134:                if((stream=fnopen(&file,str,O_WRONLY|O_CREAT))==NULL) {
                    135:                        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
                    136:                        return(0); }
                    137:                ch=1;                                           /* Net enabled */
                    138:                if(usrgrps)
                    139:                        for(i=0;i<(usrgrps*1000)+usrsubs[usrgrps-1];i++)
                    140:                                fputc(ch,stream);
                    141:                fclose(stream); }
                    142:        } /* !prepack */
                    143: 
                    144: /****************************************************/
                    145: /* Create MESSAGES.DAT, write header and leave open */
                    146: /****************************************************/
                    147: sprintf(str,"%sMESSAGES.DAT",temp_dir);
                    148: if((qwk=fnopen(&file,str,O_CREAT|O_WRONLY|O_TRUNC))==NULL) {
                    149:        errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY|O_TRUNC);
                    150:        return(0); }
                    151: l=filelength(file);
                    152: if(!l) {
                    153:        fprintf(qwk,"%-128s",decrypt(QWKheader,0));
                    154:        msgndx=1; }
                    155: else
                    156:        msgndx=l/128L;
                    157: fseek(qwk,0,SEEK_END);
                    158: sprintf(str,"%sNEWFILES.DAT",temp_dir);
                    159: remove(str);
                    160: if(!(useron.rest&FLAG('T')) && useron.qwk&QWK_FILES)
                    161:        files=create_filelist("NEWFILES.DAT",FL_ULTIME);
                    162: else
                    163:        files=0;
                    164: 
                    165: start=time(NULL);
                    166: 
                    167: if(useron.rest&FLAG('Q'))
                    168:        useron.qwk|=(QWK_EMAIL|QWK_ALLMAIL|QWK_DELMAIL);
                    169: 
                    170: if(!(useron.qwk&QWK_NOINDEX)) {
                    171:     sprintf(str,"%sPERSONAL.NDX",temp_dir);
                    172:     if((personal=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
                    173:         fclose(qwk);
                    174:         errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
                    175:         return(0); }
                    176:     fseek(personal,0L,SEEK_END); }
                    177: else
                    178:     personal=NULL;
                    179: 
                    180: if(useron.qwk&(QWK_EMAIL|QWK_ALLMAIL) && !prepack) {
                    181:        sprintf(smb.file,"%sMAIL",data_dir);
                    182:        smb.retry_time=smb_retry_time;
                    183:        if((i=smb_open(&smb))!=0) {
                    184:         fclose(qwk);
                    185:                if(personal)
                    186:                        fclose(personal);
                    187:                errormsg(WHERE,ERR_OPEN,smb.file,i);
                    188:                return(0); }
                    189: 
                    190:        /***********************/
                    191:        /* Pack E-mail, if any */
                    192:        /***********************/
                    193:        qwkmail_time=time(NULL);
                    194:        mailmsgs=loadmail(&mail,useron.number,0,useron.qwk&QWK_ALLMAIL ? LM_QWK
                    195:                : LM_UNREAD|LM_QWK);
                    196:        if(mailmsgs && !(sys_status&SS_ABORT)) {
                    197:                bputs(text[QWKPackingEmail]);
                    198:                if(!(useron.qwk&QWK_NOINDEX)) {
                    199:                        sprintf(str,"%s000.NDX",temp_dir);
                    200:                        if((ndx=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
                    201:                                fclose(qwk);
                    202:                                if(personal)
                    203:                                        fclose(personal);
                    204:                                smb_close(&smb);
                    205:                                errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
                    206:                                FREE(mail);
                    207:                                return(0); }
                    208:                        fseek(ndx,0L,SEEK_END); }
                    209:                else
                    210:                        ndx=NULL;
                    211: 
                    212:                if(useron.rest&FLAG('Q'))
                    213:                        mode|=TO_QNET;
                    214:                else
                    215:                        mode&=~TO_QNET;
                    216: 
                    217:                for(l=0;l<mailmsgs;l++) {
                    218:                        bprintf("\b\b\b\b\b\b\b\b\b\b\b\b%4lu of %-4lu"
                    219:                                ,l+1,mailmsgs);
                    220: 
                    221:                        msg.idx.offset=mail[l].offset;
                    222:                        if(!loadmsg(&msg,mail[l].number))
                    223:                                continue;
                    224: 
                    225:                        if(msg.hdr.auxattr&MSG_FILEATTACH && useron.qwk&QWK_ATTACH) {
                    226:                                sprintf(str,"%sFILE\\%04u.IN\\%s"
                    227:                                        ,data_dir,useron.number,msg.subj);
                    228:                                sprintf(tmp,"%s%s",temp_dir,msg.subj);
                    229:                                if(fexist(str) && !fexist(tmp))
                    230:                                        mv(str,tmp,1); }
                    231: 
                    232:                        size=msgtoqwk(msg,qwk,mode,INVALID_SUB,0);
                    233:                        smb_unlockmsghdr(&smb,&msg);
                    234:                        smb_freemsgmem(&msg);
                    235:                        if(ndx) {
                    236:                                msgndx++;
                    237:                                f=ltomsbin(msgndx);     /* Record number */
                    238:                                ch=0;                                   /* Sub number, not used */
                    239:                                if(personal) {
                    240:                                        fwrite(&f,4,1,personal);
                    241:                                        fwrite(&ch,1,1,personal); }
                    242:                                fwrite(&f,4,1,ndx);
                    243:                                fwrite(&ch,1,1,ndx);
                    244:                                msgndx+=size/128L; } }
                    245:                bprintf(text[QWKPackedEmail],mailmsgs);
                    246:                if(ndx)
                    247:                        fclose(ndx); }
                    248:        smb_close(&smb);                                        /* Close the e-mail */
                    249:        if(mailmsgs)
                    250:                FREE(mail);
                    251:        }
                    252: 
                    253: /*********************/
                    254: /* Pack new messages */
                    255: /*********************/
                    256: for(i=0;i<usrgrps;i++) {
                    257:        for(j=0;j<usrsubs[i] && !msgabort();j++)
                    258:                if(sub[usrsub[i][j]]->misc&SUB_NSCAN
                    259:                        || (!(useron.rest&FLAG('Q'))
                    260:                        && sub[usrsub[i][j]]->misc&SUB_FORCED)) {
                    261:                        if(!chk_ar(sub[usrsub[i][j]]->read_ar,useron))
                    262:                                continue;
                    263:                        lncntr=0;                                               /* defeat pause */
                    264:                        if(useron.rest&FLAG('Q') && !(sub[usrsub[i][j]]->misc&SUB_QNET))
                    265:                                continue;       /* QWK Net Node and not QWK networked, so skip */
                    266: 
                    267:                        msgs=getlastmsg(usrsub[i][j],&lastmsg,0);
                    268:                        if(!msgs || lastmsg<=sub[usrsub[i][j]]->ptr) { /* no msgs */
                    269:                                if(sub[usrsub[i][j]]->ptr>lastmsg)      { /* corrupted ptr */
                    270:                                        sub[usrsub[i][j]]->ptr=lastmsg; /* so fix automatically */
                    271:                                        sub[usrsub[i][j]]->last=lastmsg; }
                    272:                                bprintf(text[NScanStatusFmt]
                    273:                                        ,grp[sub[usrsub[i][j]]->grp]->sname
                    274:                                        ,sub[usrsub[i][j]]->lname,0L,msgs);
                    275:                                continue; }
                    276: 
                    277:                        sprintf(smb.file,"%s%s"
                    278:                                ,sub[usrsub[i][j]]->data_dir,sub[usrsub[i][j]]->code);
                    279:                        smb.retry_time=smb_retry_time;
                    280:                        if((k=smb_open(&smb))!=0) {
                    281:                                errormsg(WHERE,ERR_OPEN,smb.file,k);
                    282:                                continue; }
                    283: 
                    284:                        k=0;
                    285:                        if(useron.qwk&QWK_BYSELF)
                    286:                                k|=LP_BYSELF;
                    287:                        if(!(sub[usrsub[i][j]]->misc&SUB_YSCAN))
                    288:                                k|=LP_OTHERS;
                    289:                        post=loadposts(&posts,usrsub[i][j],sub[usrsub[i][j]]->ptr,k);
                    290: 
                    291:                        bprintf(text[NScanStatusFmt]
                    292:                                ,grp[sub[usrsub[i][j]]->grp]->sname
                    293:                                ,sub[usrsub[i][j]]->lname,posts,msgs);
                    294:                        if(!posts)      { /* no new messages */
                    295:                                smb_close(&smb);
                    296:                                continue; }
                    297:                        bputs(text[QWKPackingSubboard]);        
                    298:                        submsgs=0;
                    299:                        conf=sub[usrsub[i][j]]->qwkconf;
                    300:                        if(!conf)
                    301:                                conf=((i+1)*1000)+j+1;
                    302: 
                    303:                        if(!(useron.qwk&QWK_NOINDEX)) {
                    304:                                sprintf(str,"%s%u.NDX",temp_dir,conf);
                    305:                 if((ndx=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
                    306:                                        fclose(qwk);
                    307:                                        if(personal)
                    308:                                                fclose(personal);
                    309:                                        smb_close(&smb);
                    310:                                        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
                    311:                                        LFREE(post);
                    312:                                        return(0); }
                    313:                                fseek(ndx,0L,SEEK_END); }
                    314:                        else
                    315:                                ndx=NULL;
                    316: 
                    317:                        for(l=0;l<posts && !msgabort();l++) {
                    318:                                bprintf("\b\b\b\b\b%-5lu",l+1);
                    319: 
                    320:                                sub[usrsub[i][j]]->ptr=post[l].number;  /* set ptr */
                    321:                                sub[usrsub[i][j]]->last=post[l].number; /* set last read */
                    322: 
                    323:                                msg.idx.offset=post[l].offset;
                    324:                                if(!loadmsg(&msg,post[l].number))
                    325:                                        continue;
                    326: 
                    327:                                if(useron.rest&FLAG('Q')) {
                    328:                                        if(msg.from_net.type && msg.from_net.type!=NET_QWK &&
                    329:                                                !(sub[usrsub[i][j]]->misc&SUB_GATE)) { /* From other */
                    330:                                                smb_freemsgmem(&msg);                    /* net, don't gate */
                    331:                                                smb_unlockmsghdr(&smb,&msg);
                    332:                                                continue; }
                    333:                                        mode|=(TO_QNET|TAGLINE);
                    334:                                        if(msg.from_net.type==NET_QWK) {
                    335:                                                mode&=~TAGLINE;
                    336:                                                if(route_circ(msg.from_net.addr,useron.alias)
                    337:                                                        || !strnicmp(msg.subj,"NE:",3)) {
                    338:                                                        smb_freemsgmem(&msg);
                    339:                                                        smb_unlockmsghdr(&smb,&msg);
                    340:                                                        continue; } } }
                    341:                                else
                    342:                                        mode&=~(TAGLINE|TO_QNET);
                    343: 
                    344:                                size=msgtoqwk(msg,qwk,mode,usrsub[i][j],conf);
                    345:                                smb_unlockmsghdr(&smb,&msg);
                    346: 
                    347:                                if(ndx) {
                    348:                                        msgndx++;
                    349:                                        f=ltomsbin(msgndx);     /* Record number */
                    350:                                        ch=0;                                   /* Sub number, not used */
                    351:                                        if(personal
                    352:                                                && (!stricmp(msg.to,useron.alias)
                    353:                                                        || !stricmp(msg.to,useron.name))) {
                    354:                                                fwrite(&f,4,1,personal);
                    355:                                                fwrite(&ch,1,1,personal); }
                    356:                                        fwrite(&f,4,1,ndx);
                    357:                                        fwrite(&ch,1,1,ndx);
                    358:                                        msgndx+=size/128L; }
                    359: 
                    360:                                smb_freemsgmem(&msg);
                    361:                                (*msgcnt)++;
                    362:                                submsgs++;
                    363:                                if(max_qwkmsgs
                    364:                                        && !(useron.rest&FLAG('Q')) && (*msgcnt)>=max_qwkmsgs) {
                    365:                                        bputs(text[QWKmsgLimitReached]);
                    366:                                        break; } }
                    367:                        if(!(sys_status&SS_ABORT))
                    368:                                bprintf(text[QWKPackedSubboard],submsgs,(*msgcnt));
                    369:                        if(ndx) {
                    370:                                fclose(ndx);
                    371:                                sprintf(str,"%s%u.NDX",temp_dir,conf);
                    372:                                if(!flength(str))
                    373:                                        remove(str); }
                    374:                        smb_close(&smb);
                    375:                        LFREE(post);
                    376:                        if(l<posts)
                    377:                                break; }
                    378:        if(j<usrsubs[i]) /* if sub aborted, abort all */
                    379:                break; }
                    380: 
                    381: if((*msgcnt)+mailmsgs && time(NULL)-start)
                    382:        bprintf("\r\n\r\n\1n\1hPacked %lu messages in %lu seconds "
                    383:                "(%lu messages/second)."
                    384:                ,(*msgcnt)+mailmsgs,time(NULL)-start
                    385:                ,((*msgcnt)+mailmsgs)/(time(NULL)-start));
                    386: 
                    387: fclose(qwk);                   /* close MESSAGE.DAT */
                    388: if(personal) {
                    389:        fclose(personal);                /* close PERSONAL.NDX */
                    390:        sprintf(str,"%sPERSONAL.NDX",temp_dir);
                    391:        if(!flength(str))
                    392:                remove(str); }
                    393: CRLF;
                    394: 
                    395: if(!prepack && (sys_status&SS_ABORT || !online))
                    396:     return(0);
                    397: 
                    398: if(!prepack && useron.rest&FLAG('Q')) { /* If QWK Net node, check for files */
                    399:     sprintf(str,"%sQNET\\%s.OUT\\*.*",data_dir,useron.alias);
                    400:     i=findfirst(str,&ff,0);
                    401:     while(!i) {                 /* Move files into temp dir */
                    402:         sprintf(str,"%sQNET\\%s.OUT\\%s",data_dir,useron.alias,ff.ff_name);
                    403:                strupr(str);
                    404:         sprintf(tmp2,"%s%s",temp_dir,ff.ff_name);
                    405:                lncntr=0;       /* Default pause */
                    406:                bprintf(text[RetrievingFile],str);
                    407:                if(!mv(str,tmp2,1))
                    408:                        netfiles++;
                    409:                i=findnext(&ff); }
                    410:        if(netfiles)
                    411:                CRLF; }
                    412: 
                    413: if(batdn_total) {
                    414:        for(i=0,totalcdt=0;i<batdn_total;i++)
                    415:                        totalcdt+=batdn_cdt[i];
                    416:        if(!(useron.exempt&FLAG('D'))
                    417:                && totalcdt>useron.cdt+useron.freecdt) {
                    418:                bprintf(text[YouOnlyHaveNCredits]
                    419:                        ,ultoac(useron.cdt+useron.freecdt,tmp)); }
                    420:        else {
                    421:                for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
                    422:                        totalsize+=batdn_size[i];
                    423:                        if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
                    424:                                totaltime+=batdn_size[i]/(ulong)cur_cps; }
                    425:                if(!(useron.exempt&FLAG('T')) && !SYSOP && totaltime>timeleft)
                    426:                        bputs(text[NotEnoughTimeToDl]);
                    427:                else {
                    428:                        for(i=0;i<batdn_total;i++) {
                    429:                                lncntr=0;
                    430:                                unpadfname(batdn_name[i],tmp);
                    431:                                sprintf(tmp2,"%s%s",temp_dir,tmp);
                    432:                                if(!fexist(tmp2)) {
                    433:                                        seqwait(dir[batdn_dir[i]]->seqdev);
                    434:                                        bprintf(text[RetrievingFile],tmp);
                    435:                                        sprintf(str,"%s%s"
                    436:                                                ,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
                    437:                                                ? altpath[batdn_alt[i]-1]
                    438:                                                : dir[batdn_dir[i]]->path
                    439:                                                ,tmp);
                    440:                                        mv(str,tmp2,1); /* copy the file to temp dir */
                    441:                                        getnodedat(node_num,&thisnode,1);
                    442:                                        thisnode.aux=0xfe;
                    443:                                        putnodedat(node_num,thisnode);
                    444:                                        CRLF; } } } } }
                    445: 
                    446: if(!(*msgcnt) && !mailmsgs && !files && !netfiles && !batdn_total
                    447:        && (prepack || !preqwk)) {
                    448:        bputs(text[QWKNoNewMessages]);
                    449:        return(0); }
                    450: 
                    451: if(!prepack && !(useron.rest&FLAG('Q'))) {      /* Don't include in network */
                    452:        /***********************/                                       /* packets */
                    453:        /* Copy QWK Text files */
                    454:        /***********************/
                    455:        sprintf(str,"%sQWK\\HELLO",text_dir);
                    456:        if(fexist(str)) {
                    457:                sprintf(tmp2,"%sHELLO",temp_dir);
                    458:                mv(str,tmp2,1); }
                    459:        sprintf(str,"%sQWK\\BBSNEWS",text_dir);
                    460:        if(fexist(str)) {
                    461:                sprintf(tmp2,"%sBBSNEWS",temp_dir);
                    462:                mv(str,tmp2,1); }
                    463:        sprintf(str,"%sQWK\\GOODBYE",text_dir);
                    464:        if(fexist(str)) {
                    465:                sprintf(tmp2,"%sGOODBYE",temp_dir);
                    466:                mv(str,tmp2,1); }
                    467:        sprintf(str,"%sQWK\\BLT-*.*",text_dir);
                    468:        i=findfirst(str,&ff,0);
                    469:        while(!i) {                             /* Copy BLT-*.* files */
                    470:                padfname(ff.ff_name,str);
                    471:                if(isdigit(str[4]) && isdigit(str[9])) {
                    472:                        sprintf(str,"%sQWK\\%s",text_dir,ff.ff_name);
                    473:                        sprintf(tmp2,"%s%s",temp_dir,ff.ff_name);
                    474:                        mv(str,tmp2,1); }
                    475:                i=findnext(&ff); } }
                    476: 
                    477: if(prepack) {
                    478:        for(i=1;i<=sys_nodes;i++) {
                    479:                getnodedat(i,&node,0);
                    480:                if((node.status==NODE_INUSE || node.status==NODE_QUIET
                    481:                        || node.status==NODE_LOGON) && node.useron==useron.number)
                    482:                        break; }
                    483:        if(i<=sys_nodes)        /* Don't pre-pack with user online */
                    484:                return(0); }
                    485: 
                    486: /*******************/
                    487: /* Compress Packet */
                    488: /*******************/
                    489: sprintf(tmp2,"%s*.*",temp_dir);
                    490: i=external(cmdstr(temp_cmd(),packet,tmp2,NULL),EX_OUTL|EX_OUTR);
                    491: if(!fexist(packet)) {
                    492:        bputs(text[QWKCompressionFailed]);
                    493:        if(i)
                    494:                errormsg(WHERE,ERR_EXEC,cmdstr(temp_cmd(),packet,tmp2,NULL),i);
                    495:        else
                    496:                errorlog("Couldn't compress QWK packet");
                    497:        return(0); }
                    498: 
                    499: if(prepack)            /* Early return if pre-packing */
                    500:        return(1);
                    501: 
                    502: l=flength(packet);
                    503: sprintf(str,"%s.QWK",sys_id);
                    504: bprintf(text[FiFilename],str);
                    505: bprintf(text[FiFileSize],ultoac(l,tmp));
                    506: if(l>0L && cur_cps)
                    507:        i=l/(ulong)cur_cps;
                    508: else
                    509:        i=0;
                    510: bprintf(text[FiTransferTime],sectostr(i,tmp));
                    511: CRLF;
                    512: if(!(useron.exempt&FLAG('T')) && i>timeleft) {
                    513:        bputs(text[NotEnoughTimeToDl]);
                    514:        return(0); }
                    515: 
                    516: if(useron.rest&FLAG('Q')) {
                    517:        sprintf(str,"%s.QWK",sys_id);
                    518:        sprintf(tmp,"%s*.*",temp_dir);
                    519:        i=findfirst(tmp,&ff,0);
                    520:        while(!i) {
                    521:                if(stricmp(str,ff.ff_name)) {
                    522:                        sprintf(tmp,"%s%s",temp_dir,ff.ff_name);
                    523:                        remove(tmp); }
                    524:                i=findnext(&ff); } }
                    525: 
                    526: return(1);
                    527: }

unix.superglobalmegacorp.com

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