~ubuntu-branches/debian/stretch/alpine/stretch

« back to all changes in this revision

Viewing changes to pith/flag.c

  • Committer: Bazaar Package Importer
  • Author(s): Asheesh Laroia
  • Date: 2008-09-23 12:17:56 UTC
  • mfrom: (2.1.8 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080923121756-6u4x8bwq89qlzt32
Tags: 2.00+dfsg-2
Update to package description: note that Alpine is no longer in
alpha. (Closes: #499640)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#if !defined(lint) && !defined(DOS)
2
 
static char rcsid[] = "$Id: flag.c 671 2007-08-15 20:28:09Z hubert@u.washington.edu $";
 
2
static char rcsid[] = "$Id: flag.c 1113 2008-07-14 18:01:54Z hubert@u.washington.edu $";
3
3
#endif
4
4
 
5
5
/*
23
23
 
24
24
#include "../pith/headers.h"
25
25
#include "../pith/flag.h"
 
26
#include "../pith/pineelt.h"
26
27
#include "../pith/icache.h"
27
28
#include "../pith/mailindx.h"
28
29
#include "../pith/mailcmd.h"
529
530
get_lflag(MAILSTREAM *stream, MSGNO_S *msgs, long int n, int f)
530
531
{
531
532
    MESSAGECACHE *mc;
 
533
    PINELT_S     *pelt;
532
534
    unsigned long rawno;
533
535
 
534
536
    rawno = msgs ? mn_m2raw(msgs, n) : n;
536
538
      return(0);
537
539
 
538
540
    mc = mail_elt(stream, rawno);
539
 
    return((!mc) ? 0 : (!f)
540
 
                    ? !(mc->spare || mc->spare2 || mc->spare3 ||
541
 
                        mc->spare4 || mc->spare5)
542
 
                    : (((f & MN_HIDE) ? mc->spare : 0)
543
 
                       || ((f & MN_EXLD) ? mc->spare2 : 0)
544
 
                       || ((f & MN_SLCT) ? mc->spare3 : 0)
545
 
                       || ((f & MN_STMP) ? mc->spare6 : 0)
546
 
                       || ((f & MN_USOR) ? mc->spare7 : 0)
547
 
                       || ((f & MN_COLL) ? mc->spare5 : 0)
548
 
                       || ((f & MN_CHID) ? mc->spare4 : 0)
549
 
                       || ((f & MN_CHID2) ? mc->spare8 : 0)));
 
541
    if(!mc || (pelt = (PINELT_S *) mc->sparep) == NULL)
 
542
      return(f ? 0 : 1);
 
543
 
 
544
    return((!f)
 
545
             ? !(pelt->hidden || pelt->excluded || pelt->selected ||
 
546
                 pelt->colhid || pelt->collapsed || pelt->searched)
 
547
             : (((f & MN_HIDE) ? pelt->hidden : 0)
 
548
                || ((f & MN_EXLD) ? pelt->excluded : 0)
 
549
                || ((f & MN_SLCT) ? pelt->selected : 0)
 
550
                || ((f & MN_STMP) ? pelt->tmp : 0)
 
551
                || ((f & MN_USOR) ? pelt->unsorted : 0)
 
552
                || ((f & MN_COLL) ? pelt->collapsed : 0)
 
553
                || ((f & MN_CHID) ? pelt->colhid : 0)
 
554
                || ((f & MN_CHID2) ? pelt->colhid2 : 0)
 
555
                || ((f & MN_SRCH) ? pelt->searched : 0)));
550
556
}
551
557
 
552
558
 
568
574
    MESSAGECACHE *mc;
569
575
    long          rawno = 0L;
570
576
    PINETHRD_S   *thrd, *topthrd = NULL;
 
577
    PINELT_S    **peltp, *pelt;
571
578
 
572
579
    if(n < 1L || n > mn_get_total(msgs))
573
580
      return(0L);
577
584
        int was_invisible, is_invisible;
578
585
        int chk_thrd_cnt = 0, thrd_was_visible, was_hidden, is_hidden;
579
586
 
580
 
        was_invisible = (mc->spare || mc->spare4) ? 1 : 0;
 
587
        if((*(peltp = (PINELT_S **) &mc->sparep) == NULL)){
 
588
            *peltp = (PINELT_S *) fs_get(sizeof(PINELT_S));
 
589
            memset(*peltp, 0, sizeof(PINELT_S));
 
590
        }
 
591
 
 
592
        pelt = (*peltp);
 
593
 
 
594
        was_invisible = (pelt->hidden || pelt->colhid) ? 1 : 0;
581
595
 
582
596
        if((chk_thrd_cnt = ((msgs->visible_threads >= 0L)
583
 
           && THRD_INDX_ENABLED() && (f & MN_HIDE) && (mc->spare != v))) != 0){
 
597
           && THRD_INDX_ENABLED() && (f & MN_HIDE) && (pelt->hidden != v))) != 0){
584
598
            thrd = fetch_thread(stream, rawno);
585
599
            if(thrd && thrd->top){
586
600
                if(thrd->top == thrd->rawno)
591
605
 
592
606
            if(topthrd){
593
607
                thrd_was_visible = thread_has_some_visible(stream, topthrd);
594
 
                was_hidden = mc->spare ? 1 : 0;
 
608
                was_hidden = pelt->hidden ? 1 : 0;
595
609
            }
596
610
        }
597
611
 
598
 
        if((f & MN_HIDE) && mc->spare != v){
599
 
            mc->spare = v;
 
612
        if((f & MN_HIDE) && pelt->hidden != v){
 
613
            pelt->hidden = v;
600
614
            msgs->flagged_hid += (v) ? 1L : -1L;
601
615
 
602
 
            if(mc->spare && THREADING() && !THRD_INDX()
 
616
            if(pelt->hidden && THREADING() && !THRD_INDX()
603
617
               && stream == ps_global->mail_stream
604
618
               && ps_global->thread_disp_style == THREAD_MUTTLIKE)
605
619
              clear_index_cache_for_thread(stream, fetch_thread(stream, rawno),
606
620
                                           sp_msgmap(stream));
607
621
        }
608
622
 
609
 
        if((f & MN_CHID) && mc->spare4 != v){
610
 
            mc->spare4 = v;
 
623
        if((f & MN_CHID) && pelt->colhid != v){
 
624
            pelt->colhid = v;
611
625
            msgs->flagged_chid += (v) ? 1L : -1L;
612
626
        }
613
627
 
614
 
        if((f & MN_CHID2) && mc->spare8 != v){
615
 
            mc->spare8 = v;
 
628
        if((f & MN_CHID2) && pelt->colhid2 != v){
 
629
            pelt->colhid2 = v;
616
630
            msgs->flagged_chid2 += (v) ? 1L : -1L;
617
631
        }
618
632
 
619
 
        if((f & MN_COLL) && mc->spare5 != v){
620
 
            mc->spare5 = v;
 
633
        if((f & MN_COLL) && pelt->collapsed != v){
 
634
            pelt->collapsed = v;
621
635
            msgs->flagged_coll += (v) ? 1L : -1L;
622
636
        }
623
637
 
624
 
        if((f & MN_USOR) && mc->spare7 != v){
625
 
            mc->spare7 = v;
 
638
        if((f & MN_USOR) && pelt->unsorted != v){
 
639
            pelt->unsorted = v;
626
640
            msgs->flagged_usor += (v) ? 1L : -1L;
627
641
        }
628
642
 
629
 
        if((f & MN_EXLD) && mc->spare2 != v){
630
 
            mc->spare2 = v;
 
643
        if((f & MN_EXLD) && pelt->excluded != v){
 
644
            pelt->excluded = v;
631
645
            msgs->flagged_exld += (v) ? 1L : -1L;
632
646
        }
633
647
 
634
 
        if((f & MN_SLCT) && mc->spare3 != v){
635
 
            mc->spare3 = v;
 
648
        if((f & MN_SLCT) && pelt->selected != v){
 
649
            pelt->selected = v;
636
650
            msgs->flagged_tmp += (v) ? 1L : -1L;
637
651
        }
638
652
 
639
 
        if((f & MN_STMP) && mc->spare6 != v){
640
 
            mc->spare6 = v;
 
653
        if((f & MN_SRCH) && pelt->searched != v){
 
654
            pelt->searched = v;
 
655
            msgs->flagged_srch += (v) ? 1L : -1L;
 
656
        }
 
657
 
 
658
        if((f & MN_STMP) && pelt->tmp != v){
 
659
            pelt->tmp = v;
641
660
            msgs->flagged_stmp += (v) ? 1L : -1L;
642
661
        }
643
662
 
644
 
        is_invisible = (mc->spare || mc->spare4) ? 1 : 0;
 
663
        is_invisible = (pelt->hidden || pelt->colhid) ? 1 : 0;
645
664
 
646
665
        if(was_invisible != is_invisible)
647
666
          msgs->flagged_invisible += (v) ? 1L : -1L;
651
670
         * are visible and how many are MN_HIDE-hidden.
652
671
         */
653
672
        if(chk_thrd_cnt && topthrd
654
 
           && (was_hidden != (is_hidden = mc->spare ? 1 : 0))){
 
673
           && (was_hidden != (is_hidden = pelt->hidden ? 1 : 0))){
655
674
            if(!thrd_was_visible && !is_hidden){
656
675
                /* it is visible now, increase count by one */
657
676
                msgs->visible_threads++;
722
741
 
723
742
    if(f == MN_NONE)
724
743
      return(!(msgs->flagged_hid || msgs->flagged_exld || msgs->flagged_tmp ||
725
 
               msgs->flagged_coll || msgs->flagged_chid));
 
744
               msgs->flagged_coll || msgs->flagged_chid || msgs->flagged_srch));
726
745
    else if(f == (MN_HIDE | MN_CHID))
727
746
      return(msgs->flagged_invisible);          /* special non-bogus case */
728
747
    else
729
748
      return(((f & MN_HIDE)   ? msgs->flagged_hid  : 0L)
730
749
             + ((f & MN_EXLD) ? msgs->flagged_exld : 0L)
731
750
             + ((f & MN_SLCT) ? msgs->flagged_tmp  : 0L)
 
751
             + ((f & MN_SRCH) ? msgs->flagged_srch  : 0L)
732
752
             + ((f & MN_STMP) ? msgs->flagged_stmp  : 0L)
733
753
             + ((f & MN_COLL) ? msgs->flagged_coll  : 0L)
734
754
             + ((f & MN_USOR) ? msgs->flagged_usor  : 0L)