[1011] in BarnOwl Developers
[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 = ⁢
+ 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;
+}