<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf8">
<title>/usr/web/sources/contrib/fst/disp.c - Plan 9 from Bell Labs</title>
<!-- THIS FILE IS AUTOMATICALLY GENERATED. -->
<!-- EDIT sources.tr INSTEAD. -->
</meta>
</head>
<body>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
<span style="font-size: 10pt"><a href="/plan9/">Plan 9 from Bell Labs</a>&rsquo;s /usr/web/sources/contrib/fst/disp.c</span></p>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<center><font size=-1>
Copyright © 2009 Alcatel-Lucent.<br />
Distributed under the
<a href="/plan9/license.html">Lucent Public License version 1.02</a>.
<br />
<a href="/plan9/download.html">Download the Plan 9 distribution.</a>
</font>
</center>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<table width="100%" cellspacing=0 border=0><tr><td align="center">
<table cellspacing=0 cellpadding=5 bgcolor="#eeeeff"><tr><td align="left">
<pre>
<!-- END HEADER -->
// Displays popi generated images on Plan9 4th/ed.
// Popi information can be found at:
// http://cm.bell-labs.com/cm/cs/who/gerard/
//
// bugs are mine [email protected]

#include        &lt;u.h&gt;
#include        &lt;libc.h&gt;
#include        &lt;draw.h&gt;
#include        &lt;event.h&gt;
#include        &lt;bio.h&gt;
#define DEF_X   248     /* image width  */
#define DEF_Y   248     /* image height */

// Thresholds for halftone conversion from 8bit grayscale
// See "Beyond Photography, The digital Darkroom", G.J. Holtzmann
#define RES 8
uchar threshold[RES][RES] = {
       { 0,128,32,160,8,136,40,168},
       { 192,64,224,96,200,72,232,104 },
       { 48,176,16,144,56,184,24,152 },
       { 240,112,208,80,248,120,216,88 },
       { 12,140,44,172,4,132,36,164 },
       { 204,76,236,108,196,68,228,100 },
       { 60,188,28,156,52,180,20,148 },
       { 252,124,220,92,244,116,212,84 }
};

void usage(void)
{
       fprint(2, "usage: disp [-h] imagefile\n");
       fprint(2, "\timagefile is generated by popi\n");
       exits("usage");
}

void eresized(int x)
{
}

int main(int argc, char **argv)
{
       Biobufhdr *infile;
       int nr, hflag = 0;
       uchar g8[DEF_Y * DEF_X];        /* grey scale buffer */
       uchar g1[DEF_Y * DEF_X/8];      /* halftone buffer, 1 bit per pixel*/
       Image *dpic;
       Event ev;
       Rectangle r, R = Rect(0,0,DEF_X,DEF_Y);

       ARGBEGIN {
       case 'h':               /* halftone display */
               hflag = 1;
               break;
       default:
               usage();
       } ARGEND

       if (argc &lt; 1) {
               fprint(2, "imagefile missing\n");
               usage();
       }
       if (! (infile = Bopen(argv[0], OREAD))) {
               fprint(2, "can't open %s: %r\n", argv[0]);
               usage();
       }

       initdraw(nil, nil, "disp");
       einit(Ekeyboard|Emouse);

       dpic = allocimage(display, R, (hflag) ? GREY1 : GREY8, 1, DWhite);

       /* popi image files are DEF_Y×DEF_X×8bit grayscale pixels */
       nr = DEF_Y * DEF_X;
       if (Bread(infile, g8, nr) != nr) {
               fprint(2, "bad popi image file\n");
               usage();
       }

       if (hflag) {            /* halftone conversion */
               int y, x;

               memset(g1, 0, sizeof(g1));
               for (y = 0; y &lt; DEF_Y; y++) {
                       for (x = 0; x &lt; DEF_X; x++) {
                               int graypixloc = y * (DEF_Y) + x;
                               int bwpixbyte = y * (DEF_Y/8) + x/8;

                               if (g8[graypixloc] &gt; threshold[y%RES][x%RES])
                                       g1[bwpixbyte] |= 0x80 &gt;&gt; x%8;
                       }
               }
       }

       loadimage(dpic, R, (hflag) ? g1 : g8, nr);

       r = Rpt(screen-&gt;r.min, addpt(screen-&gt;r.min, Pt(DEF_X,DEF_Y)));
       draw(screen, r, dpic, nil, Pt(0,0));

       while(event(&amp;ev) != Ekeyboard)
                       ;

       exits(0);
}
<!-- BEGIN TAIL -->
</pre>
</td></tr></table>
</td></tr></table>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
<span style="font-size: 10pt"></span></p>
<p style="margin-top: 0; margin-bottom: 0.50in"></p>
<p style="margin-top: 0; margin-bottom: 0.33in"></p>
<center><table border="0"><tr>
<td valign="middle"><a href="http://www.alcatel-lucent.com/"><img border="0" src="/plan9/img/logo_ft.gif" alt="Bell Labs" />
</a></td>
<td valign="middle"><a href="http://www.opensource.org"><img border="0" alt="OSI certified" src="/plan9/img/osi-certified-60x50.gif" />
</a></td>
<td><img style="padding-right: 45px;" alt="Powered by Plan 9" src="/plan9/img/power36.gif" />
</td>
</tr></table></center>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<center>
<span style="font-size: 10pt">(<a href="/plan9/">Return to Plan 9 Home Page</a>)</span>
</center>
<p style="margin-top: 0; margin-bottom: 0.17in"></p>
<center><font size=-1>
<span style="font-size: 10pt"><a href="http://www.lucent.com/copyright.html">Copyright</a></span>
<span style="font-size: 10pt">© 2009 Alcatel-Lucent.</span>
<span style="font-size: 10pt">All Rights Reserved.</span>
<br />
<span style="font-size: 10pt">Comments to</span>
<span style="font-size: 10pt"><a href="mailto:[email protected]">[email protected]</a>.</span>
</font></center>
</body>
</html>