Added function ttob.
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index 4a983ef..86ee71c 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -96,6 +96,8 @@
 
 static object *ImgfileError;
 
+static int reverse_order;
+
 #ifdef ADD_TAGS
 /*
  *	addlongimgtag - 
@@ -339,6 +341,8 @@
   	if(badorder) {
 	    for(z=0; z<zsize; z++) {
 		lptr = base;
+		if (reverse_order)
+		    lptr += (ysize - 1) * xsize * sizeof(unsigned long);
 		for(y=0; y<ysize; y++) {
 		    if(cur != starttab[y+z*ysize]) {
 			fseek(inf,starttab[y+z*ysize],SEEK_SET);
@@ -356,11 +360,16 @@
 		    fread(rledat,lengthtab[y+z*ysize],1,inf);
 		    cur += lengthtab[y+z*ysize];
 		    expandrow(lptr,rledat,3-z);
-		    lptr += xsize * sizeof(unsigned long);
+		    if (reverse_order)
+			lptr -= xsize * sizeof(unsigned long);
+		    else
+			lptr += xsize * sizeof(unsigned long);
 		}
 	    }
 	} else {
 	    lptr = base;
+	    if (reverse_order)
+		lptr += (ysize - 1) * xsize * sizeof(unsigned long);
 	    for(y=0; y<ysize; y++) {
 		for(z=0; z<zsize; z++) {
 		    if(cur != starttab[y+z*ysize]) {
@@ -371,7 +380,10 @@
 		    cur += lengthtab[y+z*ysize];
 		    expandrow(lptr,rledat,3-z);
 		}
-		lptr += xsize * sizeof(unsigned long);
+		if (reverse_order)
+		    lptr -= xsize * sizeof(unsigned long);
+		else
+		    lptr += xsize * sizeof(unsigned long);
 	    }
     	}
 	if(zsize == 3) 
@@ -398,10 +410,15 @@
 	fseek(inf,512,SEEK_SET);
 	for(z=0; z<zsize; z++) {
 	    lptr = base;
+	    if (reverse_order)
+		lptr += (ysize - 1) * xsize * sizeof(unsigned long);
 	    for(y=0; y<ysize; y++) {
 		fread(verdat,xsize,1,inf);
 		interleaverow(lptr,verdat,3-z,xsize);
-		lptr += xsize * sizeof(unsigned long);
+		if (reverse_order)
+		    lptr -= xsize * sizeof(unsigned long);
+		else
+		    lptr += xsize * sizeof(unsigned long);
 	    }
 	}
 	if(zsize == 3) 
@@ -579,6 +596,8 @@
     goodwrite *= writeheader(outf,&image);
     fseek(outf,512+2*tablen,SEEK_SET);
     pos = 512+2*tablen;
+    if (reverse_order)
+	lptr += (ysize - 1) * xsize * sizeof(unsigned long);
     for(y=0; y<ysize; y++) {
 	for(z=0; z<zsize; z++) {
 	    if(zsize == 1) {
@@ -601,7 +620,10 @@
 	    lengthtab[y+z*ysize] = len;
 	    pos += len;
 	}
-	lptr += xsize * sizeof(unsigned long);
+	if (reverse_order)
+	    lptr -= xsize * sizeof(unsigned long);
+	else
+	    lptr += xsize * sizeof(unsigned long);
     }
 
     fseek(outf,512,SEEK_SET);
@@ -694,10 +716,25 @@
     return optr - (unsigned char *)rlebuf;
 }
 
+static object *
+ttob(self, args)
+    object *self;
+    object *args;
+{
+    int order, oldorder;
+
+    if (!getargs(args, "d", &order))
+	return NULL;
+    oldorder = reverse_order;
+    reverse_order = order;
+    return newintobject(oldorder);
+}
+
 static struct methodlist rgbimg_methods[] = {
     {"sizeofimage",	sizeofimage},
     {"longimagedata",	longimagedata},
     {"longstoimage",	longstoimage},
+    {"ttob",		ttob},
     {NULL, NULL}		/* sentinel */
 };