[1011] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r996 - branches/barnowl_sqlite/owl

daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:12:07 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
X-Original-To: nelhage@nelhage.com
To: dirty-owl-hackers@MIT.EDU
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Sat, 29 Mar 2008 17:16:07 -0400 (EDT)

Author: nelhage
Date: 2008-03-29 17:16:07 -0400 (Sat, 29 Mar 2008)
New Revision: 996

Modified:
   branches/barnowl_sqlite/owl/functions.c
   branches/barnowl_sqlite/owl/global.c
   branches/barnowl_sqlite/owl/mainwin.c
   branches/barnowl_sqlite/owl/owl.c
   branches/barnowl_sqlite/owl/owl.h
   branches/barnowl_sqlite/owl/perlconfig.c
   branches/barnowl_sqlite/owl/util.c
   branches/barnowl_sqlite/owl/view.c
Log:
Tweak the owl_iterator API to only work with pointer, in preparation
for the SV* transition


Modified: branches/barnowl_sqlite/owl/functions.c
===================================================================
--- branches/barnowl_sqlite/owl/functions.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/functions.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -549,10 +549,11 @@
 {
   int found;
   owl_view *v;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_filter *f = NULL;
   owl_message *m;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
   v=owl_global_get_current_view(&g);
 
   if (filter) {
@@ -563,21 +564,21 @@
     }
   }
 
-  owl_view_iterator_clone(&it, owl_global_get_curmsg(&g));
+  owl_view_iterator_clone(it, owl_global_get_curmsg(&g));
   found=0;
 
-  for (owl_view_iterator_next(&it);
-       !owl_view_iterator_is_at_end(&it);
-       owl_view_iterator_next(&it)) {
-    m = owl_view_iterator_get_message(&it);
+  for (owl_view_iterator_next(it);
+       !owl_view_iterator_is_at_end(it);
+       owl_view_iterator_next(it)) {
+    m = owl_view_iterator_get_message(it);
     if (skip_deleted && owl_message_is_delete(m)) continue;
     if (f && !owl_filter_message_match(f, m)) continue;
     found = 1;
     break;
   }
 
-  if(owl_view_iterator_is_at_end(&it))
-    owl_view_iterator_prev(&it);
+  if(owl_view_iterator_is_at_end(it))
+    owl_view_iterator_prev(it);
 
   if (!found) {
     owl_function_makemsg("already at last%s message%s%s",
@@ -587,7 +588,7 @@
   }
 
   if (last_if_none || found) {
-    owl_global_set_curmsg(&g, &it);
+    owl_global_set_curmsg(&g, it);
     owl_function_calculate_topmsg(OWL_DIRECTION_DOWNWARDS);
     owl_mainwin_redisplay(owl_global_get_mainwin(&g));
     owl_global_set_direction_downwards(&g);
@@ -598,10 +599,12 @@
 {
   int found;
   owl_view *v;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_filter *f = NULL;
   owl_message *m;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+
   v=owl_global_get_current_view(&g);
 
   if (filter) {
@@ -612,21 +615,21 @@
     }
   }
 
-  owl_view_iterator_clone(&it, owl_global_get_curmsg(&g));
+  owl_view_iterator_clone(it, owl_global_get_curmsg(&g));
   found=0;
 
-  for (owl_view_iterator_prev(&it);
-       !owl_view_iterator_is_at_start(&it);
-       owl_view_iterator_prev(&it)) {
-    m = owl_view_iterator_get_message(&it);
+  for (owl_view_iterator_prev(it);
+       !owl_view_iterator_is_at_start(it);
+       owl_view_iterator_prev(it)) {
+    m = owl_view_iterator_get_message(it);
     if (skip_deleted && owl_message_is_delete(m)) continue;
     if (f && !owl_filter_message_match(f, m)) continue;
     found = 1;
     break;
   }
 
-  if(owl_view_iterator_is_at_start(&it))
-    owl_view_iterator_next(&it);
+  if(owl_view_iterator_is_at_start(it))
+    owl_view_iterator_next(it);
 
   if (!found) {
     owl_function_makemsg("already at first%s message%s%s",
@@ -636,7 +639,7 @@
   }
 
   if (first_if_none || found) {
-    owl_global_set_curmsg(&g, &it);
+    owl_global_set_curmsg(&g, it);
     owl_function_calculate_topmsg(OWL_DIRECTION_UPWARDS);
     owl_mainwin_redisplay(owl_global_get_mainwin(&g));
     owl_global_set_direction_upwards(&g);
@@ -728,10 +731,12 @@
 {
   owl_message *m;
   owl_messagelist *ml;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_view *v;
   int lastmsgid=0;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+
   v=owl_global_get_current_view(&g);
   ml=owl_global_get_msglist(&g);
 
@@ -746,8 +751,8 @@
 
   /* find where the new position should be
      (as close as possible to where we last where) */
-  owl_view_iterator_init_id(&it, v, lastmsgid);
-  owl_global_set_curmsg(&g, &it);
+  owl_view_iterator_init_id(it, v, lastmsgid);
+  owl_global_set_curmsg(&g, it);
   owl_function_calculate_topmsg(OWL_DIRECTION_NONE);
   /* if there are no messages set the direction to down in case we
      delete everything upwards */
@@ -759,10 +764,11 @@
 
 void owl_function_firstmsg()
 {
-  owl_view_iterator it;
-  owl_view_iterator_init_start(&it, owl_global_get_current_view(&g));
-  owl_global_set_curmsg(&g, &it);
-  owl_global_set_topmsg(&g, &it);
+  owl_view_iterator *it;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+  owl_view_iterator_init_start(it, owl_global_get_current_view(&g));
+  owl_global_set_curmsg(&g, it);
+  owl_global_set_topmsg(&g, it);
   owl_mainwin_redisplay(owl_global_get_mainwin(&g));
   owl_global_set_direction_downwards(&g);
 }
@@ -770,11 +776,12 @@
 void owl_function_lastmsg_noredisplay()
 {
   owl_view *v;
-  owl_view_iterator it;
+  owl_view_iterator *it;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
 
   v=owl_global_get_current_view(&g);
-  owl_view_iterator_init_end(&it, v);
-  owl_global_set_curmsg(&g, &it);
+  owl_view_iterator_init_end(it, v);
+  owl_global_set_curmsg(&g, it);
   owl_function_calculate_topmsg(OWL_DIRECTION_DOWNWARDS);
   /* owl_mainwin_redisplay(owl_global_get_mainwin(&g)); */
   owl_global_set_direction_downwards(&g);
@@ -1130,31 +1137,33 @@
 
 void owl_function_calculate_topmsg_neartop(int direction, owl_view *v, owl_view_iterator *curmsg, owl_view_iterator *topmsg, int recwinlines)
 {
-  owl_view_iterator it;
-  owl_view_iterator_clone(&it, curmsg);
-  owl_view_iterator_prev(&it);
-  if (owl_message_get_numlines(owl_view_iterator_get_message(&it))
+  owl_view_iterator *it;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+  owl_view_iterator_clone(it, curmsg);
+  owl_view_iterator_prev(it);
+  if (owl_message_get_numlines(owl_view_iterator_get_message(it))
       <  recwinlines/2) {
-    owl_view_iterator_clone(curmsg, &it);
+    owl_view_iterator_clone(curmsg, it);
   }
 }
   
 void owl_function_calculate_topmsg_center(int direction, owl_view *v, owl_view_iterator *curmsg, owl_view_iterator *topmsg, int recwinlines)
 {
   int lines;
-  owl_view_iterator it;
-  owl_view_iterator_clone(&it, curmsg);
+  owl_view_iterator *it;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+  owl_view_iterator_clone(it, curmsg);
 
   lines = 0;
-  for (owl_view_iterator_prev(&it);
-       !owl_view_iterator_is_at_start(&it);
-       owl_view_iterator_prev(&it)) {
-    lines += owl_message_get_numlines(owl_view_iterator_get_message(&it));
+  for (owl_view_iterator_prev(it);
+       !owl_view_iterator_is_at_start(it);
+       owl_view_iterator_prev(it)) {
+    lines += owl_message_get_numlines(owl_view_iterator_get_message(it));
     if (lines > recwinlines/2) break;
   }
-  if(owl_view_iterator_is_at_start(&it))
-    owl_view_iterator_next(&it);
-  owl_view_iterator_clone(topmsg, &it);
+  if(owl_view_iterator_is_at_start(it))
+    owl_view_iterator_next(it);
+  owl_view_iterator_clone(topmsg, it);
 }
   
 void owl_function_calculate_topmsg_paged(int direction, owl_view *v, owl_view_iterator *curmsg, owl_view_iterator *topmsg, int recwinlines, int center_on_page)
@@ -1201,7 +1210,8 @@
 void owl_function_calculate_topmsg_normal(int direction, owl_view *v, owl_view_iterator *curmsg, owl_view_iterator *topmsg, int recwinlines)
 {
   int savey, lines, y;
-  owl_view_iterator it;
+  owl_view_iterator *it;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
 
   if (!owl_view_iterator_is_valid(curmsg)) return;
 
@@ -1213,12 +1223,12 @@
 
   /* Find number of lines from top to bottom of curmsg (store in savey) */
   savey = 0;
-  for (owl_view_iterator_clone(&it, topmsg);
-       owl_view_iterator_cmp(&it, curmsg) <= 0
+  for (owl_view_iterator_clone(it, topmsg);
+       owl_view_iterator_cmp(it, curmsg) <= 0
          /* If we ever find we're off-screen, we can stop */
          && savey <= recwinlines; 
-       owl_view_iterator_next(&it)) {
-    savey += owl_message_get_numlines(owl_view_iterator_get_message(&it));
+       owl_view_iterator_next(it)) {
+    savey += owl_message_get_numlines(owl_view_iterator_get_message(it));
   }
 
   /* If we're off the bottom of the screen, set the topmsg to curmsg
@@ -1233,22 +1243,22 @@
   if (direction == OWL_DIRECTION_UPWARDS || direction == OWL_DIRECTION_NONE) {
     if (savey < (recwinlines / 4)) {
       y=0;
-      for (owl_view_iterator_clone(&it, curmsg);
-           owl_view_iterator_has_prev(&it);
-           owl_view_iterator_prev(&it)) {
-        lines = owl_message_get_numlines(owl_view_iterator_get_message(&it));
+      for (owl_view_iterator_clone(it, curmsg);
+           owl_view_iterator_has_prev(it);
+           owl_view_iterator_prev(it)) {
+        lines = owl_message_get_numlines(owl_view_iterator_get_message(it));
         /* will we run the curmsg off the screen? */
         if ( lines+y >= recwinlines ) {
-          owl_view_iterator_next(&it);
-          if(owl_view_iterator_cmp(&it, curmsg) > 0)
-            owl_view_iterator_clone(&it, curmsg);
+          owl_view_iterator_next(it);
+          if(owl_view_iterator_cmp(it, curmsg) > 0)
+            owl_view_iterator_clone(it, curmsg);
           break;
         }
         /* have saved 1/2 the screen space? */
         y += lines;
         if (y > (recwinlines / 2)) break;
       }
-      owl_view_iterator_clone(topmsg, &it);
+      owl_view_iterator_clone(topmsg, it);
     }
   }
 
@@ -1257,16 +1267,16 @@
     if (savey > ((recwinlines * 3)/4)) {
       y=0;
       /* count lines from the top until we can save 1/2 the screen size */
-      for (owl_view_iterator_clone(&it, topmsg);
-           owl_view_iterator_cmp(&it, curmsg) < 0;
-           owl_view_iterator_next(&it)) {
-        y+=owl_message_get_numlines(owl_view_iterator_get_message(&it));
+      for (owl_view_iterator_clone(it, topmsg);
+           owl_view_iterator_cmp(it, curmsg) < 0;
+           owl_view_iterator_next(it)) {
+        y+=owl_message_get_numlines(owl_view_iterator_get_message(it));
         if (y > (recwinlines / 2)) break;
       }
-      if (owl_view_iterator_cmp(&it,curmsg)) {
-        owl_view_iterator_next(&it);
+      if (owl_view_iterator_cmp(it,curmsg)) {
+        owl_view_iterator_next(it);
       }
-      owl_view_iterator_clone(topmsg, &it);
+      owl_view_iterator_clone(topmsg, it);
     }
   }
 }
@@ -1735,15 +1745,16 @@
 
 void owl_function_mainwin_pagedown()
 {
-  owl_view_iterator iter;
+  owl_view_iterator *iter;
+  iter = owl_view_iterator_free_later(owl_view_iterator_new());
 
-  owl_view_iterator_clone(&iter, owl_mainwin_get_last_msg(owl_global_get_mainwin(&g)));
-  if (!owl_view_iterator_is_valid(&iter)) return;
+  owl_view_iterator_clone(iter, owl_mainwin_get_last_msg(owl_global_get_mainwin(&g)));
+  if (!owl_view_iterator_is_valid(iter)) return;
   if (owl_mainwin_is_last_msg_truncated(owl_global_get_mainwin(&g))
-      && (owl_view_iterator_cmp(owl_global_get_curmsg(&g), &iter) < 0)) {
-    owl_view_iterator_prev(&iter);
+      && (owl_view_iterator_cmp(owl_global_get_curmsg(&g), iter) < 0)) {
+    owl_view_iterator_prev(iter);
   }
-  owl_global_set_curmsg(&g, &iter);
+  owl_global_set_curmsg(&g, iter);
   owl_function_nextmsg();
 }
 
@@ -1859,9 +1870,10 @@
 
   int count;
   owl_message *m;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_view *v;
   owl_filter *f;
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
 
   /* get the trash filter */
   f=owl_global_get_filter(&g, "trash");
@@ -1873,10 +1885,10 @@
   v=owl_global_get_current_view(&g);
 
   count=0;
-  for(owl_view_iterator_init_start(&it, v);
-      !owl_view_iterator_is_at_end(&it);
-      owl_view_iterator_next(&it)) {
-    m = owl_view_iterator_get_message(&it);
+  for(owl_view_iterator_init_start(it, v);
+      !owl_view_iterator_is_at_end(it);
+      owl_view_iterator_next(it)) {
+    m = owl_view_iterator_get_message(it);
     if (owl_filter_message_match(f, m)) {
       count++;
       owl_message_mark_delete(m);
@@ -2314,9 +2326,11 @@
   owl_view *v;
   owl_filter *f;
   int curid=-1;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_message *curm=NULL;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+
   v=owl_global_get_current_view(&g);
 
   curm=owl_global_get_current_message(&g);
@@ -2343,9 +2357,9 @@
   if(curid < 0) {
     curid = owl_filter_get_cachedmsgid(f);
   }
-  owl_view_iterator_init_id(&it, v, curid);
+  owl_view_iterator_init_id(it, v, curid);
 
-  owl_global_set_curmsg(&g, &it);
+  owl_global_set_curmsg(&g, it);
   owl_function_calculate_topmsg(OWL_DIRECTION_DOWNWARDS);
   owl_mainwin_redisplay(owl_global_get_mainwin(&g));
   owl_global_set_direction_downwards(&g);
@@ -2741,17 +2755,19 @@
 void owl_function_delete_curview_msgs(int flag)
 {
   owl_view *v;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   owl_message *m;
   int count = 0;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+
   v=owl_global_get_current_view(&g);
 
 
-  for(owl_view_iterator_init_start(&it, v);
-      !owl_view_iterator_is_at_end(&it);
-      owl_view_iterator_next(&it)) {
-    m = owl_view_iterator_get_message(&it);
+  for(owl_view_iterator_init_start(it, v);
+      !owl_view_iterator_is_at_end(it);
+      owl_view_iterator_next(it)) {
+    m = owl_view_iterator_get_message(it);
     count++;
     if (flag == 1) {
       owl_message_mark_delete(m);
@@ -3177,12 +3193,14 @@
    */
 
   owl_view *v;
-  owl_view_iterator start, *it;
+  owl_view_iterator *it;
   owl_message *m;
 
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+
   v=owl_global_get_current_view(&g);
   
-  owl_view_iterator_clone(&start, owl_global_get_curmsg(&g));
+  owl_view_iterator_clone(it, owl_global_get_curmsg(&g));
   
   if (owl_view_is_empty(v)) {
     owl_function_error("No messages present");
@@ -3191,20 +3209,18 @@
 
   if (mode==0) {
   } else if (direction==OWL_DIRECTION_DOWNWARDS) {
-    owl_view_iterator_next(&start);
+    owl_view_iterator_next(it);
   } else {
-    owl_view_iterator_prev(&start);
+    owl_view_iterator_prev(it);
   }
 
   /* bounds check */
-  if (owl_view_iterator_is_at_start(&start)
-      || owl_view_iterator_is_at_end(&start)) {
+  if (owl_view_iterator_is_at_start(it)
+      || owl_view_iterator_is_at_end(it)) {
     owl_function_error("No further matches found");
     return;
   }
 
-  it = &start;
-
   while(owl_view_iterator_is_at_start(it)
         || owl_view_iterator_is_at_end(it)) {
     m=owl_view_iterator_get_message(it);
@@ -3347,10 +3363,11 @@
 {
   owl_message *m;
   owl_view *v;
-  owl_view_iterator it;
+  owl_view_iterator *it;
   FILE *file;
 
-  v=owl_global_get_current_view(&g);
+  it = owl_view_iterator_free_later(owl_view_iterator_new());
+  v = owl_global_get_current_view(&g);
 
   /* in the future make it ask yes/no */
   /*
@@ -3367,10 +3384,10 @@
     return;
   }
 
-  for(owl_view_iterator_init_start(&it, v);
-      !owl_view_iterator_is_at_end(&it);
-      owl_view_iterator_next(&it)) {
-    m = owl_view_iterator_get_message(&it);
+  for(owl_view_iterator_init_start(it, v);
+      !owl_view_iterator_is_at_end(it);
+      owl_view_iterator_next(it)) {
+    m = owl_view_iterator_get_message(it);
     fputs(owl_message_get_text(m), file);
   }
   fclose(file);

Modified: branches/barnowl_sqlite/owl/global.c
===================================================================
--- branches/barnowl_sqlite/owl/global.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/global.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -55,6 +55,8 @@
   owl_list_create(&(g->messagequeue));
   owl_dict_create(&(g->styledict));
   g->curmsg_vert_offset=0;
+  g->curmsg = owl_view_iterator_new();
+  g->topmsg = owl_view_iterator_new();
   g->resizepending=0;
   g->typwinactive=0;
   g->direction=OWL_DIRECTION_DOWNWARDS;
@@ -179,11 +181,11 @@
 /* curmsg */
 
 owl_view_iterator* owl_global_get_curmsg(owl_global *g) {
-  return &(g->curmsg);
+  return g->curmsg;
 }
 
 void owl_global_set_curmsg(owl_global *g, owl_view_iterator *it) {
-  owl_view_iterator_clone(&(g->curmsg), it);
+  owl_view_iterator_clone(g->curmsg, it);
   /* we will reset the vertical offset from here */
   /* we might want to move this out to the functions later */
   owl_global_set_curmsg_vert_offset(g, 0);
@@ -192,14 +194,14 @@
 /* topmsg */
 
 owl_view_iterator* owl_global_get_topmsg(owl_global *g) {
-  return &(g->topmsg);
+  return g->topmsg;
 }
 
 void owl_global_set_topmsg(owl_global *g, owl_view_iterator *it) {
   if(!it) {
-    owl_view_iterator_invalidate(&(g->topmsg));
+    owl_view_iterator_invalidate(g->topmsg);
   } else {
-    owl_view_iterator_clone(&(g->topmsg), it);
+    owl_view_iterator_clone(g->topmsg, it);
   }
 }
 
@@ -637,7 +639,7 @@
 /* current view */
 
 owl_view *owl_global_get_current_view(owl_global *g) {
-  return(&(g->current_view));
+  return(g->current_view);
 }
 
 void owl_global_set_current_style(owl_global *g, owl_style *s) {

Modified: branches/barnowl_sqlite/owl/mainwin.c
===================================================================
--- branches/barnowl_sqlite/owl/mainwin.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/mainwin.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -5,7 +5,8 @@
 void owl_mainwin_init(owl_mainwin *mw)
 {
   mw->curtruncated=0;
-  owl_view_iterator_invalidate(&(mw->lastdisplayed));
+  mw->lastdisplayed = owl_view_iterator_new();
+  owl_view_iterator_invalidate(mw->lastdisplayed);
 }
 
 void owl_mainwin_redisplay(owl_mainwin *mw)
@@ -14,12 +15,14 @@
   int p, q, lines, isfull;
   int x, y, savey, recwinlines, start;
   int fgcolor, bgcolor;
-  owl_view_iterator *topmsg, *curmsg, it, *iter = &it;
+  owl_view_iterator *topmsg, *curmsg, *iter;
   WINDOW *recwin;
   owl_view *v;
   owl_list *filtlist;
   owl_filter *f;
 
+  iter = owl_view_iterator_free_later(owl_view_iterator_new());
+
   recwin=owl_global_get_curs_recwin(&g);
   topmsg=owl_global_get_topmsg(&g);
   curmsg=owl_global_get_curmsg(&g);
@@ -43,7 +46,7 @@
       owl_global_set_topmsg(&g, NULL);
       } */
     mw->curtruncated=0;
-    owl_view_iterator_invalidate(&(mw->lastdisplayed));
+    owl_view_iterator_invalidate(mw->lastdisplayed);
     wnoutrefresh(recwin);
     owl_global_set_needrefresh(&g);
     return;
@@ -142,7 +145,7 @@
   }
 
   owl_view_iterator_prev(iter);
-  owl_view_iterator_clone(&(mw->lastdisplayed), iter);
+  owl_view_iterator_clone(mw->lastdisplayed, iter);
 
   wnoutrefresh(recwin);
   owl_global_set_needrefresh(&g);
@@ -163,5 +166,5 @@
 
 owl_view_iterator *owl_mainwin_get_last_msg(owl_mainwin *mw)
 {
-  return &(mw->lastdisplayed);
+  return mw->lastdisplayed;
 }

Modified: branches/barnowl_sqlite/owl/owl.c
===================================================================
--- branches/barnowl_sqlite/owl/owl.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/owl.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -330,7 +330,7 @@
 
   /* set the current view */
   owl_function_debugmsg("startup: setting the current view");
-  owl_view_create(owl_global_get_current_view(&g), "main", "all");
+  g.current_view = owl_view_new("main", "all");
   owl_global_set_current_style(&g, owl_global_get_style_by_name(&g, "default"));
   owl_function_firstmsg();
 

Modified: branches/barnowl_sqlite/owl/owl.h
===================================================================
--- branches/barnowl_sqlite/owl/owl.h	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/owl.h	2008-03-29 21:16:07 UTC (rev 996)
@@ -432,7 +432,7 @@
 typedef struct _owl_mainwin {
   int curtruncated;
   int lasttruncated;
-  owl_view_iterator lastdisplayed;
+  owl_view_iterator *lastdisplayed;
 } owl_mainwin;
 
 typedef struct _owl_history {
@@ -552,10 +552,10 @@
   owl_context ctx;
   owl_errqueue errqueue;
   int lines, cols;
-  owl_view_iterator curmsg, topmsg;
+  owl_view_iterator *curmsg, *topmsg;
   int curmsg_vert_offset;
-  owl_view current_view;
-  owl_style * current_style;
+  owl_view *current_view;
+  owl_style *current_style;
   owl_messagelist *msglist;
   WINDOW *recwin, *sepwin, *msgwin, *typwin;
   int needrefresh;

Modified: branches/barnowl_sqlite/owl/perlconfig.c
===================================================================
--- branches/barnowl_sqlite/owl/perlconfig.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/perlconfig.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -391,9 +391,18 @@
 
 SV * owl_perl_new(char *class)
 {
+  return owl_perl_new_argv(class, NULL, 0);
+
+}
+
+SV * owl_perl_new_argv(char *class, char **argv, int argc)
+{
   SV *obj;
+  int i;
   OWL_PERL_CALL_METHOD(sv_2mortal(newSVpv(class, 0)), "new",
-                       // No args
+                       for(i=0;i<argc;i++) {
+                         XPUSHs(sv_2mortal(newSVpv(argv[i], 0)));
+                       }
                        ,
                        "Error in perl: %s\n",
                        1,

Modified: branches/barnowl_sqlite/owl/util.c
===================================================================
--- branches/barnowl_sqlite/owl/util.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/util.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -13,10 +13,12 @@
   WINDOW *sepwin;
   owl_messagelist *ml;
   owl_view *v;
-  owl_view_iterator iter;
+  owl_view_iterator *iter;
   int x, y;
   char *foo, *appendtosepbar;
 
+  iter = owl_view_iterator_free_later(owl_view_iterator_new());
+
   sepwin=owl_global_get_curs_sepwin(&g);
   ml=owl_global_get_msglist(&g);
   v=owl_global_get_current_view(&g);
@@ -59,8 +61,8 @@
     wattroff(sepwin, A_BOLD);
   }
 
-  owl_view_iterator_clone(&iter, owl_mainwin_get_last_msg(owl_global_get_mainwin(&g)));
-  if (owl_view_iterator_is_valid(&iter)) {
+  owl_view_iterator_clone(iter, owl_mainwin_get_last_msg(owl_global_get_mainwin(&g)));
+  if (owl_view_iterator_is_valid(iter)) {
     getyx(sepwin, y, x);
     wmove(sepwin, y, x+2);
     wattron(sepwin, A_BOLD);

Modified: branches/barnowl_sqlite/owl/view.c
===================================================================
--- branches/barnowl_sqlite/owl/view.c	2008-03-29 21:11:14 UTC (rev 995)
+++ branches/barnowl_sqlite/owl/view.c	2008-03-29 21:16:07 UTC (rev 996)
@@ -3,12 +3,14 @@
 
 static const char fileIdent[] = "$Id$";
 
-void owl_view_create(owl_view *v, char *name, char *filtname)
+owl_view* owl_view_new(char *name, char *filtname)
 {
+  owl_view *v = owl_malloc(sizeof(owl_view));
   v->name=owl_strdup(name);
   v->filtname=owl_strdup(filtname);
   owl_list_create(&(v->messages));
   owl_view_recalculate(v);
+  return v;
 }
 
 char *owl_view_get_name(owl_view *v)
@@ -150,6 +152,11 @@
 
 /* View Iterators */
 
+owl_view_iterator* owl_view_iterator_new()
+{
+  return owl_malloc(sizeof(owl_view_iterator));
+}
+
 void owl_view_iterator_invalidate(owl_view_iterator *it)
 {
   it->index = -1;
@@ -226,3 +233,14 @@
 {
   return it1->index - it2->index;
 }
+
+void owl_view_iterator_free(owl_view_iterator *it)
+{
+  owl_free(it);
+}
+
+owl_view_iterator* owl_view_iterator_free_later(owl_view_iterator *it)
+{
+  /* do-de-doo, leaking da memory... */
+  return it;
+}


home help back first fref pref prev next nref lref last post