<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ALeX Kazik &#187; PHP</title>
	<atom:link href="https://alex.kazik.de/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://alex.kazik.de</link>
	<description>A blog about Retrocomputing‎ and more</description>
	<lastBuildDate>Wed, 30 Mar 2022 09:54:41 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>WordPress: Multiple Languages</title>
		<link>https://alex.kazik.de/199/multilingual-text/</link>
		<comments>https://alex.kazik.de/199/multilingual-text/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 16:10:17 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/?p=199</guid>
		<description><![CDATA[If you would like to have a language switch like I have, that can be done. It&#8217;s now available on wordpress.org: Multilingual Text Update 2011-09-21: Version 1.4 Released Changelog Version 1.4 Added custom usage Small fixes Version 1.3 Fixed an bug where the language selection was dropped Added &#8220;&#8221; to write for all languages Version [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>If you would like to have a language switch like I have, that can be done.</p>
<p>It&#8217;s now available on wordpress.org: <a href="http://wordpress.org/extend/plugins/multilingual-text/" target="_blank">Multilingual Text</a><br />
<br />
Update 2011-09-21: Version 1.4 Released<br />
<span id="more-199"></span><br />
Changelog</p>
<ul>
<li>Version 1.4
<ul>
<li>Added custom usage
<li>Small fixes</ul>
<li>Version 1.3
<ul>
<li>Fixed an bug where the language selection was dropped
<li>Added &#8220;<code></code>&#8221; to write for all languages</ul>
<li>Version 1.2
<ul>
<li>Added a &#8220;Settings&#8221; Link to the plugin page
<li>Added many flags</ul>
<li>Version 1.1
<ul>
<li>Added support for PHP 5.2
<li>Fixed a few flaws</ul>
<li>Version 1.0
<ul>
<li>Initial release</ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/199/multilingual-text/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>New getopt for php: getopts</title>
		<link>https://alex.kazik.de/195/getopts/</link>
		<comments>https://alex.kazik.de/195/getopts/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 15:12:41 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[getopt]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/?p=195</guid>
		<description><![CDATA[I don&#8217;t like php&#8217;s getopt function, because it&#8217;s too crippled. I&#8217;ve started a write a replacement function. It has more options, is easier to handle and returns all non parameter arguments. Fell free to use or improve it: Code / Docs: https://github.com/alexkazik/getopts Update 2011-04-19: Added License and a small improvement.]]></description>
				<content:encoded><![CDATA[<p> I don&#8217;t like php&#8217;s getopt function, because it&#8217;s too crippled.<br />
I&#8217;ve started a write a replacement function.<br />
It has more options, is easier to handle and returns all non parameter arguments.</p>
<p>Fell free to use or improve it:<br />
Code / Docs: <a href="https://github.com/alexkazik/getopts" target="_blank">https://github.com/alexkazik/getopts</a></p>
<p><strong>Update 2011-04-19</strong>: Added License and a small improvement.</p>
<p></p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/195/getopts/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Zero-Mailer</title>
		<link>https://alex.kazik.de/150/zero-mailer/</link>
		<comments>https://alex.kazik.de/150/zero-mailer/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 16:54:55 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[MTA]]></category>
		<category><![CDATA[Nullmailer]]></category>
		<category><![CDATA[Zeromailer]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/?p=150</guid>
		<description><![CDATA[This Zero-Mailer is even less than a nullmailer. It is a sendmail replacement which (basic configuration) send all mails to a single email address (ignoring the destination address). It&#8217;s desigend for servers, which are no mail servers, and only sends logs, notices and such things. So all other software (may be scripts, used from the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p> This Zero-Mailer is even less than a nullmailer. It is a sendmail replacement which (basic configuration) send all mails to a single email address (ignoring the destination address).</p>
<p>It&#8217;s desigend for servers, which are no mail servers, and only sends logs, notices and such things. So all other software (may be scripts, used from the web-server) have to use a SMTP server for outgoing mail (e.g. forum).</p>
<p>It can be configred that when sendmail is invoked by a user, that all those mails are going to another address. (the users which calls sendmail is important, not the destination).</p>
<p><span id="more-150"></span></p>
<p>example configuration:<br />
<code>[default]<br />
to = "destination@address"<br />
from = "sender@address"<br />
subject = "[Server] [To: %TO%] %SUBJECT%"</code></p>
<p>You can add more entries in that form, which usernames instead of &#8220;default&#8221;, in that case all mails sent by that user will be send to the specified address.</p>
<p>The options in detail:
<ul>
<li><code>disabled</code>, optional, defaults to false, if true no mail will be sent (for that user)
<li><code>to</code>, required, the destination
<li><code>host</code>, optional, the destination host, if omitted the MX record of the <code>to</code> address will be used
<li><code>subject</code>, optional, the subject, defaults to &#8220;<code>%SUBJECT%</code>&#8221; (placeholders: <code>%SUBJECT%</code> the original subject, <code>%TO%</code> the list of original recipients)
<li><code>from</code> optional, the sender address, default to &#8220;<code>user@hostname</code>&#8221;
</ul>
<p>Files:</p>
<ul>
<li>/etc/zeromail.conf
<li>/usr/sbin/sendmail
</ul>
<p>You may have problems after uninstalling all MTA software, because some software (e.g. logcheck) requires an installed MTA. I&#8217;ve fixed that problem by installing an dummy deb-package, which (says that it) provides an MTA.</p>
<p>This is the way I&#8217;m using it on my server and a proof of concept.</p>
<p>Some more explanations in the source.</p>
<p>Download: <p><img src="https://alex.kazik.de/wp-includes/images/crystal/archive.png" style="height:20px;vertical-align:middle;" /> <a href="https://alex.kazik.de/download/linux/zeromailer-0.3.tar.bz2" title="Download zeromailer 0.3">zeromailer 0.3</a> (7.2 KiB, 15. June 2010)</p></p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/150/zero-mailer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>phpico</title>
		<link>https://alex.kazik.de/10/phpico/</link>
		<comments>https://alex.kazik.de/10/phpico/#comments</comments>
		<pubDate>Mon, 12 Sep 2005 12:00:00 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/10/phpico/</guid>
		<description><![CDATA[This text is from my arcives. It may be out of date, but I thought it should be preserved. phpico Web Server The phpico is a web server written in pure php. The home is here: http://phpico.sourceforge.net/]]></description>
				<content:encoded><![CDATA[<p><span id="more-10"></span>
<p><b>This text is from my <a href="/en/1/archive/">arcives</a>. It may be out of date, but I thought it should be preserved.</b></p>
<style type="text/css">
<style type="text/css">/*<![CDATA[*/
b {font-weight: bold}i {font-style: italic}.center {text-align: center}img {border: 0px}table.centertable { margin-left: auto; margin-right: auto; }table.border { border-collapse:collapse; }table.border th { padding: 3px; }table.border td { padding: 3px; }</style>

<!--*h1*-->phpico Web Server</h1>


The phpico is a web server written in pure php.<br />
The home is here: <a href="http://phpico.sourceforge.net/">http://phpico.sourceforge.net/</a>

</p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/10/phpico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Twister</title>
		<link>https://alex.kazik.de/9/code-twister/</link>
		<comments>https://alex.kazik.de/9/code-twister/#comments</comments>
		<pubDate>Thu, 11 Mar 2004 12:00:00 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/9/code-twister/</guid>
		<description><![CDATA[This text is from my arcives. It may be out of date, but I thought it should be preserved. This tool loads all files required by a project (including binaries) into one file. All unused functions will be removed, all function and variable names will be replaced by shorter (and unreadable) ones, all not needed [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><span id="more-9"></span>
<p><b>This text is from my <a href="/en/1/archive/">arcives</a>. It may be out of date, but I thought it should be preserved.</b></p>
<style type="text/css">
<style type="text/css">/*<![CDATA[*/
b {font-weight: bold}i {font-style: italic}.center {text-align: center}img {border: 0px}table.centertable { margin-left: auto; margin-right: auto; }table.border { border-collapse:collapse; }table.border th { padding: 3px; }table.border td { padding: 3px; }
.code {font-family: monospace; color: #00c; white-space: nowrap}
.opt {color: #a00; white-space: nowrap}
.cfg {color: #080; white-space: nowrap}
.todo {background-color: #fbb}

table.main {border-collapse: collapse;}
table.main td {border-bottom: 2px solid @#col_border#@; vertical-align: baseline; }
table td.no {border-bottom: 0px}
table.main td.topb {border-top: 2px solid @#col_border#@}

table.opts td {border: 0px}

.new09 {background-color: #bfb}
</style>


        This tool loads all files required by a project (including binaries) into one file.<br />
        All unused functions will be removed, all function and variable names will be replaced<br />
        by shorter (and unreadable) ones, all not needed whitespaces will be removed, debugging code will be removed, ...<br />
        You'll get informed when a global or local variable is not used.<br />
        The resulting file is still a regular php-file. (No extra softeate is required!)


        Requirements: PHP 4.3.0 and up, CLI or CGI (developed under 5.0 beta)<br />
        You have to use it from a shell and it requires much memory. (The coding of twister [60kB code = 2k5 lines] needs about 8MB).



      
<table class="centertable main">
        
<tr>
          
<td align="center" class="topb">
            history
          </td>


          
<td class="topb">
            
<table border="0">
              
<tr>
                
<td class="no">
                  Version 0.9 (2004-03-11)
                </td>


                
<td class="no">
                  Should now be run also on 500b4 and further versions<br />
                  Fixed include paths<br />
                  Added -c, -I, conf: input, conf: inverse<br />
                  <span class="new09">New in 0.9</span>
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.8 (2003-10-09)
                </td>


                
<td class="no">
                  Merged the versions for PHP 4 and 5 into one<br />
                  Fixed the default.conf
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.7 (2003-10-07)
                </td>


                
<td class="no">
                  Fixed a big bug with PHP 4.3.x<br />
                  Now you can buy twister
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.6 (internal)
                </td>


                
<td class="no">
                  Added config:target and the -t option (removed config:define)<br />
                  Changed -d4
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.5 (internal)
                </td>


                
<td class="no">
                  Improved the -r2 option much
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.4 (2003-09-18)
                </td>


                
<td class="no">
                  Added a PHP version check<br />
                  Made the error more readable<br />
                  Added the option -r2 (see below)<br />
                  Rewrote parts of the source<br />
                  Added an option in comment for packit and fileloader<br />
                </td>


              </tr>


              
<tr>
                
<td class="no">
                  Version 0.3 (2003-09-14)
                </td>


                
<td class="no">
                  First release
                </td>


              </tr>


            </table>


          </td>


          
<td class="topb">
             
          </td>


        </tr>


        
<tr>
          
<td align="center">
            example
          </td>


          
<td>
            <!a href="twister_demo1">Here<!/a> is an basic example output. (currently n/a)<br />
            <!a href="twister_demo2">Here<!/a> is an complex -r2 example output. (currently n/a)<br />
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td align="center">
            demo<br />
            version
          </td>


          
<td>
            Get version 0.9 <a href=[wpfilebase tag=file id=3 tpl=altes-zeuchs]>tar.gz</a> (about 20 KB)<br />
            (Note: in the demo -n, -r2, -d4, -t, -S and -F are disabled)


            Please mail <a href="/en/disclaimer/">me</a>, and tell me what do you think about it.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td align="center">
            basics
          </td>


          
<td>
            Usage: <span class="opt">php twister.php &lt;options...&gt; &lt;file&gt;</span><br />
            If <span class="opt">&lt;file&gt;</span> will be obmitted stdin will be used as source.


            All options have the syntax: <span class="opt">-X value</span> or <span class="opt">-Xvalue</span>.<br />
            Some options are bit masks. Example usage: <span class="opt">-X &lt;1,2,4&gt;</span> you have to add the number of all features you want to use. For <span class="opt">1</span> and <span class="opt">4</span> use <span class="opt">-X 5</span>. To diable all <span class="opt">-X 0</span>.


            If a option is omitted the default will be used. (Either builtin or from a config-file, see <span class="opt">-f</span>.)


            Some functions are controlled by comments, you have to use exact that comment. (But you can add whitespaces outside of the comment like you want.)
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td align="center">
            quick
          </td>


          
<td>
            Here is a quick overview about the options.<br />
            <span class="opt">-i &lt;1&gt;</span>: include other code, <span class="opt">1</span>=on, default=1<br />
            <span class="opt">-d &lt;1,2,4&gt;</span>: replace defines, <span class="opt">1</span>=user, <span class="opt">2</span>=system, <span class="opt">4</span>=target, default=3<br />
            <span class="opt">-t &lt;target&gt;</span>: selects the specified <span class="opt">target</span> for <span class="opt">-d4</span><br />
            <span class="opt">-r &lt;1,2&gt;</span>: remove unused code, <span class="opt">1</span>=on, <span class="opt">2</span>=optimize if, default=3<br />
            <span class="opt">-p &lt;1,2,4&gt;</span>: packit/fileloader, <span class="opt">1</span>=on, <span class="opt">2</span>=diable gzip, <span class="opt">4</span>=disable base64, default=3<br />
            <span class="opt">-n &lt;1,2&gt;</span>: name substituation, <span class="opt">1</span>=on, <span class="opt">2</span>=string, default=3<br />
            <span class="opt">-z &lt;1,2&gt;</span>: compress output, <span class="opt">1</span>=enable gzip, <span class="opt">2</span>=enable base64, default=0<br />
            <span class="new09"><span class="opt">-c &lt;1,2&gt;</span>: replace variable constants, <span class="opt">1</span>=originals, <span class="opt">2</span>=dummy, default=1</span><br />
            <span class="opt">-f &lt;config.conf&gt;</span>: read options from <span class="opt">config.conf</span><br />
            <span class="new09"><span class="opt">-I &lt;path[:path[...]]&gt;</span>: define the include path, default=./</span><br />
            <span class="opt">-o &lt;out.php&gt;</span>: write final to <span class="opt">out.php</span><br />
            <span class="opt">-1 &lt;stage1.php&gt;</span>, <span class="opt">-2 &lt;stage2.php&gt;</span>, <span class="opt">-3 &lt;stage3.php&gt;</span>, <span class="opt">-4 &lt;stage4.php&gt;</span>,<br />
            <span class="opt">-S &lt;scan.php&gt;</span>, <span class="opt">-F &lt;files.php&gt;</span>: debugging output
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td align="center">
            config
          </td>


          
<td>
            The config-file contains the defaults for all options in the <span class="cfg">config: opts</span> section.<br />
            All other sections are described later.


            <span class="new09">In the <span class="cfg">config: opts</span> section is now a way to specify the input file.</span>
          </td>


          
<td class="cfg" align="center">
            opts
          </td>


        </tr>


        
<tr>
          
<td align="center">
            manual
          </td>


          
<td>
            What do the colors mean?<br />
            <span class="opt">Command line options</span>, <span class="cfg">References to the config-file</span>, <span class="code">Example code</span>, <span class="todo">Things that don't work yet</span>


            In the left column is the described option noted, in the right column the config-file.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td>
             
          </td>


          
<td>
            Here is a detailed description, what the tool will do in which order, and what options can be used:
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -f
          </td>


          
<td>
            First option: <span class="opt">-f &lt;config.conf&gt;</span> to load the default configuration from the file config.conf instead of using the builtin. (The file default.conf of the distribution contains the builtin configuration.) All options can be overwritten by the command line.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td>
             
          </td>


          
<td>
            The main script will be load and parsed.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -i
          </td>


          
<td>
            Option: <span class="opt">-i &lt;1&gt;</span>. Now all files included by the main file will be also parsed and included. You have to use the command <span class="code">include</span>, <span class="code">include_once</span>, <span class="code">require</span>, <span class="code">require_once</span> with exactly one string as parameter, a trailing semicolon and NO whitespaces or comments.<br />
            Example: <span class="code">include('file.php');</span> will work, <span class="code">include($file.'.php');</span> will not be replaced, cause the tool don't know what's in $file. To disable it for one include you may use <span class="code">include('file.php' );</span>. See <span class="opt">-F <span>for debug.</span></span>
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt new09" align="center">
            -I
          </td>


          
<td>
            Option: <span class="opt">-i &lt;path[:path:[...]]&gt;</span>. With this option you can set the include path which is used for the including <span class="opt">-i</span>.<br />
            Multiple paths can be entered, seperated by a colon.<br />
            The default path is <span class="opt">./</span>, where <span class="opt">./</span> is the path of the file to twist, which must not be the actual directory. In case of your are using stdin the current directory will used.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -1
          </td>


          
<td>
            If <span class="opt">-1 &lt;stage1.php&gt;</span> is used, the actual state will be dumped to stage1.php.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -d
          </td>


          
<td>
            The option <span class="opt">-d &lt;1,2,4&gt;</span> allows you to replace defines with their definitions.<br />
            
<table class="opts" border="0" cellspacing="0" cellpadding="3">
              
<tr>
                
<td class="opts opt">
                  1
                </td>


                
<td class="opts">
                  Revoves all user defines with <span class="code">define('DEF', 'INE')</span> where 'DEF' has to be a single constant string and 'INE' a single constant string, a single positive integer, a single positive float, a boolean constant (true, false) or null. And all occurencies of DEF will be replaced with 'INE'.
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  2
                </td>


                
<td class="opts">
                  Replaces all systemwide defines with their definitions.
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  4
                </td>


                
<td class="opts">
                  Enables the target replacement. First you have to submit a list of all targets in a config-file (see <span class="opt">-f</span>) or use the default's <span class="code">RELEASE</span> and <span class="code">DEVELOP</span>. By default the target to generate is the first in the config. This can be overwritten with the <span class="opt">-t</span> option. The selected target will be replaced by <span class="code">true</span> all others with <span class="code">false</span>.<br />
                  You should place something like the following in your code:<br />
                  <span class="code">define('DEVELOP', true);<br />
                  define('RELEASE', false);</span><br />
                  So, in a regular run <span class="code">DEVELOP</span> is <span class="code">true</span> but it is <span class="code">RELEASE</span> in the generated code.<br />
                  The option <span class="opt">-d4</span> requires that <span class="opt">-d1</span> is enabled.
                </td>


              </tr>


            </table>


          </td>


          
<td class="cfg" align="center">
            target
          </td>


        </tr>


        
<tr>
          
<td class="opt new09" align="center">
            -c
          </td>


          
<td>
            With the option <span class="opt">-c &lt;1,2&gt;</span> you can switch the replacement of variable constants on.<br />
            Variable constants are: <span class="code">__FILE__</span>, <span class="code">__LINE__</span>, <span class="code todo">__FUNCTION__</span>, <span class="code todo">__CLASS__</span>, <span class="code todo">__METHOD__</span>.<br />
            
<table class="opts" border="0" cellspacing="0" cellpadding="3">
              
<tr>
                
<td class="opts opt">
                  1
                </td>


                
<td class="opts">
                  it will be replaced by the original values.
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  2
                </td>


                
<td class="opts">
                  <span class="code">__FILE__</span> will be replaced by "(twisted)" and <span class="code">__LINE__</span> by 0.
                </td>


              </tr>


            </table>


          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -p
          </td>


          
<td>
            The option <span class="opt">-p &lt;1,2,4&gt;</span> selects the packit functionality.<br />
            A part of the code will be evaluated now and replaced by a packed version. Only strings and pure constant arrays can be packed. (For arrays (un)serialize will be used.) A gzip compression will be used if it decreases the length. At least base64 encoding is used, so it's a plain ASCII text.<br />
            Code: <span class="code">$x = /*PACKIT*/ array(0=&gt;'big array', 1=&gt;'really big')</span> will be replaced by <span class="code">$x = P(1, 'XXXX...')</span> The name of the function is PHP_CODE_TWISTER_PACKIT_FUNCTION, not P, which will be created automatically. So the code is less readable.<br />
            
<table class="opts" border="0" cellspacing="0" cellpadding="3">
              
<tr>
                
<td class="opts opt">
                  1
                </td>


                
<td class="opts">
                  Enable packit functionality. (And also fileloader, see below)
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  2
                </td>


                
<td class="opts">
                  the gzip compression is disabled, if you don't want to use it. (maybe your php can't use it)
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  4
                </td>


                
<td class="opts">
                  the base64 encoding is disabled.
                </td>


              </tr>


            </table>


          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -p
          </td>


          
<td>
            A second feature wich is also enabled by <span class="opt">-p1</span> is the fileloader function.<br />
            Code like <span class="code">$x = /*FILELOADER*/ file_get_contents('file.gif')</span> will be replaced by the contents of the file, like packit: <span class="code">$x = P(1, 'XXXX...')</span>. So now the file is IN your php program. Note: only a single constant string as parameter for <span class="code">file_get_contents</span> is supported.


            Alternative fileloader usage: <span class="code">$x = /*PACKIT*/ array( filemtime('file.gif'), file_get_contents('file.gif') )</span> will be replaced with something like this: <span class="code">$x = array(105523325, P(1, 'XXXX...'))</span>.


            The switches <span class="opt">2</span> and <span class="opt">4</span> are also used by the fileloader.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -p
          </td>


          
<td>
            With <span class="code">/*PACKIT:X*/</span> and <span class="code">/*FILELOADER:X*/</span> you can set the <span class="opt">-p</span> options to X for this call. The option <span class="opt">1</span> is ignored for now, but should be set. Example: <span class="code">$x = /*PACKIT:7*/ 'Hello'." ".'World'."\n"</span> will be packed, but neither gzip nor base64 encoded, the result is a single string.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -2
          </td>


          
<td>
            Now a second stage can be written on disk with <span class="opt">-2 &lt;stage2.php&gt;</span>.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td>
             
          </td>


          
<td>
            The following loop will remove unused code.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -r
          </td>


          
<td>
            
<table class="opts" border="0" cellspacing="0" cellpadding="3">
              
<tr>
                
<td class="opts opt">
                  1
                </td>


                
<td class="opts">
                  This do enable remove unused functions, <span class="todo">classes</span>, methods, <span class="todo">members</span> from the code. Everything named in <span class="cfg">config: function, class, method, member</span> will not be removed.


                  <span class="new09">If the first entry of <span class="cfg">config: function, class, method, member</span> is <span class="code">'*'</span> then the list is interpreted as a white list. (Only functions, classes, methods, members which are listed there will be maybe removed. A list containing only <span class="code">'*'</span> just says that nothing sould be removed)</span><br />
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  2
                </td>


                
<td class="opts">
                  All <span class="code">if</span> statements will be evaluated, if possible. Which means that if the statement are only constants and operators (or, and, +, ...) and no funcitions or variables the block will maybe killed or all following will killed. See the 2. demo.<br />
                  The <a href="http://www.php.net/manual/en/control-structures.alternative-syntax.php">alternative syntax for control structures</a> is also supported.


                  Note: With <span class="opt">-d 1</span> you can replace defines by their value (e.g. <span class="code">false</span>) and then let this function remove the if's.
                </td>


              </tr>


            </table>


          </td>


          
<td class="cfg" align="center">
            function<br />
            class<br />
            method<br />
            member
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -3
          </td>


          
<td>
            After finishing this loop a third stage can be written on disk with <span class="opt">-3 &lt;stage3.php&gt;</span>.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -n
          </td>


          
<td>
            
<table class="opts" border="0" cellspacing="0" cellpadding="3">
              
<tr>
                
<td class="opts opt">
                  1
                </td>


                
<td class="opts">
                  Whis this option allmost all function, variable, class, method and member names are replaced by a shorter (and less readable) one. Now the config-file is important! First all <span class="code">$this</span> inside a method will never be replaced. Please never add <span class="code">$this</span> to any config value. Don't add <span class="code">$GLOBALS</span> to the config, this variable is handeled especially.<br />
                  All variables which are defined in <span class="cfg">config: superblobal</span> will not be changed.<br />
                  All global variables which are defined in <span class="cfg">config: global</span> will not be replaced.<br />
                  All other global variables will replaced.<br />
                  All local variables which are not noted in <span class="cfg">config: local</span> will be replaced.<br />
                  All function names which are not noted in <span class="cfg">config: function</span> will be replaced.<br />
                  All class names which are not noted in <span class="cfg">config: class</span> will be replaced.<br />
                  All method names which are not noted in <span class="cfg">config: method</span> will be replaced.<br />
                  All member names which are not noted in <span class="cfg">config: member</span> will be replaced.<br />
                  A language constucts named in <span class="cfg">config: language</span> will never be used for a function, class, method or member name.


                  <span class="new09">If the first entry of <span class="cfg">config: global, function, class, method, member</span> is <span class="code">'*'</span> then the list is interpreted as a white list. (Only globals, functions, classes, methods, members which are listed there will be renamed. A list containing only <span class="code">'*'</span> just says that nothing sould be renamed)</span><br />
                </td>


              </tr>


              
<tr>
                
<td class="opts opt">
                  2
                </td>


                
<td class="opts">
                  Enables name in string replacement. If you use callback functions or variables/functions in a string, which will be evaluated you have to mark them so they can be replaced.<br />
                  Example: <span class="code">eval('$x = dummy(0,1);');</span> Now you must mark the variable/function name in the text so that they can be replaced. To mark, write the comment <span class="code">/*VAR*/</span> before a string, which contain ONLY the variable name, with or without the $ sign. Use <span class="code">/*FUNCTION*/</span> for functions.<br />
                  Usage: <span class="code">eval(/*VAR*/'$x'.' = './*FUNCTION*/'dummy'.'(0,1);');</span><br />
                  Usage: <span class="code">$a = /*VAR*/'b'; $$a = 'this changes $b';</span><br />
                  See <span class="opt">-S</span> for debug.
                </td>


              </tr>


            </table>


          </td>


          
<td class="cfg" align="center">
            superglobals<br />
            globals<br />
            local


            function<br />
            class<br />
            method<br />
            member


            language
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -4
          </td>


          
<td>
            Now a fourth stage can be written on disk with <span class="opt">-4 &lt;stage4.php&gt;</span>.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -o<br />
            -z
          </td>


          
<td>
            Use <span class="opt">-o &lt;out.php&gt;</span> to write the resulting code without any comment and only a minimum of whitespaces to disk. The switch <span class="opt">-z &lt;1,2&gt;</span> contols the encoding of the output. The option <span class="opt">1</span> enables gzip compression, which makes the code much smaller. It requires gzip decompression in the php which should interpret your code. And it's not longer ASCII source, which may have some pitfalls. To make it ASCII compatible again, you may want to use option <span class="opt">2</span> to enable base64 encoding.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td>
             
          </td>


          
<td>
            Now we're trough. At last you can get two debugging files:
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -F
          </td>


          
<td>
            With <span class="opt">-F &lt;files.php&gt;</span> will write a php code which contains an array of all files which are included or loaded while fileloader and a number which shows how often the file was loaded.
          </td>


          
<td>
             
          </td>


        </tr>


        
<tr>
          
<td class="opt" align="center">
            -S
          </td>


          
<td>
            With <span class="opt">-S &lt;scan.php&gt;</span> will write a php code which contains an array of all name replacements which are made.
          </td>


          
<td>
             
          </td>


        </tr>


      </table>



</p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/9/code-twister/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ncurses1_src</title>
		<link>https://alex.kazik.de/12/ncurses1-src/</link>
		<comments>https://alex.kazik.de/12/ncurses1-src/#comments</comments>
		<pubDate>Thu, 19 Jun 2003 13:00:00 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/12/ncurses1-src/</guid>
		<description><![CDATA[&#60;?php &#160;&#160;&#160;&#160;/*&#160;&#160;&#160;&#160;**&#160;ncurses1.php&#160;written&#160;2003&#160;by&#160;ALeX&#160;Kazik&#160;&#160;&#160;&#160;**&#160;feel&#160;free&#160;to&#160;use&#160;this&#160;code&#160;&#160;&#160;&#160;**&#160;Version:&#160;1.0&#160;(2003-06-19)&#160;&#160;&#160;&#160;*/ &#160;&#160;&#160;&#160;/*&#160;start&#160;me&#160;with&#160;"allkeys"&#160;as&#160;arument&#160;to&#160;use&#160;all&#160;keys&#160;to&#160;exit&#160;*/ &#160;&#160;&#160;&#160;//&#160;read&#160;this&#160;file&#160;as&#160;text&#160;&#160;&#160;&#160;$text&#160;=&#160;file($_SERVER['PATH_TRANSLATED']);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;strip&#160;off&#160;any&#160;whitespaces&#160;(space,&#160;newline,&#160;...)&#160;at&#160;the&#160;end&#160;of&#160;line&#160;&#160;&#160;&#160;//&#160;and&#160;replace&#160;tabs&#160;by&#160;4&#160;spaces&#160;&#160;&#160;&#160;foreach($text&#160;AS&#160;$k=&#62;$v)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(preg_match('/^(.*?)\s*$/',&#160;strtr($v,&#160;array("\t"&#160;=&#62;&#160;'&#160;&#160;&#160;&#160;')),&#160;$r))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$text[$k]&#160;=&#160;$r[1];&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;question&#160;&#160;&#160;&#160;$question&#160;=&#160;array(&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'&#160;This&#160;is&#160;an&#160;more&#160;complex&#160;example&#160;for&#160;ncurses',&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'&#160;Use&#160;the&#160;arrow&#160;keys&#160;to&#160;scroll&#160;/&#160;ESC&#160;or&#160;Q&#160;to&#160;exit&#160;'&#160;&#160;&#160;&#160;);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;keys&#160;to&#160;exit&#160;&#160;&#160;&#160;if(($argc&#160;&#62;=&#160;2)&#160;&#38;&#38;&#160;($argv[1]&#160;==&#160;'allkeys'))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$keys&#160;=&#160;TRUE;&#160;&#160;&#160;&#160;else&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$keys&#160;=&#160;array(27,&#160;ord('q'),&#160;ord('Q'));&#160;//&#160;27&#160;==&#160;ESCAPE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;init&#160;ncurses&#160;&#160;&#160;&#160;ncurses_init();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;display&#160;text,&#160;and&#160;ask...&#160;&#160;&#160;&#160;&#160;$char&#160;=&#160;ncurses_show_text('ncurses&#160;example',&#160;$text,&#160;$question,&#160;$keys);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;end&#160;ncurses&#160;&#160;&#160;&#160;ncurses_end(); &#160;&#160;&#160;&#160;//&#160;the&#160;end...&#160;&#160;&#160;&#160;echo&#160;'You\'ve&#160;pressed&#160;character&#160;number&#160;'.$char.'&#160;=&#160;0x'.sprintf('%02x',&#160;$char);&#160;&#160;&#160;&#160;if(($char&#160;&#60;&#160;256)&#160;&#38;&#38;&#160;($char&#160;!=&#160;127)&#160;&#38;&#38;&#160;(($char&#160;&#38;&#160;0x7f)&#160;&#62;=&#160;0x20))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo&#160;'&#160;=&#160;"'.chr($char).'"';&#160;&#160;&#160;&#160;echo&#160;"\n"; &#160;&#160;&#160;&#160;/*&#160;&#160;&#160;&#160;**&#160;ncurses_show_text($title,&#160;$text,&#160;$question,&#160;$keys=TRUE)&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;**&#160;$title&#160;=&#160;string&#160;to&#160;display&#160;in&#160;above&#160;the&#160;upper&#160;window&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;**&#160;$text&#160;=&#160;array&#160;of&#160;strings&#160;to&#160;display&#160;in&#160;the&#160;upper&#160;window&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(scrollable)&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;text&#160;text&#160;MUST&#160;NOT&#160;contain&#160;any&#160;tab,&#160;newline,&#160;linefeed&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;or&#160;any&#160;other&#160;control&#160;character&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;**&#160;$question&#160;=&#160;array&#160;of&#160;strings&#160;to&#160;display&#160;in&#160;the&#160;lower&#160;window&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;**&#160;$keys&#160;=&#160;array&#160;of&#160;keys&#160;to&#160;exit&#160;(may&#160;override&#160;scrolling)&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;or&#160;true&#160;to&#160;accept&#160;all&#160;keys&#160;(except&#160;scrolling)&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;**&#160;return&#160;=&#160;the&#160;pressed&#160;key&#160;&#160;&#160;&#160;**&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;characters&#160;above&#160;255&#160;are&#160;special&#160;keys&#160;(F1,&#160;DEL,&#160;...)&#160;&#160;&#160;&#160;*/ &#160;&#160;&#160;&#160;function&#160;ncurses_show_text($title,&#160;$text,&#160;$question,&#160;$keys=TRUE){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;prepare&#160;text&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textH&#160;=&#160;count($text);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textW&#160;=&#160;1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textLEN&#160;=&#160;array();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for($i=0;&#160;$i&#60;$textH;&#160;$i++){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textLEN[$i]&#160;=&#160;strlen($text[$i]);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($textLEN[$i]&#160;&#62;&#160;$textW)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textW&#160;=&#160;$textLEN[$i];&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;create&#160;text&#160;pad&#160;(invisible&#160;window)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$textWIN&#160;=&#160;ncurses_newpad($textH,&#160;$textW);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;fill&#160;it&#160;with&#160;text&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for($i=0;&#160;$i&#60;$textH;&#160;$i++)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($textWIN,&#160;$i,&#160;0,&#160;$text[$i]); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;prepare&#160;question&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$questionH&#160;=&#160;count($question);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$questionLastW&#160;=&#160;strlen($question[$questionH-1]);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;initialize...&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX&#160;=&#160;$posY&#160;=&#160;0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$screenH&#160;=&#160;$screenW&#160;=&#160;0; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;loop&#160;around...&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;while(1){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;get&#160;actual&#160;screen&#160;size&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$oldH&#160;=&#160;$screenH;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$oldW&#160;=&#160;$screenW;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_getmaxyx(STDSCR,&#160;$screenH,&#160;$screenW); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;something&#160;changed?&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(($screenH&#160;!=&#160;$oldH)&#160;&#124;&#124;&#160;($screenW&#160;!=&#160;$oldW)){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($oldH&#160;&#62;&#160;0){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_delwin($upperWIN);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_delwin($lowerWIN);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_erase();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_refresh(STDSCR);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$upperWIN&#160;=&#160;ncurses_newwin($screenH-(2+$questionH),&#160;$screenW,&#160;0,&#160;0);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$lowerWIN&#160;=&#160;ncurses_newwin(2+$questionH,&#160;$screenW,&#160;$screenH-(2+$questionH),&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$upperH&#160;=&#160;$screenH-(4+$questionH);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$upperW&#160;=&#160;$screenW-2; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$copyH&#160;=&#160;($upperH&#160;&#62;&#160;$textH)&#160;?&#160;$textH&#160;:&#160;$upperH;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$copyW&#160;=&#160;($upperW&#160;&#62;&#160;$textW)&#160;?&#160;$textW&#160;:&#160;$upperW; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;border&#160;lower&#160;window&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wborder($lowerWIN,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;print&#160;text&#160;in&#160;lower&#160;window&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for($i=0;&#160;$i&#160;&#60;&#160;$questionH;&#160;$i++)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($lowerWIN,&#160;$i+1,&#160;1,&#160;$question[$i]);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;check&#160;and&#160;fix&#160;positions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($posY&#160;&#60;&#160;0&#160;&#124;&#124;&#160;$upperH&#160;&#62;=&#160;$textH)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY&#160;=&#160;0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(($upperH&#160;+&#160;$posY)&#160;&#62;&#160;$textH)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY&#160;=&#160;$textH&#160;-&#160;$upperH; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($posX&#160;&#60;&#160;0&#160;&#124;&#124;&#160;$upperW&#160;&#62;=&#160;$textW)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX&#160;=&#160;0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(($upperW&#160;+&#160;$posX)&#160;&#62;&#160;$textW)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX&#160;=&#160;$textW&#160;-&#160;$upperW;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;border&#160;upper&#160;window&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wborder($upperWIN,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;draw&#160;title&#160;and&#160;info&#160;line&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wattron($upperWIN,&#160;NCURSES_A_REVERSE);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($upperWIN,&#160;0,&#160;2,'&#160;'.$title.'&#160;');&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($upperH&#160;&#60;&#160;$textH)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($upperWIN,&#160;$upperH+1,&#160;2,&#160;'&#160;line&#160;'.($posY+1).'-'.($posY+$copyH).'/'.$textH.'&#160;');&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wattroff($upperWIN,&#160;NCURSES_A_REVERSE);&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;draw&#160;&#60;&#160;and&#160;&#62;&#160;at&#160;left/right&#160;side&#160;when&#160;horizontal&#160;scrolling&#160;is&#160;nesseccary&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($upperW&#160;&#60;&#160;$textW){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for($i=0;&#160;$i&#60;$copyH;&#160;$i++){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($textLEN[$i+$posY]&#160;&#62;&#160;$copyW+$posX)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($upperWIN,&#160;$i+1,&#160;$screenW-1,&#160;'&#62;');&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($posX&#160;&#62;&#160;0&#160;&#38;&#38;&#160;$textLEN[$i+$posY]&#160;&#62;&#160;0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_mvwaddstr($upperWIN,&#160;$i+1,&#160;0,&#160;'&#60;');&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;draw&#160;upper&#160;window&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wrefresh($upperWIN); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;copy&#160;a&#160;part&#160;of&#160;the&#160;text&#160;(pad)&#160;to&#160;the&#160;screen&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_prefresh($textWIN,&#160;$posY,&#160;$posX,&#160;1,&#160;1,&#160;$upperH,&#160;$upperW); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;move&#160;cursor&#160;to&#160;end&#160;of&#160;last&#160;line&#160;of&#160;question&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wmove($lowerWIN,&#160;$questionH,&#160;$questionLastW+1);&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;draw&#160;lower&#160;window&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_wrefresh($lowerWIN); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;get&#160;a&#160;character&#160;and&#160;do...&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$char&#160;=&#160;ncurses_getch();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(is_array($keys)&#160;&#38;&#38;&#160;(array_search($char,&#160;$keys)&#160;!==&#160;FALSE))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_UP)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY--;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_DOWN)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY++;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_LEFT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX--;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_RIGHT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX++;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_PPAGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY&#160;-=&#160;$copyH-1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;NCURSES_KEY_NPAGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posY&#160;+=&#160;$copyH-1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;362)&#160;//&#160;HOME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX&#160;=&#160;0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if($char&#160;==&#160;385)&#160;//&#160;END&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$posX&#160;=&#160;99999;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(($char&#160;==&#160;410)&#160;&#124;&#124;&#160;($char&#160;==&#160;-1)){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;these&#160;"characters"&#160;are&#160;pressed&#160;on&#160;resizing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else&#160;if($keys&#160;===&#160;TRUE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;//end&#160;loop&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;free&#160;all&#160;resources&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_delwin($textWIN);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_delwin($upperWIN);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ncurses_delwin($lowerWIN);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;return&#160;the&#160;pressed&#160;character&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;$char;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;//&#160;end&#160;function ?&#62;]]></description>
				<content:encoded><![CDATA[<p><span id="more-12"></span><code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/*<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;ncurses1.php&nbsp;written&nbsp;2003&nbsp;by&nbsp;ALeX&nbsp;Kazik<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;feel&nbsp;free&nbsp;to&nbsp;use&nbsp;this&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;Version:&nbsp;1.0&nbsp;(2003-06-19)<br />&nbsp;&nbsp;&nbsp;&nbsp;*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;start&nbsp;me&nbsp;with&nbsp;"allkeys"&nbsp;as&nbsp;arument&nbsp;to&nbsp;use&nbsp;all&nbsp;keys&nbsp;to&nbsp;exit&nbsp;*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;read&nbsp;this&nbsp;file&nbsp;as&nbsp;text<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$text&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">file</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PATH_TRANSLATED'</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;strip&nbsp;off&nbsp;any&nbsp;whitespaces&nbsp;(space,&nbsp;newline,&nbsp;...)&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;line<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;and&nbsp;replace&nbsp;tabs&nbsp;by&nbsp;4&nbsp;spaces<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach(</span><span style="color: #0000BB">$text&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">$k</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$v</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'/^(.*?)\s*$/'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">strtr</span><span style="color: #007700">(</span><span style="color: #0000BB">$v</span><span style="color: #007700">,&nbsp;array(</span><span style="color: #DD0000">"\t"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="color: #007700">)),&nbsp;</span><span style="color: #0000BB">$r</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$text</span><span style="color: #007700">[</span><span style="color: #0000BB">$k</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$r</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;question<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$question&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'&nbsp;This&nbsp;is&nbsp;an&nbsp;more&nbsp;complex&nbsp;example&nbsp;for&nbsp;ncurses'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'&nbsp;Use&nbsp;the&nbsp;arrow&nbsp;keys&nbsp;to&nbsp;scroll&nbsp;/&nbsp;ESC&nbsp;or&nbsp;Q&nbsp;to&nbsp;exit&nbsp;'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;keys&nbsp;to&nbsp;exit<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if((</span><span style="color: #0000BB">$argc&nbsp;</span><span style="color: #007700">&gt;=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'allkeys'</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$keys&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$keys&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">27</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #DD0000">'q'</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #DD0000">'Q'</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;27&nbsp;==&nbsp;ESCAPE<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;init&nbsp;ncurses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_init</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;display&nbsp;text,&nbsp;and&nbsp;ask...&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ncurses_show_text</span><span style="color: #007700">(</span><span style="color: #DD0000">'ncurses&nbsp;example'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$text</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$question</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$keys</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;end&nbsp;ncurses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_end</span><span style="color: #007700">();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;the&nbsp;end...<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'You\'ve&nbsp;pressed&nbsp;character&nbsp;number&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$char</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;=&nbsp;0x'</span><span style="color: #007700">.</span><span style="color: #0000BB">sprintf</span><span style="color: #007700">(</span><span style="color: #DD0000">'%02x'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$char</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">256</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">127</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;((</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">0x7f</span><span style="color: #007700">)&nbsp;&gt;=&nbsp;</span><span style="color: #0000BB">0x20</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;=&nbsp;"'</span><span style="color: #007700">.</span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">$char</span><span style="color: #007700">).</span><span style="color: #DD0000">'"'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/*<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;ncurses_show_text($title,&nbsp;$text,&nbsp;$question,&nbsp;$keys=TRUE)<br />&nbsp;&nbsp;&nbsp;&nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;$title&nbsp;=&nbsp;string&nbsp;to&nbsp;display&nbsp;in&nbsp;above&nbsp;the&nbsp;upper&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;$text&nbsp;=&nbsp;array&nbsp;of&nbsp;strings&nbsp;to&nbsp;display&nbsp;in&nbsp;the&nbsp;upper&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(scrollable)<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;text&nbsp;MUST&nbsp;NOT&nbsp;contain&nbsp;any&nbsp;tab,&nbsp;newline,&nbsp;linefeed<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;any&nbsp;other&nbsp;control&nbsp;character<br />&nbsp;&nbsp;&nbsp;&nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;$question&nbsp;=&nbsp;array&nbsp;of&nbsp;strings&nbsp;to&nbsp;display&nbsp;in&nbsp;the&nbsp;lower&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;$keys&nbsp;=&nbsp;array&nbsp;of&nbsp;keys&nbsp;to&nbsp;exit&nbsp;(may&nbsp;override&nbsp;scrolling)<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;true&nbsp;to&nbsp;accept&nbsp;all&nbsp;keys&nbsp;(except&nbsp;scrolling)<br />&nbsp;&nbsp;&nbsp;&nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;return&nbsp;=&nbsp;the&nbsp;pressed&nbsp;key<br />&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters&nbsp;above&nbsp;255&nbsp;are&nbsp;special&nbsp;keys&nbsp;(F1,&nbsp;DEL,&nbsp;...)<br />&nbsp;&nbsp;&nbsp;&nbsp;*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">ncurses_show_text</span><span style="color: #007700">(</span><span style="color: #0000BB">$title</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$text</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$question</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$keys</span><span style="color: #007700">=</span><span style="color: #0000BB">TRUE</span><span style="color: #007700">){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;prepare&nbsp;text<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textH&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textLEN&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textLEN</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$textLEN</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$textLEN</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;create&nbsp;text&nbsp;pad&nbsp;(invisible&nbsp;window)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$textWIN&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ncurses_newpad</span><span style="color: #007700">(</span><span style="color: #0000BB">$textH</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;fill&nbsp;it&nbsp;with&nbsp;text<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$textWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$text</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;prepare&nbsp;question<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$questionH&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$question</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$questionLastW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$question</span><span style="color: #007700">[</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;initialize...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$screenH&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$screenW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;loop&nbsp;around...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">while(</span><span style="color: #0000BB">1</span><span style="color: #007700">){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;get&nbsp;actual&nbsp;screen&nbsp;size<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$oldH&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$screenH</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$oldW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_getmaxyx</span><span style="color: #007700">(</span><span style="color: #0000BB">STDSCR</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$screenH</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;something&nbsp;changed?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if((</span><span style="color: #0000BB">$screenH&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">$oldH</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">$screenW&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">$oldW</span><span style="color: #007700">)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$oldH&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_delwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_delwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_erase</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_refresh</span><span style="color: #007700">(</span><span style="color: #0000BB">STDSCR</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$upperWIN&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ncurses_newwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$screenH</span><span style="color: #007700">-(</span><span style="color: #0000BB">2</span><span style="color: #007700">+</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$lowerWIN&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ncurses_newwin</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">+</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$screenH</span><span style="color: #007700">-(</span><span style="color: #0000BB">2</span><span style="color: #007700">+</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$upperH&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$screenH</span><span style="color: #007700">-(</span><span style="color: #0000BB">4</span><span style="color: #007700">+</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$upperW&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">-</span><span style="color: #0000BB">2</span><span style="color: #007700">;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$copyH&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">$upperH&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #0000BB">$textH&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$upperH</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$copyW&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">$upperW&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #0000BB">$textW&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$upperW</span><span style="color: #007700">;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;border&nbsp;lower&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wborder</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;print&nbsp;text&nbsp;in&nbsp;lower&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$question</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;check&nbsp;and&nbsp;fix&nbsp;positions<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$upperH&nbsp;</span><span style="color: #007700">&gt;=&nbsp;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((</span><span style="color: #0000BB">$upperH&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$posY</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$textH&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">$upperH</span><span style="color: #007700">;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$upperW&nbsp;</span><span style="color: #007700">&gt;=&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((</span><span style="color: #0000BB">$upperW&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$posX</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$textW&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">$upperW</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;border&nbsp;upper&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wborder</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;draw&nbsp;title&nbsp;and&nbsp;info&nbsp;line<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wattron</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">NCURSES_A_REVERSE</span><span style="color: #007700">);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$title</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$upperH&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$textH</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$upperH</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&nbsp;line&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$posY</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">).</span><span style="color: #DD0000">'-'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$posY</span><span style="color: #007700">+</span><span style="color: #0000BB">$copyH</span><span style="color: #007700">).</span><span style="color: #DD0000">'/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$textH</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wattroff</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">NCURSES_A_REVERSE</span><span style="color: #007700">);&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;draw&nbsp;&lt;&nbsp;and&nbsp;&gt;&nbsp;at&nbsp;left/right&nbsp;side&nbsp;when&nbsp;horizontal&nbsp;scrolling&nbsp;is&nbsp;nesseccary<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$upperW&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$textW</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">$copyH</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$textLEN</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">+</span><span style="color: #0000BB">$posY</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$copyW</span><span style="color: #007700">+</span><span style="color: #0000BB">$posX</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$screenW</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&gt;'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$textLEN</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">+</span><span style="color: #0000BB">$posY</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_mvwaddstr</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&lt;'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;draw&nbsp;upper&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wrefresh</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;copy&nbsp;a&nbsp;part&nbsp;of&nbsp;the&nbsp;text&nbsp;(pad)&nbsp;to&nbsp;the&nbsp;screen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_prefresh</span><span style="color: #007700">(</span><span style="color: #0000BB">$textWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$posY</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$posX</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$upperH</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$upperW</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;move&nbsp;cursor&nbsp;to&nbsp;end&nbsp;of&nbsp;last&nbsp;line&nbsp;of&nbsp;question<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wmove</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$questionH</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$questionLastW</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">);&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;draw&nbsp;lower&nbsp;window<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_wrefresh</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;get&nbsp;a&nbsp;character&nbsp;and&nbsp;do...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ncurses_getch</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$keys</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">array_search</span><span style="color: #007700">(</span><span style="color: #0000BB">$char</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$keys</span><span style="color: #007700">)&nbsp;!==&nbsp;</span><span style="color: #0000BB">FALSE</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_UP</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY</span><span style="color: #007700">--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_DOWN</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY</span><span style="color: #007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_LEFT</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX</span><span style="color: #007700">--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_RIGHT</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX</span><span style="color: #007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_PPAGE</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">$copyH</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">NCURSES_KEY_NPAGE</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posY&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">$copyH</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">362</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;HOME<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">385</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;END<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$posX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">99999</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">410</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">$char&nbsp;</span><span style="color: #007700">==&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;these&nbsp;"characters"&nbsp;are&nbsp;pressed&nbsp;on&nbsp;resizing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}else&nbsp;if(</span><span style="color: #0000BB">$keys&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">TRUE</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #FF8000">//end&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;free&nbsp;all&nbsp;resources<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_delwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$textWIN</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_delwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$upperWIN</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ncurses_delwin</span><span style="color: #007700">(</span><span style="color: #0000BB">$lowerWIN</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;return&nbsp;the&nbsp;pressed&nbsp;character<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$char</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #FF8000">//&nbsp;end&nbsp;function</p>
<p></span><span style="color: #0000BB">?&gt;</span><br />
</span><br />
</code></p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/12/ncurses1-src/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ncurses</title>
		<link>https://alex.kazik.de/11/ncurses/</link>
		<comments>https://alex.kazik.de/11/ncurses/#comments</comments>
		<pubDate>Thu, 19 Jun 2003 12:00:00 +0000</pubDate>
		<dc:creator><![CDATA[alx]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://alex.kazik.de/11/ncurses/</guid>
		<description><![CDATA[This text is from my arcives. It may be out of date, but I thought it should be preserved. This is an example how to use the ncurses library. It displays a (big) text in a scrollable window. Read the manual within the source. It will look like the demo below. Comments, suggestions? Mail me. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><span id="more-11"></span>
<p><b>This text is from my <a href="/en/1/archive/">arcives</a>. It may be out of date, but I thought it should be preserved.</b></p>
<style type="text/css">
<style type="text/css">/*<![CDATA[*/
b {font-weight: bold}i {font-style: italic}.center {text-align: center}img {border: 0px}table.centertable { margin-left: auto; margin-right: auto; }table.border { border-collapse:collapse; }table.border th { padding: 3px; }table.border td { padding: 3px; }</style>

This is an example how to use the ncurses library.<br />
It displays a (big) text in a scrollable window.<br />
Read the manual within the source.<br />
It will look like the demo below.<br />
Comments, suggestions? <a href="/en/disclaimer/">Mail me</a>.


<a href="/en/12/php-ncurses1-src/">View the source</a><br />
<a href=[wpfilebase tag=file id=4 tpl=altes-zeuchs]>Download the source</a><br />

<table class="centertable">
<tr>
<td>
<pre>
+- ncurses example --------------------------------------+
|&lt;?php                                                   |
|                                                        |
|    /* start me with "allkeys" as arument to use all key&gt;
|                                                        |
|    // read this file as text                           |
|    $text = file($_SERVER['PATH_TRANSLATED']);          |
|                                                        |
|    // strip off any whitespaces (space, newline, ...) a&gt;
|    // and replace tabs by 4 spaces                     |
|    foreach($text AS $k=>$v)                            |
|        if(preg_match('/^(.*?)\s*$/', strtr($v, array("\&gt;
|            $text[$k] = $r[1];                          |
|                                                        |
|    // question                                         |
|    $question = array(                                  |
|        ' This is an more complex example for ncurses', |
+- line 1-16/202 ----------------------------------------+
+--------------------------------------------------------+
| This is an more complex example for ncurses            |
| Use the arrow keys to scroll / ESC or Q to exit        |
+--------------------------------------------------------+
</pre>

</td>

</tr>

</table>



</p>]]></content:encoded>
			<wfw:commentRss>https://alex.kazik.de/11/ncurses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
