if (ep==arg) badusage("syntactically incorrect range");
     }
     if (*ep) badusage("syntactically incorrect picno or range");
-    if (first<0 || last>COLUMNS*ROWS-1 || first<last)
+    if (first<0 || last>COLUMNS*ROWS-1 || first>last)
       badusage("picno or range out of permissible range");
     for (; first<=last; first++) {
       if (yesses.lin[first]) badusage("one pic specified more than once");
       yesses.lin[first]= 1;
     }
   }
-  fd= open(parport, O_RDWR);
-  if (fd<0) { perror(parport); exit(-1); }
+  if (!strcmp(parport,"stdin")) {
+    fd= 0;
+  } else {
+    fd= open(parport, O_RDWR);
+    if (fd<0) { perror(parport); exit(-1); }
+  }
 
   setvbuf(stdout,0,_IONBF,0);
   
   for (row=0; row<ROWS; row++) {
     v= 0;
     for (col=0; col<COLUMNS; col++)
-      v |= yesses.rect[col][row] ? (1<<col) : 0;
+      v |= yesses.rect[col][row] ? 0 : (1<<col);
     wpause(PPWDATA, v | 0x80);
     wpause(PPWDATA, v); /* SEL_CLK  ~|_  shifts */
   }