--- psbook.c	Wed Oct  4 14:34:31 2000
+++ psbook.new.c	Wed Oct  4 15:11:54 2000
@@ -3,7 +3,7 @@
  * rearrange pages in conforming PS file for printing in signatures
  *
  * Usage:
- *       psbook [-q] [-s] [infile [outfile]]
+ *       psbook [-q] [-s] [-e] [infile [outfile]]
  */
 
 #include "psutil.h"
@@ -12,9 +12,11 @@
 void usage()
 {
    fprintf(stderr, "%s release %d patchlevel %d\n", prog, RELEASE, PATCHLEVEL);
-   fprintf(stderr, "Usage: %s [-q] [-s] [infile [outfile]]\n",
+   fprintf(stderr, "Usage: %s [-q] [-s] [-e] [infile [outfile]]\n",
 	   prog);
    fprintf(stderr, "        must be positive and divisible by 4\n");
+   fprintf(stderr, "       -e : output a right-side binded booklet.\n");
+   fprintf(stderr, "            This is for east-asia countries.\n");
    fflush(stderr);
    exit(1);
 }
@@ -25,6 +27,7 @@
      char *argv[];
 {
    int signature = 0;
+   int rightSideBind = 0;
    int currentpg, maxpage;
 
    infile = stdin;
@@ -40,6 +43,9 @@
 	 case 'q':	/* quiet */
 	    verbose = 0;
 	    break;
+	 case 'e':	/* right-side binding */
+	    rightSideBind = 1;
+	    break;
 	 case 'v':	/* version */
 	 default:
 	    usage();
@@ -74,22 +80,42 @@
    writeheader(maxpage);
    writeprolog();
    writesetup();
-   for (currentpg = 0; currentpg < maxpage; currentpg++) {
-      int actualpg = currentpg - currentpg%signature;
-      switch(currentpg%4) {
-      case 0:
-      case 3:
-	 actualpg += signature-1-(currentpg%signature)/2;
-	 break;
-      case 1:
-      case 2:
-	 actualpg += (currentpg%signature)/2;
-	 break;
+   if (!rightSideBind){
+      for (currentpg = 0; currentpg < maxpage; currentpg++) {
+         int actualpg = currentpg - currentpg%signature;
+         switch(currentpg%4) {
+         case 0:
+         case 3:
+	    actualpg += signature-1-(currentpg%signature)/2;
+	    break;
+         case 1:
+         case 2:
+	    actualpg += (currentpg%signature)/2;
+	    break;
+         }
+         if (actualpg < pages)
+	    writepage(actualpg);
+         else
+	    writeemptypage();
+      }
+   }else{ /* right-side binding */
+      for (currentpg = maxpage - 1; 0 <= currentpg; currentpg--) {
+         int actualpg = currentpg - currentpg%signature;
+         switch(currentpg%4) {
+         case 0:
+         case 3:
+	    actualpg += signature-1-(currentpg%signature)/2;
+	    break;
+         case 1:
+         case 2:
+	    actualpg += (currentpg%signature)/2;
+	    break;
+         }
+         if (actualpg < pages)
+	    writepage(actualpg);
+         else
+	    writeemptypage();
       }
-      if (actualpg < pages)
-	 writepage(actualpg);
-      else
-	 writeemptypage();
    }
    writetrailer();