/[mailutils]/mailutils/mh/scan.c
ViewVC logotype

Diff of /mailutils/mh/scan.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.13 by gray, Fri Dec 27 19:31:06 2002 UTC revision 1.14 by gray, Sat Jan 11 22:22:55 2003 UTC
# Line 24  Line 24 
24  #include <sys/types.h>  #include <sys/types.h>
25  #include <sys/stat.h>  #include <sys/stat.h>
26  #include <time.h>  #include <time.h>
27    #include <mailutils/observer.h>
28    
29  const char *argp_program_version = "scan (" PACKAGE_STRING ")";  const char *argp_program_version = "scan (" PACKAGE_STRING ")";
30  static char doc[] = "GNU MH scan";  static char doc[] = "GNU MH scan";
# Line 72  static mh_format_t format; Line 73  static mh_format_t format;
73    
74  static mh_msgset_t msgset;  static mh_msgset_t msgset;
75    
76    static char *buffer;
77    
78  void list_message __P((mailbox_t mbox, message_t msg, size_t num, void *data));  void list_message __P((mailbox_t mbox, message_t msg, size_t num, void *data));
79  int scan __P((mailbox_t mbox));  void print_header __P((mailbox_t mbox));
80    void clear_screen __P((void));
81    
82  static int  static int
83  opt_handler (int key, char *arg, void *unused)  opt_handler (int key, char *arg, void *unused)
# Line 128  opt_handler (int key, char *arg, void *u Line 132  opt_handler (int key, char *arg, void *u
132    return 0;    return 0;
133  }  }
134    
135    /* Observable Action this is being call at every message discover.  */
136    static int
137    action (observer_t o, size_t type)
138    {
139      static int counter;
140      mailbox_t mbox;
141      message_t msg = NULL;
142      size_t num;
143    
144      if (type == MU_EVT_MESSAGE_ADD)
145        {
146          mbox = observer_get_owner (o);
147          counter++;
148          mailbox_get_message (mbox, counter, &msg);
149          mh_message_number (msg, &num);
150          list_message (mbox, msg, num, NULL);
151        }
152      return 0;
153    }
154    
155  int  int
156  main (int argc, char **argv)  main (int argc, char **argv)
157  {  {
158    int index;    int index;
159    mailbox_t mbox;    mailbox_t mbox;
160      int status;
161    
162    /* Native Language Support */    /* Native Language Support */
163    mu_init_nls ();    mu_init_nls ();
# Line 148  main (int argc, char **argv) Line 172  main (int argc, char **argv)
172      }      }
173    
174    mbox = mh_open_folder (current_folder, 0);    mbox = mh_open_folder (current_folder, 0);
175    mh_msgset_parse (mbox, &msgset, argc - index, argv + index, "all");  
176      buffer = xmalloc (width);
177      
178      argc -= index;
179      argv += index;
180      if ((argc == 0 || strcmp (argv[0], "all") == 0) && !reverse)
181        {
182          /* Fast approach */
183          observer_t observer;
184          observable_t observable;
185          size_t total;
186            
187          print_header (mbox);
188          
189          observer_create (&observer, mbox);
190          observer_set_action (observer, action, mbox);
191          mailbox_get_observable (mbox, &observable);
192          observable_attach (observable, MU_EVT_MESSAGE_ADD, observer);
193    
194          status = mailbox_scan (mbox, 1, &total);
195        }
196      else
197        {
198          mh_msgset_parse (mbox, &msgset, argc, argv, "all");
199        
200    if (reverse)        if (reverse)
201      mh_msgset_reverse (&msgset);          mh_msgset_reverse (&msgset);
202    
203    return scan (mbox);        print_header (mbox);
204          status = mh_iterate (mbox, &msgset, list_message, NULL);
205        }
206    
207      clear_screen ();
208      mh_global_save_state ();
209      
210      return status;
211    }
212    
213    void
214    print_header (mailbox_t mbox)
215    {
216      if (header)
217        {
218          url_t url = NULL;
219          char datestr[64];
220          time_t t;
221              
222          mailbox_get_url (mbox, &url);
223          time (&t);
224          strftime (datestr, sizeof datestr, "%c", localtime (&t));
225          printf (_("Folder %s  %s\n"), url_to_string (url), datestr);
226        }
227  }  }
228    
229  #ifdef HAVE_TERMCAP_H  #ifdef HAVE_TERMCAP_H
# Line 197  clear_screen () Line 267  clear_screen ()
267      }      }
268  }  }
269    
 struct list_data {  
   char *buffer;  
   size_t width;  
 };  
   
 int  
 scan (mailbox_t mbox)  
 {  
   struct list_data list_data;  
     
   list_data.buffer = xmalloc (width);  
   list_data.width  = width;  
   
   if (header)  
     {  
       url_t url = NULL;  
       char datestr[64];  
       time_t t;  
         
       mailbox_get_url (mbox, &url);  
       time (&t);  
       strftime (datestr, sizeof datestr, "%c", localtime (&t));  
       printf (_("Folder %s  %s\n"), url_to_string (url), datestr);  
     }  
   
   mh_iterate (mbox, &msgset, list_message, &list_data);  
     
   clear_screen ();  
   mh_global_save_state ();  
   return 0;  
 }  
   
270  void  void
271  list_message (mailbox_t mbox, message_t msg, size_t num, void *data)  list_message (mailbox_t mbox, message_t msg, size_t num, void *data)
272  {  {
273    struct list_data *ld = data;    buffer[0] = 0;
274        mh_format (&format, msg, num, buffer, width);
275    ld->buffer[0] = 0;    printf ("%s\n", buffer);
   mh_format (&format, msg, num, ld->buffer, ld->width);  
   printf ("%s\n", ld->buffer);  
276  }  }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26