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